mobile wallpaper 1
mobile wallpaper 2
mobile wallpaper 3
mobile wallpaper 4
3698 字
11 分钟
Pi 和 DeepSeek Harness 简要对比
2026-08-21

Pi 和 DeepSeek Harness 在回答同一个问题:模型和真实世界之间,那一层该长成什么形状。 答案几乎相反。

PiDeepSeek Harness
口号Primitives, not featuresEverything is a plugin
复杂度先砍掉装进插件里
不可替换的内核极薄的 loop + 四个工具宣称没有,连 Agent Loop 都是插件
扩展权人写 TypeScript,或让 agent 改自己运行时热插拔,模型也可以现场挂
信任对象写代码的人以后能改自己 harness 的模型
气质Unix:小核心、可组合、可审计Eclipse / OSGi:内核是插件总线
今天当不当主力不该,还是 developer preview

DeepSeek Harness 的 Tianyi Cui 公开说过:Pi 是很多 DeepSeek 研究员和开发者的日常主力;DSH 连非 DeepSeek 模型的适配层都复用了 Pi 的 LLM adapter。

earendil-works
/
pi
Waiting for api.github.com...
00K
0K
0K
Waiting...
deepseek-ai
/
deepseek-harness
Waiting for api.github.com...
00K
0K
0K
Waiting...

Harness 是 Agent 减去 LLM#

Harness 负责上下文怎么组装、工具怎么暴露、loop 怎么转、session 怎么存、失败怎么回、权限怎么卡、UI 怎么呈现。模型只负责想和说。

这层以前藏在 Claude Code、Codex、Cursor 的产品内部,容易让人以为模型变强了 agent 就变强了。2026 年的一次对照把这个拆开了。

Composio 用同一个 DeepSeek V4 Flash,在多个 harness 上跑 30 道高难度任务:

Harness通过单次成功均价
Pi20/30(66.7%)$0.028
Claude Code16/30$0.195(约 7 倍)
OpenCode14/30

同一模型,换一层壳,成功率差 20 个百分点,成本差一个数量级。

Databricks 在自家百万行仓库上做过同类实验:同样的模型、同样的 thinking effort,不同 harness 的单轮上下文能差到 3 倍,总成本超过 2 倍。简单 harness(Pi)在他们的负载上表现最好。

真正要看的是两种对编排层的世界观。

Pi:给你原子,不给你功能#

作者 Mario Zechner(badlogic,libGDX)早期是 Claude Code 重度用户。受不了两件事:功能加得越快,行为越不可预测;他想要一个能看清、能改、能审计的 harness,市面上几乎没有。原则是:If I don’t need it, it won’t be built.

仓库从 badlogic/pi-mono 迁到 earendil-works/pipi.dev 第一句是:There are many agent harnesses but this one is yours.

Armin Ronacher 写过 Pi: The Minimal Agent Within OpenClaw。OpenClaw 建在 Pi 之上。薄核心加自扩展,能长出完全不同的产品。

「没做的事」比功能列表更重要:

  • 没有 MCP。去做带 README 的 CLI,或自己写加 MCP 的 extension。
  • 没有 sub-agent。用 tmux,或自己装包。
  • 没有确认弹窗。跑容器,或自己写权限门。
  • 没有 plan mode。写 PLAN.md,或装一个包。
  • 没有内置 todo。用 TODO.md
  • 没有 background bash。用 tmux,可观察、可交互。

每往核心里加一个便利功能,就是在替所有用户决定工作流,并且给模型一份永远付费的上下文税。Mario 写过,Claude Code 的系统提示动辄 7k–10k token,打第一个字之前就已经在烧钱。Pi 把系统提示加四个工具定义压在 1000 token 以内。

工具职责
read读文件 / 图,支持 offset/limit
write创建或整文件覆盖,自动建目录
edit精确字符串替换,oldText 必须完全匹配
bash同步执行命令,可设超时

grep / find / ls 存在,默认关。文件枚举 bash 已经会;再暴露一遍只是多一份 schema。默认没有权限弹窗:agent 能写代码并且跑代码之后,安全边界基本就没了。隔离丢给容器,比安检剧场诚实。

