<НА ГЛАВНУЮ

Создание самооценочной 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

Switch to English