AI знания для продакта

Основные понятия AI агентов для продактов

Разберем основные понятия современного AI: LLM/модель, tools/MCP, обвязка (harness) и агенты.

LLM модель

LLM (Large Language Model) – это ML модель, которая предсказывает следующее слово в тексте. Современные модели натренированы таким образом, что если им дать вопрос, то они начнут предсказывать ответ.

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

Инструменты (tools)

Это вызов какого-то внешнего сервиса, который позволяет модели получить информацию или совершить действие. Типичные примеры инструментов:
  • поискать в Jira тикеты по тексту
  • прочитать Jira тикет
  • отредактировать Jira тикет
Когда мы вызываем LLM, то помимо задачи, которую сформулировал пользователь, мы передаем ей список доступных инструментов с описанием, как их можно вызывать. LLM может сразу ответить пользователю, а может вместо этого решить вызвать один из инструментов.

Давайте посмотрим на пример:

Продакт вводит промпт:
"Добавь в задачу на запуск новых скидок условие, что скидки не должны суммироваться с промо-кодами".

Доступные для агента tools:
jira-search-issues, jira-read-issue, jira-update-issue
* issue - это название тикета в терминологии Jira

Что происходит внутри агента
  1. Вызов tool "jira-search-issues" с параметром поиска "cкидки"
Обратите внимание, что произошло несколько событий: 3 магических и одно нет.
  • Первая магическая часть в том, что агент сам догадался, что "добавь в задачу" означает, что надо лезть в систему работы с задачами (Jira).
  • Более того, чтобы куда-то что-то добавить, надо сначала найти нужный тикет, так что агент опять проявил чудеса самостоятельности и выбрал нужный тул (jira-search-issues).
  • Наконец, он догадался, что, если продакт просит что-то про скидки, то логично найти тикет по ключевому слову "скидки" (он такой умный, что в случае нулевого результата он попробует еще и "скидка", "дискаунт" и "промо").
  • Завершает это все совсем не магический вызов инструмента по аналогии с обычным вызовом API.

MCP сервер

Откуда же именно берутся tools? Как это работает? Тут нам поможет MCP (Model Context Protocol).

MCP сервер как раз и реализует набор инструментов, с помощью которого LLM модель может взаимодействовать с тем или иным сервисом. Например, MCP для GMail, скорее всего, будет иметь инcтрументы для того, чтобы получить список сообщений, поискать сообщения по тексту, прочитать полный текст письма, выполнить с ним какие-то действия.

MCP очень похож на API, но есть два существенных отличия:
  • MCP позволяет модели узнать, какие инструменты он имеет с подробным текстовым описанием всех возможных действий и их параметров, чтобы модель знала, как им пользоваться.
  • Хороший MCP структурирован в человеко-читаемом формате: он отдает информацию примерно так же, как она была бы структурирована в UI, и позволяет выполнять те действия, которые обычно делает человек, работая с этим сервисом.

