Все уроки
ИИПродвинутый13 мин чтенияПолезно знать

AI-агенты

LLM, которые в цикле используют tools, чтобы довести многошаговую задачу до конца, — и как сделать их безопасными и полезными.

  • Tools
  • Planning
  • MCP
  • Guardrails
  • Evals
Шаг 1/6
AI-агент получает цель, а не сценарий: «найди мне дешёвый рейс».

За 30 секунд

AI-агент — это языковая модель, работающая в цикле: она смотрит на цель, решает, какой tool вызвать, читает результат и повторяет, пока задача не будет выполнена. Агенты умеют искать, редактировать файлы, вызывать API или запускать код. Они сильны в открытых задачах, но чтобы им можно было доверять, нужны понятные tools, ограничения, права доступа и оценка качества.

Не в моём ежедневном стеке — я понимаю принципы и изучу детали, когда это понадобится проекту.

Почему это важно

  • Агенты справляются с задачами, которые невозможно заранее расписать скриптом, — расследование бага, исследование по разным источникам, триаж тикетов, — потому что модель выбирает следующий шаг исходя из того, что нашла.
  • Кодинг-агенты уже изменили работу команд разработки, поэтому инженерам нужно понимать, как на самом деле устроены цикл, tools и контекст, а не просто пользоваться ими.
  • Стандарты вроде Model Context Protocol (MCP) делают подключение агентов к системам компании дешёвым, а значит, проектирование безопасности становится срочным.
  • Команде стоит строить агента, только когда задача многошаговая, достаточно ценная, чтобы оправдать более высокую стоимость и задержку, и её ошибки можно поймать, — иначе лучше один вызов LLM или фиксированный workflow.

Как это работает

01Идея: модель в цикле с tools

Чат-бот отвечает один раз. Агент работает как джун, которому дали цель и набор инструментов: думает о следующем шаге, использует tool, смотрит на результат и продолжает, пока не закончит или не застрянет. Технически это tool-use API в цикле. Вы отправляете цель и определения tools; модель отвечает вызовом tool; ваш код выполняет его и возвращает результат; повторяете, пока модель не завершит ход. «Планирование» — это в основном рассуждения модели между шагами, иногда им помогает просьба сначала написать план или to-do список. Качество агента зависит от четырёх вещей: модели, tools, которые вы ей даёте, контекста, который она видит, и guardrails вокруг неё. Совет Anthropic стоит повторить: начинайте с самого простого решения и добавляйте агентную сложность, только когда она явно улучшает результат.

  • Workflow: шаги определяет ваш код; LLM заполняет отдельные части
  • Agent: шаги определяет LLM; ваш код предоставляет tools и ограничения
  • Большинство продакшен-систем сочетают оба подхода

02Минимальный цикл агента

Вот базовый цикл на Claude Messages API в TypeScript. Он продолжает вызывать модель, пока та просит tools, выполняет каждый запрошенный tool и возвращает все результаты в одном user-сообщении. Важные детали: максимальное число шагов, чтобы запутавшийся агент не крутился вечно; ошибки возвращаются модели как tool result с is_error, чтобы она могла адаптироваться, а не падать; в историю добавляется весь content каждого ответа assistant, а не только текст. В реальных проектах можно использовать хелпер tool runner из SDK (он сам крутит этот цикл), Claude Agent SDK (обвязку Claude Code в виде библиотеки со встроенными tools для файлов, shell и веба) или хостинговые варианты вроде Claude Managed Agents. В других экосистемах есть похожие SDK; цикл под капотом тот же.

ts
const messages: Anthropic.MessageParam[] = [{ role: "user", content: goal }];
for (let step = 0; step < 20; step++) {
  const res = await client.messages.create({ model: "claude-opus-5-5", max_tokens: 8000, tools, messages });
  messages.push({ role: "assistant", content: res.content });
  if (res.stop_reason !== "tool_use") return res;
 
  const results: Anthropic.ToolResultBlockParam[] = [];
  for (const block of res.content) {
    if (block.type !== "tool_use") continue;
    try {
      const out = await runTool(block.name, block.input, currentUser); // your code, your auth
      results.push({ type: "tool_result", tool_use_id: block.id, content: JSON.stringify(out) });
    } catch (e) {
      results.push({ type: "tool_result", tool_use_id: block.id, content: String(e), is_error: true });
    }
  }
  messages.push({ role: "user", content: results });
}
throw new Error("Agent hit the step limit");

03Проектирование tools, которыми модель умеет пользоваться

