AGI
Создание агентов LLM для RAG с нуля и далее: всесторонний гид
LLM, такие как GPT-3, GPT-4, и их открытые аналоги, часто испытывают трудности с получением актуальной информации и могут иногда генерировать неверную или ложную информацию.
Retrieval-Augmented Generation (RAG) – это техника, которая объединяет возможности LLM с внешней информацией. RAG позволяет нам основывать ответы LLM на фактической, актуальной информации, значительно улучшая точность и надежность сгенерированного контента.
В этом блог-посте мы рассмотрим, как создать агенты LLM для RAG с нуля, глубоко погрузившись в архитектуру, детали реализации и продвинутые техники. Мы рассмотрим все, от основ RAG до создания сложных агентов, способных к сложному рассуждению и выполнению задач.
Прежде чем мы начнем создавать наш агент LLM, давайте поймем, что такое RAG и почему он важен.
RAG, или Retrieval-Augmented Generation, – это гибридный подход, который объединяет информационный поиск с генерацией текста. В системе RAG:
- Запрос используется для извлечения релевантных документов из базы знаний.
- Эти документы затем передаются в языковую модель вместе с исходным запросом.
- Модель генерирует ответ на основе как запроса, так и извлеченной информации.
Этот подход имеет несколько преимуществ:
- Улучшенная точность: Основывая ответы на извлеченной информации, RAG снижает количество неверной информации и улучшает фактическую точность.
- Актуальная информация: База знаний может быть регулярно обновлена, позволяя системе получать актуальную информацию.
- Прозрачность: Система может предоставлять источники информации, увеличивая доверие и позволяя проверять факты.
Понимание агентов LLM
Когда вы сталкиваетесь с проблемой, не имеющей простого ответа, вам часто необходимо выполнить несколько шагов, тщательно подумать и вспомнить, что вы уже пробовали. Агенты LLM предназначены именно для таких ситуаций в приложениях языковых моделей. Они объединяют тщательный анализ данных, стратегическое планирование, извлечение данных и способность учиться на прошлом опыте, чтобы решать сложные проблемы.
Что такое агенты LLM?
Агенты LLM – это продвинутые системы ИИ, предназначенные для создания сложного текста, требующего последовательного рассуждения. Они могут думать вперед, вспоминать прошедшие разговоры и использовать различные инструменты, чтобы скорректировать свои ответы в зависимости от ситуации и стиля.
Рассмотрим вопрос в юридической области, такой как: “Каковы потенциальные юридические последствия нарушения определенного типа контракта в Калифорнии?” Базовый LLM с системой RAG может извлечь необходимую информацию из юридических баз данных.
Для более подробного сценария: “В свете новых законов о защите данных, какие общие юридические проблемы сталкиваются компании, и как суды решали эти проблемы?” Этот вопрос глубже, чем просто поиск фактов. Он связан с пониманием новых правил, их влиянием на различные компании и реакцией судов. Агент LLM разобьет эту задачу на подзадачи, такие как извлечение последних законов, анализ исторических дел, суммирование юридических документов и прогнозирование тенденций на основе закономерностей.
Компоненты агентов LLM
Агенты LLM обычно состоят из четырех компонентов:
- Агент/Мозг: Основная языковая модель, которая обрабатывает и понимает язык.
- Планирование: Способность рассуждать, разбивать задачи и разрабатывать конкретные планы.
- Память: Сохраняет записи прошлых взаимодействий и учится на них.
- Использование инструментов: Интегрирует различные ресурсы для выполнения задач.
Агент/Мозг
В основе агента LLM лежит языковая модель, которая обрабатывает и понимает язык на основе огромных объемов данных, на которых она была обучена. Вы начинаете с предоставления ему конкретного запроса, руководя агентом о том, как ответить, какие инструменты использовать и какие цели преследовать. Вы можете настроить агента с персоной, подходящей для конкретных задач или взаимодействий, улучшая его производительность.
Память
Компонент памяти помогает агентам LLM справляться с сложными задачами, сохраняя записи прошлых действий. Существует два основных типа памяти:
- Краткосрочная память: Действует как блокнот, отслеживая текущие обсуждения.
- Долгосрочная память: Функционирует как дневник, хранящий информацию из прошлых взаимодействий, чтобы учиться на закономерностях и принимать лучшие решения.
Объединяя эти типы памяти, агент может предлагать более подходящие ответы и запоминать предпочтения пользователей с течением времени, создавая более связанное и релевантное взаимодействие.
Планирование
Планирование позволяет агентам LLM рассуждать, разбивать задачи на управляемые части и корректировать планы по мере развития задач. Планирование включает в себя два основных этапа:
- Формулирование плана: Разбиение задачи на более мелкие подзадачи.
- Отражение плана: Просмотр и оценка эффективности плана, включение обратной связи для уточнения стратегий.
Методы, такие как Chain of Thought (CoT) и Tree of Thought (ToT), помогают в этом процессе разбиения, позволяя агентам исследовать различные пути решения проблемы.
Чтобы глубже погрузиться в мир агентов ИИ, включая их текущие возможности и потенциал, рассмотрите возможность прочитать “Auto-GPT & GPT-Engineer: всесторонний гид по ведущим агентам ИИ сегодня”
Настройка среды
Чтобы создать наш агент RAG, нам необходимо настроить среду разработки. Мы будем использовать Python и несколько ключевых библиотек:
- LangChain: Для оркестровки нашего LLM и компонентов извлечения.
- Chroma: Как наш векторный магазин для вложений документов.
- Модели GPT от OpenAI: Как наш базовый LLM (вы можете заменить это на открытую модель, если предпочитаете).
- FastAPI: Для создания простого API для взаимодействия с нашим агентом.
Давайте начнем с настройки нашей среды:
# Создайте новую виртуальную среду python -m venv rag_agent_env source rag_agent_env/bin/activate # На Windows используйте `rag_agent_env\Scripts\activate` # Установите необходимые пакеты pip install langchain chromadb openai fastapi uvicorn
Теперь давайте создадим новый файл Python под названием rag_agent.py и импортируем необходимые библиотеки:
from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.text_splitter import CharacterTextSplitter from langchain.llms import OpenAI from langchain.chains import RetrievalQA from langchain.document_loaders import TextLoader import os # Установите ключ API OpenAI os.environ["OPENAI_API_KEY"] = "ваш-api-ключ-здесь";
Создание простой системы RAG
Теперь, когда у нас настроена среда, давайте создадим базовую систему RAG. Мы начнем с создания базы знаний из набора документов, а затем используем это для ответов на запросы.
Шаг 1: Подготовка документов
Сначала нам нужно загрузить и подготовить наши документы. Для этого примера давайте предположим, что у нас есть текстовый файл под названием knowledge_base.txt с некоторой информацией об ИИ и машинном обучении.
# Загрузите документ
loader = TextLoader("knowledge_base.txt")
documents = loader.load()
# Разбейте документы на части
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)
# Создайте вложения
embeddings = OpenAIEmbeddings()
# Создайте векторный магазин
vectorstore = Chroma.from_documents(texts, embeddings)
Шаг 2: Создание цепочки QA на основе извлечения
Теперь, когда у нас есть векторный магазин, мы можем создать цепочку QA на основе извлечения:
# Создайте цепочку QA на основе извлечения qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=vectorstore.as_retriever())
Шаг 3: Запрос системы
Мы можем теперь запросить нашу систему RAG:
query = "Каковы основные применения машинного обучения?" result = qa.run(query) print(result)
Шаг 4: Создание агента LLM
Хотя наша простая система RAG полезна, она довольно ограничена. Давайте улучшим ее, создав агент LLM, который может выполнять более сложные задачи и рассуждать об извлеченной информации.
Агент LLM – это система ИИ, которая может использовать инструменты и принимать решения о действиях. Мы создадим агента, который может не только отвечать на вопросы, но и выполнять поисковые запросы и базовые вычисления.
Сначала давайте определим некоторые инструменты для нашего агента:
from langchain.agents import Tool
from langchain.tools import DuckDuckGoSearchRun
from langchain.tools import BaseTool
from langchain.agents import initialize_agent
from langchain.agents import AgentType
# Определите инструмент калькулятора
class CalculatorTool(BaseTool):
name = “Калькулятор”
description = “Полезен, когда вам нужно ответить на вопросы о математике”
def _run(self, query: str)














