跳转至

vLLM

vLLM 通过 OpenAI 兼容 HTTP API 提供开源(及部分自定义)模型。OpenClaw 使用 openai-completions API 连接,并可在你通过 VLLM_API_KEY 选择加入时 自动发现 模型。

属性 值
提供商 ID vllm
API openai-completions(OpenAI 兼容)
身份验证 VLLM_API_KEY 环境变量
默认 base URL http://127.0.0.1:8000/v1
流式用量 支持(stream_options.include_usage)

快速开始

1. 使用 OpenAI 兼容服务器启动 vLLM

你的 base URL 必须暴露 /v1 端点(/v1/models、/v1/chat/completions)。使用你要提供的模型启动服务器:

vllm serve <model-id>

有关标志,请参阅 vLLM 在线服务文档。vLLM 通常运行在:

http://127.0.0.1:8000/v1

2. 设置 API 密钥环境变量

如果你的服务器不强制身份验证,任何非空值都可以:

export VLLM_API_KEY="vllm-local"

3. 选择模型

替换为你的某个 vLLM 模型 ID:

{
  agents: {
    defaults: {
      model: { primary: "vllm/your-model-id" },
    },
  },
}

4. 验证模型是否可用

openclaw models list --provider vllm

Tip

对于非交互式设置(CI、脚本),直接传入 base URL、密钥和模型:

openclaw onboard --non-interactive --accept-risk --skip-health \
  --mode local \
  --auth-choice vllm \
  --custom-base-url "http://127.0.0.1:8000/v1" \
  --custom-api-key "vllm-local" \
  --custom-model-id "your-model-id"

模型发现(隐式提供商)

当设置了 VLLM_API_KEY(或存在身份验证配置)且 未 定义 models.providers.vllm 时,OpenClaw 会查询 GET http://127.0.0.1:8000/v1/models,并将返回的 ID 转换为模型条目。

Note

如果你显式设置了 models.providers.vllm,OpenClaw 仅使用你声明的模型。将 "vllm/*": {} 添加到 agents.defaults.models,可让 OpenClaw 同时查询该已配置提供商的 /models 端点,并包含所有已通告的 vLLM 模型。

显式配置

当 vLLM 运行在不同的主机或端口上、你想固定 contextWindow/maxTokens、你的服务器需要真实 API 密钥,或你连接到受信任的 loopback、LAN 或 Tailscale 端点时,请显式配置:

