AI-разработка

Что такое AI Agent? Полный гид 2026: принцип работы, Tool Calling, Function Calling и JSON

Около 16 мин

В 2026 почти каждая продуктовая страница пишет «Agent». Чаще всего в одно слово схлопывают чат-бот, модель, которая умеет вызывать функции, и рантайм, который доводит многошаговый workflow. Начнём с определения: что такое AI Agent, как крутится цикл, чем Tool Calling отличается от Function Calling и почему каждый слой садится на JSON. После чтения вы должны нарисовать отлаживаемую цепочку вызовов — а не более длинный prompt.

Кратко заранее

Понятие Одной фразой Куда садится JSON
AI Agent Рантайм, который планирует, вызывает инструменты и передаёт результат дальше Состояние workflow / handoff
Tool Calling Общее имя: модель хочет внешнюю способность tool_calls
Function Calling Реализация во vendor API tools[] / arguments
JSON Единственный стабильный и проверяемый объект между шагами Schema / payload

Держите слои: Agent — рантайм, Tool Calling — способность, Function Calling — кадр API, JSON — общий контракт.

Что такое AI Agent?

AI Agent — это не «модель, которая лучше болтает». Модель только генерирует текст (или структурированный объект). Агент — рантайм, который сажает модель в цикл: наблюдать состояние, планировать следующий шаг, вызвать внешний инструмент, переварить результат, затем продолжить, передать или остановиться.

Продакшен-агент 2026 обычно состоит из трёх частей:

  • Модель: рассуждение, выбор инструмента, Structured Outputs.
  • Хост: разобрать намерение вызова, выполнить реальный API / БД / файл, вернуть результат, отсечь нелегальный JSON.
  • Контракт: параметры инструментов, ответы, объекты handoff, состояние workflow — почти всё JSON.

Без хоста модель умеет только «советовать». Без контракта многошаговый поток принимает полуверный объект за факт. Граница продукта — у хоста, не на карточке модели.

Чем это отличается от чат-бота и обычной LLM?

Три ярлыка клеят на одну функцию. В проде их надо развести:

  • Обычная LLM: текст на вход, текст на выход. Нет инструментов и межшагового состояния.
  • Чат-бот: LLM, подключённая к диалоговому UI. Вывод для человека; при ошибке пользователь повторяет.
  • AI Agent: вывод исполняет программа. Результаты инструментов, маршрутизация и оценки — объекты, не проза.

Простой критерий: если следующий шаг должен выполнить код, а не человек, нужен агент, а не умный диалог. Исполнение у хоста; модель только предлагает намерение вызова.

Как AI Agent работает в 2026?

Цикл всё тот же: observe → plan → act → observe. Изменилось то, что каждый хоп типизирован, а не «модель упомянула возврат».

  1. Observe: сообщение пользователя, последний результат инструмента и текущее JSON-состояние в контекст.
  2. Plan: модель отвечает, вызывает инструмент или передаёт объект другому агенту.
  3. Act: хост выполняет tool_calls или переключает агента по handoff JSON.
  4. Observe again: результаты возвращаются как role: tool; объект состояния обновляется до следующего хода.

Хост делает четыре вещи, которые модель за вас не сделает: внедрить tools[], ещё раз разобрать arguments, проверить Schema и оборвать цепочку при ошибке — а не «попробовать более длинный prompt».

Прод-стек уже сошёлся. Assistants API отключили 26 августа 2026; новый код идёт через Responses API + Agents SDK. прогнозы DevDay 2026 описывает тот же тренд тремя слоями: Structured Outputs формирует объект, Function Calling выражает вызов, рантайм агента оркестрирует оба.

Не просите историю чата «помнить» прогресс. Пишите текущий шаг восстанавливаемым JSON:

{
  "step": 2,
  "agent": "billing",
  "last_tool": "lookup_order",
  "state": {
    "order_id": "A-1042",
    "status": "paid",
    "amount": 99.00
  },
  "next": "create_refund"
}

