本文为社区中文翻译(依据 MIT 协议),阅读英文原文 →。译文可能滞后于上游更新。

自定义提供商

本文为结构化中文编译版;完整代码与类型定义见英文原文

示例扩展

完整的提供商扩展示例:

快速参考

扩展可以注册完整的 pi-ai Provider,或使用旧式的提供商配置形式。需要自定义认证、过滤、刷新或流式行为时,优先用完整 Provider。Pi 会把 models.json 的覆盖组合在已注册的原生提供商之上。

扩展工厂也可以是 async。要动态发现模型时,在工厂里抓取并注册模型(而不是在 session_start 里)。Pi 会等待工厂完成后再继续启动,因此提供商在交互启动期间和 pi --list-models 中都可用。

覆盖现有提供商

最简单的用例:把现有提供商重定向到代理。只提供 baseUrl 和/或 headers(不给 models)时,该提供商的所有现有模型都会保留并指向新端点。

注册新提供商

添加全新提供商时,在配置中指定 models。模型列表来自远程端点时,用异步扩展工厂;这样抓取到的模型会在启动完成前注册好。

提供 models 时会替换该提供商的全部现有模型。

apiKey 与自定义头的取值语法与 models.json 相同:开头的 !command 执行命令取整值,$ENV_VAR${ENV_VAR} 插值环境变量,$$ 输出字面 $$! 输出字面 !

注销提供商

pi.unregisterProvider(name) 移除之前注册的提供商。注销会移除该提供商的动态模型、API Key 回退、OAuth 注册和自定义流式处理器;被覆盖的内置模型与行为会恢复。

初始扩展加载阶段之后的调用立即生效,无需 /reload

API 类型

api 字段决定使用哪种流式实现:

API 适用
anthropic-messages Anthropic Claude API 及兼容端点
openai-completions OpenAI Chat Completions API 及兼容端点
openai-responses OpenAI Responses API
azure-openai-responses Azure OpenAI Responses API
openai-codex-responses OpenAI Codex Responses API
mistral-conversations Mistral 原生 Chat Completions 流式
google-generative-ai Google Generative AI API
google-vertex Google Vertex AI API
bedrock-converse-stream Amazon Bedrock Converse API

大多数 OpenAI 兼容提供商用 openai-completions 即可。模型专属思考等级用模型级 thinkingLevelMap;提供商怪癖用 compatxhighmax 等级需要显式映射条目,中间可以有不支持的空档。

openrouter 对应 OpenRouter 风格的 reasoning: { effort }together 对应 Together 风格的 reasoning: { enabled }(设 supportsReasoningEffort 后也会发送 reasoning_effort);qwen-chat-template 用于读取 chat_template_kwargs.enable_thinking 且需要 preserve_thinking 的本地 Qwen 兼容服务器。

暴露 Anthropic 风格提示词缓存(在系统提示、最后一个工具定义和最后一条 user/assistant/tool-result 文本上带 cache_control)的 OpenAI 兼容提供商,使用 cacheControlFormat: "anthropic"

api: "anthropic-messages" 的 Anthropic 兼容提供商,上游模型要求自适应思考(thinking.type: "adaptive"output_config.effort)时,在模型或提供商上设 compat.forceAdaptiveThinking: true;内置的自适应 Claude 模型已自动设置。仅在提供商发出空思考签名并期望重放 signature: "" 时设 compat.allowEmptySignature: true

OAuth 支持

registerProvider 支持自定义 OAuth 登录流程:提供 OAuthLoginCallbacks(发起授权、等待回调、换取令牌)与 OAuthCredentials(令牌、过期与刷新)。/login 中会出现你的提供商;令牌存入 auth.json 并自动刷新。完整的回调接口与生命周期见英文原文。

自定义流式 API

非标准 API 可以注册自定义流式处理器,绕过内置 API 类型。需要实现:

注册使用 pi.registerStreamingHandler(),事件与内容块类型见英文原文的类型参考。

测试你的实现

配置与模型定义参考

registerProvider 接受的完整配置(baseUrlapiapiKeyheadersmodelsmodelOverrides 等)与模型定义字段(idnamereasoningcontextWindowmaxTokenscostcompatthinkingLevelMap 等)与 models.json 的字段一致,参阅英文原文的 Config Reference 与 Model Definition Reference。