游乐游手机版
首页/AI教程/文章详情

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

时间:2026-06-05 16:42
在构建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
上一篇axios供应链遭投毒你的项目可能已中招而不自知 下一篇一文快速看懂Hermes Agent核心概念与用法
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
RAG四标融合企业知识资产体系四库协同GEO优化实践
AI教程 · 2026-07-01

RAG四标融合企业知识资产体系四库协同GEO优化实践

生成式AI正在彻底改写信息检索的底层逻辑。传统SEO依赖关键词堆砌和外链建设的策略,在大模型的内容采信规则下已经基本失效。取而代之的,是生成式引擎优化(GEO)。它不再关注外链数量,而是重点衡量你的知识是否结构化、证据链是否坚实、信源是否可靠——这些维度才是RAG(检索增强生成)架构真正看重的核心指

一个普通上班人分享WorkBuddy使用心得与真实体验
AI教程 · 2026-07-01

一个普通上班人分享WorkBuddy使用心得与真实体验

前言 最近我开始使用WorkBuddy——这是腾讯推出的一款AI办公工作台。差不多用了一周时间,趁印象还新鲜,把真实的使用感受记录下来,给还在犹豫的朋友做个参考。不吹不黑,只说实际体验。 初印象:不只是聊天机器人 之前用过不少AI工具,大多数就是个对话框,你问它答,答完就结束了。WorkBuddy不

AI幻觉变真功能实战教程:App Inventor 2视频录制拓展一周开发实录
AI教程 · 2026-07-01

AI幻觉变真功能实战教程:App Inventor 2视频录制拓展一周开发实录

先讲一个颇具戏剧性的开端。 这件事的开端颇显荒诞——有用户前来咨询,称AI Pro版的介绍中提到我们有一款“视频录制拓展”。团队全体成员都感到困惑,翻遍产品列表,发现根本不存在该组件。AI那种“一本正经胡说八道”的能力,这次确实让我们陷入尴尬。 按常理,此事到此便可结束——一句“抱歉,暂时没有这个拓

别再混淆OLAP和SQL-on-Hadoop两者查询本质不同
AI教程 · 2026-07-01

别再混淆OLAP和SQL-on-Hadoop两者查询本质不同

OLAP和SQL-on-Hadoop虽都使用SQL查询数据,但本质不同。SQL-on-Hadoop负责海量数据批量计算与ETL,查询速度秒级至分钟级;OLAP通过预聚合实现毫秒级多维分析,适合BI报表。两者在数据平台分工协作,前者是后厨加工,后者是前台快速服务。

GEO优化深度解析:AI偏好FAQ还是长文内容?
AI教程 · 2026-07-01

GEO优化深度解析:AI偏好FAQ还是长文内容?

在GEO优化中,AI对内容形式无统一偏好:FAQ在简单查询中引用率41%,长文在复杂查询中达58%。内容应基于用户意图选择形式,FAQ适配简单事实类问题,长文建立主题权威,两者互补而非替代。