Один шаг цикла агента
Языковая модель умеет ровно одно: читать текст и писать текст. Она не может открыть вашу базу, отправить письмо или оформить возврат. Но агент всё это делает. В этом блоке разберём как, шаг за шагом.
Ваша команда в Northwind Goods делает агента поддержки. Покупатель пишет: «Заказ 4417 пришёл разбитым, верните деньги».
Представьте коллегу на телефоне
Представьте умного коллегу, который может общаться с вами только по телефону. До вашего компьютера он дотянуться не может. Поэтому он говорит: «Найди, пожалуйста, заказ 4417 и прочитай, что там». Вы находите, читаете вслух, и он говорит, что делать дальше.
Модель работает так же. Руки здесь вы. В агенте «вы» — это программа, которую вы пишете вокруг модели.
Один шаг, не торопясь
Вы отправляете сообщение покупателя и список инструментов, которые модель может запросить.
Модель отвечает запросом. Пока ничего не произошло, это всего лишь текст в условленном формате:
{
"type": "tool_use",
"id": "toolu_01",
"name": "lookup_order",
"input": {
"order_id": "4417"
}
}Ваш код читает запрос и решает, разрешить ли его. Если да, выполняет настоящий запрос к базе.
Ваш код дописывает ответ модели и результат в переписку и снова отправляет всё модели.
Модель читает результат и либо просит следующий инструмент, либо пишет окончательный ответ. Когда в ответе больше нет запросов к инструментам, цикл заканчивается.
Tool call — это просьба, а не действие. То, что ваш код не проверит перед запуском, не проверит никто.
Есть исключение: инструменты, которые выполняет сам провайдер, например встроенный веб-поиск Anthropic. Они работают на его серверах. Всё, что касается ваших систем, работает в вашем коде.
Пройдите один прогон сами:
Один прогон по шагам
История, которая уйдёт в следующий запрос
- user: Подскажи погоду в Осло
Ваш код отправляет модели переписку.
Почему вся переписка уходит каждый раз
Вернёмся к телефону. Этот коллега забывает весь разговор, как только вы кладёте трубку. Поэтому, перезванивая, вы сначала зачитываете всё сказанное раньше.
По умолчанию так устроены Anthropic Messages API и OpenAI Chat Completions. Каждый запрос самостоятелен, и ваш код каждый раз отправляет всю историю. На втором вызове модель знает о разбитом заказе только потому, что вы прислали его снова.
У этого есть цена. За входные токены вы платите заново при каждом вызове, так что длинные прогоны дорожают быстрее, чем растут. К этому вернёмся в отдельном блоке. Responses API от OpenAI умеет хранить историю за вас через previous_response_id, но сохранённые реплики всё равно оплачиваются как входные токены.
Вывод
- Модель пишет запросы. Работу делает ваш код.
- Один шаг: отправить, прочитать запрос, проверить, выполнить, дописать результат, отправить снова.
- Между вызовами модель ничего не помнит, поэтому с каждым вызовом уходит вся история.