Providers
推論する
inferrs は、OpenAI 互換の /v1 API の背後でローカルモデルを提供できます。OpenClaw は汎用の openai-completions パスを通じて inferrs と連携します。
| プロパティ | 値 |
|---|---|
| プロバイダー id | inferrs(カスタム。models.providers.inferrs で設定) |
| Plugin | なし — inferrs はバンドル済みの OpenClaw プロバイダー Plugin ではありません |
| 認証環境変数 | 任意。inferrs サーバーに認証がない場合は任意の値で動作します |
| API | OpenAI 互換(openai-completions) |
| 推奨ベース URL | http://127.0.0.1:8080/v1(または inferrs サーバーの場所) |
はじめに
モデル付きで inferrs を起動する
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
OpenClaw プロバイダーエントリを追加する
明示的なプロバイダーエントリを追加し、デフォルトモデルをそれに向けます。完全な設定例は下記を参照してください。
完全な設定例
この例では、ローカルの inferrs サーバーで Gemma 4 を使用します。
{
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,
},
},
],
},
},
},
}
高度な設定
requiresStringContent が重要な理由
一部の inferrs Chat Completions ルートは、構造化された content-part 配列ではなく、文字列の
messages[].content のみを受け付けます。
compat: {
requiresStringContent: true
}
OpenClaw はリクエスト送信前に、純粋なテキスト content part をプレーン文字列へ平坦化します。
Gemma とツールスキーマの注意点
現在の一部の inferrs + Gemma の組み合わせでは、小さな直接
/v1/chat/completions リクエストは受け付けるものの、完全な OpenClaw agent-runtime
ターンでは失敗することがあります。
その場合は、まずこれを試してください。
compat: {
requiresStringContent: true,
supportsTools: false
}
これにより、そのモデルに対する OpenClaw のツールスキーマサーフェスが無効になり、より厳格なローカルバックエンドへのプロンプト負荷を減らせる場合があります。
ごく小さな直接リクエストは引き続き動作するのに、通常の OpenClaw エージェントターンが inferrs 内でクラッシュし続ける場合、残っている問題は通常、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
最初のコマンドは動作するのに 2 番目が失敗する場合は、下記のトラブルシューティングセクションを確認してください。
プロキシ形式の挙動
inferrs はネイティブの OpenAI エンドポイントではなく、プロキシ形式の OpenAI 互換 /v1 バックエンドとして扱われます。
- ネイティブ OpenAI 専用のリクエスト整形はここでは適用されません
service_tier、Responsesstore、prompt-cache ヒント、OpenAI reasoning-compat ペイロード整形はありません- 非表示の OpenClaw attribution ヘッダー(
originator、version、User-Agent)は、カスタムのinferrsベース URL には注入されません
トラブルシューティング
curl /v1/models が失敗する
inferrs が実行されていない、到達できない、または想定した
ホスト/ポートにバインドされていません。サーバーが起動しており、設定したアドレスで待ち受けていることを確認してください。
messages[].content expected a string
モデルエントリで compat.requiresStringContent: true を設定してください。詳細は上記の
requiresStringContent セクションを参照してください。
直接 /v1/chat/completions 呼び出しは成功するが openclaw infer model run が失敗する
ツールスキーマサーフェスを無効にするために、compat.supportsTools: false の設定を試してください。
上記の Gemma ツールスキーマの注意点を参照してください。
大きなエージェントターンで inferrs がまだクラッシュする
OpenClaw がスキーマエラーを受け取らなくなっても、大きな
エージェントターンで inferrs がまだクラッシュする場合は、アップストリームの inferrs またはモデルの制限として扱ってください。プロンプト負荷を減らすか、別のローカルバックエンドまたはモデルに切り替えてください。