Tools — это руки агента, и большинство провалов агентов — это провалы в дизайне tools. Дайте каждому tool одну понятную задачу, имя, которое говорит, что он делает, и описание, объясняющее, когда его использовать, что он возвращает и где типичные подводные камни, — как будто пишете документацию для нового коллеги. Лучше несколько высокоуровневых tools («search_orders» с фильтрами), чем десятки тонких обёрток над каждым эндпоинтом. Возвращайте компактные релевантные результаты: агент, получивший 5 MB JSON-дампа, тратит контекст впустую и путается, поэтому делайте пагинацию, суммируйте и включайте id для последующих вызовов. Делайте ошибки полезными («customer_id не найден; сначала используй search_customers»). Где возможно, делайте пишущие tools идемпотентными и отделяйте читающие tools от пишущих, чтобы выдавать им разные права. Тестируйте tools, наблюдая за реальными транскриптами: там, где модель неправильно использует tool, обычно нужно доработать описание.

04MCP: подключаем агентов к системам

Model Context Protocol (MCP) — открытый стандарт, предложенный Anthropic и теперь поддерживаемый многими AI-инструментами и провайдерами, для подключения AI-приложений к tools и данным. MCP-сервер предоставляет tools (действия), resources (данные для чтения) и prompts (шаблоны) по стандартному протоколу JSON-RPC — локально через stdio или удалённо по HTTP. Любой MCP-клиент — Claude Code, приложения Claude, IDE и другие хосты агентов — может использовать его без самописного клея. Это значит, что интеграцию «tickets» или «database» вы пишете один раз и переиспользуете в разных агентах. Удалённые MCP-серверы используют OAuth для авторизации, так что агент действует с делегированными пользователем ограниченными правами. Относитесь к сторонним MCP-серверам как к любой устанавливаемой зависимости: проверяйте, к чему у них есть доступ, фиксируйте версии и предпочитайте серверы от надёжных издателей.

json
{
  "mcpServers": {
    "tickets": {
      "command": "node",
      "args": ["./mcp/tickets-server.js"],
      "env": { "TICKETS_API_URL": "https://api.example.com" }
    }
  }
}

05Контекст: рабочая память агента

Всё, что агент знает во время задачи, живёт в его context window: инструкции, определения tools, история вызовов и результатов. Длинные задачи заполняют его, и качество падает, когда контекст становится шумным. Хорошие обвязки активно управляют контекстом. Держите system prompt сфокусированным на целях, ограничениях и способе проверки работы. Подгружайте tools по требованию, когда их много (tool search). Удаляйте старые объёмные результаты tools, когда они больше не нужны (context editing), или суммируйте раннюю историю (compaction). Дайте агенту scratchpad или memory-файл для заметок, которые должны сохраниться, — плана, решений, прогресса. Большие задачи делите между субагентами: каждый исследует в своём свежем контексте и возвращает главному агенту только краткий результат. Так кодинг-агенты продолжают работать с большими репозиториями, не утопая в содержимом файлов.

06Guardrails и human-in-the-loop

Агент может выполнять реальные действия, поэтому ограничения проектируются так же, как для нового сотрудника с доступом к продакшену. Least privilege: давайте только те tools, которые нужны задаче, с учётными данными, ограниченными пользователем или узким сервисным аккаунтом. Уровни прав: tools только на чтение работают свободно; запись требует подтверждения или выполняется в sandbox; деструктивные действия (платежи, удаления, письма клиентам) всегда требуют человека. Бюджеты: лимиты шагов, бюджеты токенов или стоимости и таймауты по реальному времени. Sandboxing: запускайте код и shell-команды в изолированных контейнерах без секретов и с ограниченной сетью. Проверка: объясните агенту, как проверить свою работу — запустить тесты, перечитать результат, — и где возможно проверяйте сами в коде. Аудит: логируйте каждый вызов tool с входами, выходами и личностью, от имени которой он выполнялся.

  • Чтение: разрешено · Запись: подтверждение или sandbox · Необратимое: одобрение человека
  • Бюджеты шагов, токенов и времени на каждый запуск
  • Секреты остаются в слое tools, никогда в промпте

Когда применять

  • Открытые задачи, где шаги зависят от того, что вы находите: отладка, исследование, анализ данных, изменения в кодовой базе.
  • Задачи со встроенным способом проверить успех: тесты проходят, схема валидируется или ревьюер одобряет.
  • Внутренние операции, объединяющие несколько систем (тикеты, логи, документация), где человеку иначе пришлось бы прокликивать множество инструментов.
  • Долгая фоновая работа, где несколько минут и дополнительные затраты приемлемы ради лучшего результата.

