К курсу

Цикл агента

Один шаг цикла агентаПрактика: один шаг циклаЦикл в кодеПрактика: цикл в кодеОстановка и повторыПрактика: остановка и повторыЧто решает только кодПрактика: что решает код

Надёжность в проде

Таймаут и ключ идемпотентностиПрактика: таймаут и ключ идемпотентностиСказал «готово», а ничего не произошлоПрактика: ложный успехУстойчивый агент: checkpoint и продолжениеПрактика: устойчивый агент

Устройство агентов

Workflow или агентПрактика: workflow или агентReAct и plan-and-executeПрактика: ReAct и plan-and-executePlan-and-SolveПрактика: Plan-and-SolveReflexionПрактика: ReflexionОдин агент или ройПрактика: один агент или рой

Контекст и стоимость

Почему растёт счёт за агентаПрактика: токены и кэшКонтекст-инженерияПрактика: управление окномПамять агентаПрактика: что агент хранит

Инструменты и протоколы

MCPПрактика: MCPОписания инструментов и инъекцииПрактика: описания инструментов и инъекцииКод вместо набора инструментовПрактика: код вместо набора инструментовНавыки агента и A2AПрактика: навыки агента и A2A

Фреймворки

LangGraph или обычный циклПрактика: LangGraph или обычный циклAgent SDK: что вы покупаетеПрактика: agent SDK

Агенты для кода

Агент для кода по спецификацииПрактика: агент для кода по спецификации
←→ENВойти
Агенты › Цикл агента

Один шаг цикла агента

Языковая модель умеет ровно одно: читать текст и писать текст. Она не может открыть вашу базу, отправить письмо или оформить возврат. Но агент всё это делает. В этом блоке разберём как, шаг за шагом.

Ваша команда в Northwind Goods делает агента поддержки. Покупатель пишет: «Заказ 4417 пришёл разбитым, верните деньги».

Представьте коллегу на телефоне

Представьте умного коллегу, который может общаться с вами только по телефону. До вашего компьютера он дотянуться не может. Поэтому он говорит: «Найди, пожалуйста, заказ 4417 и прочитай, что там». Вы находите, читаете вслух, и он говорит, что делать дальше.

Модель работает так же. Руки здесь вы. В агенте «вы» — это программа, которую вы пишете вокруг модели.

Модель только пишет. Всё, что затрагивает реальный мир, делает ваш код.
Модель только пишет. Всё, что затрагивает реальный мир, делает ваш код.

Один шаг, не торопясь

Вы отправляете сообщение покупателя и список инструментов, которые модель может запросить.

Модель отвечает запросом. Пока ничего не произошло, это всего лишь текст в условленном формате:

{
  "type": "tool_use",
  "id": "toolu_01",
  "name": "lookup_order",
  "input": {
    "order_id": "4417"
  }
}

Ваш код читает запрос и решает, разрешить ли его. Если да, выполняет настоящий запрос к базе.

Ваш код дописывает ответ модели и результат в переписку и снова отправляет всё модели.

Модель читает результат и либо просит следующий инструмент, либо пишет окончательный ответ. Когда в ответе больше нет запросов к инструментам, цикл заканчивается.

Tool call — это просьба, а не действие. То, что ваш код не проверит перед запуском, не проверит никто.

Есть исключение: инструменты, которые выполняет сам провайдер, например встроенный веб-поиск Anthropic. Они работают на его серверах. Всё, что касается ваших систем, работает в вашем коде.

Пройдите один прогон сами:

Один прогон по шагам

Ваш код
Модель
Инструмент

История, которая уйдёт в следующий запрос

  1. user: Подскажи погоду в Осло

Ваш код отправляет модели переписку.

Почему вся переписка уходит каждый раз

Вернёмся к телефону. Этот коллега забывает весь разговор, как только вы кладёте трубку. Поэтому, перезванивая, вы сначала зачитываете всё сказанное раньше.

По умолчанию так устроены Anthropic Messages API и OpenAI Chat Completions. Каждый запрос самостоятелен, и ваш код каждый раз отправляет всю историю. На втором вызове модель знает о разбитом заказе только потому, что вы прислали его снова.

Каждый вызов несёт всё, что было до него, поэтому запросы становятся всё длиннее.
Каждый вызов несёт всё, что было до него, поэтому запросы становятся всё длиннее.

У этого есть цена. За входные токены вы платите заново при каждом вызове, так что длинные прогоны дорожают быстрее, чем растут. К этому вернёмся в отдельном блоке. Responses API от OpenAI умеет хранить историю за вас через previous_response_id, но сохранённые реплики всё равно оплачиваются как входные токены.

Вывод

Глубже

Handle tool calls (Anthropic)Форматы запроса и ответа для tool call, с примерами.Function calling (OpenAI)Тот же процесс на Responses API, по шагам.Conversation state (OpenAI)Способы передавать историю и цена каждого.
Предложить улучшениеНашёл ошибку