Sunday 的面试指南

AI 编程 Agent 实战(中):ReAct、任务计划与执行控制

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

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

上一篇,咱们已经把整个 AI 编程 Agent 跑起来了。

这一小节就开始看代码了。

和之前一样,咱们从 「启动 Agent」这个按钮的触发事件开始,来看整个业务的处理逻辑

AI 编程 Agent 实战(中):ReAct、任务计划与执行控制 配图 1

come on~

本项目代码位于:Code/Node/第四章/06-software-engineering-agent

阅读这一篇时,可以继续保持上一篇启动的 npm run dev。为了得到和文章一致的执行轨迹,建议先选择 Replay 模式运行。Replay 不会请求模型,但是会经过和 AI 模式完全相同的 Runtime、Tool 和状态管理流程。

从“启动 Agent”按钮进入项目

咱们先选择第一个场景:实现任务优先级筛选

页面入口位于:web/src/App.vue

点击「启动 Agent」按钮以后,会调用 createRun():

/**
 * 根据场景创建一次新的 Agent Run,并自动切换到运行轨迹页面。
 *
 * @param {string} scenarioId 要运行的场景 ID,默认使用当前选中的场景
 */
async function createRun(scenarioId = selectedScenarioId.value) {
	...
	try {
		// 调用接口创建新的 Agent Run。
		const run = await api.createRun({
			scenarioId,
			requirement: nextRequirement,
			mode: mode.value
		})

		....
	} 
}

这个方法收集了三个信息:

  • scenarioId :当前选择的实验场景
  • requirement:用户输入的自然语言需求
  • mode:AI 或 Replay 的状态

然后,通过 api.createRun() 发送给服务端。

api.createRun() 代码位于 web/src/api.ts

AI 编程 Agent 实战(中):ReAct、任务计划与执行控制 配图 2

所以,点击按钮以后,浏览器真正发送的是一个这样的请求:

POST /api/runs
Content-Type: application/json
{
  "scenarioId": "priority-filter",
  "requirement": "为 GET /tasks 增加 priority 筛选能力,支持 low、medium、high,并保持已有 status 筛选兼容。",
  "mode": "replay"
}

这个请求会进入 NestJS 的 RunsController:

server/src/agent/runs.controller.ts
AI 编程 Agent 实战(中):ReAct、任务计划与执行控制 配图 3

createRun 作为一个 controller 肯定不会做太多的事情,所以他的核心是调用了 this.runtime.createRun

AI 编程 Agent 实战(中):ReAct、任务计划与执行控制 配图 4

于是,调用链就从页面进入了 AgentRuntimeService ,这个调用流程应该比较简单,用 GPT-Image-2 花了个流程图:

AI 编程 Agent 实战(中):ReAct、任务计划与执行控制 配图 5

接下来,咱们继续进入 AgentRuntimeService.createRun()。

创建一个 Agent Run 时,项目做了什么

代码位于:

server/src/agent/agent-runtime.service.ts
AI 编程 Agent 实战(中):ReAct、任务计划与执行控制 配图 6

这个方法比较长,但是做的事情可以先归成四步:

  1. 读取场景配置
  2. 创建 Agent Run State
  3. 创建独立代码工作区
  4. 保存状态并启动 Agent Loop

咱们顺着代码看。

读取场景配置

createRun() 最开始会根据 scenarioId 找到当前场景:

// 根据场景 ID 获取预设场景,场景不存在时由 getScenario 抛出异常。
const scenario = getScenario(scenarioId)

// 默认使用 Replay 模式,避免未明确指定时直接产生模型调用。
const mode = options.mode ?? 'replay'

// 优先使用用户输入的需求,否则使用场景预设需求。
const requirement = (options.requirement ?? scenario.requirement).trim()
...

// 确认当前 Provider 支持并且能够使用指定的运行模式。
this.provider.assertAvailable(mode)

如果选择 AI 模式,Provider 还会检查项目有没有配置 DeepSeek API Key。

那么,scenario 里面有什么?

打开:

server/src/agent/

本节试读已结束

继续学习,解锁完整课程

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

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

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

解锁完整课程 ¥499

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

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

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

保存微信二维码