Agent 系统平台开发
Agent 就是有手有脑有记忆的 AI 员工——LLM 是大脑,工具是手,记忆是工作笔记本,规划是待办清单。2026 年最火的赛道:OpenAI Codex、Claude Code、字节 trae work、腾讯 workbuddy,全在做这件事。这一章讲怎么用 Rust 从零搭一个本地 Agent 运行时。
Agent 架构五要素
| 要素 | 人话 |
|---|---|
| LLM 大脑 | 推理、决策、生成。支持 OpenAI / Anthropic / 本地 candle。 |
| 工具 hands | 文件读写、命令执行、网页抓取、数据库查询、API 调用。 |
| 记忆 memory | 短期 = 对话历史;长期 = 向量库存摘要和关键事实。 |
| 规划 planning | ReAct 循环:想一步、做一步、看结果、再想下一步。 |
| 感知 perception | 读屏幕、读文件、读系统状态——决定下一步干什么。 |
ReAct 循环:Agent 的心跳
ReAct = Reason + Act。模型先想(Thought),再行动(Action 调工具),观察结果(Observation),循环直到任务完成。这是最简单也最有效的 Agent 范式。
Rust 写 Agent 的独特优势
论为什么 Agent 要 Rust
一、数据不出域。本地 Agent 要读你的文件、跑命令、访问数据库。Python 跑在别人服务器上你不放心;Rust 编译成本地二进制,数据不出本机,合规。
二、低延迟。Agent 要在毫秒级响应工具调用。Python 的 GIL 和 GC 抖一下,体验就卡。Rust 无 GC,延迟稳定。
三、可嵌入。Rust 库可以被任何语言 FFI 调用,Agent 运行时能嵌入 IDE、嵌入浏览器、嵌入手机。
Agent 平台十层架构(生产级参考)
记忆系统:短期 + 长期
| 记忆层级 | 存什么 | 怎么管 |
|---|---|---|
| 短期记忆 | 当前对话历史 | messages 数组,超 token 上限就摘要压缩 |
| 工作记忆 | 当前任务上下文 | 任务级变量,任务结束丢弃 |
| 长期记忆 | 用户偏好、事实、过往决策 | Embedding 存 qdrant,相关时检索注入 |
多 Agent 协作:主管-工人模式
单个 Agent 干不了复杂活。主 Agent 拆任务,派给子 Agent:一个负责写代码、一个负责查文档、一个负责测试。子 Agent 干完把结果交回来,主 Agent 汇总。这就是"主管-工人"模式,Claude Code 的 Sub-agents 就是这个思路。Rust 里用 tokio::spawn + mpsc 通道就能实现——每个子 Agent 是一个异步任务,结果通过通道发回主 Agent。
① 死锁/活锁:子 Agent 互相等对方结果,谁都不动。② 结果乱序:通道不保证先来后到,要带 task_id 才能对齐。③ token 成本爆炸:N 个子 Agent 各调一次 LLM,并发 N 倍,记得限流和缓存。④ 别一上来就多 Agent——单 Agent + 好工具能干的事,拆多 Agent 反而更难调。
安全治理:权限与沙箱
论Agent 不能为所欲为
Agent 能跑命令、读写文件——这是能力也是风险。生产级 Agent 平台必须有三层护栏:
一、RBAC 权限。不同 Agent 角色能调哪些工具,白名单写死。
二、人工审批(HITL)。危险操作(删文件、发邮件、付款)弹出来等人点确认。
三、沙箱隔离。命令执行跑在容器/沙箱里,崩了不影响宿主。所有工具调用记审计日志,可追溯。
AgentScope:可借鉴的设计
阿里巴巴开源的 AgentScope(agentscope.io)是多 Agent 编排框架,支持分布式、可视化调试。Rust 里你可以借鉴它的设计模式:消息驱动、角色分工、黑板共享。虽然官方是 Python,但架构思想通用。
本地 Agent 运行时设计
做一个"数据不出域"的本地 Agent(对标 WorkBuddy 本地化产品),核心就是:本地 LLM 推理 + 本地文件访问 + 本地向量库。不需要调云端 API,断网也能用。Rust 在这个场景是天选之子——candle 跑本地模型,std::fs 读本地文件,qdrant 本地模式存向量,Tauri 打包桌面端。
① Agent 五要素:LLM 大脑、工具手、记忆、规划、感知。
② ReAct 循环:Thought → Action → Observation → 重复直到完成。
③ Rust 写 Agent:数据不出域、低延迟、可嵌入,对标 WorkBuddy / Codex 本地化产品。