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: An In-Depth Guide to Today’s Leading AI Agents”
Налаштування середовища
Для побудови нашого агента 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 = 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)














