当前位置: 首页
AI教程
AI Agent异步任务架构设计与实现解析

AI Agent异步任务架构设计与实现解析

热心网友 时间:2026-06-05
转载

在构建Agent应用时,一个核心区别在于任务执行模型。Chat App(像 ChatGPT 或 Claude Desktop)一直用的是同步交互模型——你发起一次请求,等 LLM 推理完,才能继续下一轮。说白了,一次请求就是一次完整的推理,阻塞的。 而 Agent App(比如 Manus、Open

在构建Agent应用时,一个核心区别在于任务执行模型。Chat App(像 ChatGPT 或 Claude Desktop)一直用的是同步交互模型——你发起一次请求,等 LLM 推理完,才能继续下一轮。说白了,一次请求就是一次完整的推理,阻塞的。

而 Agent App(比如 Manus、OpenClaw)完全不一样:任务可以在后台执行,用户可以继续发起新请求,任务完成后自动返回结果,甚至能设置 cron 定时执行。这背后的本质是:异步任务系统 + Agent 执行引擎。

AI Agent 的异步任务架构

开始

Chat App(如 ChatGPT / Claude Desktop)通常是同步交互模型:

  • 发起一次请求
  • 等待 LLM 推理完成
  • 才能继续下一轮对话

本质:一次请求 = 一次完整推理(阻塞)

而 Agent App(如 Manus / OpenClaw)则完全不同:

  • 任务可以在后台执行
  • 用户可以继续发起新的请求
  • 任务完成后自动返回结果
  • 甚至可以设置 cron 定时执行

本质:异步任务系统 + Agent 执行引擎

整体架构

flowchart LR
A[Frontend UI
Next.js] --> B[API Layer] B --> C[Task Service] C --> D[(Postgres DB)] C --> E[Queue
BullMQ + Redis] E --> F[Worker] F --> G[Agent Runtime] G --> H[LLM] G --> I[Tools] I --> J[External APIs] F --> D D --> K[SSE / Event Stream] K --> A

三条核心路径

1️⃣ 用户操作路径

Frontend → API → Task Service → DB
  • 用户提交任务
  • 系统创建 Task
  • 不等待执行,立即返回 taskId

非阻塞

2️⃣ 后台执行路径(核心)

Queue → Worker → Agent Runtime → Tools → LLM
  • Worker 异步执行任务
  • Agent Runtime 控制执行流程
  • 调用 LLM + Tools 完成任务

真正干活的地方

3️⃣ 实时反馈路径

Worker → DB → SSE → Frontend
  • 执行过程持续写入 Step
  • 前端通过 SSE 实时订阅

用户可以看到:

? Thinking...
? Calling API...
? Got result...

Agent Runtime 执行流程

这是 Agent 最核心的部分,更加详细的流程如下:

flowchart TD
A[启动 Agent Runtime] --> B[构建 Context]
B --> C[调用 LLM]
C --> D[解析输出]
D --> E{是否完成?}
E -- 是 --> F[写入结果]
F --> G[结束任务]
E -- 否 --> H[解析 Action]
H --> I[调用 Tool]
I --> J[获取结果]
J --> K[记录 Step]
K --> B

它的核心思想如下,这就是 Agent 和 Chat 的本质区别

while (没完成) {
  想 → 干 → 记录 → 再想
}

伪代码

async function runAgent(taskId: string) {
  let stepCount = 0
  const MAX_STEPS = 10

  while (stepCount < MAX_STEPS) {
    // 1. 构建上下文
    const context = await buildContext(taskId)

    // 2. LLM 推理
    const output = await llm.invoke(context)

    // 3. 记录 thought
    await sa veStep(taskId, {
      type: 'thought',
      content: output.thought
    })

    // 4. 判断是否结束
    if (output.type === 'finish') {
      await finishTask(taskId, output.result)
      return
    }

    // 5. 调用工具
    const result = await runTool(output.action)

    // 6. 记录 observation
    await sa veStep(taskId, {
      type: 'observation',
      content: result
    })

    stepCount++
  }

  await failTask(taskId, 'max steps reached')
}

Step 管理

上面可以看到,一个任务需要一个 while 循环分多步骤执行,每一个步骤就是一个 step ,要单独记录下来。

step 的作用

  • 记录执行过程(可视化)
  • 构建上下文(context)
  • 支持恢复(resume)

step 数据定义

step 分多种类型,如思考中、调用 tool 执行中、执行结果观察中。所以它数据结构也要有不同的定义。

type Step =
| {
    id: string
    taskId: string
    type: 'thought'
    content: string
    createdAt: Date
  }
| {
    id: string
    taskId: string
    type: 'action'
    tool: string
    input: any
    createdAt: Date
  }
| {
    id: string
    taskId: string
    type: 'observation'
    content: string
    createdAt: Date
  }

取消/恢复 step

异步任务可以在后台执行,用户也可以随时操作取消任务、恢复任务。恢复任务的时候就需要读取历史 steps ,重新构建 Context 重新执行,这样就不用重复之前的步骤了。

flowchart TD
A[任务中断] --> B[读取历史 Steps]
B --> C[构建 Context]
C --> D[重新进入 Agent Loop]
D --> E[继续执行]

A --> F[用户取消]
F --> G[更新 Task 状态为 cancelled]
G --> H[Worker 停止执行]

定时任务流程

有了以上的异步的架构,才可以在此基础之上执行定时任务。

flowchart TD
A[用户输入自然语言] --> B[LLM 解析意图]
B --> C{是否为定时任务}
C -- 否 --> D[普通任务执行]
C -- 是 --> E[生成 cron 表达式]
E --> F[创建 Task]
F --> G[注册 BullMQ repeat job]
G --> H[定时触发]
H --> I[Worker 执行 Agent]
I --> J[输出结果]

核心思路就是:

自然语言 → 结构化 cron → 调度系统 → 定期触发 Agent

说一个具体的例子

const result = await llm.invoke(`每天早上9点帮我查 BTC 价格`)
// LLM 识别到这是一个定时任务,输入 cron 表达方式
{
  type: "cron",
  cron: "0 9 * * *",
  task: "查询 BTC 价格"
}

然后,在数据库创建一个 task 记录

const task = await db.task.create({
  input: result.task,
  cron: result.cron,
  isCron: true
})

然后,把定时任务插入到 queue 任务队列

await queue.add('agent-task', { taskId: task.id }, {
  repeat: {
    cron: task.cron,
    tz: 'Asia/Singapore'
  }
})

最后,使用 queue worker 启动定时任务,就开始定时执行了。

new Worker('agent-task', async (job) => {
  const { taskId } = job.data
  await runAgent(taskId)
})

总结

Agent 本质是一个可持续执行的 LLM 状态机,这就有点接近于黄仁勋说的“Agent 是全新的操作系统”这个概念了。

来源:https://juejin.cn/post/7623338525065003044

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Claude Code 必知的14个高效工作流,让你的开发效率提升300%

Claude Code 必知的14个高效工作流,让你的开发效率提升300%

Claude Code 常用工作流 先分享几项核心判断:Claude Code 真正强大的地方,并非仅仅在于它能编写代码——而是它让“编码”这件事本身变得更加高效且可控。你大概率遇到过这类场景:接手一个陌生项目,花了一整天才能理清架构;线上出现报错,翻遍日志也找不到根本原因;想要重构遗留代码,又担心

时间:2026-07-09 17:49
阿里云通义AIGC平台完全指南:设计师AI生产力革命

阿里云通义AIGC平台完全指南:设计师AI生产力革命

一、写在前面:为什么设计师需要关注AIGC? 如果你还在手动一张一张制作海报、反复修改客户口中“感觉不对”的配色方案、为电商详情页准备几十张不同场景的产品图——那么你一定经历过这些痛点: 创意瓶颈:脑海中有画面,但手绘无法呈现 重复劳动:调整尺寸、更换背景、批量生成变体消耗了大量时间精力 成本焦虑:

时间:2026-07-09 16:48
零基础毕设代码二次开发:3文件定位法及Vue/Java修改对照表

零基础毕设代码二次开发:3文件定位法及Vue/Java修改对照表

每年一到毕业季,计算机专业的同学总会陷入一个共同的怪圈:从 GitHub 上扒下来一套代码,或者用 AI 生成一个项目,看起来挺完整的,可导师一句“加个筛选条件”或“换个页面颜色”,瞬间就懵了——不敢改,不会改,怕改崩。是不是很熟悉? 一、为什么AI生成的毕设代码你 "不敢改 "? 1 1 毕业生的三大

时间:2026-07-09 16:46
反向海淘订单系统:状态机与分布式事务实战设计

反向海淘订单系统:状态机与分布式事务实战设计

先分享一个反直觉的结论:反向海淘订单管理的真正挑战,往往不在于业务逻辑本身,而在于状态流转。一个订单的生命周期拉长到跨国运输,中间涉及的环节多、系统多、参与者多,状态稍有错乱就可能引发连锁事故。Taocarts团队在实践中踩了不少坑,最终沉淀下来的这套状态机与分布式事务方案,成功解决了这一复杂难题。

时间:2026-07-09 16:46
AI并未抢走程序员饭碗而是更新了编程菜单

AI并未抢走程序员饭碗而是更新了编程菜单

AI并未大规模替代程序员,而是改变了职业结构。重复性编码岗位需求下降35%至15%,而AIAgent开发等岗位需求激增187%。开发者焦虑从“被替代”转向“跟不上变化”,60%程序员已使用AI辅助编程。人的核心价值转向架构设计、技术决策和审查AI生成代码,AI技能带来16%薪资溢价。

时间:2026-07-09 16:46
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