Ниже - пример описания MCP Jira с одним инструментом search (у реального Jira MCP их сотни).
{
"name": "jira_search_issues",
"description": "Search Jira issues using JQL.",
"inputSchema": {
     "type": "object",
     "properties": {
         "jql": {
             "type": "string", 
             "description": "JQL query, e.g. 'project = SEARCH AND status = \"In Progress\" ORDER BY   updated DESC'" 
        },
        "max_results": {
            "type": "integer",
            "description": "Maximum number of issues to return (default 25, max 100).",
            "default": 25 
        }
    }
}
Выглядит страшно, но на самом деле довольно логично: описывается tool jira_search_issues, который принимает на вход два параметра: что искать (в формате JQL или просто строчки поиска типа "скидки) и сколько результатов возвращать (по умолчанию 25). Все описано текстом, и именно тут раскрывается часть магии: LLM-ка может прочитать описание и понять, полезен ли ей будет этот тул и как его вызывать.

Как выглядит сам код тулы под капотом? Обычный код, который "понимает" параметры и вызывает Jira API, которое существует уже 20 лет. Этого всего LLM-ка не видит, она просто терпеливо ждет ответа.

Кто же пишет MCP сервера? Создатели сервисов, которые хотят, чтобы их сервисами пользовались (и платили им денежку). В данном случае программисты Jira написали свои MCP, чтобы продакты ходили к ним не только через классический интерфейс, но и через Claude Code (примеры для продакта можно посмотреть тут).

Оболочка модели (harness)

Если модель - это просто LLM-ка, которая умеет предсказывать следующее слово, а MCP - это ящик с инструментами, то кто же тогда все это связывает?

Третий важный элемент волшебства - harness (буквально: обвязка модели).

Оболочка выполнит вызов инструмента так, как попросила модель, получит результат и снова вызовет модель, но уже с обновленной историей диалога, которая теперь включает вызов тула и результат этого вызова.

По сути, мы просто даем модели почти тот же текст, просто теперь с ответом тулы, и просим ее подумать опять и предсказать следующее действие (напоминаем, что LLM-ка просто предсказывает следующее слово на основе всех предыдущих). Довольно хрупкая конструкция, да? Именно поэтому LLM-ки иногда несут чушь.

Продакт вводит промпт:
"Добавь в задачу на запуск новых скидок условие, что скидки не должны суммироваться с промо-кодами".

Доступные для агента tools:
jira-search-issues, jira-read-issue, jira-update-issue
* issue - это название тикета в терминологии Jira

Что происходит внутри агента
  1. Harness: передает LLM-ке промпт пользователя и напоминает о доступных тулах
  2. LLM: говорит вызвать tool "jira-search-issues" с параметром поиска "cкидки"
  3. Harness: вызывает tool.
  4. Tool: нашел один таск: TSK-2133 "Добавить скидки на товары".
  5. Harness: сказал это LLM-ке.
  6. LLM: отлично, теперь добавь в этот тикет нужный текст из промпта. Для этого вызови другой тул (jira-update-issue) для тикета 'TSK-2133' и добавь текст: "Cкидки не должны суммироваться с промо-кодами."
  7. Tool: successfully updated TSK-2133
  8. Harness: все готово.
  9. LLM: молодец, возьми с полки пирожок.
Самые известные примеры оболочек ("harness"), которые мы используем:
  • Claude Code – изначально была создана для разработки кода, но оказалась настолько мощной, что ее часто применяют и для других задач (вот как ее применяют продакты)
  • Claude Cowork – это оболочка, созданная теми же Anthropic специально для личных и менеджерских задач, во многом похожая на Claude Code. Под капотом вызывает ту же LLM-ку, что и Code.
  • Open Claw – эта оболочка больше заточена на автономное функционирование, и имеет из коробки коннекторы к почте, мессенджерам и другим личным сервисам пользователя.
  • LangChain – это фреймворк для создания своих агентов с нуля. Он позволяет вручную собирать нужную вам оболочку под конкретную задачу.

Именно оболочка позволяет нам легко подключать новые MCP через UI или добавив несколько строчек в конфиг. В оболочке реализовано множество незаметных функций, которые позволяют нам более комфортно и эффективно решать задачи с помощью модели.

Например, оболочки незаметно "сжимают" самые старые сообщения в диалоге, позволяя нам вести с LLM очень длинные беседы. Или возможность хранить историю сессий, и в любой момент вернуться к любой из них и продолжить ее.

Оболочки также реализуют что-то вроде долгосрочной памяти, выписывая какие-то факты о нас путем суммаризации. Или позволяя LLM делать поиск по истории диалогов, чтобы найти и использовать, что пользователь уже говорил по теме.

AI агент

AI агент – это вызов LLM в цикле, который позволяет LLM работать над задачей автономно. LLM формирует вызовы тулов, получает результаты, и дальше может, исходя из того, что она прочитала сделать еще вызовы или совершить следующие логические действия.

Например, если поиск по тикетам вернет пустой результат или ошибку, LLM скоре всего попробует поискать по-другому, или поискать синонимы слова "скидка". Если она нашла нужный тикет, то она сначала прочитает его текст, а потом вызовет тул редактирования, чтобы внести требуемое изменение.
Продакт вводит промпт:
"Добавь в задачу на запуск новых скидок условие, что скидки не должны суммироваться с промо-кодами".

Доступные для агента tools:
jira-search-issues, jira-read-issue, jira-update-issue
* issue - это название тикета в терминологии Jira

Что происходит внутри агента
  1. Harness: передает LLM-ке промпт пользователя и напоминает о доступных тулах
  2. LLM: говорит вызвать tool "jira-search-issues" с параметром поиска "cкидки"
  3. Harness: вызывает tool.
  4. Tool: нашел один таск: TSK-2133 "Добавить скидки на товары".
  5. Harness: сказал это LLM-ке.
  6. LLM: отлично, теперь добавь в этот тикет нужный текст из промпта. Для этого вызови другой тул (jira-update-issue) для тикета 'TSK-2133' и добавь текст: "Cкидки не должны суммироваться с промо-кодами."
  7. Tool: successfully updated TSK-2133
  8. Harness: все готово.
  9. LLM: В тикет TSK-2133 добавлено условие про то, что скидки не должны суммироваться с промо-кодами.
  10. LLM (опять вызванная в цикле): Хочешь я проверю какие еще модификаторы цены могут конфликтовать со скидками?

Эта магия возможна благодаря тому, что LLM может предпринять некоторые действия, оценить их результаты, и решить какие следующие шаги нужно сделать. И так в цикле, пока модель сама не решит что нужно остановиться и вернуть результат пользователю, или задать ему дополнительный вопрос. Именно этот цикл превращает LLM модель в агента, он делает ее автономной от пользователя при работе над задачей. Да-да, хайповые агенты - это просто вызов LLM-ки в цикле. Сорян, если разрушили вам все волшебство!

Например, когда модель разрабатывает новую фичу в коде, то она может запустить тесты, увидеть ошибку, попробовать ее исправить, снова прогнать тесты итд. Она даже может протестировать новую фичу через браузер, прокликав новый функционал, и запустить процесс доработки, если решит, что что-то реализовано неправильно. И все это в цикле: код, тест, код, тест, код, тест, готово.

Замыкаем круг: кто же вызывает модель в цикле? Ответ - харнес, так что цикл "спроси модель, что делать дальше" зашит в оболочке.

Итоги

Итак, мы разобрались, что есть:
  • LLM-ка, которая умеет предсказывать следующее слово и за счет этого кажется умной (аналогия: мозг)
  • Tools - инструменты, доступные модели. Доступен модели по MCP (аналогия: ящик с инструментами)
  • Harness - обвязка, которая соединяет мозг с реальным миром (аналогия: тело и руки)
  • Агент - вызов модели в цикле, пока не будет получено удовлетворительное решение (аналогия: последовательность мыслей и действий)

В общем, агенты - полезная вещь для автоматизации продуктовой рутины, смотри примеры здесь.

Авторы статьи:
Андрей Менде, Sr. PM AI Booking.com
Владимир Калмыков, Group PM Booking.com