Бот вопросов и ответов по вашим документам
Создайте работающего RAG-бота: загрузите PDF, создайте эмбеддинги, выполните поиск и сгенерируйте ответ. Это «Hello, world!» для промышленных агентов.
«Бот вопросов и ответов по вашим документам» — бесплатный урок AI Agents на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Цель проекта
Создайте чат-бота, который отвечает на вопросы по вашим документам (PDF, Markdown и т. д.). Это классический первый проект для производственных агентов, который сразу полезен любой команде.
Архитектура
- Загрузка: загрузить документы → разбить на фрагменты → создать эмбеддинги → сохранить в векторной базе данных
- Запрос: создать эмбеддинг вопроса → получить лучшие K фрагментов → вставить их в промпт → передать в LLM
- Цитирование: отформатировать фрагменты с идентификаторами; попросить LLM добавить цитаты
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?'))Подключите интерфейс
Оберните приложение в FastAPI и простую страницу HTML (или Streamlit) — и получите работающее приложение.
# pip install fastapi uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.post('/ask')
def ask(payload: dict):
return {'answer': answer(payload['question'])}Добавьте историю чата
Для многошаговых вопросов и ответов сохраняйте сообщения и передавайте их в промпт:
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Распространённые ошибки
- Фрагменты слишком большие или слишком маленькие — попробуйте от 500 до 800 токенов
- Нет ссылок на источники — пользователи не доверяют ответам без ссылок
- K слишком велико — это расходует токены и рассеивает внимание
- Векторизация WHOLE вопроса вместе с историей чата — векторизуйте только последний вопрос пользователя
Добавьте ссылки на источники
Сохраняйте URL источников в метаданных и показывайте их в ответе:
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.Оцените результат
Соберите 20 реальных вопросов пользователей. Вручную отметьте, правильно ли бот отвечает на них. Используйте этот набор как отправную точку для оценивания.
Запустите и улучшайте
В рабочей среде этот бот обрабатывает 80% распространённых вопросов. Улучшайте его на основе тех 20%, на которые он отвечает неправильно: обычно требуется лучшее разбиение на фрагменты или повторное ранжирование.
Цитирование источников
Зачем включать идентификаторы источников в промпт и просить LLM добавлять цитаты?
Повторим
Бот RAG примерно в 50 строк. Выпустите его, оцените и улучшайте разбиение на фрагменты и поиск. Этот шаблон повторяется во множестве приложений с агентами.
Часто задаваемые вопросы
Урок «Бот вопросов и ответов по вашим документам» бесплатный?
Да — полный текст урока «Бот вопросов и ответов по вашим документам» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Бот вопросов и ответов по вашим документам»?
Создайте работающего RAG-бота: загрузите PDF, создайте эмбеддинги, выполните поиск и сгенерируйте ответ. Это «Hello, world!» для промышленных агентов. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Бот вопросов и ответов по вашим документам»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Бот вопросов и ответов по вашим документам
- Агент для объяснения кода
- Агент-исследователь для веб-поиска
- SQL-ассистент для вашей DB