Назад
465

Агенты vs Чат-боты

465

Технологии вокруг LLM развиваются быстро и некоторые термины могут вызывать путаницу, как, например, «агенты» и «чат-боты». Сегодня обсудим их различия, а также устройство и работу агента.

Для начала определимся с терминами:

  • Чат-бот ожидает ввод пользователя и выдаёт реакцию на него, генерируя текст ответа.
  • Агент — автономная система. Ввод пользователя здесь — триггер, который даёт начало его действиям / рассуждениям. Получив ввод (задачу), он выстраивает последовательность шагов для решения, самостоятельно выполняет их и генерирует текст по результатам выполнения задачи пользователя.

Если попросить чат-бота «организовать встречу», он выдаст чек-лист для реализации, но не сможет выполнить действия — ограничится только текстовыми советами. Агент на тот же запрос самостоятельно полезет в Google Calendar, найдёт свободный слот, отправит письма участникам и забронирует переговорку.

Архитектура агента

В классическом определении агента к LLM добавляют три модуля:

  1. Память — хранилище, например, база данных, где собирается опыт успешного выполнения предыдущих задач.
  2. Планировщик — разбитие исходной задачи на последовательность действий с использованием доступных инструментов, которые нужно выполнить для достижения цели пользователя.
  3. Инструменты (function calling) — интерфейс для выполнения действий.

С помощью памяти и планировщика агент успешно выполняет более сложные задачи. А инструменты дают возможность агенту выполнять действия.

Инструменты

Самостоятельно LLM не умеет выполнять действия — она генерирует с помощью инструментов вызов функции, результат которой возвращается к ней.

Это работает следующим образом:

  1. Описание доступных функций. В системном промпте модели задаётся описание доступных функций в формате JSON. Модель не видит реализацию функции, ей доступно только её описание (входные параметры, результат выполнения и действия), по которому она понимает семантику функции. Пример описания функции get_weather, которая вызывается при вопросе пользователя о температуре или дожде:
{
"type": "function",
"name": "get_weather",
"description": "Retrieves current weather for the given location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City and country e.g. Bogotá, Colombia"
},
"units": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "Units the temperature will be returned in."
}
},надо
"required": ["location", "units"],
"additionalProperties": false,
"strict": true
}
}
  1. Генерация вызова. Когда модели приходит запрос пользователя, она анализирует, содержится ли в системном промпте инструмент для решения задачи. Если да — возвращает специальную структуру. Ниже пример для запроса с погодой:
Q: Какая погода в Париже?
Response:
{
"function": {
"name": "get_weather",
"arguments": "{\"city\": \"Paris\"}"
}
}

Обратите внимание — модель, опираясь на контекст, сама извлекает необходимые сущности для вызова функции из запроса.

  1. Выполнение вызова. После генерации описания вызова инструмента LLM прекращает генерацию токенов, и управление передаётся модулю исполнения. По сгенерированному имени инструмента скрипт соотносит, что именно нужно исполнить и с какими аргументами. Результаты выполнения инструмента не показываются пользователю. Они возвращаются модели. А в историю переписки добавляется новое сообщение с ролью tool о результате выполнения функции:
{
  "role": "tool",
  "tool_call_id": "call_abc123",
  "name": "get_weather",
  "content": "{\\"temperature\\": \\"25\\", \\"unit\\": \\"C\\", \\"description\\": \\"Sunny\\"}"
}
  1. Генерация ответа. Перед финальным ответом LLM видит что-то подобное (пример с запросом погоды в Париже):
System: Ты полезный помощник... (описание инструментов)
User: Какая погода в Париже?
Assistant: (call tool: `get_weather(city="Paris")`)
Tool: `{"temperature": 22, "condition": "sunny"}`

Модель читает историю, переключается в режим генерации текста и выдаёт ответ. Пользователь видит только вопрос и ответ, не подозревая, что «под капотом» произошёл обмен техническими данными.

Агент может совершать множество таких итераций, например:
Попробовал найти информацию -> Не нашёл -> Поменял запрос -> Нашёл ссылку -> Прочитал содержимое -> Сформировал ответ

4 месяца
Large Language Models

Разобраться с агентами и LLM можно на нашем курсе! Для тех, кто знаком с DL и Pytorch: научитесь использовать LLM в приложениях: обучать, деплоить, ускорять и многое другое.

0/0

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!