Harness 应该像一把锤子,不应该像一个 IDE。Pi 的产品不是「编码 agent」,是让你造出自己那把锤子的底座。

四层都可以单独拿走#

@earendil-works/pi-ai 统一多厂商 LLM API
@earendil-works/pi-agent-core Agent loop + 工具执行 + 事件流
@earendil-works/pi-tui 差分渲染的终端 UI
@earendil-works/pi-coding-agent 把上面焊成 CLI
@earendil-works/pi-telemetry 厂商中立的可观测契约

pi-ai 处理 OpenAI Completions / Responses、Anthropic Messages、Google GenAI 对不齐的那一层:思考痕迹、工具调用、token 记账、中途 abort、跨厂商切模型。Pi 把 Anthropic 的 thinking 转成 <thinking> 再交给别的模型。

pi-agent-core 是那个 loop。社区拆过,大约 418 行 TypeScript:用户消息 → 模型 → 工具调用 → 结果回灌,直到模型说做完。没有 max-steps 人工上限。事件驱动,支持在 assistant 回复前插入 steering / follow-up。

pi-tui 是自己写的 retained-mode + 差分渲染 + CSI ?2026 同步输出。Ronacher 的评价:不闪、不占内存、不随机坏。

pi-coding-agent 才是用户摸到的一层:session 树、AGENTS.md / SYSTEM.md、slash 命令、主题热加载、HTML 导出。四种运行模式从第一天就没锁成终端玩具:

模式用途
Interactive完整 TUI
Print / JSON脚本、管道
RPC非 Node 进程用 stdin/stdout JSON 嵌它
SDK嵌进别的应用。OpenClaw 这么长出来的

观测契约本身不带 exporter:

讲解 @earendil-works/pi-telemetry
读 earendil-works/pi 的 packages/telemetry:它为什么没有 exporter,startSpan 怎么结算,schema 为什么只在类型里生效
2026-08-21开发#Pi#Telemetry#TypeScript

扩展看起来也像插件:extension / skill / prompt template / theme / package。第一选择不是去下一个别人写好的包,而是:没有的功能让 agent 给自己写,/reload 继续干。

Session 是树不是线。可以 fork 一条旁路去修坏掉的工具,修完 rewind 回主线,Pi 把旁路上发生的事摘要回来。这是为软件改软件准备的,不是为多开几个 chat tab。

社区已经长出 sub-agent、plan mode、MCP、沙箱、SSH、路径保护、状态栏,甚至等模型时在终端里跑 Doom。全部可选,不进核心、不进默认系统提示。Playwright MCP 21 个工具大约 13.7k token,Chrome DevTools MCP 26 个大约 18k。真需要浏览器,写一个带 README 的 CLI 或 skill,按需加载。

极简前缀碰巧打中 prefix cache#

DeepSeek API 是 prefix KV cache:下一轮必须从第一个 token 起字节级相同,缓存才命中。前缀越早被改,后面作废得越多。

Agent 请求的前缀通常是系统提示 + 工具 schema + 对话历史。多数 harness 在这里埋雷:每轮改日期和工作目录、按需装卸工具导致 schema 抖动、重写摘要、注入时间戳。有记录的事故是 Qwen Code 加 ToolSearch 之后,DeepSeek 缓存命中从约 98% 掉到约 81%,日账单翻 3 倍。

Pi 的系统提示几乎静态,工具集合几乎不变,compaction 走扩展且可以做成确定性(temperature 0 + hash)。开发者 0xEvan 用 Pi 调 V4 Flash,处理近 10 亿 input token,缓存命中 99.93%,账单 2.65;无缓存估2.65;无缓存估 132。

这不是 Pi 为 DeepSeek 定制。是极简前缀打中了 prefix cache 的物理约束。本地模型同样受益:前缀稳,prefill 才能复用。

DSH:没有特权核心#

2026 年 8 月 13 日前后,DeepSeek 以 MIT 开源 deepseek-ai/deepseek-harness。写作时约 0.1.0-rc.8 的 developer preview,官方明确会有破坏性变更,暂不收外部 PR。启动:npx @deepseek-ai/dsh web

