Протоколы инструментов: function calling и MCP
В разделе 2 мы парсили текст вручную. В продакшне вызов инструментов стандартизируют — это надёжнее. Разбираем function calling и MCP.
Function calling — встроенная возможность модели возвращать не текст, а структурированный запрос на вызов инструмента. MCP — протокол, стандартизирующий подключение внешних инструментов к агентам.
Проблема «ручного» парсинга
В разделе 3 модель писала Action: calc[2+2], а мы разбирали это регулярками. Это хрупко: модель отклоняется от формата, парсер ломается. Хочется, чтобы модель сразу выдавала структуру, а не текст, который надо угадывать.
Function calling
Современные модели умеют это нативно. Вы передаёте им описания инструментов (имя + схема, как в уроке 2.2), а модель в ответ возвращает структурированный вызов: имя инструмента и аргументы — уже разобранные, без парсинга текста.
// модель возвращает структуру (не текст для парсинга):
{
"tool_calls": [
{
"name": "calc",
"arguments": { "expression": "2 + 2" }
}
]
}
// агент выполняет calc(expression="2 + 2") и возвращает результат
// следующим сообщением — петля та же, но без хрупкого парсера
Это убирает целый класс ошибок: не нужно регулярками вытаскивать имя и аргумент, модель выдаёт их явно и по схеме. Цикл агента остаётся прежним — меняется только способ получить «что вызвать».
MCP (Model Context Protocol)
Function calling решает «как модель просит инструмент». MCP решает другую задачу — как подключать инструменты к агентам стандартно. Без стандарта каждый инструмент интегрируют под конкретный фреймворк по-своему; это не переносимо.
MCP вводит общий протокол: инструмент (или источник данных) поднимается как MCP-сервер и описывает, что умеет; агент-клиент подключается и пользуется — независимо от фреймворка. По духу это как USB для инструментов: один разъём, к которому подходит много устройств.
// MCP-сервер объявляет инструмент (схематично):
{
"tools": [
{
"name": "search_docs",
"description": "Ищет по внутренней документации",
"inputSchema": { "type": "object",
"properties": { "query": { "type": "string" } } }
}
]
}
// любой MCP-клиент (агент) может подключиться и вызвать search_docs
Как это связано
| Что решает | Уровень | |
| Function calling | как модель просит вызвать инструмент | модель ↔ агент |
| MCP | как инструменты подключаются к агентам стандартно | агент ↔ инструменты |
Они дополняют друг друга: модель через function calling решает что вызвать, а MCP даёт стандартный способ подключить эти инструменты и переиспользовать их между разными агентами и фреймворками.
Зачем стандарты вообще
- Надёжность — структурированный вызов вместо хрупкого парсинга текста.
- Переносимость — один MCP-инструмент работает с разными агентами.
- Экосистема — общие протоколы позволяют делиться инструментами, а не писать каждый заново.
Итог
- Function calling: модель возвращает структурированный вызов инструмента вместо текста — без хрупкого парсинга.
- MCP стандартизирует подключение инструментов к агентам: сервер объявляет, клиент пользуется.
- Они на разных уровнях и дополняют друг друга: «что вызвать» (function calling) и «как подключить» (MCP).