0Pricing
AI Agents · Урок

Бот вопросов и ответов по вашим документам

Создайте работающего RAG-бота: загрузите PDF, создайте эмбеддинги, выполните поиск и сгенерируйте ответ. Это «Hello, world!» для промышленных агентов.

«Бот вопросов и ответов по вашим документам» — бесплатный урок AI Agents на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Цель проекта

Создайте чат-бота, который отвечает на вопросы по вашим документам (PDF, Markdown и т. д.). Это классический первый проект для производственных агентов, который сразу полезен любой команде.

Архитектура

  1. Загрузка: загрузить документы → разбить на фрагменты → создать эмбеддинги → сохранить в векторной базе данных
  2. Запрос: создать эмбеддинг вопроса → получить лучшие K фрагментов → вставить их в промпт → передать в LLM
  3. Цитирование: отформатировать фрагменты с идентификаторами; попросить 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 — локальная установка не требуется.

Все уроки этого курса

  1. Бот вопросов и ответов по вашим документам
  2. Агент для объяснения кода
  3. Агент-исследователь для веб-поиска
  4. SQL-ассистент для вашей DB
← Назад к AI Agents