原创

DeepSeek Harness 高阶 05:Session 事件、日志重建与可观测性

从 turn、step、tool 持久事件到实时 Cordis 事件和 Headless NDJSON 投影,设计 Agent 运行日志、耗时指标、费用追踪、权限审计与故障定位体系,并明确敏感正文的采集边界。

DeepSeek Harness 从入门到高阶专题 · 第 7/8 篇查看专题目录 →

当 Agent 在第 12 步失败,只保存最后一句“抱歉,任务未完成”几乎没有排障价值。你需要知道:哪次模型请求开始偏离、调用了什么工具、审批是否通过、输出是否被截断、会话能否从持久状态重建。

DeepSeek Harness 的 Session 采用追加式事件日志思路。对可观测系统来说,这比只记录聊天消息更有价值。

Turn、Step 和 Tool 是三层

Turn 是一次输入被接纳后直到不再欠工作的一段处理;Step 是一次模型请求以及它触发的工具执行;一个 Turn 可以包含多个 Step。工具调用和结果又是 Step 内的事实。

指标聚合时不要混用:turn_duration 代表用户感知时长,step_duration 反映模型循环,tool_duration 才定位具体外部能力。只看总耗时,无法判断慢在模型、命令还是网络工具。

两类事件,两种用途

agent/request、tools/result 等 Cordis 事件服务于运行中的扩展和拦截;turn/*、step/*、tool/call、tool/result 等是持久 Session 记录。实时告警可监听前者;审计、恢复和离线分析应依赖后者。

Headless --json 输出则是第三种:面向调用方的 NDJSON 投影。它方便 CI 展示,却不是完整日志,而且非最终字符串可能被截断。三者必须在数据模型中明确标记来源。

最小观测字段

每次运行至少保留:run/session/turn/step 标识;版本、Profile、Preset、Provider 和模型;工作区的不可逆脱敏标识;开始与结束时间;工具名和状态;审批结果;错误码;输入输出 Token(如果 Provider 提供);最终退出状态;独立测试结果。

不要默认保存完整提示词、思考文本、文件内容和工具输出。可观测数据同样可能包含源码、个人信息和密钥。先保存结构化元数据,再按权限和保留期决定正文采样。

四张最有用的图

第一张是成功率按模型、版本、任务类型分组;第二张是 P50/P95 Turn 与工具耗时;第三张是 Token/费用和重试次数;第四张是权限拒绝、人工接管和回滚比例。

如果升级后平均耗时下降但人工接管翻倍,这不是优化。Agent 平台必须把质量、成本、速度和风险放在同一张评估表里。

用事件重建,而不是复制 UI

Session 日志是事实来源,UI 只是投影。实现自定义控制台时,应从稳定投影构建状态,不要抓取页面 DOM,也不要把某个前端组件的展示顺序当成事件顺序。

插件若需要自己的可恢复状态,应定义持久事件或投影水位;只在内存 Map 里累计计数,重启后就无法解释历史会话。

故障定位顺序

先确认 Session 是否创建,再确认输入是否进入 Turn;接着定位模型请求、流式响应和工具执行;最后检查结果是否提交、是否触发继续步骤、是否写入最终状态。取消、重试和被丢弃的 attempt 要与已提交消息区分。

这套顺序能避免把“UI 没显示”误判为“模型没返回”,也能发现模型已经返回但工具或事件提交失败的情况。

最终建议

从一个只记录结构化元数据的观察插件开始,给每个任务建立 session—turn—step—tool 的关联。对敏感正文默认不采集,对大输出保留摘要和可控访问路径。

可观测性的终点不是更多日志,而是能回答三个问题:发生了什么、为什么发生、升级或重跑后是否真的更好。

继续阅读:生产化、版本升级与回归测试清单。指标体系还可参考AI 内容管线可观测性,完整顺序见DeepSeek Harness 专题路线。

实测与内容说明

实测记录

  • 2026-09-23 核验官方架构、Session 子系统、事件系统和 Headless 文档。
  • 本文给出观测模型和指标设计,未部署具体 OpenTelemetry 后端或完成性能压测。

参考资料

内容版本 1.1 · 审核:推荐智能手记 · 计划复审:2026-10-07