官网上的定义干净:Agent = Model + Harness。两句原则:Everything is a plugin;Every run is traceable。

底层是 Cordis——Shigma 从 Koishi 里长出来的元框架。理论文章是北大 + DeepSeek 的 A Programming Paradigm for Spatiotemporal Composability。内核基因是「聊天机器人要热插拔插件」,不是「程序员要一个稳的 CLI」。后面所有过度抽象的争议,根子都在这里。

Pi 说核心要薄、外围可插。DSH 说没有不可替换的核心。模型适配器、工具注册表、session 日志、沙箱、UI、Agent Loop 本身ctx.agentLoop)都是插件。官方原话:There is no privileged core to patch。

默认 Coding Agent 只是用这些插件拼出来的一个答案。四种 mode 是同一袋插件的不同组合:

Mode实际是什么
Standard完整工具集:文件、shell、搜索、skills、plan、goals、subagent
Code生成一份 TypeScript SDK,让模型写一段程序一次编排多步
Minimal只留 persistent bash + str_replace_editor,给评测用
Creator检查当前运行时、在内存里试插件、组出新 mode

Minimal 用来跑官方评测——承认 scaffolding 会污染模型分数,先提供一个几乎裸的对照面。Claude Code / Codex 可以整颗当成 subagent 插件挂进来:编排层是 DSH,脏活可以外包。这是平台思维。

Cordis 在形式化什么#

时间可组合:组件离开时,做过的事能不能撤销。答案是 revertible effects,卸载按 LIFO 回放:

ctx.effect(() => {
registerSomething()
return () => unregisterSomething()
})

fiber.ts 大约 750 行,管 PENDING → LOADING → ACTIVE → UNLOADING → DISPOSED、并发卸载、disposer 失败、热替换回滚。

空间可组合:系统能不能知道这个组件依赖什么。插件用 inject: ["llm", "tools", "sessions"] 声明。服务到了就启动,走了就停,不靠手写 boot 顺序。

事件契约写进类型:

模式等待顺序返回值典型用途
emit注册序旁观
waterfall注册序around-middleware,可短路
parallel并行扇出
serial注册序有序决策

agent/pre-stepagent/requestllm/streamtools/pre-execute|execute|post-execute 都是 waterfall。不调 next() 就是否决。

理论成立的前提:每个 effect 真的可逆,且互不破坏。发邮件、删库、打款没有逆操作。Cordis 也不能证明 cleanup 真的撤销了 startServer()。契约一旦被 LLM 卷进来,上下文窗口会引入框架保证不了的隐式依赖。

运行时怎么拼#

一次启动是有序插件树,不是扫一遍 plugin 目录:

bundle(按 profile 列出的顺序)
→ profile 自己的 cordis.patch.yml
→ 用户 home 级 patch
→ --patch 覆盖

dsh-base 是每一棵树的第一层。dsh --profile web --dump-config 能把本机真正启动的树打出来,任何一行都可以被 patch 换掉。

