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

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

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

LLM модель

LLM (Large Language Model) – это ML модель, которая предсказывает следующее слово в тексте. Самый очевидный пример - предсказывалка следующего слова в вашем смартфоне. Вы набираете в сообщениях: "Я пойду в..." и модель предлагает три варианта: "магазин", "школу, "душ" - три наиболее вероятные продолжения этой фразы. Модель не знает наверняка, это просто статистика. Если продолжить кликать предложенные варианты, то скоро станет смешно, какой же получается бред :)

Современные модели натренированы таким образом, что если им дать вопрос, то они начнут предсказывать ответ. Главное, помнить, что ЛЛМ-ка - не вселенский разум, а просто предсказатель следующего слова.

LLM модели сами по себе не слишком полезны, потому что они могут оперировать только с текстом: можно спросить рецепт блинчиков или же написать весьма предсказуемый (pun intended) пост.

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

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

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

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

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

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

Что происходит внутри:
LLM решает: вызови tool "jira-search-issues" с параметром поиска "cкидки"
Обратите внимание, что произошло несколько событий: 3 магических и одно обычное.
  • Первая магическая часть в том, что LLM-ка сама догадалась, что "добавь в задачу" означает, что надо лезть в систему работы с задачами (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 (примеры работы с Jira через агента для продакта можно посмотреть тут).

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

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

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

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

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

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

Доступные для LLM-ки tools:
jira-search-issues, jira-read-issue, jira-update-issue

Что происходит внутри:
  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. Harness: вызывает tool "jira-update-issue" и добавляет нужный текст
  8. Tool: successfully updated TSK-2133
  9. Harness: все готово.
  10. LLM: теперь можно написать пользователю, что все сделано.
Самые известные примеры оболочек ("harness"), которые мы используем:
  • Claude Code – изначально была создана для разработки кода, но оказалась настолько мощной, что ее часто применяют и для других задач (вот как ее применяют продакты)
  • Claude Cowork – это оболочка, созданная теми же Anthropic специально для личных и менеджерских задач, во многом похожая на Claude Code. Под капотом вызывает ту же LLM-ку, что и Claude Code.
  • Open Claw – эта оболочка больше заточена на автономное функционирование, и имеет из коробки коннекторы к почте, мессенджерам и другим личным сервисам пользователя.
  • LangChain – это фреймворк для создания своих агентов с нуля. Он позволяет вручную собирать нужную вам оболочку под конкретную задачу.

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

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

AI агент

AI агент – это вызов LLM в цикле, который позволяет 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. Harness: вызывает tool "jira-update-issue" и добавляет нужный текст
  8. Tool: successfully updated TSK-2133
  9. Harness: все готово.
  10. LLM (опять вызванная в цикле): Хочешь я проверю какие еще модификаторы цены могут конфликтовать со скидками?

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

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

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

Итоги

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

Если хотите прокачать использование AI-агента для авмоматизации продуктовой рутины, то мы сделали для вас полноценный смоделированный стартап: реальный продукт с код базой код, реальная Jira, база данных, помойка из документов, заполненная PRD и стратегиями (как в жизни). Чтобы можно было практиковаться в среде, которая действительно похожа на вашу работу.

Почитать реальные отзывы, программу и начать учиться можно здесь.

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