Агенты без загадок
Предыдущие главы свели модель к её рабочему ядру: контекст на входе, предсказанные токены на выходе. Модель может выдавать текст, код, трассу рассуждений или сообщение в форме вызова инструмента, но она всё равно предсказывает токены по предоставленному контексту.
Агент — программная система вокруг вызова модели. Обвязка передаёт контекст, предоставляет инструменты, разбирает структурированный вывод, исполняет разрешённые действия, добавляет наблюдения и решает, продолжать ли работу. LLM — вероятностный движок; агент — детерминированный контур управления, который превращает её вывод в полезную работу.
Цикл агента
Цикл агента — не когнитивный цикл. Это цикл приложения вокруг повторяющихся вызовов LLM. Каждый проход готовит входной контекст, получает вывод модели, проверяет его, выполняет разрешённый побочный эффект и сериализует результат в следующий контекст.
Механика агентов
Агенты работают внутри цикла обвязки
Если смотреть на цикл как на поток контекста, граница агента становится явной. Модель лишь предсказывает следующую последовательность токенов. Обвязка отвечает за валидацию, выполнение, запись наблюдений, условия остановки и контроль бюджета.
Упрощённая версия выглядит так:
// Fixed prefix: instructions, tool definitions, and the current task.
const base = basePrompt(task);
// Accumulated transcript: everything appended so far.
const transcript = [];
let finished = false;
while (!finished) {
// Context is logically an append-only string.
// Each turn rebuilds it from the fixed prefix plus everything
// accumulated so far. The model has no memory of prior turns.
const context = base + transcript.join('');
// The model can emit any token sequence: a final answer, a tool
// request, a reasoning trace, code, or any combination.
const reply = await askModel(context);
// The harness inspects the raw output and decides how to act.
const action = checkModelReply(reply);
if (action.type === 'final') {
return action.message;
}
// Everything the model produces is appended to the transcript.
transcript.push(reply);
// If the model requested a tool, run it and append the observation.
if (action.type === 'tool_call') {
const observation = await runTool(action);
transcript.push(observation);
}
// Stop if the work is done, the step budget is exhausted,
// or the context window is full.
finished = shouldStopNow(task, transcript);
}
Здесь нет скрытой агентной сущности. Полезны компоненты вокруг модели: построение контекста, проверка вывода, выполнение инструментов, сохранение результатов и решение о продолжении работы.
Цикл — это каркас. То, что течёт через него на каждом ходу, — контекст.