Создание самооценочной AI-системы с LlamaIndex
Научитесь создавать AI-систему с поддержкой поиска и оценки в этом подробном руководстве.
Обзор
В этом руководстве мы создаем сложный агентный AI-рабочий процесс, используя LlamaIndex и модели OpenAI. Мы сосредотачиваемся на проектировании надежного агента с поддержкой поиска-обогащенного генерации (RAG), который может рассуждать на основе доказательств, целенаправленно использовать инструменты и оценивать свои собственные результаты по качеству. Структурируя систему вокруг поиска, синтеза ответов и самооценки, мы показываем, как агентные шаблоны превосходят простые чат-боты и движутся к более надежным, управляемым AI-системам, подходящим для исследований и аналитических задач.
Настройка окружения
Мы настраиваем окружение и устанавливаем все необходимые зависимости для запуска агентного AI-рабочего процесса. Мы безопасно загружаем ключ API OpenAI во время выполнения, гарантируя, что учетные данные никогда не закодированы в коде. Мы также подготавливаем блокнот для плавного выполнения асинхронных задач.
!pip -q install -U llama-index llama-index-llms-openai llama-index-embeddings-openai nest_asyncio
import os
import asyncio
import nest_asyncio
nest_asyncio.apply()
from getpass import getpass
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = getpass("Введите OPENAI_API_KEY: ")Настройка модели OpenAI
Мы настраиваем языковую модель OpenAI и модель встраивания, создавая компактную базу знаний для нашего агента. Мы преобразуем необработанный текст в индексированные документы, чтобы агент мог получать релевантные доказательства во время рассуждений.
from llama_index.core import Document, VectorStoreIndex, Settings
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
Settings.llm = OpenAI(model="gpt-4o-mini", temperature=0.2)
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")
texts = [
"Надежные RAG-системы разделяют поиск, синтез и проверку. Общие ошибки включают галлюцинации и поверхностный поиск.",
"Оценка RAG фокусируется на верности, релевантности ответа и качестве поиска.",
"Агенты, использующие инструменты, требуют строго контролируемых инструментов, валидации и циклов самоанализа.",
"Надежный рабочий процесс включает этапы: получить, ответить, оценить и пересмотреть."
]
docs = [Document(text=t) for t in texts]
index = VectorStoreIndex.from_documents(docs)
query_engine = index.as_query_engine(similarity_top_k=4)Реализация извлечения доказательств и оценки
Мы определяем основные инструменты, используемые агентом: извлечение доказательств и оценка ответов. Мы реализуем автоматическую оценку верности и релевантности, чтобы агент мог оценивать качество своих собственных ответов.
from llama_index.core.evaluation import FaithfulnessEvaluator, RelevancyEvaluator
faith_eval = FaithfulnessEvaluator(llm=Settings.llm)
rel_eval = RelevancyEvaluator(llm=Settings.llm)
def retrieve_evidence(q: str) -> str:
r = query_engine.query(q)
out = []
for i, n in enumerate(r.source_nodes or []):
out.append(f"[{i+1}] {n.node.get_content()[:300]}")
return "\n".join(out)
def score_answer(q: str, a: str) -> str:
r = query_engine.query(q)
ctx = [n.node.get_content() for n in r.source_nodes or []]
f = faith_eval.evaluate(query=q, response=a, contexts=ctx)
r = rel_eval.evaluate(query=q, response=a, contexts=ctx)
return f"Верность: {f.score}\nРелевантность: {r.score}"Создание агента ReAct
Мы создаем агента на базе ReAct и определяем его поведение системы, направляя его в извлечение доказательств, генерацию ответов и пересмотр результатов. Мы также инициализируем контекст выполнения, который поддерживает состояние агента в взаимодействиях.
from llama_index.core.agent.workflow import ReActAgent
from llama_index.core.workflow import Context
agent = ReActAgent(
tools=[retrieve_evidence, score_answer],
llm=Settings.llm,
system_prompt="""
Всегда сначала извлекайте доказательства.
Создавайте структурированный ответ.
Оценивайте ответ и пересматривайте, если оценки низкие.
""",
verbose=True
)
ctx = Context(agent)Запуск агентного рабочего процесса
Мы выполняем полный агентный цикл, передавая тему в систему и потоково выводя рассуждения и результаты агента. Мы позволяеем агенту завершить цикл извлечения, генерации и оценки асинхронно.
async def run_brief(topic: str):
q = f"Спроектируйте надежный рабочий процесс агента RAG + с использованием инструментов и его оценку. Тема: {topic}"
handler = agent.run(q, ctx=ctx)
async for ev in handler.stream_events():
print(getattr(ev, "delta", ""), end="")
res = await handler
return str(res)
topic = "Надежность агента RAG и оценка"
loop = asyncio.get_event_loop()
result = loop.run_until_complete(run_brief(topic))
print("\n\nКОНАЧНЫЙ РЕЗУЛЬТАТ\n")
print(result)Итоги
Мы продемонстрировали, как агент может извлекать поддерживающие доказательства, генерировать структурированный ответ и оценивать свою собственную верность и релевантность перед окончательным ответом. Мы сохранили проект модульным и прозрачным, упрощая расширение рабочего процесса дополнительными инструментами, оценщиками или специфическими для области источниками знаний. Этот подход иллюстрирует, как мы можем использовать агентный AI с LlamaIndex и моделями OpenAI для создания более способных систем, которые также более надежны и осознают свои рассуждения и ответы.
Switch Language
Read this article in English