deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:JopenChen/dsh-go
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
把 DeepSeek Agent 规划能力嵌入 Go 后端的进程内参考实现 · An in-process Go reference implementation of the DeepSeek Harness Agent
Dsh-Go 是一份纯 Go、进程内的 DeepSeek Harness Agent 参考实现——它把官方 DSH 的 Turn/Step 双循环、事件溯源、Goal 规划、工具治理等核心能力接缝,逐词对译为 Go 代码,让开发者可以阅读、调试、复刻一个真实 Agent 的内部运作。
它定位为参考实现与学习素材,而非与 LangChain / Eino / 官方 DSH 竞争的生产级框架:生态、背书与多模型适配均非本文目标,本文目标是"读懂 Agent 内核"。
❓ 快速了解本项目 —— 想先弄清楚"这是什么 / 和 Eino·LangChain 什么关系 / 有什么优势 / 适合什么场景 / 值不值得用"?请直接阅读 FAQ(常见问题)。
examples/tutorial 三步渐进示例,是一条清晰的内核学习路径。pkg/session):追加式日志 + 派生 fold 投影;45+ 事件词汇表;时序不变量由引擎强制。pkg/agent):取消 / 超时 / 追踪经 ctx 逐层传播到工具与 LLM(H01)。pkg/tools):pre → execute → post → result 中间件链;带 sync.Pool 与只读注册表,高并发更稳。pkg/llm/provider_deepseek):流式 SSE + 生产级连接池 + 与官方 error.ts 对齐的稳定失败分类。pkg/telemetry、pkg/tokenmeter):OTel 桥、会话遥测钩子、token 计量与预算、缓存指标。作为参考实现,你不一定需要
go get引入——最轻的入门方式是直接跑examples/并对照源码阅读。若确实想在本项目上做实验,可这样引入:
安装:
go get github.com/JopenChen/dsh-go@latest
最小可用示例 —— 创建会话、追加事件、派生状态:
package main
import (
"fmt"
"github.com/JopenChen/dsh-go/pkg/brand"
"github.com/JopenChen/dsh-go/pkg/session"
)
func main() {
sl := session.NewSessionLog(brand.NewSessionID("hello"))
if _, err := sl.Append(session.UserMessageData{Content: "Hello"}); err != nil {
panic(err)
}
proj := session.FoldAll(sl.Events())
fmt.Printf("%d message(s) in log\n", len(proj.Messages))
}
仓库内置九个可直接运行的示例,全部零依赖可跑(除 chat 需 API Key),建议从 tutorial 开始:
go run ./examples/tutorial # 教学三步曲:事件溯源 → fold 投影 → Goal 状态机(推荐入门)
go run ./examples/agent_loop # 完整 Agent Turn/Step 循环(含工具续步)
go run ./examples/usage # 会话/投影/Goal 工具/命令/DeepSeek Provider/持久化
go run ./examples/todo # Todo 整体替换待办(规划原语)
go run ./examples/workflow # 工作流编排:Pipeline 串行 / Parallel 并行 / Agent 步骤 / 取消级联
go run ./examples/subagent # 子代理:多后端派生 + 家谱 + 父释放级联
go run ./examples/sandbox_approval # 沙箱(在哪儿) + 审批(能不能) 受控执行
go run ./examples/mcp # MCP 客户端 → 工具桥(内存 Transport 模拟服务器)
go run ./examples/chat # 真实调用 DeepSeek 大模型的多轮对话(需 DEEPSEEK_API_KEY)
pkg/session / pkg/goal 源码阅读。todo_write 写入待办、从事件日志派生读回、观察旧列表被整体覆盖。Pipeline 串行短路 / Parallel 并发保序 / Agent 子代理步骤 / ctx 取消级联终止。Runtime.Spawn 多后端派生 + ForkLineage 家谱归因 + Drain 收结果 + DisposeOwner 父释放级联 + 未知后端稳定错误。Transport 模拟 MCP 服务器,演示 Initialize → ListTools → Bridge.ToTools → 统一调用 → 挂进流水线 的完整链路,零网络零依赖。DEEPSEEK_API_KEY,构造 DeepSeek provider,通过 LLMAdapter.Chat 发起流式多轮对话,展示 ChunkReasoning / ChunkText / ChunkToolCall / ChunkDone 分片消费、LlmFailure 稳定分类与 usage 用量统计。Session (Event Sourcing) ──► fold / Projection ──► Prompt Assemble ──► Agent Turn/Step Loop
│
Tool Waterfall (pre → execute → post → result) ◄─┘
每项能力都是一个 能力接缝(Capability Seam):服务定义 + Provider。替换 Provider 即改变整体行为,与官方 Capability Seam 设计一致。
| Package | Capability |
|---|---|
pkg/session |
Event sourcing, 45+ vocabulary, fold, invariants, incremental projection |
pkg/agent |
Agent registry, Turn/Step loop, cancel causes, request-error retry |
pkg/tools |
Waterfall pipeline, execution context, presentation, restriction, schema, retention |
pkg/llm |
LLM seam, stream protocol (SSE), failure taxonomy, retry, cache probe |
pkg/goal / pkg/todo / pkg/plan / pkg/skills |
Planning primitives |
pkg/persistence / pkg/storage |
JSONL (sharded/async) & SQLite(→FTS5) backends, CAS storage domains |
pkg/subagent / pkg/workflow / pkg/mcp |
Subagents, workflow engine, MCP client→tool bridge |
pkg/fs / pkg/shell / pkg/subprocess / pkg/spill / pkg/jobs / pkg/terminal |
File & process execution |
pkg/settings / pkg/credentials / pkg/approval / pkg/sandbox / pkg/scope |
Config, credentials, safety, scoping |
pkg/telemetry / pkg/tokenmeter / pkg/feedback / pkg/sessionquery |
Observability, metering, feedback, search |
关键路径均做过并发与分配级加固(go test -bench 可复现):
| 场景 | 优化 | 实测 |
|---|---|---|
| Session 派生投影(10k 事件,每步读) | 增量 fold(H04) | 16.9s → 4.9ms,≈ 3437× |
| 共享注册表读(100 键 Get) | Freeze 后无锁快照(H07) | 65.6 → 49.4ns,快 25%,0 alloc |
| 持久化 IO | bytes.Buffer + bufio.Writer 双 sync.Pool(H05) |
热路径分配显著下降 |
| Tool 流水线 | ExecContext 对象池(H06) | allocs 9 → 8 |
site/)。docs/FAQ.md —— 新手 FAQ:本项目是什么、与 Eino / LangChain / 官方 DSH 的关系、审计算不算独有、适合什么场景、值不值得用。docs/TASKS.md · docs/tasks.json —— 结构化任务表(机器 + 人可读)。docs/TEST_CASES.md —— 328 条测试用例设计矩阵。docs/CACHE_HIT_RATE_PLAN.md —— 前缀缓存命中率对齐方案。master @ cd5ef81(dsh-0.1.2-alpha.1)欢迎提交 Issue 与 PR。请确保改动通过 gofmt、go vet ./... 与 go test ./tests/ -count=1。
See LICENSE.
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。