自定义 Provider
通过扩展或 models.json 配置文件,Pi 支持注册和自定义 Provider,以便接入任意 LLM 服务。
概述
自定义 Provider 可以通过两种方式注册:
- 配置文件:在
~/.pi/agent/models.json中声明 Provider 和模型 - 扩展 API:在扩展中调用
pi.registerProvider()进行编程式注册
快速参考示例
一个本地 Ollama Provider 的最小配置:
覆盖已有 Provider
你可以覆盖内置 Provider 的设置,将请求路由到代理服务器或修改默认值。自定义配置会与内置定义合并:
这会保留所有内置 Anthropic 模型,但将请求路由到你的代理服务器。只有你指定的字段会被覆盖,其他字段保持默认值。
你也可以添加自定义请求头:
值解析格式
apiKey 和 headers 的值支持三种格式:
注册新 Provider
完整的 Provider 定义包含所有可用字段:
API 类型
Pi 支持以下 API 类型:
Compat 选项
许多 Provider 提供 OpenAI 兼容 API,但存在细微差异。使用 compat 字段处理这些差异:
Compat 标志
OAuth 支持
扩展可以通过 pi.registerProvider() 注册支持 OAuth 的 Provider:
OAuth 流程会在用户首次使用该 Provider 时自动触发浏览器授权,token 会被安全存储并自动刷新。
自定义流式 API
如果你的 API 不符合标准的 OpenAI 或 Anthropic 格式,可以使用自定义流式模式。Provider 需要实现 Server-Sent Events (SSE) 流式传输。
流式事件格式
内容块类型
流式响应可以包含以下内容块类型:
- 文本内容:
{"type": "text_delta", "text": "..."} - 工具调用:
{"type": "tool_use", "id": "...", "name": "...", "input": "..."} - 思考内容:
{"type": "thinking", "thinking": "..."}
工具调用流程
- 模型在流式响应中发出
tool_use内容块 - Pi 执行工具并收集结果
- 工具结果作为
tool_result消息发送回 API - 模型继续生成后续响应
测试参考
配置完 Provider 后,可以通过以下方式测试: