Session Log:仅追加事件流与模型上下文派生
Agent 跑起来后,用户话、工具调用、模型回复、遥测、会话标题会同时膨胀。若对话进一张表、工具日志进另一张、标题再存一份,很快出现「库里说调了工具、日志里没有」这类对不上的情况;崩溃后也难判断走到哪一步。dsh 只保留一本仅追加(append-only)的会话日志(Session Log):每发生一事就往末尾追加一条事件,不改旧记录、不删旧记录;模型历史、transcript、遥测、标题等都从这条事件流派生。
Agent 跑起来后,用户话、工具调用、模型回复、遥测、会话标题会同时膨胀。若对话进一张表、工具日志进另一张、标题再存一份,很快出现「库里说调了工具、日志里没有」这类对不上的情况;崩溃后也难判断走到哪一步。dsh 只保留一本仅追加(append-only)的会话日志(Session Log):每发生一事就往末尾追加一条事件,不改旧记录、不删旧记录;模型历史、transcript、遥测、标题等都从这条事件流派生。
Cordis 把产品拆成可挂载、可卸载的插件之后,下一个问题是启动时到底挂哪些、按什么顺序挂。Web、Headless、SDK 共用模型适配、工具、日志、沙箱策略,入口和界面却不同。若每份应用各写一份插件清单,共享能力一升级就要改三处。dsh 用 Profile(配置档案)和 Bundle(组合包)做分层叠加:Bundle 打包一组 Cordis 配置行,Profile 按顺序叠若干 Bundle,再叠自己的 patch。
做 AI Agent 产品时,模型适配、工具调用、会话日志、主循环往往先堆进一块「核心」:换厂商要改核心,关某个工具要改核心,日志换存储还是改核心。特权中心一旦形成,周边模块都围着它转,谁都不敢动。DeepSeek-Harness(简称 dsh)的取舍是不要这块特权核心:产品的每一部分都是挂在 Cordis 上下文上的插件,模型适配器、工具注册表、会话日志,以及 agent loop 本身都包含在内。
昨天说了「前端、TypeScript、报告用中文」,今天再要一份技术报告时,没有记忆的 agent 会把语言和篇幅再问一遍。DeerFlow 的 Memory 在回合结束后异步提炼事实,写入 memory.json,下次开聊注入模型可见、界面默认不可见的提醒,让连续使用时少重复交代背景。
agent 要读 CSV、写脚本、再 python stats.py。若命令直接落在宿主机,脚本 bug 或恶意代码会伤到真实系统;多用户共享同一环境还会串文件。DeerFlow 给每个 thread 一块隔离工作区:Sandbox。agent 在里面折腾,宿主机与其他用户数据尽量不受影响。