Когда не стоит

  • Задачи с фиксированными известными шагами — обычный workflow с одним-двумя вызовами LLM дешевле, быстрее и проще в тестировании.
  • Рискованные необратимые действия без шага одобрения человеком или надёжной автоматической проверки.
  • Критичные к задержке пользовательские взаимодействия, где ответ нужен меньше чем за секунду.

Альтернативы

  • Один вызов LLM

    Одного запроса с хорошим контекстом достаточно для классификации, извлечения и суммаризации — начинайте с него.

  • Фиксированный workflow (prompt chaining, routing)

    Ваш код выполняет шаги по порядку и вызывает модель для отдельных частей; предсказуемо и тестируемо.

  • Классическая автоматизация

    Скрипты, cron-задачи и rules engines, когда логика известна и детерминирована.

  • Хостинговые платформы агентов

    Управляемые сервисы агентов (включая Managed Agents от Anthropic) крутят цикл и sandbox за вас: меньше инфраструктуры ценой меньшего контроля.

Лучшие практики

  1. Начинайте с самого простого дизайна (один вызов или workflow) и переходите к агенту, только когда evals показывают пользу.
  2. Пишите описания tools как документацию, возвращайте компактные результаты и полезные сообщения об ошибках.
  3. Проверяйте авторизацию внутри tools по личности реального пользователя; никогда не доверяйте id, предложенным моделью.
  4. Задавайте бюджеты шагов, токенов и времени; при достижении лимита корректно останавливайтесь и сообщайте о прогрессе.
  5. Требуйте одобрения человека для необратимых или внешних действий; выполняйте код в sandbox.
  6. Дайте агенту способ проверить собственную работу (тесты, валидаторы) и скажите ему им пользоваться.
  7. Логируйте полные транскрипты и вызовы tools, а сбои превращайте в кейсы для оценки.

Частые ошибки

  • Строить сложную мультиагентную систему для задачи, с которой справился бы один промпт.
  • Выставлять десятки сырых API-эндпоинтов в виде tools с однострочными описаниями.
  • Класть API-ключи или пароли от базы в промпт или результаты tools.
  • Не ставить лимит шагов, из-за чего запутавшийся агент крутится и всю ночь сжигает бюджет.
  • Оценивать агентов по паре красивых демо вместо прогона набора задач с чёткими критериями успеха.

Глубже

07Context engineering для долгоиграющих агентов

Долгий запуск агента — это задача о бюджете контекста. Каждый шаг добавляет рассуждения модели, вызов tool и его результат; через несколько десятков шагов большая часть окна — это устаревшие логи. Приёмы, примерно в порядке применения: делайте выходы tools маленькими по дизайну (сводки, пагинация, id вместо целых объектов); удаляйте старые результаты tools, которые модели больше не нужны, сохраняя сам факт вызова (context editing); периодически сжимайте историю в сводку, с которой агент продолжает (compaction); храните долговременное состояние вне окна — файл прогресса, список задач, memory store, — чтобы свежий контекст мог продолжить работу; делегируйте исследование субагентам, которые возвращают сжатые выводы. Prompt caching взаимодействует со всем этим: для попаданий в кэш нужен стабильный префикс, поэтому дописывайте историю, а не переписывайте её, и редактируйте контекст через поддерживаемые механизмы API, а не изменением ранних сообщений, — на текущих моделях это ещё и может инвалидировать сохранённые рассуждения модели.

08Prompt injection и «смертельная триада»

Исследователи безопасности описывают опасное для агентов сочетание: доступ к приватным данным, контакт с недоверенным контентом и возможность отправлять данные наружу (email-tool, HTTP-запрос, даже рендеринг URL картинки). При наличии всех трёх вредоносная веб-страница или документ могут велеть агенту прочитать секреты и вывести их наружу. Поскольку ни одна модель не защищена от injection полностью, разрушайте это сочетание структурно. Где можно, уберите одну «ногу»: никакой исходящей сети в sandbox или никакого доступа к приватным данным во время браузинга. Применяйте allow-list для доменов и получателей. Требуйте подтверждения для любого действия, отправляющего данные вовне. Держите учётные данные в слое tools, чтобы модель их никогда не видела, и используйте токены, ограниченные конкретным пользователем, чтобы ущерб не превышал того, что мог бы сделать этот пользователь. Логируйте и алертьте необычные последовательности вызовов tools и проводите red-teaming агента документами с инъекциями в рамках eval-набора.

