Реалізація Question Answering (Відповіді на запитання по документам)
QA по документам — система, що приймає запитання природною мовою та повертає відповідь, знайдену або синтезовану на основі корпусу документів. Це основа для корпоративних пошукових систем, баз знань та автоматичних помічників.
Архітектури QA-систем
Extractive QA: відповідь — точний фрагмент з документа. Модель вибирає span (початок/кінець) у знайденому документі. deepset/roberta-base-squad2, sberbank-ai/rubert-base-cased-qa — готові моделі. Перевага: немає галюцинацій. Недолік: відповідь повинна дослівно бути в тексті.
RAG (Retrieval-Augmented Generation): найпоширеніший production-підхід. Ретривер знаходить релевантні документи, LLM синтезує відповідь. Відповідь може узагальнювати інформацію з кількох джерел.
Long-context LLM: Claude 3.5 (200K токенів) або Gemini Pro (1M токенів) — весь корпус документів у контексті. Для невеликих баз знань (< 500 сторінок) це простіше за RAG.
RAG Pipeline
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import Qdrant
from langchain.chains import RetrievalQA
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Qdrant.from_existing_collection(
embeddings=embeddings,
url="http://localhost:6333",
collection_name="docs"
)
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff", # або "map_reduce" для довгих документів
retriever=vectorstore.as_retriever(search_kwargs={"k": 5}),
return_source_documents=True,
)
result = qa_chain.invoke({"query": "Який порядок розірвання контракту?"})
# result["result"] — відповідь
# result["source_documents"] — джерела
Контроль галюцинацій
Критично важливо для довіри до системи:
- Цитування джерел: кожен факт у відповіді → посилання на документ/абзац
- Faithfulness check: окремий промпт перевіряє, підтверджується чи відповідь контекстом
- Явна відмова: якщо інформації нема в документах — "У доступних документах немає відповіді на це запитання"
- Scoring впевненості: оцінка впевненості (logprobs або окремий chain)
Розширений пошук
Базовий top-K retriever недостатній для складних запитань:
- HyDE (Hypothetical Document Embeddings): спочатку LLM генерує гіпотетичну відповідь, потім шукає за її embedding
- Multi-query: переформулювання запитання 3–5 способами, об'єднання результатів
- Parent-child chunks: зберігання малих chunks для пошуку, але передача у LLM батьківського ширшого контексту
Робота з таблицями та структурованими даними
QA по таблицях — окреме завдання. Варіанти:
- Text2SQL: LLM генерує SQL-запит, виконує його, повертає результат
- Table serialization: таблиця → Markdown/CSV → в контекст LLM
- TAPAS (Google): спеціалізована модель для QA по таблицях
Метрики якості
- Exact Match (EM): частка запитань з точно правильною відповіддю (для extractive)
- F1 score: token overlap відповіді з еталоном
- RAGAS: спеціалізована бібліотека для evaluation RAG: faithfulness, answer relevance, context precision, context recall







