1. 背景与动机 (Background & Motivation)
当前 billion-context-pi 的 compress 工具调用由主模型 (Main LLM) 自身完成。为了降低主模型的 Token 消耗和推理干扰,我们需要引入“独立压缩模型”机制。
痛点:如果让用户在 acp.json 中手动配置压缩模型的 baseUrl 和 apiKey,会造成严重的重复配置。
解决方案:直接复用 Pi Coding Agent 原生的模型配置文件 ~/.pi/agent/models.json。通过新增 /acp compact 命令,让用户一键将已配置的某个模型(如小参数量的 Qwen、GPT-4o-mini 等)指定为专属的“上下文压缩模型”。
2. 命令设计 (CLI Command Design)
在插件中注册 /acp compact 命令,行为定义如下:
/acp compact (无参数):显示当前配置的压缩模型状态。如果未配置,列出 ~/.pi/agent/models.json 中可用的模型 ID 供用户参考。
/acp compact <model-id>:将 <model-id> 设置为当前会话/全局的压缩模型。
/acp compact reset:清除配置,Fallback 回默认行为(由主模型执行压缩)。
状态持久化:
用户的选择应持久化到插件的状态中(例如写入 ~/.pi/acp.json 的 compressionModelId 字段),以便下次启动时自动生效。
3. 系统架构与协同流程 (Proposed Pipeline Flow)
AI 在修改代码时,请遵循以下协同 Pipeline:
- Command Execution: 用户执行
/acp compact qwen-mini。插件验证 qwen-mini 存在于 models.json 中,并将 compressionModelId: "qwen-mini" 写入配置。
- Context Event Trigger: 插件拦截
context 事件,决定需要压缩,主模型调用 compress 工具。
- Interception & Routing (核心修改点):
- 检查配置中是否存在
compressionModelId。
- If Exists: 拦截工具调用。读取
~/.pi/agent/models.json,提取该 model-id 对应的 provider, baseUrl, apiKey, model 等凭证。
- Dynamic Client: 动态实例化一个 LLM Client(独立于主模型),并构建摘要专用的 System Prompt。
- API Call: 将请求发送给该压缩模型。
- Result Injection: 将压缩模型返回的摘要结果,作为
compress 工具的 toolResult 注入回会话历史中。
- Fallback (If Not Exists / Error): 如果未配置,或动态调用的外部模型报错(网络超时、API 余额不足),必须捕获异常并 Fallback 到主模型,由主模型自己生成摘要,确保 Session 不中断。
4. 给 AI/开发者的实现建议 (Implementation Hints for AI)
为了实现此 Feature,建议 AI 代理/开发者重点关注以下模块的修改:
- [ ] 模型配置读取 (Models Config Parsing):
需要读取 ~/.pi/agent/models.json。注意:请使用 os.homedir() 拼接路径(参考项目中已有的 src/user-config.ts 路径解析逻辑),确保跨平台(Windows/macOS/Linux)兼容。
- [ ] 命令注册 (Command Registration):
在 src/commands.ts 中注册 /acp compact 命令,处理参数解析和状态更新,并向用户输出友好的 UI 反馈。
- [ ] 工具执行层 (
src/compress-tool.ts):
修改 handleCompress 逻辑。增加一层判断:如果存在 compressionModelId,则从内存中缓存的 models.json 数据里查找对应的 API 凭证,并发起独立的 HTTP 请求(或复用 Pi 内部的 LLM 调用接口,如果 Pi 暴露了相关 API 的话)。
- [ ] 降级与容错 (Fallback Mechanism - 极其重要):
外部压缩模型的调用必须是 try...catch 包裹的。一旦失败,Log 记录警告,并立即将执行权交还给主模型(即执行原有的压缩逻辑)。
5. 验收标准 (Acceptance Criteria)
1. 背景与动机 (Background & Motivation)
当前
billion-context-pi的compress工具调用由主模型 (Main LLM) 自身完成。为了降低主模型的 Token 消耗和推理干扰,我们需要引入“独立压缩模型”机制。痛点:如果让用户在
acp.json中手动配置压缩模型的baseUrl和apiKey,会造成严重的重复配置。解决方案:直接复用 Pi Coding Agent 原生的模型配置文件
~/.pi/agent/models.json。通过新增/acp compact命令,让用户一键将已配置的某个模型(如小参数量的 Qwen、GPT-4o-mini 等)指定为专属的“上下文压缩模型”。2. 命令设计 (CLI Command Design)
在插件中注册
/acp compact命令,行为定义如下:/acp compact(无参数):显示当前配置的压缩模型状态。如果未配置,列出~/.pi/agent/models.json中可用的模型 ID 供用户参考。/acp compact <model-id>:将<model-id>设置为当前会话/全局的压缩模型。/acp compact reset:清除配置,Fallback 回默认行为(由主模型执行压缩)。状态持久化:
用户的选择应持久化到插件的状态中(例如写入
~/.pi/acp.json的compressionModelId字段),以便下次启动时自动生效。3. 系统架构与协同流程 (Proposed Pipeline Flow)
AI 在修改代码时,请遵循以下协同 Pipeline:
/acp compact qwen-mini。插件验证qwen-mini存在于models.json中,并将compressionModelId: "qwen-mini"写入配置。context事件,决定需要压缩,主模型调用compress工具。compressionModelId。~/.pi/agent/models.json,提取该model-id对应的provider,baseUrl,apiKey,model等凭证。compress工具的toolResult注入回会话历史中。4. 给 AI/开发者的实现建议 (Implementation Hints for AI)
为了实现此 Feature,建议 AI 代理/开发者重点关注以下模块的修改:
需要读取
~/.pi/agent/models.json。注意:请使用os.homedir()拼接路径(参考项目中已有的src/user-config.ts路径解析逻辑),确保跨平台(Windows/macOS/Linux)兼容。在
src/commands.ts中注册/acp compact命令,处理参数解析和状态更新,并向用户输出友好的 UI 反馈。src/compress-tool.ts):修改
handleCompress逻辑。增加一层判断:如果存在compressionModelId,则从内存中缓存的models.json数据里查找对应的 API 凭证,并发起独立的 HTTP 请求(或复用 Pi 内部的 LLM 调用接口,如果 Pi 暴露了相关 API 的话)。外部压缩模型的调用必须是
try...catch包裹的。一旦失败,Log 记录警告,并立即将执行权交还给主模型(即执行原有的压缩逻辑)。5. 验收标准 (Acceptance Criteria)
/acp compact命令,能正确读取并列出models.json中的模型。/acp compact <id>后,触发compress工具时,主模型不再消耗 output tokens,而是由指定的模型完成摘要。models.json读取、Mock 外部模型 API 响应、验证 Fallback 逻辑。README.md和CONFIGURATION.md,说明如何使用/acp compact命令。