自定义模型
通过 ~/.pi/agent/models.json 添加自定义提供商和模型(Ollama、vLLM、LM Studio、代理等)。
目录
最小示例
对于本地模型(Ollama、LM Studio、vLLM),每个模型仅需 id:
{
"providers": {
"ollama": {
"baseUrl": "http://localhost:11434/v1",
"api": "openai-completions",
"apiKey": "ollama",
"models": [
{ "id": "llama3.1:8b" },
{ "id": "qwen2.5-coder:7b" }
]
}
}
}apiKey 是必需的,但 Ollama 会忽略它,因此任何值都可以。
某些 OpenAI 兼容服务器无法理解用于推理模型的 developer 角色。对于这些提供商,将 compat.supportsDeveloperRole 设置为 false,这样 Pi 会将系统提示作为 system 消息发送。如果服务器也不支持 reasoning_effort,同样设置 compat.supportsReasoningEffort 为 false。
您可以在提供商级别设置 compat 以应用于所有模型,或在模型级别设置以覆盖特定模型。这通常适用于 Ollama、vLLM、SGLang 等 OpenAI 兼容服务器。
{
"providers": {
"ollama": {
"baseUrl": "http://localhost:11434/v1",
"api": "openai-completions",
"apiKey": "ollama",
"compat": {
"supportsDeveloperRole": false,
"supportsReasoningEffort": false
},
"models": [
{
"id": "gpt-oss:20b",
"reasoning": true
}
]
}
}
}完整示例
{
"providers": {
"ollama": {
"baseUrl": "http://localhost:11434/v1",
"api": "openai-completions",
"apiKey": "ollama",
"models": [
{
"id": "llama3.1:8b",
"name": "Llama 3.1 8B",
"contextWindow": 131072,
"maxTokens": 4096,
"input": ["text", "image"],
"reasoning": false
},
{
"id": "qwen2.5-coder:7b",
"name": "Qwen2.5-Coder 7B",
"contextWindow": 32768,
"maxTokens": 8192,
"input": ["text"]
}
]
},
"openai": {
"api": "openai-messages",
"apiKey": "env:OPENAI_API_KEY",
"models": [
{ "id": "gpt-4o" },
{
"id": "gpt-4o-mini",
"cost": { "input": 0.05, "output": 0.075 }
}
]
},
"anthropic": {
"api": "anthropic-messages",
"apiKey": "env:ANTHROPIC_API_KEY",
"models": [
{
"id": "claude-3-5-sonnet",
"name": "Claude 3.5 Sonnet",
"contextWindow": 200000,
"maxTokens": 8192,
"input": ["text", "image", "pdf"],
"reasoning": true
}
]
}
}
}支持的 API
Pi 支持多种消息 API:
| API | 说明 |
|---|---|
openai-completions | OpenAI 文本补全 API(旧式) |
openai-messages | OpenAI Chat Completions API |
anthropic-messages | Anthropic Messages API |
vertex | Google Vertex AI |
custom | 自定义端点(需完整配置) |
提供商配置
每个提供商需要:
baseUrl:API 端点api:使用的 API 类型apiKey:密钥或env:VAR引用
某些 API 类型还需要额外字段,详见下面的模型配置。
模型配置
每个模型条目包含:
| 字段 | 说明 |
|---|---|
id | 必需 - 模型标识符(如 "gpt-4o"、"llama3.1:8b") |
name | 显示名称(可选,默认使用 id) |
reasoning | 是否启用推理模式(如 Claude 3.5 Sonnet) |
input | 支持的输入类型:["text"]、["text","image"]、["text","image","pdf"] 等 |
contextWindow | 上下文窗口大小(tokens) |
maxTokens | 最大输出 token 数 |
cost | 计费信息(可选) |
prebuilt | 是否启用内置配置(如 Anthropic) |
compat | 兼容性选项(见下文) |
Cost 格式
"cost": {
"input": 0.0015, // 每千 tokens
"output": 0.002,
"cacheRead": 0.0003,
"cacheWrite": 0.0003,
"total": 0.0041
}每个模型的覆盖
可在 providers 级别设置默认值,然后在模型级别覆盖:
{
"providers": {
"ollama": {
"models": [
{
"id": "llama3.1:8b",
"contextWindow": 128000,
"maxTokens": 2000
}
]
}
}
}兼容性选项
Anthropic(仅用于 anthropic-messages):
supportsDeveloperRole- 是否支持developer角色supportsReasoningEffort- 是否支持reasoning_effortsupportsSystemMessage- 是否支持系统消息(默认 true)supportsImages- 图像支持(默认由input推导)
{
"compat": {
"supportsDeveloperRole": false,
"supportsReasoningEffort": true
}
}OpenAI:
supportsDeveloperRole- 某些推理模型不支持supportsReasoningEffort- 适用于 o1、o3 系列supportsThinking- 启用 Thinking 块
{
"compat": {
"supportsDeveloperRole": false,
"supportsReasoningEffort": true,
"supportsThinking": true
}
}覆盖内置提供商
Pi 内置了常用提供商(如 Anthropic Claude 系列)。如需自定义(例如更改默认模型列表),请在 .pi/settings.json 中覆盖:
{
"providers": {
"anthropic": {
"models": [
{ "id": "claude-3-5-sonnet" },
{ "id": "claude-3-opus" }
]
}
}
}注意:内置提供商的 name 和 contextWindow 等字段会被保留,除非您显式覆盖。
Anthropic 消息兼容性
Anthropic 使用特殊的消息格式。Pi 会自动处理,但某些模型可能需要调整:
- 旧模型(如 Claude 3 Haiku)可能不支持
developer角色 - 推理模型(Claude 3.5 Sonnet)需要
supportsReasoningEffort: true
在模型配置中设置 compat 可以确保 Pi 正确生成请求。
OpenAI 兼容性
OpenAI 兼容服务器(vLLM、SGLang、Ollama 的 openai 模式等)通常不需要特殊配置,但某些推理模型可能需要禁用 developer 角色:
{
"providers": {
"vllm": {
"baseUrl": "http://localhost:8000/v1",
"api": "openai-messages",
"apiKey": "vllm",
"models": [
{
"id": "qwen2.5:72b",
"compat": {
"supportsDeveloperRole": false
}
}
]
}
}
}环境变量引用
在 apiKey 或 baseUrl 中使用 env: 前缀:
{
"apiKey": "env:OPENAI_API_KEY"
}或带默认值:
{
"apiKey": "env:API_KEY:your-default-key"
}