Sunday 的面试指南

Agent Runtime:运行状态、执行预算与终止条件

《Agent 大模型 0 到 1 系统课》 · 程序员 Sunday

你正在阅读本节的免费试读。完整课程 ¥499,可在文末添加作者微信购买。

上一节,咱们实现了一个可以规划任务的 Agent。

它先生成 Plan,再把计划保存成 Plan State。每执行完一个步骤,程序都会记录 Observation,再让 Replanner 判断后面的计划要不要调整。

为了防止代码一直循环,上一节还写了一个最大执行次数:

const MAX_EXECUTED_STEPS = 6

if (executedSteps >= MAX_EXECUTED_STEPS) {
	throw new Error(
		`达到最大工具执行次数 ${MAX_EXECUTED_STEPS},任务仍未满足结束条件。`
	)
}

这个限制的目的是为了防止 Agent 一直循环下去

但是,这样的一个解决方式还是比较糙的。

那比如说:

  • 如果模型连续好几次调用同一个工具咋办呢?
  • 如果工具名称和参数每次都不一样,但是拿回来的始终是同一份资料呢?

还有,模型已经调用了多少次、消耗了多少 Token、整个任务运行了多长时间,这些数据又应该放在哪里?

只靠一个 MAX_EXECUTED_STEPS = 6 ,肯定是不行的。

所以,这一节咱们需要在 Agent Loop 外面,再增加一层由应用程序控制的运行环境。

这个运行环境就是本节要实现的 Agent Runtime。

Agent Runtime 到底是什么

这一节所说的 Agent Runtime,指的是:

负责驱动 Agent Loop、保存整次运行状态、统计资源消耗,并根据确定性规则决定任务是否继续的一层应用程序代码。

Agent Runtime:运行状态、执行预算与终止条件 配图 1

也就是说:模型负责具体的操作,但是当前还剩多少工具调用次数、任务有没有超时、相同查询已经执行过几次,这些都应该由程序判断。

现在主流 Agent 框架里面,也能看到类似设计。

比如说,在 OpenAI 的 Agents SDK 文档 里面,提到了 Runner 的概念

Agent Runtime:运行状态、执行预算与终止条件 配图 2

他提到 Runner 会通过 maxTurns 限制 Agent Loop。达到最大轮次以后,默认会抛出 MaxTurnsExceededError:

LangChain 和 LangGraph 也提供了对应的 Runtime 的概念,点这里直达

Agent Runtime:运行状态、执行预算与终止条件 配图 3

虽然每个框架的实现方式不一样,但是殊途同归嘛,理念是一样的

即:Agent 不能只靠一个 while 循环一直跑,应用程序必须管理这次运行。

Agent Runtime 到底需要管理什么

对于一次完整的 Agent 任务,Runtime 至少要做好两件事:

  • 第一:保存整次任务的运行状态
  • 第二:限制整次任务可以消耗的资源

第一:保存整次任务的运行状态

上一节,咱们讲了 messages 和 Plan State。

但是,这两份数据都不能完整表示一次 Agent 运行。

messages 保存的是模型当前能够看到的上下文。里面可能包含用户问题、模型回答、Tool Call 和 Tool Message。

不过,随着对话越来越长,历史消息可能会被删除、压缩或者替换成摘要。

Plan State 保存的是任务计划。

比如哪个步骤已经完成、哪个步骤被取消、后面的步骤依赖什么条件。

但是,Plan State 也不会记录:

  • 模型已经调用了多少次?
  • 工具已经执行了多少次?
  • 当前一共消耗了多少 Token?

这样的数据

所以,Runtime 还需要维护一份范围更大的状态。

这份状态就叫作 Agent Run State。

`Agent Run State 是 Runtime 在一次 Agent 运行期间维护的全局状态,用于统一记录消息上下文、任务计划、执行进度、调用次数、Token 消耗等运行信息。

Agent Runtime:运行状态、执行预算与终止条件 配图 4

看着挺高级的对吧。

但是,体现在代码里面,其实并不复杂,就是一段 JSON 格式数据。

比如,咱们这一节会把 Agent Run State 设计成下面这样:

{
	runId: '本次运行的唯一 ID',
	goal: '用户目标',
	status: 'running',
	stopReason: null,
	startedAt: 1785299400000,
	endedAt: null,
	
  // 注意看这里:plan state
	planState: {
		version: 1,
		status: 'active',
		steps: []
	},

	limits: {
		maxSteps: 8,
		maxModelCalls: 8,
		maxToolCalls: 6,
		maxDurationMs: 10000,
		maxTotalTokens: 12000,
		maxSameAction: 2,
		maxNoProgress: 2
	},

	usage: {
		steps: 0,
		modelCalls: 0,
		toolCalls: 0,
		totalTokens: 0
	},

	actions: [],
	trace: []
}

Plan State 放进了 Agent Run State

本节试读已结束

继续学习,解锁完整课程

购买《Agent 大模型 0 到 1 系统课》,
继续阅读本节剩余内容与后续课程。

扫码添加作者微信,备注「Agent 课程」

添加作者微信 · 购买完整课程

解锁完整课程 ¥499

《Agent 大模型 0 到 1 系统课》
扫码添加微信,备注「Agent 课程」,购买后由 Sunday 提供完整内容的学习方式。

扫码添加作者微信 LGD_Sunday,购买 499 元 Agent 课程

微信昵称:LGD_Sunday
手机上可长按保存二维码,再用微信扫一扫识别。

保存微信二维码