AI 编程 Agent 实战(中):ReAct、任务计划与执行控制
《Agent 大模型 0 到 1 系统课》 · 程序员 Sunday
你正在阅读本节的免费试读。完整课程 ¥499,可在文末添加作者微信购买。
上一篇,咱们已经把整个 AI 编程 Agent 跑起来了。
这一小节就开始看代码了。
和之前一样,咱们从 「启动 Agent」这个按钮的触发事件开始,来看整个业务的处理逻辑
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
所以,点击按钮以后,浏览器真正发送的是一个这样的请求:
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
createRun 作为一个 controller 肯定不会做太多的事情,所以他的核心是调用了 this.runtime.createRun
于是,调用链就从页面进入了 AgentRuntimeService ,这个调用流程应该比较简单,用 GPT-Image-2 花了个流程图:
接下来,咱们继续进入 AgentRuntimeService.createRun()。
创建一个 Agent Run 时,项目做了什么
代码位于:
server/src/agent/agent-runtime.service.ts
这个方法比较长,但是做的事情可以先归成四步:
- 读取场景配置
- 创建 Agent Run State
- 创建独立代码工作区
- 保存状态并启动 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 系统课》,
继续阅读本节剩余内容与后续课程。
