Tool Use в 2026: как модели вызывают custom tools, built-in tools и MCP-инструменты в OpenAI, Anthropic и Google API.
Tool use в 2026 уже нельзя описывать просто как "модель вернула JSON с именем функции". Это всё ещё базовый primitive, но поверх него выросли три разных слоя:
custom tools, которые вы исполняете в своём коде;
built-in tools, которые исполняет сам провайдер;
MCP tools, которые приходят из внешнего tool ecosystem.
Именно поэтому current статья про tool use должна объяснять не только function calling, но и разницу между tool selection, tool execution и tool governance.
Модель сама не "нажимает кнопку" и не "ходит в интернет" магическим образом. Она выбирает действие и формирует структурированный запрос. Дальше либо ваш код исполняет этот запрос, либо это делает provider-side built-in tool, либо действие уходит в MCP-сервер.
Не смешивайте tool use и structured output. JSON-ответ модели и вызов инструмента выглядят похоже, но это разные вещи. В одном случае вы хотите получить финальные данные в схеме. В другом случае вы хотите, чтобы модель инициировала действие или достала внешнюю информацию.
Tool use нужен, когда модели мало собственных весов и текста в контексте. Тогда она:
понимает, что нужен внешний action или данные;
выбирает нужный tool;
формирует аргументы;
получает результат;
продолжает reasoning или выдаёт финальный ответ.
В 2026 полезно различать три класса tools:
Custom tools: ваши функции, API, базы данных, backend actions.
Built-in tools: web search, computer use, code execution и другие provider-side tools.
MCP tools: инструменты из стандартизированной MCP-среды.
Практически это значит:
tool use больше не ограничивается парой функций get_weather() и calculator();
orchestration вокруг tools стала важнее самих schema;
качество системы теперь зависит не только от prompt, но и от contract design, permissions и stop conditions.
ПромптTool use explainer
Чем custom tool отличается от built-in tool?
Ответ модели
Custom tool вы описываете и исполняете сами. Built-in tool поставляет сам провайдер API и исполняет его инфраструктура. Для модели оба выглядят как инструменты, но ownership и safety model у них разные.
Старая рамка
Tool use = модель вернула JSON с названием функции, ваш код всё исполнил.
Актуальная рамка 2026
Tool use = слой orchestration, где модель выбирает между custom tools, built-in tools и MCP tools, а система управляет execution, validation, approvals и continuation loop.
модель только формирует текст или structured result;
tool selection не делегируется LLM.
Если система уже знает, что надо вызвать get_order_status(order_id), не заставляйте модель "догадываться" об этом через tool choice. Tool use нужен там, где выбор действительно полезно отдать модели.
name: search_incidents
description: Search incident records by service name, incident id, or keyword. Use when the user asks about outages, postmortems, or ongoing incidents.
params:
query: string
limit: integer
only_open: boolean
from openai import OpenAI
client = OpenAI()
tools = [
{
"type": "function",
"function": {
"name": "get_order_status",
"description": "Return current order status by order id.",
"parameters": {
"type": "object",
"properties": {
"order_id": {"type": "string"},
},
"required": ["order_id"],
"additionalProperties": False,
},
},
}
]
response = client.responses.create(
model="gpt-5.2",
input="Check order A-44319",
tools=tools,
)
Current practical point здесь не в синтаксисе, а в том, что tool use в OpenAI лучше мыслить через current Responses API, а не через старый tutorial-only chat.completions baseline.
Destructive tools защищены approvals или permissions.
Loop знает, когда остановиться и когда эскалировать failure.
ПромптTooling review
У нас 30 внутренних API. Что сломается первым?
Ответ модели
Обычно не сама модель, а tool surface: overlapping descriptions, слишком широкий доступ, слабые schema и noisy outputs. Сначала сужают набор tools и делают contracts различимыми.