职责ctx
core/session只追加的 SessionEvent 日志ctx.sessions
core/system-prompt提示词段落 + 工具 schemactx.systemPrompt
core/tools作用域化工具注册 + 带守卫的执行管线ctx.tools
core/agentAgent 接口、活注册表、agent/*ctx.agents
core/agent-loop默认 driverctx.agentLoop
llm/llm消息/流词汇 + 适配缝ctx.llm

真正不能换、还被不变量钉死的,是 append-only session log。官方:Model-visible means logged。 Fork、resume、replay、transcript、遥测、UI 都是这条流的投影。

Pi 的 session 树在使用者工作流上更强(旁路修工具再 rewind)。DSH 的 event log 在系统可观测性上更强。

Turn 状态机:

turn/start
claim 下一步输入 + 一条排队消息
组装 prompt sections + tool schemas
→ agent/pre-step 拒绝 | enter(messages)
step/start
从 log derive 模型历史
agent/request → llm/stream → assistant/chunk* → assistant/message
tool/call* → tools/pre-execute → execute → post-execute → tool/result*
step/end
工具还欠一轮,或新输入到了 → 下一 step
→ agent/turn-stopping
turn/end

Capability seam 必须同时有 Service Definition、Provider、Consumer。文件系统和 subprocess 共享同一个 execution world——指到远程沙箱,Bash / PTY / LSP 一起走。

沙箱按 OS 落地:Linux Landlock、macOS Seatbelt、Windows ACL token。网络和进程可见性不在这套词汇里。danger-full-access 这种预设存在。预览期产品,别当隔离边界。

热插拔、可卸载、loop 可换,对每天写业务的人几乎没有刚需。Markdown + CLI + 重启两秒能解决 95% 的扩展问题。这些能力只有在一个前提下才突然合理:模型要亲手改自己的运行环境。 官方现在还克制:动态插件只活在内存里,重启就没了。方向已经做成架构里的一等公民。

Pi 是 To Dev 的现在时。DSH 是 To LLM 的将来时。

信人还是信契约#

Pi 信任坐在键盘前的人:四个工具,一个 loop,YOLO,失败时看终端里每一步。

DSH 信任运行时契约:没有默认立场,profile 说了算;失败时看 trajectory 和按源检查的 event stream。人仍然可以控制,但控制面从「读 418 行 loop」变成「读一棵插件树 + 一张事件表」。

这是 Unix 对 Eclipse 的重演。抽象层级不同,不是谁对谁错。

Pi 消灭复杂度。核心越薄,模型越不容易被噪音带跑,缓存越稳,一个人能把整个 loop 装进脑子。代价是 plan mode、权限门、多 agent 得自己装或自己写。开箱即用的完整工作流不是它的目标。

DSH 结构化复杂度。理论上能换掉任何一层。代价是认知从「读一个小 loop」变成「Cordis + seam + profile/bundle/patch + 四种事件模式」。把 Agent Loop 和 Memory 这种性质完全不同的东西压成同类插件,是「一切皆文件」反复犯过的错。理论优美,对接成本经常高于抽象本身的价值。

诚实的方向也不同。Pi:人眼可观测,你看见模型看见的东西。DSH:机器可重建,六个月后回放这次 run,并证明当时模型看到了什么。审计、RL 数据、harness 自进化更吃后者。

社区有一组同任务对比(单一样本,方向可信、精度当参考):

DSHPi + V4-Flash
Input680,000245,232
缓存命中93%98.2%

估算未缓存 input 大约差 10 倍。Standard mode 工具多、流程长,和「完整默认答案」一致。Minimal mode 会好很多——那基本上在向 Pi 的形状靠拢。

Prefix cache 是 2026 年 agent 成本的第一物理定律。DSH 架构允许把 prompt 组装做成前面冻住、只在后面追加(system-prompt 是插件),默认配置现在显然还没做。

PiDSH
默认安全YOLO,和启动它的用户一样有 workspace-write + 审批,也有 danger-full-access
官方态度隔离请用容器;内置权限是剧场OS 级 sandbox + 审批策略是插件
实际缺口完全依赖外部隔离网络和进程可见性不在 sandbox 词汇里

两边都不能当生产隔离边界。Pi 至少不假装有。可替换不等于已治理。

graph TD human["人写扩展"] pi["Pi"] openclaw["OpenClaw"] dsh["DeepSeek Harness"] cc["Claude Code 当 subagent"] cx["Codex 当 subagent"] human --> pi pi -->|"SDK 嵌进去"| openclaw pi -->|"DSH 复用了 pi-ai"| dsh dsh --> cc dsh --> cx

Pi 可以当 SDK 嵌进 OpenClaw 这种完全不同的产品;DSH 可以反过来把 Claude Code、Codex 当成工人。Pi 卖的是一个稳定、可读的 loop。DSH 卖的是一棵能把别的 loop 也挂上去的插件树。

主要来源:

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Pi 和 DeepSeek Harness 简要对比
https://l1ngg.info/posts/tech/pi-vs-deepseek-harness/
作者
L1ngg
发布于
2026-08-21
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录