Skip to content

自定义模型 ​

通过 ~/.pi/agent/models.json 添加自定义提供商和模型(Ollama、vLLM、LM Studio、代理等)。

目录 ​

最小示例 ​

对于本地模型(Ollama、LM Studio、vLLM),每个模型仅需 id:

json
{
  "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 兼容服务器。

json
{
  "providers": {
    "ollama": {
      "baseUrl": "http://localhost:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "compat": {
        "supportsDeveloperRole": false,
        "supportsReasoningEffort": false
      },
      "models": [
        {
          "id": "gpt-oss:20b",
          "reasoning": true
        }
      ]
    }
  }
}

完整示例 ​

json
{
  "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-completionsOpenAI 文本补全 API(旧式)
openai-messagesOpenAI Chat Completions API
anthropic-messagesAnthropic Messages API
vertexGoogle 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 格式 ​

json
"cost": {
  "input": 0.0015,      // 每千 tokens
  "output": 0.002,
  "cacheRead": 0.0003,
  "cacheWrite": 0.0003,
  "total": 0.0041
}

每个模型的覆盖 ​

可在 providers 级别设置默认值,然后在模型级别覆盖:

json
{
  "providers": {
    "ollama": {
      "models": [
        {
          "id": "llama3.1:8b",
          "contextWindow": 128000,
          "maxTokens": 2000
        }
      ]
    }
  }
}

兼容性选项 ​

Anthropic(仅用于 anthropic-messages):

  • supportsDeveloperRole - 是否支持 developer 角色
  • supportsReasoningEffort - 是否支持 reasoning_effort
  • supportsSystemMessage - 是否支持系统消息(默认 true)
  • supportsImages - 图像支持(默认由 input 推导)
json
{
  "compat": {
    "supportsDeveloperRole": false,
    "supportsReasoningEffort": true
  }
}

OpenAI:

  • supportsDeveloperRole - 某些推理模型不支持
  • supportsReasoningEffort - 适用于 o1、o3 系列
  • supportsThinking - 启用 Thinking 块
json
{
  "compat": {
    "supportsDeveloperRole": false,
    "supportsReasoningEffort": true,
    "supportsThinking": true
  }
}

覆盖内置提供商 ​

Pi 内置了常用提供商(如 Anthropic Claude 系列)。如需自定义(例如更改默认模型列表),请在 .pi/settings.json 中覆盖:

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 角色:

json
{
  "providers": {
    "vllm": {
      "baseUrl": "http://localhost:8000/v1",
      "api": "openai-messages",
      "apiKey": "vllm",
      "models": [
        {
          "id": "qwen2.5:72b",
          "compat": {
            "supportsDeveloperRole": false
          }
        }
      ]
    }
  }
}

环境变量引用 ​

在 apiKey 或 baseUrl 中使用 env: 前缀:

json
{
  "apiKey": "env:OPENAI_API_KEY"
}

或带默认值:

json
{
  "apiKey": "env:API_KEY:your-default-key"
}

Pi 编码助手中文文档