Сначала локально форматируйте и проверяйте синтаксис, затем JSON Diff с определением прошлой недели. Ответы инструментов с пользовательскими данными или секретами не вставляйте на публичный JSON-сайт.

Что такое Tool Calling?

Tool Calling — имя уровня способности: в нужный момент модель выдаёт машиночитаемое «мне нужна внешняя способность», а не притворяется прозой, что уже сходила в базу. Оно не привязано к полям одного вендора.

В 2026 как минимум три реализации зовут Tool Calling: Function Calling в OpenAI-совместимых API, Tool Use вендоров (Anthropic и другие) и MCP с tools/list + tools/call. MCP Tool Schema vs Function Calling провёл границу: MCP поставляет инструменты между хостами; кадр API даёт модели выразить намерение этого хопа.

Для разработчика Tool Calling отвечает на «может ли модель протянуть руку?». Не на «кто после этого проверит параметры и результат?». Это Schema и хост.

Что такое Function Calling?

Function Calling (в документации OpenAI теперь чаще tools) — конкретная форма Tool Calling внутри vendor Chat / Responses API. Вы внедряете определения функций; если модель решает вызвать, в ответе появляются tool_calls.

Типичное определение в стиле OpenAI выглядит так. parameters уже является подмножеством JSON Schema:

{
  "type": "function",
  "function": {
    "name": "lookup_order",
    "description": "Look up an order by ID",
    "parameters": {
      "type": "object",
      "properties": {
        "order_id": {
          "type": "string",
          "description": "Order ID, e.g. A-1042"
        }
      },
      "required": ["order_id"],
      "additionalProperties": false
    }
  }
}

Намерение вызова обычно приходит так:

{
  "tool_calls": [{
    "id": "call_3c91",
    "type": "function",
    "function": {
      "name": "lookup_order",
      "arguments": "{\"order_id\":\"A-1042\"}"
    }
  }]
}

arguments по-прежнему строковый JSON. Хост обязан ещё раз сделать JSON.parse и проверить order_id по Schema. Пропуск этого шага — самый частый прод-инцидент 2026. Когда вложенность ломается, сначала форматируйте и проверяйте синтаксис, чтобы увидеть скобки и экранирование.

Как отличить Tool Calling от Function Calling и как их сложить?

Это не конкурирующие продукты, а разные слои:

  • Tool Calling: идея. Любое «модель выдала намерение, хост исполнил» подходит.
  • Function Calling: кадр API. Поля: tools[], tool_calls, role: tool.
  • MCP Tool Schema: протокол поставки. Поле: inputSchema, уходит по stdio / SSE на MCP Server.

Правильная стопка: одна Schema в репозитории, экспорт в parameters Function Calling и inputSchema MCP. Не держите третье «почти такое же» описание параметров прозой в prompt. Подробности в MCP Tool Schema vs Function Calling и Почему AI-агентам теперь нужен JSON Schema.

Почему агент 2026 всё равно садится на JSON?

Естественный язык — для разговора с пользователем. Каждый хоп между машинами должен проверяться, сравниваться Diff и воспроизводиться. JSON несёт пять видов объектов:

  1. Определения инструментов: tools[] или MCP inputSchema.
  2. Намерение вызова: имя функции + аргументы в tool_calls.
  3. Результаты инструментов: объекты запросов, записей и внешних API. Этот слой чаще всего отсутствует.
  4. Handoff агента: намерение, уверенность, куда вести. Agents SDK маршрутизирует по этому объекту, а не по слову «billing».
  5. Состояние workflow и оценки: checkpoint, trace, eval fixture. Длинные задачи продолжаются с JSON, а не угадывают прогресс по логу чата.

JSON Schema — диаметр этих объектов. Без него Function Calling, MCP и A2A разъезжаются в «похожие» копии. Почему AI-агентам теперь нужен JSON Schema превратил Schema из документации в гейт рантайма; синтаксис — в учебник JSON Schema.

Один полный JSON-конвейер

