Pi / dsh / opencode 三个编码 Agent 的区别与 Pi 用法

Pi(pi-coding-agent)、dsh(DeepSeek Harness)、opencode 都是终端里的编码 Agent,但定位差得远。先分清三者,再记 Pi 怎么配到本机 llama.cpp 服务上。

一、三者区别

opencode pi dsh
定位 成熟的终端编码 Agent 极简 harness(框架) DeepSeek 官方的 Agent 运行时
协议 开源 开源(MIT) 开源(MIT)
内置工具 齐全、开箱即用 只有 4 个(read/write/edit/bash) 插件化,无固定核心
子 agent / plan / MCP 内置 刻意砍掉,靠自己装扩展 靠插件
模型 支持多家 15+ 供应商,可中途切模型 70+ 供应商,模型即插件
特点 稳定、日常首选 系统提示词 <1000 token,context 几乎全留给工作 万物皆插件(Cordis),实验性

一句话:opencode 是成熟工具,pi 是极简零件箱,dsh 是插件生态。都不锁模型、都开源免费,差别在「极简程度」和「插件化程度」。

二、装 Pi

1
npm install -g @earendil-works/pi-coding-agent

验证:

1
pi --version

Pi 的包名是 @earendil-works/pi-coding-agent,命令行入口叫 pi。

三、连本机 llama.cpp 服务

本机跑着 llama-server 起的 OpenAI 兼容接口(端口 20000),Pi 直接走 OpenAI 兼容这条路。

设环境变量:

1
2
setx OPENAI_API_KEY "local"
setx OPENAI_BASE_URL "http://127.0.0.1:20000/v1"

OPENAI_API_KEY 本地服务不校验,随便填占位即可;OPENAI_BASE_URL 指向 llama-server 的 /v1 端点。

改完重开终端,让环境变量生效。验证服务通不通:

1
curl http://127.0.0.1:20000/v1/models

返回 JSON 里能看到模型名(如 qwen3-30b-a3b)即可。

启动 Pi:

1
pi

进去后用 /model 把模型设成服务里的模型名。常用命令:

命令 作用
/model 切换模型
/login 用订阅登录(Claude Pro/Max、ChatGPT Plus 等)
/help 帮助

四、Pi 的核心哲学

Pi 只有 4 个内置工具:read、write、edit、bash,其余操作全交给 bash(git/npm/curl 都靠它)。子 agent、plan 模式、MCP、联网搜索默认都没有,需要时靠 TypeScript 扩展、Skills、包自己加。

这也带来一个后果:Pi 不帮你压缩上下文,塞进去的指令文件会原样发给模型,token 消耗比 opencode 更快,指令文件要精简。

五、本机 llama-server 参考

opencode 里 llama-local 这个 provider 用的就是同一套服务:

1
2
3
4
5
6
{
"llama-local": {
"npm": "@ai-sdk/openai-compatible",
"options": { "baseURL": "http://127.0.0.1:20000/v1" }
}
}

opencode 和 pi 可以共存,指向同一个 20000 端口,不冲突。本地模型走 OpenAI 兼容接口是通用做法,任何支持自定义 baseURL 的编码 Agent 都能这么接。