Что такое AI Agent? Полный гид 2026: принцип работы, Tool Calling, Function Calling и JSON
В 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. Изменилось то, что каждый хоп типизирован, а не «модель упомянула возврат».
- Observe: сообщение пользователя, последний результат инструмента и текущее JSON-состояние в контекст.
- Plan: модель отвечает, вызывает инструмент или передаёт объект другому агенту.
- Act: хост выполняет
tool_callsили переключает агента по handoff JSON. - 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 несёт пять видов объектов:
- Определения инструментов:
tools[]или MCPinputSchema. - Намерение вызова: имя функции + аргументы в
tool_calls. - Результаты инструментов: объекты запросов, записей и внешних API. Этот слой чаще всего отсутствует.
- Handoff агента: намерение, уверенность, куда вести. Agents SDK маршрутизирует по этому объекту, а не по слову «billing».
- Состояние workflow и оценки: checkpoint, trace, eval fixture. Длинные задачи продолжаются с JSON, а не угадывают прогресс по логу чата.
JSON Schema — диаметр этих объектов. Без него Function Calling, MCP и A2A разъезжаются в «похожие» копии. Почему AI-агентам теперь нужен JSON Schema превратил Schema из документации в гейт рантайма; синтаксис — в учебник JSON Schema.
Один полный JSON-конвейер
Возьмём «найти заказ → вернуть деньги». Консервативная проверяемая цепочка 2026:
- Хост внедряет Schema для
lookup_order/create_refundвtools[]и включаетstrict: true. - Модель возвращает
tool_calls;argumentsвсё ещё строка. - Хост делает
JSON.parseи проверяет той же Schema; при ошибке обрывает цепочку и не трогает биллинг. - Реальный запрос выполняется и даёт объект заказа.
- Ответ уходит как
role: tool— лучше schema-валидный JSON, а не абзац. - Модель вызывает следующий инструмент или отдаёт Structured Output пользователю / нижестоящему агенту.
- Смена агента — через объект 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. Модели сменятся, протоколы размножатся. Сначала стабилизируйте диаметр.
Дальше по теме
- Почему AI-агентам теперь нужен JSON Schema От Tool Calling к структурированным workflow
- MCP Tool Schema vs Function Calling Граница протокола для JSON инструментов
- A2A Extensions и JSON-протокол Третий слой интеропа нескольких агентов
- Ключевые прогнозы OpenAI DevDay 2026 Как три слоя становятся одной JSON-трубой
- Локальный ящик JSONSort Формат, проверка, Diff
- Все статьи Ещё заметки по JSON и AI-разработке
Журнал: первая публикация