Возьмём «найти заказ → вернуть деньги». Консервативная проверяемая цепочка 2026:

  1. Хост внедряет Schema для lookup_order / create_refund в tools[] и включает strict: true.
  2. Модель возвращает tool_calls; arguments всё ещё строка.
  3. Хост делает JSON.parse и проверяет той же Schema; при ошибке обрывает цепочку и не трогает биллинг.
  4. Реальный запрос выполняется и даёт объект заказа.
  5. Ответ уходит как role: tool — лучше schema-валидный JSON, а не абзац.
  6. Модель вызывает следующий инструмент или отдаёт Structured Output пользователю / нижестоящему агенту.
  7. Смена агента — через объект handoff, а не фразу «спросите billing».

Объект handoff должен оставаться таким стабильным:

{
  "handoff": {
    "from": "triage",
    "to": "billing_agent",
    "intent": "refund",
    "order_id": "A-1042",
    "confidence": 0.91
  }
}

Когда нескольким агентам нужно найти друг друга, A2A Extensions кладёт способности в Agent Card и договаривается заголовками расширений. Это не заменяет конвейер выше, а только развозит задачи между агентами.

Что выбирать в 2026?

  • Одно приложение, замкнутый внутренний контур, меньше десяти инструментов: Function Calling достаточно. Сначала Schema и strict: true в CI.
  • IDE / платформа / подключаемые сторонние инструменты: MCP поставляет, слой API по-прежнему выражает этот хоп через Function Calling.
  • Разнородные агенты должны находить друг друга и согласовывать расширения: добавьте A2A, не изобретайте ещё один частный конверт.
  • На любом пути: параметры, результаты и handoff сначала пишите JSON Schema, затем экспортируйте адаптеры.

Не ждите кейнота, который «унифицирует протокол». Стабильный ход 2026 — слои, а не ставка на одного победителя.

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

  • Считать агента разговорчивым ChatGPT. Диалог годится для демо; проду нужна восстанавливаемая машина состояний.
  • Считать Tool Calling и Function Calling конкурентами. Одно — идея, другое — кадр API. MCP — третий слой поставки.
  • Не проверять arguments. Строковый JSON, числа-строки и лишние поля в биллинге случаются на этом хопе.
  • Свободный текст как результат инструмента. Следующий хоп примет «вроде успешно» за статус заказа.
  • Пятьдесят инструментов в одном запросе. Большие схемы дороги и повышают ложный выбор. После десяти — маршрутизация или поиск.

FAQ

Агенту обязательно нужен Function Calling?

Нет. Function Calling — самый частый кадр API, но MCP Tool Use и vendor Tool Use тоже Tool Calling. Важно исполнение хостом и проверка Schema, а не имя поля tools или inputSchema.

Tool Calling — просто новое имя Function Calling?

Некоторые документы смешивают оба. Чище так: Tool Calling — зонтик, Function Calling — форма tools / tool_calls, совместимая с OpenAI. Нарисуйте два блока — споры почти исчезнут.

Хватит ли JSON mode без Schema?

JSON mode гарантирует только «похоже на JSON», не легальность полей, типов и enum. Structured Outputs 2026 фиксируют диаметр через json_schema + strict. В многошаговом агенте JSON mode не проходит eval-набор.

Ждать ли DevDay 2026?

Нет. 29 сентября может углубить Structured Outputs и планы вызовов. «Сначала Schema» не изменится. Сейчас положите инструменты и handoff в git; после кейнота поменяются только адаптеры.

Как отлаживать JSON инструментов и handoff?

Отформатируйте в браузере, найдите пропущенный required, затем Diff с предыдущей версией. JSONSort работает локально и ничего не загружает. Не вставляйте секретные ответы инструментов на публичный сайт.

Вывод

AI Agent — это рантайм с инструментами и состоянием, а не модель, которая лучше говорит. Tool Calling даёт ему руку, Function Calling — самый частый API-контур этой руки, JSON — объект, который должен совпасть на каждом хопе.

Начните сегодня с schemas/tools/lookup_order.json, а не с более длинного prompt. Модели сменятся, протоколы размножатся. Сначала стабилизируйте диаметр.

Дальше по теме

Журнал: первая публикация