Обосновываем наш чат результатами 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, вот ссылки:
Читать далее

Zilliz Cloud Update: Smarter Autoscaling for Cost Savings, Stronger Compliance with Audit Logs, and More
What's new in Zilliz Cloud? Smarter autoscaling with scale-down, audit logs GA, enhanced SSO, and Milvus 2.6 in Private Preview.

Why I’m Against Claude Code’s Grep-Only Retrieval? It Just Burns Too Many Tokens
Learn how vector-based code retrieval cuts Claude Code token consumption by 40%. Open-source solution with easy MCP integration. Try claude-context today.

Why Context Engineering Is Becoming the Full Stack of AI Agents
Discover how context engineering unifies prompts, RAG, and tools to build smarter, production-ready AI agents powered by Milvus.