{
  models: {
    providers: {
      vllm: {
        baseUrl: "http://127.0.0.1:8000/v1",
        apiKey: "${VLLM_API_KEY}",
        api: "openai-completions",
        timeoutSeconds: 300, // Optional: extend request timeout for slow local models
        models: [
          {
            id: "your-model-id",
            name: "Local vLLM Model",
            reasoning: false,
            input: ["text"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 128000,
            maxTokens: 8192,
          },
        ],
      },
    },
  },
}

要在不列出每个模型的情况下保持提供商动态,请在可见模型目录中添加通配符:

{
  agents: {
    defaults: {
      models: {
        "vllm/*": {},
      },
    },
  },
}

高级配置

代理式行为

vLLM 被视为代理式 OpenAI 兼容 /v1 后端,而不是原生 OpenAI 端点:

行为 是否应用?
原生 OpenAI 请求构造 否
service_tier 不发送
Responses store 不发送
Prompt 缓存提示 不发送
OpenAI 推理兼容负载构造 不应用
隐藏的 OpenClaw 归属头 自定义 base URL 上不注入
Qwen 思考控制

对于 Qwen 模型,当服务器期望 Qwen chat-template kwargs 时,在模型行上设置 compat.thinkingFormat: "qwen-chat-template"。这些模型暴露一个二元 /think 配置(off、on),因为 Qwen chat-template 思考是一个开/关标志,而不是 OpenAI 风格的 effort 阶梯。

{
  models: {
    providers: {
      vllm: {
        models: [
          {
            id: "Qwen/Qwen3-8B",
            name: "Qwen3 8B",
            reasoning: true,
            compat: { thinkingFormat: "qwen-chat-template" },
          },
        ],
      },
    },
  },
}

OpenClaw 将 /think off 映射为:

{
  "chat_template_kwargs": {
    "enable_thinking": false,
    "preserve_thinking": true
  }
}

非 off 的思考级别会发送 enable_thinking: true。如果你的端点期望的是 DashScope 风格的顶层标志,请使用 compat.thinkingFormat: "qwen" 在请求根节点发送 enable_thinking。

Nemotron 3 思考控制

对于思考关闭的 vllm/nemotron-3-* 模型,捆绑插件会发送:

{
  "chat_template_kwargs": {
    "enable_thinking": false,
    "force_nonempty_content": true
  }
}

要自定义这些值,请在模型参数下设置 chat_template_kwargs。如果你同时设置了 params.extra_body.chat_template_kwargs,该值会生效,因为 extra_body 是最后一个请求体覆盖。

{
  agents: {
    defaults: {
      models: {
        "vllm/nemotron-3-super": {
          params: {
            chat_template_kwargs: {
              enable_thinking: false,
              force_nonempty_content: true,
            },
          },
        },
      },
    },
  },
}
Qwen 工具调用显示为文本

首先确认 vLLM 已使用该模型对应的正确工具调用解析器和对话模板启动。vLLM 文档中,Qwen2.5 模型使用 hermes,Qwen3-Coder 模型使用 qwen3_xml。

症状:技能/工具从不执行,助手打印原始 JSON/XML(例如 {"name":"read","arguments":...}),或者当 OpenClaw 发送 tool_choice: "auto" 时,vLLM 返回空的 tool_calls 数组。

某些 Qwen/vLLM 组合仅在请求使用 tool_choice: "required" 时才会返回结构化的工具调用。可通过 params.extra_body 按模型强制启用:

{
  agents: {
    defaults: {
      models: {
        "vllm/Qwen-Qwen2.5-Coder-32B-Instruct": {
          params: {
            extra_body: {
              tool_choice: "required",
            },
          },
        },
      },
    },
  },
}

将模型 ID 替换为 openclaw models list --provider vllm 返回的确切 ID,或通过 CLI 应用相同的覆盖配置:

openclaw config set agents.defaults.models '{"vllm/Qwen-Qwen2.5-Coder-32B-Instruct":{"params":{"extra_body":{"tool_choice":"required"}}}}' --strict-json --merge

这是一个可选用的变通方案:它会强制每一轮带工具的对话都必须发起工具调用,因此仅应在可接受此行为的专用模型条目上使用。不要将其设置为所有 vLLM 模型的全局默认值,也不要将其与把任意助手文本转换为可执行工具调用的代理配合使用。

自定义 baseUrl

如果您的 vLLM 服务器运行在非默认的主机或端口上,请在显式提供者配置中设置 baseUrl:

{
  models: {
    providers: {
      vllm: {
        baseUrl: "http://192.168.1.50:9000/v1",
        apiKey: "${VLLM_API_KEY}",
        api: "openai-completions",
        timeoutSeconds: 300,
        models: [
          {
            id: "my-custom-model",
            name: "Remote vLLM Model",
            reasoning: false,
            input: ["text"],
            contextWindow: 64000,
            maxTokens: 4096,
          },
        ],
      },
    },
  },
}

故障排查

首次响应缓慢或远程服务器超时

对于大型本地模型、远程局域网主机或 tailnet 链路,请设置提供者范围的请求超时:

{
  models: {
    providers: {
      vllm: {
        baseUrl: "http://192.168.1.50:8000/v1",
        apiKey: "${VLLM_API_KEY}",
        api: "openai-completions",
        timeoutSeconds: 300,
        models: [{ id: "your-model-id", name: "Local vLLM Model" }],
      },
    },
  },
}

timeoutSeconds 仅适用于 vLLM 模型的 HTTP 请求:连接建立、响应头、正文流式传输以及受保护 fetch 中止的总时长。它还会将此提供者的 LLM 空闲/流看门狗上限提高到隐式的约 120 秒默认值之上。请优先使用此设置,而不是增大控制整个代理运行的 agents.defaults.timeoutSeconds。

服务器无法访问

检查 vLLM 服务器是否正在运行且可访问:

curl http://127.0.0.1:8000/v1/models

如果看到连接错误,请验证主机、端口以及 vLLM 是否以 OpenAI 兼容服务器模式启动。对于回环、局域网和 Tailscale 端点上的受保护模型请求,OpenClaw 信任所配置的确切 models.providers.vllm.baseUrl 来源。除非明确选择加入,否则元数据、链路本地和本地使用的 NAT64(64:ff9b:1::/48)来源仍会被阻止。仅当 vLLM 请求必须到达其他私有来源时,才设置 models.providers.vllm.request.allowPrivateNetwork: true;若需选择退出确切来源信任,则设置为 false。

请求的认证错误
如果请求因认证错误而失败,请设置与服务器配置匹配的真实 `VLLM_API_KEY`,或在 `models.providers.vllm` 下显式配置提供者。

Tip

如果您的 vLLM 服务器不强制认证,任何非空的 VLLM_API_KEY 值都可以作为 OpenClaw 的选择加入信号。

未发现模型

自动发现要求设置 VLLM_API_KEY。如果您已定义 models.providers.vllm,除非 agents.defaults.models 中包含 "vllm/*": {},否则 OpenClaw 仅使用您声明的模型。

工具以原始文本形式渲染

如果 Qwen 模型打印 JSON/XML 工具语法而不是执行技能:

  • 使用该模型对应的正确解析器/模板启动 vLLM。
  • 使用 openclaw models list --provider vllm 确认确切的模型 ID。
  • 仅当 tool_choice: "auto" 仍返回空数组或纯文本工具调用时,才添加专门的按模型 params.extra_body.tool_choice: "required" 覆盖。

Warning

更多帮助:故障排查 和 常见问题。

模型选择

选择提供者、模型引用及故障转移行为。

OpenAI

原生 OpenAI 提供者及 OpenAI 兼容路由行为。

OAuth 与认证

认证详情和凭证复用规则。

故障排查

常见问题及解决方法。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw