Skip to content

Pi Coding Agent 开发理念

原文:《What I learned building an opinionated and minimal coding agent》 作者:Mario Zechner 源码:https://github.com/MarioAriasC/pi-coding-agent

背景

Mario Zechner 基于实践总结了构建极简编程 Agent 的经验。他没有采用 LangChain、Vercel AI SDK 等成熟框架,而是从底层自建所有组件。核心动机来自 Armin 的博文《agents are hard》:直接基于 provider SDK 有更多控制力,API 设计更自由,surface area 更小。

四大核心组件

组件职责
pi-ai统一 LLM API 层,支持多 provider(Anthropic/OpenAI/Google/xAI/Groq/Cerebras/OpenRouter 等)
pi-agent-coreAgent 循环,处理 tool 执行、验证、事件流
pi-tui最小化终端 UI 框架,差分渲染,无闪烁更新
pi-coding-agentCLI,整合以上三个组件

设计哲学:极简主义

pi-coding-agent 明确选择"不做什么":

设计决策说明
Minimal system prompt最简系统提示词,避免过度工程
Minimal toolset最小工具集,只提供核心能力
YOLO by default默认直接执行,不用 preview 确认
No built-in to-dos不内置待办管理
No plan mode无计划模式,减少复杂性
No MCP support不支持 MCP(Model Context Protocol)
No background bash无后台 bash
No sub-agents无子代理,保持单层架构

这种"做减法"的思路值得借鉴:每增加一个特性,都会带来维护成本和复杂度。极简不是功能少,而是确保每个功能都必要。

pi-ai 核心技术要点

统一 API 层设计

只实现了 4 种底层 API:

  • OpenAI Completions
  • OpenAI Responses
  • Anthropic Messages
  • Google Generative AI

Provider 差异处理

各 provider 对字段的支持不一致(如 Cerebras/xAI/Mistral/Chutes),需要逐一适配。这是多 provider 统一抽象的代价。

跨 Provider Context Handoff

Anthropic 的 thinking traces 无法直接传给其他 provider,通过将 thinking 内容转换为 <thinking> 标签文本解决。

Tool Results 分层

Tool 结果分为两部分:

  • LLM 可见部分:供模型继续推理
  • UI 展示部分:供用户查看

这种 split 设计让界面展示和模型推理解耦。

其他技术细节

  • TypeBox schema 验证 tool 参数
  • Request abortpartial results 支持
  • Streaming JSON 渐进式解析:边接收边解析,不用等完整响应

pi-tui 技术要点

两种渲染模式

  • Full screen:独占 viewport,完整 TUI 体验
  • Incremental:追加到 scrollback,适合日志式输出

差分渲染

通过检测状态变化,只更新必要的 UI 部分,避免全局刷新带来的闪烁。

内置组件

  • Autocomplete 编辑器
  • Markdown 渲染

为何自建而非用 Vercel AI SDK

Mario 的选择基于 Armin 的观点:

直接基于 provider SDK 有更多控制,API 设计更自由,surface area 更小。

Vercel AI SDK 等框架屏蔽了大量细节,但同时也限制了灵活性。对于需要深度定制(如 streaming JSON 解析、tool result 分层展示)的场景,从底层构建反而更高效。

我的总结

维度启发
做减法极简不是功能少,而是每个功能都经过必要性检验
分层设计pi-ai/pi-agent-core/pi-tui 职责清晰,组件可独立测试
控制大于抽象在需要深度定制的场景,手写底层比依赖框架更可控
UI 解耦Tool result 分 LLM 可见和 UI 展示两层,思路值得借鉴
避免过度工程No MCP、No sub-agents、No plan mode — 每次拒绝都是对复杂度的控制

pi-coding-agent 的最大启示是:Agent 的复杂度往往来自我们自行添加的特性,而非底层问题本身

为前端工程师打造 · 基于 VitePress 构建