ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DeepSeek Harness插件化与日志回放:Agent工程化落地指南

DeepSeek Harness插件化与日志回放:Agent工程化落地指南 最近工作室一直在打磨 Agent 类项目前后试过 LangChain、Dify、CrewAI还有自己用 React 模式手搓的轻量调度器。坦白讲框架选型不难真正让人头疼的是工程化落地调试链路太长、上下文状态不好追踪、模型返回一变化整个流程就“薛定谔式”通过。直到前段时间把 DeepSeek Harness 捡起来做深度改造我才意识到一个好的 Agent 框架不该只解决“能不能跑”而是要把“跑完之后怎么复盘、怎么升级、怎么让团队协作”这些问题一并接住。这篇不打算做泛泛的框架对比而是从工程解剖的视角把 DeepSeek Harness 的插件化机制与会话日志回放能力拆开讲清楚它到底解决了什么痛点、插件体系怎么设计才能不打架、日志回放怎么真正帮你定位问题以及在内网和 Linux 环境下部署时会踩到哪些坑。如果你正在评估 Agent 框架或者已经上了车但被调试和维护折腾得够呛这篇文章应该能给你一些能直接抄作业的思路。1. 工程化视角下的 Agent 框架为什么插件化和日志回放成了刚需1.1 单点 Prompt 撑不起复杂任务编排层才是分水岭Agent 框架从“玩具”走向“生产”最大的分水岭不在模型能力而在编排层。单次 Prompt 调用只能解决“一次问答”但实际业务场景里Agent 要完成的是“目标拆解 → 工具调用 → 结果校验 → 失败重试 → 状态流转”这一整条链路。这时候框架需要提供的不只是 API 封装还包括任务规划器、工具注册中心、会话状态管理、大模型消息上下文维护等一堆基础设施。DeepSeek Harness 在这块做得比较聪明的地方是没有把编排逻辑写死在框架内部。它把任务的执行路径拆成可被替换的“插槽”每个环节你都可以挂自己的实现。比如任务拆解这一步你可以用默认的 ReAct 模式也可以换成 Plan-and-Execute甚至挂上自己训练的微调模型来做意图识别。这种自由度在 LangChain 里也能实现但 LangChain 的抽象层次太多LCEL 表达式一复杂起来调试本身就是一场灾难。Dify 则强在可视化编排但可视化意味着屏蔽了底层细节到了要精细化控制上下文窗口和 Token 消耗的时候反而束手束脚。从我自己的体验来说框架要“可工程化”第一标准就是可插拔。可以没有华丽的默认玩法但必须允许我在关键节点替换实现而替换的成本不能高到让人放弃。1.2 为什么我最终选择了 DeepSeek Harness 作为解剖对象市面上 Agent 框架不少选 DeepSeek Harness 来解剖不是因为它在 GitHub 星标数上有什么压倒性优势而是因为它的设计哲学比较“反主流”。它没有试图提供一个包罗万象的“Agent 操作系统”而是聚焦在 Harness 这个定位上——类似测试领域的 Test Harness它更关心如何让 Agent 的执行过程可被观测、被控制、被重复执行。这是很多创业项目和老牌框架都不太愿意做深的地方。具体到工程团队有三个场景特别吃这种能力。第一个是回归测试模型升级后老用例能不能稳定通过需要一套可批量回放的历史会话做验证而不是每次拍脑袋重新跑一遍。第二个是线上问题排查用户报了一个“Agent 答非所问”如果只有对话记录没有工具调用时间线和中间状态你根本没法定位是模型抽风还是工具数据出了问题。第三个是 Prompt 调优改了一版 System Prompt效果到底变好还是变坏不能只靠几轮人工测试需要把线上真实会话作为样本集跑回归对比。DeepSeek Harness 的可回放会话日志恰恰就是冲着这些场景去的。它把每一次 Agent 运行的完整轨迹落盘包含消息流转、工具调用参数、模型响应、Token 消耗和执行耗时然后支持按会话 ID 进行确定性回放。配合它的全插件化设计你甚至可以在回放时替换某个插件版本观察行为差异。这就是典型的工程化思维不追求黑魔法而是把过程变成可审计、可迭代的对象。2. 全插件化设计的核心拆解骨架、插槽与扩展机制2.1 插件化的本质不是“功能堆叠”而是“关注点分离”很多人对插件化的理解停留在“我可以装一堆扩展来增加功能”这是被 IDE 生态惯出来的错觉。在 Agent 框架里插件化的真正价值是关注点分离。Agent 的执行链路涉及模型提供商、Prompt 模板、工具集、记忆存储、工作流编排、日志记录、限流策略等多个横切面。如果这些逻辑全部耦合在核心引擎里每加一个新模型或新工具都要动核心代码框架的稳定性和可维护性都会迅速崩坏。DeepSeek Harness 的插件体系给我的感觉像是一个“接口矩阵”框架只定义插槽的协议不关心插槽里跑的是什么实现。比如模型访问这个插槽协议规定了必须实现chat(messages, tools, config)这个接口至于底层是走 OpenAI 兼容接口、Ollama 本地推理还是某个私有化部署的模型网关都由插件自己决定。核心引擎拿到的是一个统一的模型实例完全不感知底层差异。这样的好处在团队协作时特别明显。A 同学负责开发工具插件B 同学负责调 Prompt 插件C 同学负责接模型网关大家改的是各自的插件包互不干扰。合并代码时几乎没有冲突因为核心引擎的代码基本不会被动。我们团队过去在 LangChain 上协作时经常因为chain.py里塞了太多自定义逻辑导致 merge 地狱换到 Harness 后这个问题基本绝迹。2.2 六大核心插槽模型、Skill、工具、工作流、提示词、存储按我实际的解剖经验DeepSeek Harness 的插件化设计大致可以划分为六个核心插槽理解这六个插槽基本就掌握了整个框架的扩展骨架。模型插件负责所有与大模型通信的逻辑包括请求格式、流式解析、重试策略、上下文窗口管理。这里要特别强调的是上下文窗口管理很多二次开发的人会忽略实际上模型插件的关键工作是把系统指令、历史消息、工具结果拼装成符合当前模型要求的 messages 数组并控制总 Token 不超过窗口限制。Skill 插件对应的是“能力包”的概念类似 ChatGPT 的 Custom Instructions 或者 Claude 的 Skills。一个 Skill 通常携带独立的 Prompt 模板、示例 few-shot、以及运行时需要的辅助工具列表。DeepSeek Harness 的 Skill 体系让我比较喜欢的一点是它支持技能依赖声明即一个 Skill 可以声明依赖另一个 Skill框架在加载时会自动做拓扑排序确保先加载被依赖项。这在把多个技能打包部署到内网服务器时非常有用不用手动按顺序注册。工具插件是 Agent 与外部世界交互的通道涵盖 API 调用、代码执行、文件读写、数据库查询等。工具插件的设计要点是参数Schema的严谨性。大模型靠函数调用来决定传什么参数如果 Schema 定义模糊模型就会自由发挥轻则参数缺失重则注入非法值。DeepSeek Harness 对工具插件参数有 JSON Schema 校验层参数不合法时会在调用前拦截并返回错误信息让模型自行修正。这个前置校验有效地减少了下游系统的脏数据。工作流插件是最高层级的编排单元。它不是简单的链式调用而是支持条件分支、并行执行、循环回退。实际使用中工作流插件可以看作一个状态机每个节点对应一个任务步骤边对应状态转移条件。框架内置了一个简单的 DSL 来描述工作流也可以用代码直接定义。我习惯用代码定义因为 DSL 虽然有可视化潜力但复杂逻辑还是代码更好做单元测试。提示词插件负责 Prompt 的版本化与动态组装。它允许你在不修改插件代码的情况下通过外部配置文件覆盖任意节点的 Prompt 模板。这对我这种喜欢反复调 Prompt 的人简直是救命功能。过去在别的框架里调 Prompt改一行字都要重启整个服务Harness 的提示词插件支持热加载配合外部配置中心线上也能平滑修改。存储插件处理会话、缓存、向量索引三类数据的持久化。默认实现是 SQLite 加本地文件也支持切换为 Postgres 或 Redis。存储插件有一个不太起眼但很重要的功能它统一管理会话日志的写入格式也就是说无论底层换成什么数据库回放日志的结构保持稳定上层回放引擎不用跟着变。2.3 实际拆解一个工作流插件看插件之间怎么协作空谈设计太虚拿一个实际场景来说。我最近在公司内网搭了一个“代码评审助手”Agent工作流分为四步读取 MR 变更、生成代码评审意见、调用静态检查工具进行交叉验证、汇总输出评审报告。如果不用插件化设计这四步写在一个脚本里也能跑但扩展性会非常差。比如今天想接入一个新的私有化安全扫描工具就得改主流程代码。在 DeepSeek Harness 里我把它拆成了四个插件MR 读取工具插件、评审意见生成 Skill 插件、静态检查工具插件、报告汇总工作流插件。MR 读取工具插件负责对接公司内部的 GitLab API把变更文件列表和 diff 内容提取出来转成统一的数据结构。评审意见生成 Skill 插件内部定义了评审标准 Prompt 和 few-shot 示例它不关心数据从哪来只负责接收变更数据并输出评审意见。静态检查工具插件调用本地安装的 SonarQube CLI把检查结果解析成结构化项。报告汇总工作流插件则定义了执行顺序和异常处理规则如果静态检查工具执行失败不中断整个流程而是把失败原因写入日志在最终报告中标记为“待人工确认”。真正跑起来后你会发现这种插件化拆分的价值不只体现在开发期更体现在排障期。假如评审结果异常我可以先看 MR 工具插件的输出日志确认拿到的 diff 是否完整再单独回放评审 Skill 的输入输出看看是不是 Prompt 被截断如果确认是静态检查工具的问题直接替换或禁用那个工具插件即可完全不影响其他环节。这种“模块级排障”能力是单体脚本永远给不了的。3. 可回放会话日志Agent 的黑匣子是怎么工作的3.1 为什么 Agent 调试不能只靠“看对话记录”传统的日志系统记录的是“发生了什么”但对于 Agent 场景这远远不够。Agent 的每次回复背后可能经历了多轮内部推理、多次工具调用和结果拼接。如果只记录最终输出一旦结果不对你根本不知道是哪一步出了岔子。更麻烦的是大模型有随机性同样的输入在不同时间可能给出不同的回答。没有回放机制你连“稳定复现 BUG”都做不到排查问题就像在没有监控的系统里找内存泄漏。可回放会话日志的核心思路是把一次 Agent 执行看作一组带因果关系的事件流然后把事件流完整持久化。事件不仅有“模型说了什么”还包括“模型看到了什么”“模型调了什么工具”“工具返回了什么”“中间态发生了什么”。回放时框架会按照事件顺序重新模拟整个执行过程但允许你在关键节点上暂停、修改上下文或替换工具实现从而观察不同处理方式对最终结果的影响。3.2 日志里到底该记录哪些字段时间线、状态与成本结合我自己的落地经验一个可用的会话日志至少需要记录四个维度时间线、上下文状态、工具调用轨迹、资源消耗。时间线解决“什么顺序发生”的问题每条记录都带精确到毫秒的时间戳。上下文状态解决“模型看到了什么”的问题每次模型请求前后的 messages 状态必须完整保存包括 System Prompt、历史消息、工具返回结果。工具调用轨迹解决“外部影响什么”的问题记录工具名、入参、出参、运行时长、异常堆栈。资源消耗解决“成本如何评估”的问题记录输入 Token、输出 Token、模型名和单独的计费标识。DeepSeek Harness 在日志结构上的一个亮点是事件溯源。它不只是记录“某工具返回了某结果”而是记录“在哪个执行上下文下、基于哪些前置事件工具被调用并返回了该结果”。这样的设计让回放可以严格保持因果链而不是简单的时间重放。举个例子某次工具调用入参里包含一个 ID这个 ID 来自上一个模型的输出回放时框架会先定位模型输出事件再校验工具入参的 ID 是否与该事件一致一旦出现不一致就直接报警。这种“因果校验”是我在其他框架日志里没见过的。3.3 回放实操按会话定位、断点注入、对比 Diff回放功能的实操可以分为三个层级。第一层是简单重放输入会话 ID框架把事件流从头到尾执行一遍生成一个与原始会话结构一致的结果轨迹。这个层级适合回归测试比如升级模型后把历史会话批量重放看是否有结果漂移。第二层是断点注入。你可以指定在事件流的某个节点暂停修改上下文内容再继续执行。这个功能对 Prompt 调试极其有用。之前调一个工具选择策略怀疑是某个历史消息误导了模型传统做法是改代码后重新构造测试数据而在 Harness 里我直接加载线上失败会话在断点处删掉那条消息继续回放几分钟就能验证猜想。第三层是对比 Diff。选定同一会话 ID 下的两次回放结果系统会逐事件计算差异并标出变化点。这个功能用于 A/B 测试插件调整非常直观。我经常用它对“提示词优化前后”的效果做量化评估看看工具调用成功率提升几个点、Token 消耗是升还是降。3.4 一次生产事故复盘日志回放如何帮我背锅定位讲一个真实案例。公司内部的知识库问答 Agent 上线后有用户反馈某类问题回答质量突然下降。起初我们怀疑是模型版本更新导致行为漂移但打开 Harness 的会话日志后发现最近一周的日志里RAG 检索工具的超时率从 5% 飙到了 40%大量请求在检索阶段就失败了Agent 在没有知识依据的情况下强行生成了答案。通过回放日志我们定位到检索工具返回的错误码集中在“连接池耗尽”上。进一步分析时间戳发现同时段有个定时任务在批量导入文档占满了数据库连接池。问题根因从“模型变笨”修正为“检索服务资源配置不足”。这个案例让我深刻体会到Agent 系统的排障不能只盯模型层会话日志里的工具调用轨迹往往藏着真凶。没有回放能力我们只能靠猜有了回放能力技术团队可以像检查数据库慢查询一样对 Agent 的行为做诊断。4. 落地部署与实用配置Windows 桌面版、Linux 服务端与内网隔离环境4.1 本地安装的两种姿势桌面版开箱即用与命令行可控DeepSeek Harness 的安装路径有两条桌面版和 CLI 版。桌面版适合个人体验和轻量使用下载图形安装包后无需配置环境把模型 API 地址一填即可跑起来。它的界面把常见操作做成了可视化切换插件、查看会话列表、回放历史会话、调整模型参数基本覆盖了日常需求。我身边不少做内容创作、综述写作的朋友就是靠桌面版配合几个 Skill 干活完全没有接触过代码。CLI 版则适合技术人员和需要 Docker 化部署的场景。CLI 安装后的目录结构非常清晰核心引擎与插件目录分离配置文件是 YAML 格式。我建议团队做生产使用直接选 CLI 版因为桌面版默认绑定本地用户态进程管理、日志采集、权限控制都不如 CLI 版本灵活。CLI 版还有一个优点是可以配合 systemd 或 supervisor 托管异常退出能自动拉起这在无人值守的任务型 Agent 场景里很重要。4.2 内网部署的离线安装方案依赖缓存、模型网关与 Skill 打包很多团队因为数据合规要求需要把 Agent 框架部署到彻底隔离的内网环境DeepSeek Harness 在这块是支持得比较好的。离线部署主要解决三件事依赖包、模型访问、Skill 分发。依赖包这块在有外网的机器上先把 Python 和 Node 的依赖全部拉取并打包成离线缓存。需要注意 Harness 的部分插件可能依赖预编译的二进制文件比如某些工具插件需要本地编译的 Python 库离线部署前要确认这些二进制与目标服务器的操作系统和 CPU 架构兼容。否则在 ARM 服务器上装 x86 编译缓存会直接报错这是我踩过的很实际的坑。模型访问这块Harness 支持 OpenAI 兼容接口协议这意味着你不需要它内置的模型网关插件只要内网里有一个兼容 OpenAI 接口的推理服务比如 vLLM、Triton 或 Ollama就可以通过简单配置接入。模型插件层面用一个自定义模型插件包装内网推理服务的地址、密钥和模型名就能正常工作。唯一的注意点是上下文长度要对齐如果推理服务限定最大 TokenHarness 这边的模型插件配置最好显式声明同样的上限以免请求超限被拒。Skill 分发这块Harness 支持把 Skill 打包成 Zip 后导入。内网环境下将 Skill 包放到共享存储就可以批量部署到多台服务器了。每个 Skill 包里包含 prompt 模板、示例数据和插件依赖声明导入时框架会自动检查依赖是否齐全缺失时会在日志里给出明确的补装提示而不是直接静默失败。4.3 模型接入的通用配置参考以本地推理服务为例这里给一个配置示例。假设内网部署了一个服务对外提供 OpenAI 兼容接口基址http://10.10.0.15:8000/v1DeepSeek Harness 的模型配置文件可以这样写model: provider: openai_compatible base_url: http://10.10.0.15:8000/v1 api_key: internal-placeholder model_name: internal-chat-32b max_context_tokens: 32768 temperature: 0.3 request_timeout: 120 stream: true这里有两个容易踩坑的地方。第一api_key字段不要留空。即使本地推理服务不校验密钥填一个占位符能避免框架在请求构造时因为空值走异常分支。第二request_timeout最好设大一些。内网模型在负载高时响应会明显变慢120 秒是我测试下来比较稳的阈值再短容易误报超时再长则会拖累整体任务执行时间。租户隔离和优先级的问题如果你对接的是企业级模型网关建议在模型插件里实现一个简单的加权轮询负载均衡。Harness 本身不做多模型后端聚合但插件层完全允许你写自己的 Router 模型插件根据会话标签把请求分发给不同能力的模型。我现在就是写了一个带简单状态统计的路由插件把复杂推理任务丢给 32B 模型把简单分类任务丢给 7B 模型整体成本直接降了将近一半。5. 实战中高频踩坑与排查手记从权限报错到代码回退5.1 Windows 桌面版读取 Skill 文件时报 SetNamedSecurityInfoW failed这个问题在 GitHub 和社区里被问得很多报错信息大致长这样调用SetNamedSecurityInfoW failed (win32 error ...)。很多新手看到 Win32 错误码就慌了以为是框架问题其实是 Windows 的文件权限机制在作祟。这个问题的根源在于DeepSeek Harness 在导入或读取 Skill 时需要修改文件的安全属性而当前进程没有足够的权限去执行这个操作。常见诱因有三个。第一把 Skill 解压到了需要管理员权限的目录比如C:\Program Files下。第二目录设置了受控文件夹访问保护Windows Defender 拦截了对该目录的写入操作。第三文件来自网络或压缩包被标记为“来自其他计算机”导致安全描述符异常。解决方式按顺序排查把 Skill 目录移动到用户权限范围内的路径比如%USERPROFILE%\harness\skills在 Windows 安全中心的“受控文件夹访问”里将 Harness 的进程添加为例外最后右键解压后的 Skill 文件夹在“安全”选项卡里手动重新设置权限或直接使用系统自带的工具清除继承权限并重新赋权。如果是企业内网统一管理权限的环境找 IT 管理员单独为 Harness 运行账号开一个专用工作目录是最彻底的做法。5.2 Linux 下 Skill 读取文件权限问题的排查思路Linux 下类似的问题也很高频主要体现在两个层面。一种是文件系统权限问题运行 Harness 的系统账号对 Skill 目录没有读权限或者权限不足。这个好排查先看进程运行账号再ls -l看目录属主然后确认chown -R和chmod -R是否到位。另一种更隐蔽是挂载选项限制。如果 Skill 放在 NFS 或某些容器挂载卷上挂载参数为noexec或nodev时Skill 里附带的辅助脚本可能无法执行报错并不是直接的“权限拒绝”而是“Operation not permitted”之类容易误导排查方向。建议的内网部署规范是把 Harness 的数据目录单独分区或单独目录统一由专用运行账号持有Skill 包统一从内部制品库拉取严禁把 Skill 目录放在共享盘或/tmp下。共享盘的锁机制会导致并发 Skill 加载时出现随机失败/tmp目录则可能在重启时被清理这两类问题我在生产环境都遇到过。5.3 插件版本兼容与代码回退升级后行为不一致怎么办Agent 框架的插件升级比传统应用升级更敏感因为插件一变模型看到的 Prompt、工具定义和调用行为都会变。很多团队升级插件后反馈“效果变差了”但不清楚是插件自身逻辑的问题还是与模型新版本不兼容的问题。DeepSeek Harness 在插件版本管理上支持声明依赖版本范围即插件 A 可以声明只兼容harness-core0.5.0,0.6.0核心引擎升级时如果发现依赖不满足会拒绝加载并在日志中提示。代码回退的操作逻辑也有讲究。最稳的回退是“配置回退 数据回退”。配置回退指把插件配置文件的版本号改回旧版本数据回退则要谨慎涉及会话日志回放时旧版本引擎可能无法读取新格式的日志事件流。我的建议是回退前先备份日志目录回退后跑一次关键会话的批量回放确认旧引擎能正确处理新格式如果日志格式不兼容优先选择“保留新日志只回退插件逻辑”的方案而不是强行让整体版本倒退。5.4 实用插件思路提示词优化插件与工作流编排插件的搭配社区里经常有人问“DeepSeek Harness 最应该装哪些插件”其实没有标准答案但有两个方向是普遍高价值的提示词优化类插件和工作流编排类插件。提示词优化插件的作用是自动根据目标模型调整 Prompt 结构比如把冗长的背景说明压缩成更利于模型理解的指令框架或者在检测到输出格式不合法时自动追加一次格式化修正。工作流编排插件则是对执行逻辑做更高层抽象。比如轩辕编程社区讨论过的“工作流插件”思路把重复出现的流程封装为“阶段函数”每个阶段接收结构化输入输出结构化结果再由编排版控制流转。这种插件设计搭配会话日志回放会产生一个很实用的工作模式你能把“线上失败会话”和“工作流插件调整”直接串联起来——失败会话作为输入调整后的工作流插件作为执行体回放一次看效果不用准备任何手工测试数据。5.5 常见错误速查表现象可能原因解决思路安装后启动即崩溃Python 版本不匹配或依赖二进制不兼容检查python --version与 requirements 约束范围优先使用官方推荐的虚拟环境内网访问模型超时频繁推理服务连接池配置过小调大推理服务的并发限制在模型插件侧提高请求超时工具插件返回内容被截断输出 Token 上限不够或解析器未处理 stream 拼接增大max_output_tokens检查流式响应的聚合逻辑会话日志出现乱码日志编码与终端编码不一致强制设置环境变量PYTHONIOENCODINGutf-8回放结果与原始会话不一致同一次会话事件流被修改或模型版本不一致检查会话日志是否在落盘后被人工编辑确认回放时使用的模型名与原会话一致插件加载顺序错乱未声明依赖关系在 Skill 或插件 manifest 里显式声明depends_on字段6. 一个完整的复盘式实战从内网部署到“让 Agent 稳定跑一周”最后聊一个完整的落地过程把前面讲的点串起来。我们团队当时的目标是在内网服务器上部署一个支持综述写作与代码生成辅助的 Agent 服务要求全离线运行。整个部署链路分为四步先准备离线依赖包和模型服务再配置 Harness 核心引擎然后导入并验证 Skill最后通过会话回放建立持续监控。模型服务这一步我们用一台带两张 A 卡的服务器部署了本地推理显存不够时通过 KV Cache 量化解决上下文长度从 8K 提到 16K 左右。这一步没有什么捷径只能反复压测找推理服务能承载的并发上限。Harness 核心引擎则跑在另一台纯 CPU 服务器上因为它本身不做推理资源占用很低2 核 4G 就能稳跑。Skill 的导入是整个部署里最需要耐心的环节。我们准备了三个 Skill综述排版 Skill、代码风格检查 Skill、以及一个内部命名规范问答 Skill。前两个导入后都正常第三个在导入时反复报依赖缺失查了半天才发现它依赖一个老版本的工具插件而我们的插件仓库里只有新版。解决方式是写了一个兼容适配插件把新版接口包装成旧版签名问题就解决了。这让我意识到插件依赖管理不能只看声明还要做实际的接口兼容测试。上线后的一周里会话日志回放系统起到了关键作用。每天晚上跑一次全量回放把当天所有线上会话重演一遍统计通过率和偏离情况。第一晚就发现有两类会话存在系统性偏差一类是用户问题里包含大量代码片段时Agent 经常把代码误判成指令另一类是综述写作任务里引用格式总是缺页号。定位后分别调整了 Skill 里的输入清洗逻辑和 Prompt 约束第二天回放通过率明显回升。整个调优过程没有一次“凭感觉改”全部是基于回放数据的对比决策。我在实际使用中最大的体会是Agent 框架的工程化核心不是选一个“最聪明”的框架而是选一个能让你“看清楚”的框架。DeepSeek Harness 的插件化给了团队灵活组织的空间回放日志给了我们诊断和迭代的依据。两者结合才真正把 Agent 开发从“炼丹”变成了“工程”。如果你也在做类似的 Agent 项目我建议别急着追求更炫的 Agent 能力先把会话日志和回放链路搭扎实这会是整个项目后期最值钱的基础设施。最后再分享一个小技巧给回放日志设计一个独立的存储分区按日期分目录定期归档。这样既不影响在线会话的写入性能又能为长期的回归测试保留足够的历史样本。Agent 系统会越跑越复杂但有了历史会话库你每一次升级和优化都会有数据支撑而不是靠玄学。
返回列表