DeepSeek Harness 常见问题(深度问答)
目录
概念
- Q1: DeepSeek Harness 和直接调用大模型 API 有什么本质区别?
- Q2: Cordis 插件内核中的「Everything is a Plugin」是什么意思?
- Q3: Bundle、Profile、Patch 三层配置如何协同?
- Q4: 什么是可逆副作用(Reversible Effects)?为什么生产必须关心?
- Q5: DSH 说的「三层平面」指什么?
安装配置
- Q6: Node.js 版本有什么要求?pnpm 和 npm 选哪个?
- Q7: 启动后 Web UI 打不开怎么排查?
- Q8: 模型 API Key 应该放在哪里?
- Q9: 如何在 Docker / Kubernetes 中部署?
插件开发
预设选型
- Q15: 四种预设 Standard / Code / Minimal / Creator 怎么选?
- Q16: Minimal 适合哪些场景?
- Q17: Code Profile 和 Standard 能否同一实例?
- Q18: Creator 为什么需要安全警告?
安全审批
Session/可观测
- Q23: Session Log 是什么?和聊天历史有何不同?
- Q24: Resume、Fork、Replay 分别怎么用?
- Q25: OpenTelemetry 应该采哪些指标?
- Q26: 上下文压缩会不会丢重要信息?
多 Agent
生产运维
与其它框架对比
Q1: DeepSeek Harness 和直接调用大模型 API 有什么本质区别?
原理
直接 API 是「一问一答」无状态请求;Harness 是持久 Agent 运行时,负责在多轮对话中挂载插件、执行工具、记录 Session 事件、管理审批与沙箱。原理是 Agent = Model + Harness:模型只负责推理,Harness 负责「手、记忆、规则」。
怎么做
安装 DSH 后通过 Web UI 或 CLI 启动 Cordis 内核,选择 Profile(如 Standard),配置模型 Key。Harness 自动加载 Bundle 中的插件图谱,你的对话发生在 Session 内,工具调用走管道。阅读 入门介绍 理解架构图。
常见误区
误区:认为 Harness 只是「带工具的 ChatGPT 壳」。实际上插件化、Teardown、事件溯源是核心差异,忽略会导致生产泄漏与不可审计。
Q2: Cordis 插件内核中 的「Everything is a Plugin」是什么意思?
原理
模型接入、Agent 循环、工具注册、Web UI、MCP 客户端等在 DSH 中均以 Cordis 插件形式存在。内核只做依赖解析、生命周期与事件总线,能力由插件组合。原理是可逆副作用 ctx.effect() 保证挂载/卸载对称。
怎么做
编写插件实现 apply(ctx),用 ctx.provide 注册服务,用 ctx.effect 注册 Teardown。通过 Bundle 声明插件列表,Profile Patch 调整启用集。见 开发指南。
常见误区
误区:把所有逻辑写进单个「大插件」。应拆分为可测试、可 Teardown 的小插件,避免循环依赖。
Q3: Bundle、Profile、Patch 三层配置如何协同?
原理
Bundle 是基础能力包(含插件列表与默认策略);Profile 是环境级配置(如 standard、code);Patch 是局部覆盖(YAML/JSON),用于生产/评测差异。原理是组合优于继承,Patch 可版本化与回滚。
怎么做
仓库维护 bundles/、profiles/、patches/ 目录。启动参数或 env 指定 PROFILE=prod-standard 加载对应 Patch。生产与评测 Patch 分文件,见 最佳实践 · Profile 分离。
常见误区
误区:在 Web UI 手工改配置当 Patch。手工改无法审计、无法 CI 门禁。
Q4: 什么是可逆副作用(Reversible Effects)?为什么生产必须关心?
原理
插件通过 ctx.effect(fn) 注册副作用,fn 返回 Teardown 函数。卸载插件或关闭实例时必须执行 Teardown,释放连接、监听器、临时资源。原理是长期运行进程不同于一次性脚本,资源泄漏会累积。
怎么做
每个 effect 写对称 Teardown;PR 用 泄漏实验室 验证。Code Review 检查表见 最佳实践。
常见误区
误区:「进程重启就好了」——生产不能频繁重启,且 K8s 滚动升级时旧 pod Teardown 不完整会影响连接池。
Q5: DSH 说的「三层平面」指什么?
原理
通常指控制面(配置、插件挂载)、数据面(Session Log、上下文)、执行面(工具、沙箱、审批)。原理是职责分离便于扩展与审计。
怎么做
设计功能时明确属于哪一面:例如审批策略属控制面+执行面交界;Session 压缩属数据面。多 Agent Spawn 跨控制面与执行面。
常见误区
误区:把 Session Log 当数据库随便改。Log 应 append-only,改历史破坏 Fork/Replay。
Q6: Node.js 版本有什么要求?pnpm 和 npm 选哪个?
原理
官方要求 Node >= 18,推荐 20 LTS。原理是 Cordis 与现代工具链依赖 ES module 与新 API。
怎么做
npx @deepseek-ai/deepseek-harness 或 clone 后 npm install && npm run dev。monorepo 可用 pnpm 节省磁盘。见 快速开始。
常见误区
误区:用 Node 16 或混用包管理器锁文件导致依赖解析不一致。
Q7: 启动后 Web UI 打不开怎么排查?
原理
原理:Harness 绑定监听地址与端口,可能被占用或防火墙拦 截;云主机还需安全组。
怎么做
查控制台 Listening on http://...;ss -tlnp 看端口;本机 curl;云厂商开 inbound。Docker 映射 -p 3000:3000。
常见误区
误区:只查 Harness 不看反向代理(Nginx)是否配了 WebSocket 升级。
Q8: 模型 API Key 应该放在哪里?
原理
原理:Key 属于秘密,不应进 Session Log、插件源码或 Git。
怎么做
使用环境变量或 .env.local(gitignore);生产用 Vault/K8s Secret 注入。轮换时滚动重启实例。
常见误区
误区:把 Key 写在 Profile Patch 并 commit。
Q9: 如何在 Docker / Kubernetes 中部署?
原理
原理:Harness 是有状态组件(Session Log),需持久卷与优雅关闭。
怎么做
镜像内置 Bundle 版本;挂载 PVC 到 Session 目录;配置 liveness/readiness;SIGTERM 触发 Teardown。参考 最佳实践 · 多实例。
常见误区
误区:无持久卷导致 pod 重启丢 Session;无 graceful shutdown 导致 Teardown 跳过。
Q10: 最小插件长什么样?
原理
原理:插件是 { name, apply(ctx) } 对象,apply 内注册能力与副作用。
怎么做
export default { name: 'hello', apply(ctx) { ctx.provide('hello', () => 'world'); } };
挂载后在内核可视化器观察。Day2 见 从零到一。
常见误区
误区:忘记 name 唯一性,与内置插件冲突导致 mount 失败。
Q11: 如何向 Agent 暴露自定义工具?
原理
原理:工具需 Schema(名称、描述、参数 JSON Schema)、执行函数、可选审批分类。描述质量影响模型调用正确率。
怎么做
在插件中注册 tool handler,声明 parameters;走工具管道自动进入 Agent 图谱。复杂工具拆 input validation 与执行。
常见误区
误区:Schema 过于宽泛(z.any()),模型传错参导致运行时错误。
Q12: 插件之间如何共享服务?
原理
原理:Cordis 依赖注入,ctx.provide / ctx.inject(以官方 API 为准)解析依赖图。
怎么做
在 apply 中 provide 接口;依赖方声明 depends 或 inject。避免全局单例绕过 Teardown。
常见误区
误区:循环依赖导致 mount 顺序不确定;应用拓扑排序或拆分插件。
Q13: 如何调试插件挂载失败?
原理
原理:mount 失败常因依赖缺失、版本冲突、同步 throw。
怎么做
看启动日志 dsh.plugin.mount.errors;在 内核可视化器 看依赖图;Minimal Profile 只挂目标插件 isolate。
常见误区
误区:在生产 Profile 直接试挂未 review 插件。
Q14: 发布插件到社区要注意什么?
原理
原理:社区插件会被他人挂载到各种 Profile,需明确权限需求与 Teardown 质量。
怎么做
README 写清 env、Profile 要求;打 dsh-plugin topic;通过 CR 检查表;提供 Minimal 测试说明。毕业作业见 从零到一 Day7。
常见误区
误区:默认请求 Creator 权限;应最小权限原则。
Q15: 四种预设 Standard / Code / Minimal / Creator 怎么选?
原理
原理:预设是不同工具+审批+Token 默认的 Bundle,不是 UI 主题。
怎么做
日常对话 Standard;写代码 Code;基准评测 Minimal;受控创作 Creator(隔离环境)。 预设实验室 并排对比。
常见误区
误区:生产为了省 Token 用 Minimal;或图方便开 Creator。
Q16: Minimal 适合哪些场景?
原理
原理:工具少、Token 低、行为可重复,适合 CI 与回归。
怎么做
维护 eval-minimal Patch;固定模型参数;只读工具为主。不与生产共用 Pool。
常见误区
误区:用 Minimal 做复杂代码任务然后抱怨「Agent 不好用」。
Q17: Code Profile 和 Standard 能否同一实例?
原理
原理:可以但工具图谱叠加会增大模型选错工具概率与安全面。
怎么做
推荐分 Pool 或分实例;路由 Header 区分。Code 实例加强 shell 审批。
常见误区
误区:Code 与用户对话混用导致 shell 工具对用户 Session 可见。
Q18: Creator 为什么需要安全警告?
原理
原理:Creator 工具权限高,模型误调用可造成不可逆破坏。
怎么做
独立集群、全审批、短生命周期、审计延长。生产用户面禁用。见 最佳实践 · Creator 隔离。
常见误区
误区:「我是开发者不怕」——模型行为非完全可控。