抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

数据平台里做一个“能回答任务为什么失败”的 Agent 不难:接入日志、元数据和模型,常见错误能说得像模像样。真正困难的是用户继续说“那你帮我修一下并重跑”,系统还能保持对象正确、权限清楚、执行幂等,并证明数据结果已经恢复。

我认为数据平台 Agent 的终点不是更自然的问答,而是可验证执行。自然语言意图要经过对象解析、证据诊断、变更计划、权限决定、受控操作和结果验收,最终每一步都能回到真实系统核对。

数据平台 Agent 可验证执行闭环

长任务超过上下文窗口后,把前半段对话总结成几段文字再继续,是最直接的压缩方法。它也最容易丢掉关键东西:用户说“不要提交”,摘要只保留了“修改配置”;工具状态仍未知,却被写成“部署失败”;一个尚未回答的问题从列表中消失。

上下文压缩不是文学摘要。它要把后续执行所需的约束和状态,从大量过程文本迁移到更小、可验证的运行表示。哪些可以概括,哪些必须原样保留,应该由信息职责决定,而不是按 token 比例截取。

上下文压缩的约束保全模型

把一个任务拆给多个 Agent,吞吐量看起来会立刻提升。真正跑到共享仓库、文档或业务系统时,问题也随之出现:两个 Agent 同时改同一文件,研究 Agent 更新了结论,写作 Agent 还在引用旧证据,两个执行 Agent 重复提交同一工单。

多 Agent 首先是并发系统,其次才是角色设计。分工名称并不会自动提供隔离、一致性和幂等。共享状态必须有 owner、版本和合并语义,外部副作用必须回到单一的授权与提交边界。

多 Agent 共享状态控制

一个熟练工程师排查问题时,会自然地区分日志事实和猜测,先查对象再执行危险命令,修改后做回归。这些习惯平时藏在脑子里。把它们交给 Agent,如果只写“你是一名资深专家,请谨慎处理”,真正的边界一个都没留下。

Skill 的价值不是增加人设,而是把某一类任务的触发条件、操作顺序、证据标准、危险边界和验收方式写成可复用协议。它应该比大段系统提示更窄,也更容易评审和测试。

Agent Skill 的显式边界结构

“代码在容器里运行,所以是隔离的”这句话信息量很低。容器挂了哪些目录、能访问哪些网段、使用谁的云凭证、能否启动特权子进程、输出会被送到哪里,任何一项没说清,隔离都可能只是一层包装。

执行型 Agent 会读取仓库、安装依赖、运行命令、访问网站和调用工具。它的能力集合应该像部署规格一样被声明、审批和验证。我把这份契约叫 Sandbox Manifest:不是给人看的安全口号,而是运行时真正执行的清单。

Agent Sandbox Manifest 执行链

“模型没有返回结果”是一句症状,不是根因。我见过模型已经正常结束,网关漏了 terminal event;也见过前端展示了答案,服务端却没有持久化。只看其中一层,谁都能拿出一段日志证明自己没问题。

Agent 诊断需要的是可连接、可校验的证据链。它从用户实际看见的结果出发,关联到 Run、上下文、模型 Attempt、工具 Operation、流事件和最终存储,并明确哪一段是原始事实、哪一段是系统推断。

Agent 诊断证据链

把所有对话按用户 ID 存下来,再做 embedding,通常就被叫作“长期记忆”。这个方案演示很快,生产问题也来得快:用户改了偏好,旧片段仍被召回;一句推测被当成事实;删除账户后,向量索引里还残留副本。

Memory DB 不是消息归档的别名。它要管理记忆如何产生、依据什么、何时有效、与谁冲突、能否被检索、何时遗忘。原始经历、提炼事实和检索索引承担不同职责,不能混在一张 conversations 表里。

Agent Memory 的分层数据模型

传统服务报错,值班同学通常先看接口、实例和依赖。Agent 出问题时,表面症状更混乱:用户说“一直转圈”,可能是模型仍在生成、工具卡住、SSE 丢了终态,也可能任务已经完成但结果没有持久化。

运行手册不能按团队组件来写成“模型篇、向量库篇、MCP 篇”。值班者首先拿到的是用户症状和一个时间点。我更愿意从结果状态出发,先确认影响与副作用,再沿 Run 的证据链定位归属。

生产 Agent 故障运行手册分流

一次 Agent 删除了错误的数据分区。事故复盘时,审计平台拿当前角色去查,结论是“没有删除权限”。这并不能证明当时的请求被拦截,也不能说明是谁授权的:角色、组织关系、策略和资源标签可能都已变化。

权限审计要回答的是历史问题:在那一刻,哪个主体代表谁,以什么目的,对哪个版本的资源发起了什么动作,策略根据哪些事实作出允许或拒绝。只存用户名和 HTTP 200,根本还原不了这条链。

Agent 权限决定与策略快照

把一个需要四十分钟的研究任务放在普通接口里跑,我最担心的不是模型慢,而是执行状态只活在进程内存里。网关超时、Pod 重启、SSE 断开,系统便不知道搜索做到哪一步、哪个工具已经产生副作用,只能从头再来。

数据调度系统早就处理过这类问题。长任务不能依赖一条不断开的连接,必须把一次执行表达成可恢复的状态机。Agent 场景多了模型输出和动态工具选择,基本原则没有变:决定要留下,副作用要有身份,恢复要从事实继续。

Agent 持久执行与恢复路径

Agent 成本报表如果只统计成功回答的 token,很容易得出错误结论。一次最终成功的 Run,前面可能有两次断流、三次无效工具参数、一次重复浏览器操作和人工接管。用户只看到一个结果,平台已经为失败路径付了多份成本。

我会按 run -> step -> attempt/operation 建成本账本,每笔费用关联 outcome 与 failure category。不是为了给失败“罚款”,而是找到哪些协议、上下文、工具和循环在持续制造浪费。

Agent 失败路径成本树

多 Agent Demo 里,主 Agent 常给子 Agent 发一句“去查一下这个问题”,子 Agent 回一段文字,主 Agent 再综合。任务一复杂,就会出现范围重叠、工具权限过宽、结果无法验收、两个 worker 重复做同一副作用,最后也不知道谁还持有任务。

我把交接设计成协议,不是聊天。Orchestrator 创建 Handoff Manifest,worker 获取带期限的 lease,过程产物写共享 Artifact Store,返回结构化 Result Contract;Orchestrator 通过 Acceptance Gate 后才把子任务标完成。

多 Agent 交接是一份有所有权的契约