防御防御
用户 ID 6276 · 当前名首次快照 2026-08-12 10:14:19 · 当前名始于 2026-08-12 10:14:19 · 原站主页: https://linux.sb/user/6276
共 20 楼
我最近在造一个 coding agent,https://github.com/pulseaiclub/phi 定位是 Pi 的兄弟,在给他加 subagent 能力的时候我考虑了好久,纠结到底该不该加,
目前有2 大主流,阵营一方面就是 主流的 agent 工具,另外一个就是 PI
主流的 agent 编程工具,比如 Cursor,Claude code,还有 Codex 其实都是支持 多 agent 编排的,
比如做代码一对一翻译的时候 Cursor 会单独开一个 Exporte agent 去探索代码实现细节,然后返回给主 Agent 一个markdown。这样做的一个好处就是避免在主 Agent 的对话窗口塞非常多消息。
但是事情总是有 例外, Pi 就不支持 SubAgent 能力,作者给出的理由如下:
- 你完全无法了解该子代理的具体操作。它就像一个黑盒中的黑盒。代理之间的上下文传递也很差。
- 编排代理决定将哪些初始上下文传递给子代理,而你通常对此几乎没有控制权。
- 如果子代理出错,调试起来会非常痛苦,因为你无法查看完整的对话过程
但之后作者又说:
人们会在一个会话中中途使用子代理,以为这样能节省上下文空间——这确实没错。但这是对子代理的错误理解。
在会话中途调用子代理来收集上下文,说明你事先没有做好规划。
如果你需要收集上下文,应该先在单独的会话中完成这一步。生成一份工件(artifact),之后在一个全新的会话中使用它,把你的代理需要的所有上下文都喂给它,而不用把工具输出塞进上下文窗口造成污染。
这份工件对下一个功能也同样有用,而且你能获得完整的可观测性和可操控性——这在上下文收集阶段尤为重要。
从上面看,其实我觉得,subagent 能力其实还是非常有必要的, 兄弟们觉得呢?
@嘉豪 #4 现在支持 windows 的下载脚本了:irm https://raw.githubusercontent.com/pulseaiclub/phi/main/scripts/install.ps1 | iex
可以呀,打包的Realease里面有windows版本的,运行不了是下载脚本下载不成功的问题吗,
上篇帖子简单介绍过 Phi的功能,但是写的很乱,这篇把细节展开聊聊。
Phi 是一个用 Go 编写的最小化终端编码代理框架(harness),GitHub 上已有 28 个 star,希望大家多多关注:github.com/pulseaiclub/phi。
1. 不绑定任何模型
这是 Phi 刻意为之的设计。
现在模型发布的速度太快了,如果每出一个新模型,都要等 coding agent 的作者适配,那太慢了。所以 Phi 的做法是:模型随时可配置、随时可切换,用完就删也不心疼——方便我们随时"白嫖"新模型。
实现上,只要模型兼容 OpenAI 接口或走 Anthropic 协议就能直接用。同时提供了一个专门 HMTL 页面就能用
2. 非常轻量
这要归功于 Go:编译快、单二进制体积小、性能也不差。实测(stripped release 构建,CGO_ENABLED=0)发布二进制只有约 12 MB,比"不到 20MB"还小一截。
3. 权限系统
权限系统是必要的,尤其是当有些模型乱删文件的时候,我觉得它真有必要,这也是我为什么每次用 Pi 的时候心惊胆战的
Phi 的模型默认是"只读"的:代理默认只能读文件,遇到写入或执行命令这类破坏性操作,会先弹出审批对话框,由你选择批准、带反馈地拒绝、或对本次会话全部放行。规则可以细到命令级别:比如 bash.allo
w 放行 go test ./...,bash.deny 拦掉 rm -rf *;fetch 也支持按域名白名单限制。
4. 多 Agent 能力
只有一个主 Agent 是不够的——上下文会被塞得越来越满。比如"去代码库里搜一下"这种任务,我们只关心结果、不关心过程;如果只有主 Agent,中间过程也会被塞进上下文,白白占空间。
Phi 内置一整套子代理工具(agent_spawn / agent_task / agent_wait / agent_list / agent_log / agent_cancel),并且做了一层关键设计:子代理的完整记录存放在 ~/.phi/jobs/<id>/,不会注入主 Agen
t 的上下文——只有任务总结会返回。这正是"只关注结果"的实现方式:主 Agent 的上下文始终干净。子代理还有角色区分(explore 只读搜索 / review 只读检查 / worker 独立编辑),默认只读,想精简会话
也可以整组关掉。
5. Hashline 编辑
主流的 Agent 大多用 Replace(搜索字符串替换)来改文件,Phi 没有采用这种模式。它的缺点是确定性的:一旦上下文里的文件内容过期,模型就容易"乱改"。
Phi 用的是 Hashline——读取文件时给每一行生成一个短 hash(FNV-64a,映射到 10000 个两字符码字,格式是 行号#hash|内容),编辑时带上这个 hash;hash 匹配才允许改动,不匹配说明文件已经被改过了
不匹配时给出新引用:hash 对不上时,Phi 不会只说"不行",而是直接返回变化行的新 hash(>>> 标记),模型可以立刻用新引用重试,不用重新读整个文件。
6. 好看的 UI
TUI 框架是手写的,跑在自己家的纯 Go 库之上,核心非常小,没有历史包袱——首帧 40ms 就是"性能有保障"的证据。
功能上不是花架子:Markdown 渲染 + 代码语法高亮、4 套主题(Dark / Darcula / Pink / Terminal)、Ctrl+K 命令面板、@ 模糊文件选择、/sessions / /resume 会话命令、!command 在对话里直接跑本地命
令并流式输出。
7. 保持兼容
• Skills
• Sessions:会话按工作目录自动持久化(JSONL 轨迹),/sessions 列出、/resume <id> 恢复,
• 会话压缩:长会话会自动做上下文压缩(compaction),不会一路膨胀到爆。
8 .开放的,随时欢迎任何人去参与到这个项目来
@zihanla #17 pi 确实非常不错,插件体系做的都非常的优秀,但是还是缺少了一些东西,比如 subagent 还有 权限控制,虽然都可以通过插件补齐,但是做完体积还是很大,然后我受不 ts 写的那坨,就用go 写了个新的
抽抽抽
@我推的YMGC #12 是不支持系统提示词的,改提示词容易飘,效果不好,目前这个提示词是我调出来的,效果挺不错
@我推的YMGC #11 目前没有加 mcp 的功能,但是可以支持 SKILL 的,因为 Mcp 太重了,并没有cli 轻便
Freedom
没办法,现在已经回不去手工代码的时代了,自己写的一定没AI 快,一定没AI 好
非常贵,但是效果也就那样
参与参与,马上加入
@痛失姓名F4X6 #6 欢迎,有问题随时issue 反馈
@Denia-bot #4 哈哈可以试用一下,一块交流
不错,已Star, 我也搞了一个类似的 https://github.com/pulseaiclub/phi
我自己用 Go 写了一个叫 Phi 的编码 Agent,tui啥都都是从头开始造的
https://github.com/pulseaiclub/phi
相比Pi 来说做了一些增强
- 不限制模型,支持 openai 和 a/ 的两种方式
- 内存非常多小,只有12 mb
- 支持权限系统,安全,对一些敏感操作
- 支持 hashline 编辑,不会乱改代码
- 支持多 Agent
- 界面好看
- 和PI 一样 支持上下文压缩,支持树形的 session
- 支持 skills
欢迎大家一起开发贡献