09Создание MCP-сервера

MCP-сервер — это небольшая программа, которая объявляет tools со входами в виде JSON Schema и обрабатывает вызовы. Официальные SDK есть для TypeScript, Python и других языков. Локальные серверы общаются через stdio и наследуют права пользователя на машине; удалённые используют Streamable HTTP и должны реализовывать OAuth, чтобы каждый пользователь выдавал ограниченный доступ. Проектируйте tools для агентов, а не ради полноты API: мало tools, понятные описания, компактные результаты. Валидируйте каждый вход и проверяйте авторизацию на стороне сервера. Версионируйте сервер и документируйте breaking changes, потому что агенты зависят от имён и формы tools. Перед разработкой сверьтесь с актуальной спецификацией MCP и документацией SDK — протокол развивается.

ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
 
const server = new McpServer({ name: "tickets", version: "1.0.0" });
 
server.registerTool(
  "get_ticket",
  {
    description: "Fetch one support ticket by id, including status and last 5 messages.",
    inputSchema: { id: z.string().describe("Ticket id, e.g. T-1042") },
  },
  async ({ id }) => {
    const t = await fetchTicket(id); // your API, your auth
    return { content: [{ type: "text", text: JSON.stringify(t) }] };
  },
);
 
await server.connect(new StdioServerTransport());

10Инженерия стоимости и надёжности

Стоимость агента — это токены на шаг, умноженные на шаги на задачу, и оба множителя тихо растут. Измеряйте стоимость и успешность на выполненную задачу, а не на запрос. Рычаги: prompt caching на стабильном префиксе (system prompt и tools), что очень важно, потому что каждый шаг заново отправляет историю; более низкий effort или модель поменьше для субагентов и простых шагов; меньше, но лучше tools, чтобы агенту требовалось меньше вызовов; бюджеты задач, которые позволяют модели самой распределять темп, а не обрываться посреди шага. Для надёжности делайте tools идемпотентными, а ретраи — безопасными, сохраняйте чекпоинты прогресса, чтобы упавший запуск можно было продолжить, задавайте лимиты по реальному времени и обрабатывайте «неудачные» stop reasons (max_tokens, refusal, лимит шагов) с понятным итогом, а не молчанием. Длинные задачи запускайте как фоновые джобы с обновлениями статуса, а не внутри HTTP-запроса.

Реальные ситуации

01

Внутренний ops-агент для триажа в поддержке

Проблема

Поддержка хочет ассистента, который читает новый тикет, проверяет последние заказы и логи клиента и предлагает решение. Он никогда не должен сам оформлять возвраты.

Как решить

Начните с workflow: классифицируйте тикет, затем запустите агентный шаг расследования с тремя tools только на чтение — get_ticket, search_orders (по проверенному customer id из тикета), get_recent_errors. Tools применяют права оператора поддержки и возвращают компактные сводки. Агент выдаёт структурированное предложение (диагноз, id доказательств, предлагаемое действие). Tool «propose_refund» лишь создаёт черновик, который человек одобряет в админке. Задайте лимит в 15 шагов и бюджет токенов, логируйте транскрипты и перед раскаткой соберите eval-набор из 50 прошлых тикетов с известными решениями.

02

Агент зацикливается и сжигает бюджет

Проблема

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

Как решить

Почитайте транскрипты. Обычно критерии успеха размыты, а результаты шумные. Перепишите system prompt с конкретным результатом и правилом остановки («когда у тебя есть три независимых источника, пиши ответ»). Пусть search-tool возвращает меньше результатов, без дублей и со сниппетами. Добавьте лимит шагов и бюджет токенов; при их достижении обвязка просит у модели лучшую возможную сводку, а не падает молча. Делегируйте глубокое чтение субагентам, которые возвращают краткие выводы. Добавьте такие «убегающие» задачи в eval-набор и отслеживайте число шагов на задачу.

03

Подключение кодинг-агента к инструментам компании

Проблема

Разработчики хотят, чтобы их кодинг-агент читал тикеты и делал запросы к staging-базе. Безопасность беспокоится об учётных данных и утечках.

Как решить

