Обосновываем наш чат результатами Data Science
Это третья часть серии. Первые две публикации знакомят с базовой реализацией чат-бота только на базе векторной базы данных с использованием Milvus и реализацией чат-бота на LlamaIndex. В этом выпуске мы продолжаем использовать LlamaIndex, но добавим кое-что для «привязки к источникам» наших результатов. У TruEra есть отличный комментарий о groundedness и краткое описание в одном из их блогов об оценке RAG.
В этой статье мы рассмотрим, как привязать к источникам наши результаты RAG для Towards Data Science через LlamaIndex в трех разделах:
Настройка для привязки к источникам наших результатов RAG
Определение параметров нашего чат-бота Towards Data Science
Привязка наших результатов к источникам через цитирования
Настройка для привязки к источникам наших результатов RAG
Как и в любом приложении, первый шаг — настроить необходимые предварительные компоненты. В этом примере мы начинаем с установки четырех разных библиотек. Нам нужны llama-index, python-dotenv, pymilvus и openai. Эти четыре библиотеки помогают нам соответственно оркестрировать нашу LLM с retrieval, управлять переменными окружения, работать с векторной базой данных и работать с OpenAI.
! pip install llama-index python-dotenv openai pymilvus
Следующий блок кода настраивает OpenAI и Zilliz (управляемую векторную базу данных Milvus). Мы используем функцию load_dotenv, чтобы загрузить переменные окружения, обычно хранящиеся в файле '.env'. Затем мы передаем необходимые имена переменных с помощью os, чтобы получить значения. OpenAI — это наша LLM, а Zilliz — наша векторная база данных. В этом примере мы используем Zilliz и коллекцию, хранящуюся в облаке, чтобы сохранять наши данные между несколькими версиями приложения.
import os
from dotenv import load_dotenv
import openai
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
zilliz_uri = os.getenv("ZILLIZ_URI")
zilliz_token = os.getenv("ZILLIZ_TOKEN")
Определение параметров для нашего чат-бота Towards Data Science
Далее мы определяем параметры нашего RAG-чат-бота. Мы должны настроить три элемента: модель эмбеддингов, векторную базу данных Milvus и абстракции LlamaIndex для передачи данных. Сначала мы настраиваем нашу модель эмбеддингов. В этом примере мы используем модель эмбеддингов, которую применяли в моем предыдущем блоге для скрейпинга и векторизации данных, а именно модель HuggingFace MiniLM L12. Мы можем загрузить эти данные через LlamaIndex, используя модуль HuggingFaceEmbedding.
from llama_index.embeddings import HuggingFaceEmbedding
embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/all-MiniLM-L12-v2")
Во-вторых, мы настраиваем векторную базу данных. Поскольку Zilliz Cloud — это полностью управляемая и оптимизированная версия Milvus, мы можем подключиться к ней с помощью модуля MilvusVectorStore. Мы указываем URI, token, collection name, similarity metric и text key для подключения к нашему экземпляру Milvus, размещенному в Zilliz Cloud.
Мы получили наши Zilliz URI и токены ранее из переменных окружения. Имя коллекции, метрика сходства и текстовый ключ унаследованы из первой части этой серии блогов, где мы создали коллекцию во время ingestion.
from llama_index.vector_stores import MilvusVectorStore
vdb = MilvusVectorStore(
uri = zilliz_uri,
token = zilliz_token,
collection_name = "tds_articles",
similarity_metric = "L2",
text_key="paragraph"
)
Наконец, мы собираем воедино наши абстракции данных LlamaIndex. Две нативные сущности, которые нам нужны, — это service context, который передает некоторые предопределенные сервисы, и vector store index, который создает «индекс» LlamaIndex из векторного хранилища. В данном случае мы используем service context, чтобы передать нашу модель эмбеддингов. Затем мы передаем существующую векторную базу данных Milvus и созданный service context, чтобы создать наш векторный индекс.
from llama_index import VectorStoreIndex, ServiceContext
service_context = ServiceContext.from_defaults(embed_model=embed_model)
vector_index = VectorStoreIndex.from_vector_store(vector_store=vdb, service_context=service_context)
Обоснование наших результатов с помощью цитат в LlamaIndex
Цитаты и атрибуция — важное дополнение к вашему RAG. Они позволяют вам понимать, откуда берутся ответы в вашем корпусе документов, и оценивать, насколько обоснованы результаты вашего RAG.
LlamaIndex предоставляет простой способ реализовать цитаты через их модуль CitationQueryEngine. Начать работать с этим модулем очень легко. Используя from_args и передавая векторный индекс, мы можем создать экземпляр citation query engine. Ранее мы определили текстовое поле в векторном индексе, поэтому нам не нужно ничего добавлять.
from llama_index.query_engine import CitationQueryEngine
query_engine = CitationQueryEngine.from_args(
vector_index
)
Когда у нас есть query engine, нам нужно только отправить запрос. Для этого примера я спросил: «Что такое большая языковая модель?» Это ответ, который, как мы ожидаем, можно получить из Towards Data Science. Я также добавил pprint, чтобы красиво вывести результат.
res = query_engine.query("What is a large language model?")
from pprint import pprint
pprint(res)
На изображении ниже показан пример того, как может выглядеть ответ. В нем есть ответ, а источники цитируются прямо в тексте. Это дает нам понять, что ответ обоснован, и показывает, откуда он взят.
Краткое описание обоснования результатов RAG с помощью цитат и атрибуции
Этот tutorial — третий в серии, посвященной созданию чат-бота с помощью RAG. Мы используем одни и те же данные из Towards Data Science для всех этих tutorial. В этом tutorial используются цитаты и атрибуция, чтобы гарантировать, что ваши результаты обоснованы.
Цитаты и атрибуция решают две проблемы, которые традиционно есть у RAG. Во-первых, они позволяют нам знать, откуда мы извлекаем данные. Во-вторых, они позволяют нам видеть, насколько «истинны» наши ответы согласно данным. Эта концепция также называется «обоснованностью».
Мы использовали LlamaIndex и Zilliz Cloud, чтобы создать этот tutorial по RAG. LlamaIndex позволяет нам легко запустить engine, который будет извлекать цитаты, если они существуют в векторном хранилище. Zilliz Cloud позволяет нам легко сохранять данные между несколькими проектами.
Чтобы снова прочитать всю серию Chat Towards Data Science, вот ссылки:
Читать далее

VDBBench Adds Cost-Aware Benchmarking for Vector Databases
Compare Zilliz Cloud, Pinecone, and turbopuffer with VDBBench cost-aware vector database benchmarks across latency, freshness, multitenancy, and cold starts.

Context Engineering Strategies for AI Agents: A Developer’s Guide
Learn practical context engineering strategies for AI agents. Explore frameworks, tools, and techniques to improve reliability, efficiency, and cost.

Zilliz Named "Highest Performer" and "Easiest to Use" in G2's Summer 2025 Grid® Report for Vector Databases
Zilliz shines in G2's Summer 2025 Grid® Report as both "Highest Performer" and "Easiest to Use," solving the performance-usability dilemma.



