AI Agents · Lekcja

Bot pytań i odpowiedzi nad Twoimi dokumentami

Uruchom działającego bota RAG: wczytaj pliki PDF, utwórz embeddingi, wyszukuj i generuj odpowiedzi. To „hello world” produkcyjnych agentów.

Lekcja 1 z 415 kroki

Bot pytań i odpowiedzi nad Twoimi dokumentami to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.

Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.

Cel projektu

Zbuduj chatbota, który odpowiada na pytania na podstawie własnych dokumentów (PDF-ów, plików Markdown itp.). To „hello world” produkcyjnych agentów i rozwiązanie od razu przydatne dla każdego zespołu.

Architektura

  1. Pozyskiwanie danych: wczytaj dokumenty -> podziel na fragmenty -> utwórz embeddingi -> zapisz w wektorowej bazie danych
  2. Zapytanie: utwórz embedding pytania -> pobierz fragmenty o najwyższym wyniku K -> umieść je w prompcie -> przekaż do LLM
  3. Cytowanie: sformatuj fragmenty za pomocą identyfikatorów; poproś LLM o cytowanie

Step 1: Load and Chunk

from langchain.text_splitter import RecursiveCharacterTextSplitter
from pypdf import PdfReader

text = ''
for page in PdfReader('handbook.pdf').pages:
    text += page.extract_text() + '\n'

splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
chunks = splitter.split_text(text)
print(f'{len(chunks)} chunks')

Step 2: Embed and Store

import chromadb
from openai import OpenAI

oai = OpenAI()
chroma = chromadb.PersistentClient(path='./db')
collection = chroma.get_or_create_collection('handbook')

resp = oai.embeddings.create(model='text-embedding-3-small', input=chunks)
vectors = [d.embedding for d in resp.data]
collection.add(ids=[f'c{i}' for i in range(len(chunks))], embeddings=vectors, documents=chunks)

Step 3: Query Function

def query(question, k=4):
    qvec = oai.embeddings.create(model='text-embedding-3-small', input=question).data[0].embedding
    res = collection.query(query_embeddings=[qvec], n_results=k)
    return res['documents'][0]

Step 4: Build the Prompt

def make_prompt(question, chunks):
    context = '\n\n'.join(f'[{i+1}] {c}' for i, c in enumerate(chunks))
    return f'''
Using only the context below, answer the question.
If the answer is not present, say so.
Cite the source like [1], [2], etc.

Context:
{context}

Question: {question}
Answer:
'''

print(make_prompt("What is the return policy?", ["Returns accepted within 30 days.", "Item must be unused."]))

Step 5: Generate

def answer(question):
    chunks = query(question)
    prompt = make_prompt(question, chunks)
    response = oai.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': prompt}],
        temperature=0,
    )
    return response.choices[0].message.content

print(answer('What is our refund policy?'))

Podłączenie do interfejsu użytkownika

Owiń aplikację w FastAPI i prostą stronę HTML (lub Streamlit), a otrzymasz działającą aplikację.

# pip install fastapi uvicorn
from fastapi import FastAPI
app = FastAPI()

@app.post('/ask')
def ask(payload: dict):
    return {'answer': answer(payload['question'])}

Dodawanie historii czatu

W przypadku pytań i odpowiedzi w wielu turach zachowuj wiadomości i przekazuj je do promptu:

messages = [{'role': 'system', 'content': 'You are a doc Q&A assistant.'}]

def chat(user_input):
    messages.append({'role': 'user', 'content': user_input})
    chunks = query(user_input)
    context_msg = {'role': 'system', 'content': f'Context:\n{chr(10).join(chunks)}'}
    response = oai.chat.completions.create(
        model='gpt-4o-mini',
        messages=[messages[0], context_msg] + messages[1:]
    )
    answer = response.choices[0].message.content
    messages.append({'role': 'assistant', 'content': answer})
    return answer

Typowe problemy

  • Fragmenty są zbyt duże lub zbyt małe — wypróbuj 500–800 tokenów
  • Brak cytowania źródeł — użytkownicy nie ufają odpowiedziom bez źródeł
  • Zbyt duża wartość K — marnuje tokeny i rozprasza uwagę
  • Tworzenie embeddingu z CAŁEGO pytania wraz z historią czatu — embedding należy tworzyć tylko z najnowszego pytania użytkownika

Dodawanie linków do źródeł

Zapisuj adresy URL źródeł w metadanych i pokazuj je w odpowiedzi:

metadata = [{'source': 'handbook.pdf', 'page': i} for i in range(len(chunks))]
# In the prompt, include 'source: <url>' so the LLM can produce clickable references.

Ewaluacja

Zbierz 20 rzeczywistych pytań od użytkowników. Ręcznie oznacz, czy bot odpowiada poprawnie. Użyj tego jako początkowego zbioru ewaluacyjnego.

Wdrożenie i iteracja

Ten bot na produkcji obsługuje 80% typowych pytań. Wprowadzaj zmiany na podstawie 20% pytań, na które odpowiada błędnie — zazwyczaj potrzebne jest lepsze dzielenie na fragmenty lub ponowne szeregowanie.

Cytowanie źródeł

Dlaczego umieszczać identyfikatory źródeł w prompcie i prosić LLM o cytowanie?

Podsumowanie

Bot RAG w około 50 wierszach. Wdróż go, przeprowadź ewaluację i iteruj nad dzieleniem na fragmenty oraz pobieraniem. Ten wzorzec powtarza się w niezliczonych aplikacjach agentowych.

Bezpłatny start

Ucz się AI Agents dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
60
Lekcje
239

Często zadawane pytania

Czy lekcja „Bot pytań i odpowiedzi nad Twoimi dokumentami” jest bezpłatna?

Tak — pełny tekst „Bot pytań i odpowiedzi nad Twoimi dokumentami” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.

Co nauczysz się w „Bot pytań i odpowiedzi nad Twoimi dokumentami”?

Uruchom działającego bota RAG: wczytaj pliki PDF, utwórz embeddingi, wyszukuj i generuj odpowiedzi. To „hello world” produkcyjnych agentów. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Agents?

Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Bot pytań i odpowiedzi nad Twoimi dokumentami”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?

Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Bot pytań i odpowiedzi nad Twoimi dokumentami
  2. Agent wyjaśniający kod
  3. Agent badawczy przeglądający sieć
  4. Asystent SQL dla Twojej bazy danych
← Powrót do AI Agents