Сделайте два небольших MCP-сервера: сервер тикетов, использующий OAuth-токен каждого разработчика со scope только на чтение, и сервер базы, который подключается под read-only ролью и только к staging, выполняет параметризованные запросы с лимитом строк и блокирует DDL. Учётные данные живут в окружении MCP-сервера или в secret manager, никогда в промптах. Зафиксируйте версии серверов в общем конфиге проекта, задокументируйте, к чему у каждого tool есть доступ, и логируйте запросы. Продакшен-данные остаются полностью недоступны; если понадобятся позже, для них будет отдельный проверенный сервер с маскированием.

Шпаргалка

Условие основного цикла
while (res.stop_reason === "tool_use") { run tools; send tool_result }
Вернуть модели ошибку tool
{ type: "tool_result", tool_use_id, content: msg, is_error: true }
Параллельные вызовы tools
Возвращайте все блоки tool_result в одном user-сообщении
Установить TypeScript MCP SDK
npm install @modelcontextprotocol/sdk zod
Добавить MCP-сервер в Claude Code
claude mcp add tickets -- node ./mcp/tickets-server.js
Установить Claude Agent SDK (TS)
npm install @anthropic-ai/claude-agent-sdk
Безопасные бюджеты по умолчанию
max steps ≈ 20, бюджет токенов на задачу, таймаут по реальному времени
Уровни прав
read → разрешить; write → подтверждение/sandbox; необратимое → одобрение человека
Метрика успеха
доля успешных задач плюс стоимость, шаги и время на выполненную задачу

Вопросы и ответы

Q1Чем workflow отличается от агента?

В workflow шаги определяет ваш код: например, классифицировать тикет, затем выбрать шаблон, затем набросать ответ — LLM заполняет каждый шаг, но путь фиксирован. В агенте путь выбирает модель: она решает, какой tool вызвать дальше, исходя из полученных результатов, и сколько шагов сделать. Workflow предсказуемы, дешевле и проще в тестировании; агенты гибкие и справляются с задачами, которые невозможно полностью описать заранее. Многие продакшен-системы — это workflow с одним агентным шагом там, где гибкость действительно нужна.

Q2Что такое MCP и почему это важно?

Model Context Protocol — открытый стандарт для подключения AI-приложений к внешним tools и данным. MCP-сервер предоставляет tools, resources и prompts в стандартном формате, и любой MCP-совместимый клиент может его использовать. До MCP каждому агентному фреймворку нужна была собственная интеграция с каждой системой; теперь вы делаете один сервер, скажем, для своей тикет-системы и переиспользуете его в кодинг-агентах, чат-приложениях и IDE. Он также стандартизирует удалённую авторизацию через OAuth. Обратная сторона: установка MCP-сервера даёт агенту реальные возможности, поэтому он требует такой же проверки, как любая зависимость.

Q3Как не дать агенту сделать что-то опасное?

Проектируйте на сдерживание, а не на доверие. Давайте агенту только те tools, которые нужны задаче, с учётными данными, ограниченными действующим пользователем. Проверяйте авторизацию внутри каждого tool. Разделите tools по риску: чтение выполняется автоматически, запись уходит в sandbox или требует подтверждения, необратимые действия требуют одобрения человека. Запускайте код в изолированных контейнерах без секретов и с ограниченной сетью. Ставьте бюджеты на шаги, токены и время. Считайте, что всё, что читает агент, — веб-страницы, файлы, письма — может содержать prompt injection. И логируйте каждое действие, чтобы можно было провести аудит и откатить изменения.

Q4Почему агенты чаще всего ломаются?

Разбор реальных транскриптов обычно указывает на одни и те же причины: непонятные или пересекающиеся tools, из-за чего модель выбирает не тот; слишком большие или шумные результаты tools, которые забивают контекст; недостающая информация в инструкциях — например, что значит «готово» или как проверить результат; отсутствие обратной связи, из-за чего ошибки никто не замечает; и контекст, разросшийся настолько, что ранние инструкции фактически забываются. Исправления в основном инженерные: лучшие описания и выходы tools, явные критерии успеха, шаги проверки, управление контекстом и наборы для оценки, которые ловят регрессии.

Q5Как оценивать агента?

Набором реалистичных задач, у каждой из которых есть понятная, в идеале автоматическая проверка успеха: тесты проходят, изменилась нужная запись, ответ совпадает. Запускайте каждую задачу несколько раз, потому что агенты недетерминированы, и отслеживайте долю успехов, стоимость, число шагов и время на задачу. Проверяйте также путь, а не только результат: запрещённые вызовы tools, лишние записи или проигнорированные инструкции — это провалы, даже если итог выглядит правильно. Открытые ответы оценивайте по рубрике, откалиброванной по человеческим оценкам. Прогоняйте набор при каждом изменении промптов, tools или моделей.

