Генерация ответа и цитирование источников
Финал пайплайна: превращаем контекст в ответ, которому можно верить и который можно проверить.
Grounded generation (ответ с опорой) — генерация, в которой модель обязана опираться на поданный контекст и указывать, откуда взят каждый факт.
Что делает LLM на этом шаге
Модель получает собранный промпт (инструкция + контекст + вопрос) и пишет ответ. Если промпт составлен правильно, модель пересказывает факты из контекста, а не из памяти, и добавляет ссылки на источники.
Реальный вызов (для чтения)
from openai import OpenAI
client = OpenAI()
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "Отвечай только по контексту, цитируй [номер]."},
{"role": "user", "content": rag_prompt}, # промпт из прошлого урока
],
)
print(resp.choices[0].message.content)Как работает цитирование
Если чанки в контексте пронумерованы, а инструкция требует ссылаться на номера, модель вставляет их прямо в ответ. Дальше приложение сопоставляет номер с метаданными чанка (файл, страница, URL) и показывает пользователю кликабельный источник.
Смоделируем «генерацию с цитатами» шаблоном, чтобы увидеть формат на выходе.
context = {
1: ("Возврат возможен в течение 14 дней.", "policy.pdf, стр. 4"),
2: ("Нужен чек и товарный вид.", "policy.pdf, стр. 5"),
}
def render_answer(used_ids):
body = " ".join(context[i][0] for i in used_ids)
cites = "; ".join(f"[{i}] {context[i][1]}" for i in used_ids)
return f"Ответ: {body}\nИсточники: {cites}"
print(render_answer([1, 2]))Вывод:
Ответ: Возврат возможен в течение 14 дней. Нужен чек и товарный вид. Источники: [1] policy.pdf, стр. 4; [2] policy.pdf, стр. 5
Пользователь видит не только ответ, но и откуда он. Это и есть главное преимущество RAG над «голой» LLM: ответ проверяем. Можно открыть источник и убедиться.
Что делать, если контекст не отвечает
Хорошая система при пустом или нерелевантном контексте говорит «не нашёл в документах», а не выдумывает. Это поведение задаётся инструкцией в промпте и проверяется на этапе оценки (следующий раздел).
Цитирование повышает доверие
- Пользователь может перепроверить факт по источнику.
- Видно, на чём основан ответ, — меньше «магии».
- Легче ловить и чинить ошибки извлечения.
Итог
- LLM пишет ответ по контексту и ссылается на пронумерованные источники.
- Номера сопоставляются с метаданными → кликабельная цитата.
- Цитирование делает ответ проверяемым — ключевое отличие RAG.