baseUrl
本地服务的 OpenAI-compatible /v1 地址。
Providers 导读
inferrs 不是专用 provider,而是通过 openai-completions 通用路径接入。先配好 baseUrl 和模型名,最容易踩的坑是 content 必须为字符串,需设置 compat.requiresStringContent: true。
先讲这一页到底在解决什么
inferrs 不是专用 provider,而是通过 openai-completions 通用路径接入。先配好 baseUrl 和模型名,最容易踩的坑是 content 必须为字符串,需设置 compat.requiresStringContent: true。
第一站
把 inferrs 接进 OpenClaw,最小路线就是这三步。
inferrs serve google/gemma-4-E2B-it \
--host 127.0.0.1 \
--port 8080 \
--device metal
curl http://127.0.0.1:8080/health
curl http://127.0.0.1:8080/v1/models
像先把本地模型服务开起来,告诉它用哪个模型、监听哪个地址和端口。
/health确认服务真的醒着,不是配置写了但后台没跑。
/v1/models确认 OpenAI-compatible 模型列表能被读到。
然后在配置里新增 provider,把默认模型指向 inferrs/google/gemma-4-E2B-it 这类 model ref。
第二站
这份配置的意思是:OpenClaw 以后看到 inferrs/google/gemma-4-E2B-it,就把请求送到本地 http://127.0.0.1:8080/v1。
{
agents: {
defaults: {
model: { primary: "inferrs/google/gemma-4-E2B-it" },
models: {
"inferrs/google/gemma-4-E2B-it": {
alias: "Gemma 4 (inferrs)",
},
},
},
},
models: {
mode: "merge",
providers: {
inferrs: {
baseUrl: "http://127.0.0.1:8080/v1",
apiKey: "inferrs-local",
api: "openai-completions",
models: [{
id: "google/gemma-4-E2B-it",
name: "Gemma 4 E2B (inferrs)",
reasoning: false,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 131072,
maxTokens: 4096,
compat: { requiresStringContent: true },
}],
},
},
},
}
baseUrl本地服务的 OpenAI-compatible /v1 地址。
apiKey本地占位 key 也要填,因为这条通用路径按 OpenAI 风格走。
apiopenai-completions 说明它走的是兼容 Chat Completions 的通用路线。
compat本地后端不一定支持所有 OpenAI 形状,兼容开关就是用来收窄格式的。
第三站
inferrs 能接通,不代表每种 OpenClaw agent turn 都能顺利跑。遇到格式或工具 schema 问题时,先看这两个开关。
requiresStringContentcompat: {
requiresStringContent: true,
}
如果报 messages[].content 类型不对,说明后端只想收纯字符串内容。
supportsToolscompat: {
requiresStringContent: true,
supportsTools: false,
}
如果小的 direct request 能过,但完整 agent turn 被工具 schema 压垮,可以先禁用工具面。
自定义 inferrs base URL 不会注入 OpenAI 原生 reasoning、service tier、Responses store、prompt-cache hints 那些专属处理。
如果兼容开关都调了,大 turn 仍然崩,往往是 inferrs 或模型本身限制,不一定是 OpenClaw transport 坏了。
第四站
直接测 inferrs 和通过 OpenClaw 测,是两件事。前者证明服务能答,后者证明 OpenClaw 这条路线也能跑。
curl http://127.0.0.1:8080/v1/chat/completions \
-H 'content-type: application/json' \
-d '{"model":"google/gemma-4-E2B-it","messages":[{"role":"user","content":"What is 2 + 2?"}],"stream":false}'
openclaw infer model run \
--model inferrs/google/gemma-4-E2B-it \
--prompt "What is 2 + 2? Reply with one short sentence." \
--json
/v1/models 失败先查服务有没有启动、host/port 是否和配置一致。
加 compat.requiresStringContent: true。
试 compat.supportsTools: false,减少工具 schema 压力。
减轻 prompt 压力,或换更稳的本地后端和模型。
最后总结
inferrs 在 OpenClaw 里应当先当作“自托管 OpenAI-compatible 后端”来配:服务先跑通,再写 provider entry,最后用 compat 开关处理本地模型的格式和工具限制。