Q6Когда использовать несколько агентов вместо одного?

Когда работа естественно делится на части, которые перегрузили бы один контекст: исследование многих источников, ревью многих файлов или независимые подзадачи, которые можно выполнять параллельно. Ведущий агент делегирует субагентам, у каждого из которых свежий контекст и узкое задание, и получает обратно краткие сводки. Это сохраняет контекст ведущего чистым и может ускорить работу. Цена реальна: больше токенов в сумме, накладные расходы на координацию и более сложная отладка. Для последовательных задач с большим общим контекстом обычно лучше один хорошо оснащённый агент.

Вопросы уровня senior

S1Как бы вы спроектировали платформу агентов для компании со множеством команд?

Я бы выделил три слоя. Общий слой tools: MCP-серверы для каждой системы (тикеты, CRM, хранилище данных), каждым владеет команда этой системы, с OAuth или учётными данными, ограниченными пользователем, и централизованным логированием. Слой обвязки: один-два поддерживаемых варианта — SDK для команд, встраивающих агентов в продукты, и хостинговый или внутренний раннер для фоновых агентов — со стандартными бюджетами, sandbox, процессами одобрения и хранением транскриптов. Слой управления: allow-list серверов, правила классификации данных (какие tools могут сочетать приватные данные с исходящими действиями), требования к оценке перед продакшеном и дашборды затрат по командам. Компромисс — скорость против контроля: слишком много центральных процессов — и команды строят теневых агентов; слишком мало — и вы получаете утёкшие ключи и неограниченные расходы. Я бы сделал безопасный путь самым простым, а не полагался только на ревью.

S2Один агент со множеством tools или несколько специализированных агентов — какие компромиссы?

Один агент держит весь контекст в одном месте, что идеально, когда шаги зависят друг от друга, — например, изменение кода, затрагивающее связанные файлы. Его пределы — размер контекста и перегрузка tools: после нескольких десятков tools качество выбора падает, что может смягчить tool search. Несколько агентов помогают, когда работа параллельная или требует много чтения: субагенты исследуют в чистых контекстах и возвращают сжатые результаты, так что ведущий видит только важное, а общее время сокращается. Цена: больше токенов в сумме, потеря информации при передаче и более сложная отладка, поскольку сбои прячутся в заданиях и сводках. Моё правило: начинать с одного агента; добавлять субагентов для явно отделимых подзадач с большим объёмом чтения; избегать замысловатых ролевых иерархий, пока оценка не докажет их пользу.

S3Как сделать поведение агента достаточно воспроизводимым для отладки и аудита?

Полная воспроизводимость при сэмплировании невозможна, но можно подойти достаточно близко. Храните полный транскрипт каждого запуска: id модели, настройки effort, версию system prompt, версию определений tools, каждый вход и выход tool и временные метки. Где можно, делайте tools детерминированными и записывайте внешние ответы, чтобы запуск можно было воспроизвести на записанных результатах. Версионируйте промпты и tools как код и привязывайте каждый запуск к коммиту. Прогоняйте задачи оценки по несколько раз и сообщайте долю успехов, а не единичные исходы. Для аудита логируйте, от чьего имени выполнялся каждый вызов tool, и каждое решение об одобрении. Компромисс — хранение и приватность: транскрипты содержат чувствительные данные, поэтому применяйте сроки хранения, контроль доступа и редактирование так же, как для логов приложения.

Глоссарий

Agent (агент)
LLM, которая в цикле выбирает и вызывает tools, пока не достигнет цели.
Harness (обвязка)
Код вокруг модели, который крутит цикл, выполняет tools, управляет контекстом и применяет ограничения.
Tool
Функция, которую модель может запросить; описывается именем, описанием и схемой входных данных.
MCP
Model Context Protocol — открытый стандарт для предоставления tools и данных AI-приложениям.
Subagent (субагент)
Отдельный запуск агента со своим свежим контекстом, которому ведущий агент даёт узкую задачу.
Compaction
Суммаризация ранней части диалога, чтобы долгоиграющий агент мог продолжать в пределах context window.
Human-in-the-loop
Подход, при котором человек одобряет или правит определённые действия агента до того, как они вступят в силу.
Sandbox
Изолированная среда, где код агента выполняется без секретов и без доступа к продакшен-системам.
Indirect prompt injection
Вредоносные инструкции, спрятанные в контенте, который читает агент: веб-страницах, файлах или письмах.

Есть идея продукта?Давайте создадим его.

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