Инструменты - это очень нужная агенту вещь. По факту - это произвольные куски кода, которые LLM может запускать по своему усмотрению
С точки зрения модели,
Tool - это просто JSON (снова), котороый мы подложили в контекстВыглядит он следующим образом:
{
"name": "get_weekday",
"description": "Call this tool each time you want to know current weekday",
"arguments": JSONSchema
}
• Название инструмента - это уникальный айдишник, по которому модель будет его вызывать.
• Описание - наша попытка объяснить модели, для чего этот инструмент нужен и когда его стоит дергать
• Аргументы - это JSONSchema с описанием того, как вообще вызывать этот инструмент. Мы просто надеемся, что модель сможет отдать нужный JSON
Теперь, если мы спросим модель о текущем дне недели, последовательность запросов будет выглядеть примерно следующим образом:
User -- {
"role": "user",
"content": "Привет, чем займемся сегодня?"
} --> LLM
LLM -- {
"role": "assistant",
"tool_calls": [{
"call_id": "...",
"name": "get_weekday",
"arguments": "{}" // JSON string
}]
} --> Agentic Framework
LLM <-- {
"role": "tool",
"content": "Friday"
} -- Agentic Framework
User <-- {
"role": "assistant",
"content": "Friday! It's the time to drink beer!"
} -- LLM
И контекст выполнения будет выглядеть следующим образом:
| assistant |
| tool result |
| tool call |
| user |
| tools definitions |
| system |
С точки зрения кода, инструмент - это просто функция
from autogen.beta import Agent, config
agent = Agent("my-lovely-agent", config=config.OpenAIConfig("gpt-5"))
@agent.tool
def get_weekday() -> str:
return "Friday" # всегда пятница, всегда пьем пиво
С тем, чтобы распарсить название, описание, аргументы и подложить их в контекст, фреймворки справляются как-то сами. Чтобы вызвать и отдать результат выполнения в модель - тоже.
Основная проблема инструментов в том, что их может быть МНОГО. Если ваш контекст на 95% состоит из описания инструментов и пользовательский запрос просто теряется на их фоне - не удивляйтесь, если модель творит дичь. О способах борьбы с этим мы поговорим чуть позже. Пока - просто старайтесь не включать инструменты, которые вам не нужны
К слову об MCP (я уже писал пост про них) - это те же инструменты, только раздаются по HTTP / сокету. С точки зрения модели и контекста - это то же самое
Собственно, на этом все. Контекст + Инструменты - это два кита, на которых плывут агенты. Все остальное реализовано поверх них.
#Agents #MCP