ロールプレイアプリ(RisuAI、Agnai、Chub、KoboldAI Lite、Janitor AI)
SpicyAPI のテキストモデルを RisuAI、Agnai、Chub、KoboldAI Lite、Janitor AI につなぎます。アプリごとの入力欄、ロールプレイ向きのモデル、推論モデルの扱い、支出の上限設定を説明します。
ロールプレイアプリではキャラクターとチャットでき、その多くは OpenAI 互換の接続で好きな AI モデルを持ち込めます。SpicyAPI はそのプロトコルに対応しているので、これらのアプリの接続先を SpicyAPI にして、好きな SpicyAPI のテキストモデルを選び、SpicyAPI の残高から支払えます。
このページでは、Web / デスクトップの 5 つのアプリ、RisuAI、Agnai、Chub、KoboldAI Lite、Janitor AI を扱います。SillyTavern については SillyTavern を参照してください。これらのアプリは第三者が作っていて、画面は変わります。以下の入力欄の名前は各アプリの公開ソースコードとヘルプページに基づいており、各セクションに、何を確認して何を確認していないかを書いています。
手短にまとめると
- spicyapi.ai/console/keys で、アプリ専用の API キーを作成し、1 日の支出上限を設定します。
- アプリの OpenAI 互換接続、または「reverse proxy」接続を選びます。アドレスには
https://api.spicyapi.ai/v1を入力し(Janitor AI だけは、より長いhttps://api.spicyapi.ai/v1/chat/completionsが必要です)、キーを貼り付け、モデルにはライブカタログからコピーした、/chatで終わるチャット ID を設定します。 - 推論モデルでは Max tokens を 1,000 以上にして、メッセージを送ります。
必要なもの
- 残高のある SpicyAPI アカウント。 アカウントの準備と課金を参照してください。
sk-spicy-で始まる API キー。 認証を参照してください。- モデル ID。 テキストモデルの名前は
<maker>/<model>/chatの形で、ここではMODEL_ID_FROM_CATALOGと表記します。MODEL_ID_FROM_CATALOGは、ライブカタログ(GET /api/v1/models)からコピーするチャットモデル ID の代わりに置いた仮の値です。この文字列自体は絶対に入力しないでください。ID は、末尾の/chatまで含めて正確に入力する必要があります。全一覧は spicyapi.ai/models にあります。キーを付けてGET https://api.spicyapi.ai/v1/modelsを呼び出しても取得でき、チャットの ID は/chatで終わるものです。モデルを参照してください。
アプリごとの入力欄
| アプリ | 入力するアドレス | キーを入れる場所 | モデル | リクエストを送るのは |
|---|---|---|---|---|
| RisuAI | https://api.spicyapi.ai/v1(.../v1/chat/completions の完全形でも動作します) | Key/Password | Request Model(手入力) | Web 版では RisuAI のサーバー、デスクトップアプリではあなたのコンピューター |
| Agnai | https://api.spicyapi.ai/v1(完全なパスは不可) | API Key | プリセットで選択。SpicyAPI から取得した一覧から選びます | Agnai のサーバー |
| Chub | https://api.spicyapi.ai/v1(完全なパスは不可) | Reverse Proxy Key | SpicyAPI から取得したドロップダウン | あなたのブラウザー |
| KoboldAI Lite | https://api.spicyapi.ai/v1 | OpenAI 接続の API key 欄 | SpicyAPI から取得したドロップダウン | あなたのブラウザー |
| Janitor AI | https://api.spicyapi.ai/v1/chat/completions(完全なパス) | API Key | Model Name(手入力) | 未確認。Janitor AI のセクションを参照 |
短いアドレスと完全なアドレスの違いは重要です。/chat/completions を自分で付け足すアプリでは、これを含めると壊れます。一方、Janitor AI では完全に書く必要があります。
モデルを選ぶ
ロールプレイには、キャラクターを保ち、長い返信を書き、通常の物語のリクエストを断らないモデルが向いています。ロールプレイ / LLM リーダーボードは、SpicyAPI のテキストモデルをそれらの観点で順位づけし、現在の料金も表示します。モデルや順位は変わるので、ここに書いた一覧に頼らず、そちらを確認してください。
各モデルのページには、コンテンツポリシーのラベル(たとえば unrestricted、borderline、filtered)も表示されます。そのラベルは、モデルがどれだけ自由に回答するかを示します。書きたい物語に合うラベルのモデルを選んでください。
最初に試すなら DeepSeek V4.1 Flash がおすすめです。ボードの上位にあり、最も安いモデルの 1 つです。ID は /chat で終わります。覚えている文字列を入力するのではなく、spicyapi.ai/models のライブカタログからコピーしてください。
知っておくべき制限が 2 つあります。
- モデルによっては、1 回のリクエストで受け付けるメッセージが最大 256 件です。 非常に長いチャットで、履歴全体を送るアプリでは、これを超えることがあります。送信する履歴の量やコンテキストサイズのアプリ設定を探して、小さくしてください。モデルのページに、そのモデルの制限が載っています。
- 画像入力は、画像を読めるモデルでしか動作しません。通常のロールプレイのチャットでは必要ありません。
サンプリング設定
ロールプレイアプリは、メッセージごとに大量のサンプリング設定(temperature、top-p、top-k、min-p、top-a、frequency、presence、repetition penalty)を送ります。どれを受け付けるかはモデルによって異なります。
SpicyAPI は、モデルが使わない設定をメッセージごと拒否せず、無視します。n: 1、空の stop リスト、stop 文字列のないモデルに送られた stop 文字列も無視します。何かを無視したときは、レスポンスに X-Spicy-Ignored-Params ヘッダーが付き、破棄した設定の名前が入るので、何が効いていなかったかを正確に確認できます。
モデルがその設定自体は受け付けても、送られた値は受け付けない場合、SpicyAPI はモデルが受け付ける最も近い値を使います。モデルの上限を超えた temperature は上限になり、モデルが許す数より長い stop 文字列のリストは、先頭から順に残されます。こうした変更は X-Spicy-Adjusted-Params ヘッダーに一覧で返り、たとえば temperature=1, stop=kept 1 of 3 のようになります。つまり、いつものプリセットをそのまま使えます。
サンプリング設定ではないフィールドは扱いが異なります。アプリがモデルにまったく未知のものを送った場合、SpicyAPI はそのフィールド名を挙げた 400 エラーを返します。
推論モデルと Max tokens
回答する前に思考するモデルがあります。思考にはトークンが使われ、そのトークンは Max tokens(アプリによって Max output、Response length、max_new_tokens とも表示)に含まれます。
- Max tokens は余裕をもって設定してください。 20 や 200 のようにごく小さいと、推論モデルが予算を思考だけで使い切り、テキストを返さないことがあります。その場合は、出力の予算が推論で使い切られたという
upstream_failedエラーになります。1,000 以上から始めて、返信が途中で切れるなら増やしてください。 - 思考にはお金も時間もかかります。 推論トークンは、ほかの出力と同様に課金され、最初の 1 語が届くのも遅くなります。
reasoning_effortの設定で、思考を減らすよう指示できるモデルもあります。レベルはモデルごとに異なります。モデルが用意していないレベルは、そのモデルにある最も近いレベルに変更され、OpenRouter 形式の推論設定(Agnai が送ります)はreasoning_effortに変換されます。Additional Parameters やカスタムパラメーターの入力欄があるアプリでは、たとえばreasoning_effortに低い値を指定して渡せます。以下のアプリのほとんどは、これを自動では送りません。 - 思考内容をチャットに表示するアプリがあります。 Janitor AI は
<think>タグで囲んで表示します。Chub はまったく表示しません。
支出を抑える
ロールプレイのチャットは長く、アプリはメッセージのたびに会話全体を再送するため、チャットが長くなるほど 1 メッセージあたりの料金が増えます。
アプリごとに、コンソールで専用のキーを作成してください。作成時に Advanced を開き、1 日の支出上限(必要なら月間の上限も)を設定します。アプリが誤作動したりループしたり、キーが漏れたりしても、被害は上限で止まり、ほかに影響を与えずにそのキーだけを失効させられます。キーは特定のモデルだけに制限することもできます。認証を参照してください。
これらのアプリは、あなたのキーをアプリ側のサーバーまたはブラウザーに保存します。RisuAI の Web サイト、Agnai、Janitor AI は、キーとチャットをそれぞれのサーバー経由で送ります。Chub と KoboldAI Lite は、ブラウザーから直接リクエストを送ります。どの場合でも、上限を付けた専用キーを用意するのが適切な対策です。
RisuAI
RisuAI は risuai.xyz、デスクトップアプリ、または自分のサーバーで動かせます。RisuAI のソースコード(バージョン 2026.8.250)で確認しました。
Custom API モデルを選ぶ
ボット設定でモデルのドロップダウンを開き、Custom API を選びます。
3 つの欄を入力する
- URL(「Reverse Proxy」と表示):
https://api.spicyapi.ai/v1。アドレスが/v1で終わっていれば、RisuAI が/chat/completionsを自分で付け足します。完全なhttps://api.spicyapi.ai/v1/chat/completionsでも動作します。 - Key/Password:
sk-spicy-で始まるキー。bearer トークンとして送られます。 - Request Model: モデル ID、
MODEL_ID_FROM_CATALOG。RisuAI にはカスタムアドレス用のモデル一覧がないので、手入力します。
Format のドロップダウンを OpenAI Compatible にします。
Max tokens を設定してメッセージを送る
推論モデルを選んだ場合は、最大の返信長を大きくしてから(上記参照)チャットします。
リクエストの送信元。 risuai.xyz では、通常 RisuAI が自社サーバー経由でリクエストを中継するため、キーとチャットがそこを通ります。デスクトップアプリとセルフホストのサーバーは、あなたのマシンから直接リクエストを送ります。Web サイトの「Force Plain Fetch」オプション(非推奨設定の中に隠れています)だけが、ブラウザーからリクエストを送ります。SpicyAPI はこれも受け付けます。
サンプリング。 RisuAI の既定の Custom API 設定は、frequency、presence、repetition penalty、min-p、top-a を送ります。SpicyAPI はモデルが使わないものを無視するので、既定のままで動作します。
Agnai
Agnai は agnai.chat にあります。Agnai のソースコード(dev ブランチ、2026-10-06)で確認しました。SpicyAPI は Agnai の組み込みプロバイダー一覧にないため、OpenAI 互換のカスタム接続として追加します。
プロバイダーを追加する
Settings でプロバイダー管理ページを開き、タイプ OpenAI Compat(または Remotely Hosted を選んでから Other (Generic OpenAI))のプロバイダーを追加します。ラベルは何でも構いません。
アドレスとキーを入力する
- URL:
https://api.spicyapi.ai/v1(またはhttps://api.spicyapi.ai。/v1がなければ Agnai が付け足します)。.../chat/completionsの完全なパスは入力しないでください。Agnai がパスを二重にしてしまいます。 - API Key:
sk-spicy-で始まるキー。
プリセットでモデルを選ぶ
チャットに使うプリセットで、一覧からモデルを選びます。Agnai は SpicyAPI のモデル一覧から一覧を埋めます。/chat で終わる ID を選んでください。
リクエストの送信元。 この方法でプロバイダーを追加すると、リクエストを送るのは Agnai のサーバーになるため、キーは Agnai 側に保存されます。
サンプリング。 Agnai は常に temperature と top-p を送りますが、これを受け付けないモデルもあります。SpicyAPI はそうしたモデルでは無視するので、DeepSeek V4 や Kimi K3 などのモデルも動作します。
非推奨: ブラウザー直接のモード。 Agnai には、Self-Host 接続タイプと、旧プリセットにある Use Local Requests スイッチもあり、ブラウザーがアドレスを直接呼び出します。ソースコードによると、これらのモードは SpicyAPI が受け付けない think というフィールドを追加し、SpicyAPI は未知のフィールドに対して 400 を返します。SpicyAPI に対しては未テストです。そこで 400 が出たら、上記のプロバイダー設定に戻してください。
Chub
Chub(chub.ai)は、指定したアドレスにブラウザーから直接リクエストを送ります。Chub が公開しているフロントエンドコード(2026-06-28 付けのビルド)で確認しました。Chub の画面はその後変わっている可能性があります。SpicyAPI は Web ページからのリクエストを許可しているため、ブラウザーからの接続が成立します。
Secrets でリバースプロキシを追加する
Secrets を開いて OpenAI ブロックを探し、My Own API Key ではなく Reverse Proxy を選びます。
アドレスとキーを入力する
- Open AI Reverse Proxy:
https://api.spicyapi.ai/v1。Chub が/chat/completionsを自分で付け足すので、含めないでください。 - Reverse Proxy Key:
sk-spicy-で始まるキー。
Check Proxy を押します。チェックに成功すると、モデル一覧も読み込まれます。
OpenAI / Proxy とモデルを選ぶ
Configuration > Prompt Structure で API を OpenAI / Proxy にし、ドロップダウンからモデル(/chat で終わる ID)を選びます。
Chub は自身の設定ページで、リバースプロキシを使うと IP アドレスとチャットログが記録される可能性があると警告しています。これは Chub からの注意書きで、SpicyAPI のものではありません。
ソースコードから分かる、意外に感じやすい点:
- Chub は、ストリーミングの返信を 120 秒で読み取り終了します。長時間思考する推論モデルは途中で切られることがあります。その場合は reasoning effort を下げるか、応答の速いモデルを選んでください。
- Chub は、モデルの思考内容を表示せず、回答だけを表示します。
KoboldAI Lite
KoboldAI Lite は lite.koboldai.net にある 1 枚の Web ページです。公開されている index.html で確認しました。ブラウザーからアドレスを直接呼び出しますが、SpicyAPI が Web ページからのリクエストを許可しているため動作します。
OpenAI 接続を選ぶ
Settings を開き、OpenAI API(カスタムエンドポイント)接続を選びます。
アドレスとキーを入力する
アドレスに https://api.spicyapi.ai/v1 を、キー欄に sk-spicy- で始まるキーを入力します。末尾に /chat/completions を貼り付けても、アプリが取り除きます。
モデル一覧を取得する
アプリのモデル取得ボタンを使い、/chat で終わる ID を選んで、生成設定で出力の長さを設定します。
「CORS Proxy」はオフのままにしてください。 KoboldAI Lite には、作者が運営するプロキシ経由でリクエストを送るオプションがあります。SpicyAPI には不要で、オンにするとキーが第三者のサーバーを通ることになります。
サンプリング。 繰り返しの設定は、presence penalty として API に送られます。SpicyAPI は、それを使わないモデルでは無視します。
Janitor AI
未確認
Janitor AI が SpicyAPI で動作することは確認できていません。Janitor AI はクローズドソースで、テストにはアカウントが必要なため、実際にチャットを試した人はいません。以下は、Janitor のヘルプセンターと公開されているページコードに書かれているプロキシ設定の説明です。保証ではなく、試してみる手がかりとして扱ってください。
Janitor AI の「プロキシ」機能は、チャットを指定したアドレスに送ります。Janitor のヘルプセンターによると、入力欄はチャットページの歯車アイコンの API Settings にある Add Configuration から開きます。
設定を追加する
次を入力します。
- Config Name:
SpicyAPIなど、何でも構いません。 - Model Name: 手入力するモデル ID、
MODEL_ID_FROM_CATALOG。 - Proxy URL: 完全なアドレス、
https://api.spicyapi.ai/v1/chat/completions。Janitor には「Add /chat/completions」ボタンがあり、https://api.spicyapi.ai/v1を入力したあとに押すと、これを付け足してくれます。 - API Key:
sk-spicy-で始まるキー。
保存してメッセージを送る
Janitor 独自の Check Key/Model ボタンは、Janitor のヘルプセンターで信頼できないと説明されているため、実際のメッセージでテストしてください。
Janitor がネットワークエラーや接続エラー(たとえば「A network error occurred」)を表示する場合、Janitor のページが OpenAI 以外のアドレスへのリクエストをブロックしている可能性が高いです。Janitor の Web ページには、サードパーティーの AI アドレスのうち、OpenAI のものだけへの直接リクエストを許可するセキュリティポリシーがあります。Janitor がブラウザーからリクエストを送ると、SpicyAPI に届く前にブラウザーが拒否するため、SpicyAPI 側では変えられません。このエラーが出ているのにコンソールでキーの利用が表示されない場合は、これが原因です。
この問題が起きたら、SillyTavern か RisuAI を使ってください。
Janitor のヘルプセンターとページコードから分かる、そのほかの事実です。
- 作者がプロキシをオフにしている Janitor のボットがあり、何を入力してもプロキシ経由ではチャットを拒否するボットがあります。
- Janitor は、モデルの思考内容を
<think>タグで囲んで表示します。短くするには、Max tokens を大きくするか、reasoning effort を下げてください。 - Janitor には、入力する 1 メッセージの長さに制限があります。
トラブルシューティング
| 表示される内容 | 対処 |
|---|---|
401 または「invalid API key」 | コンソールからキーをコピーし直します。失効したキーはすぐ使えなくなります。また、アカウントのパスワードではなく sk-spicy- のキーを使う必要があります。 |
402 または「insufficient balance」 | コンソールで残高を追加するか、キーの 1 日の支出上限に達していないか確認します。課金を参照してください。 |
404 または「model not found」 | モデル ID が間違っています。/chat で終わり、https://api.spicyapi.ai/v1/models のとおりに綴る必要があります。 |
アドレス自体への 404 で、/chat/completions/chat/completions のようにパスが二重になっている | アプリがパスを自分で付け足しています。https://api.spicyapi.ai/v1 を使ってください(RisuAI、Agnai、Chub、KoboldAI Lite)。完全なパスが必要なのは Janitor AI だけです。 |
フィールド名を挙げた 400 | アプリが、モデルが受け付けないもので、かつサンプリング設定ではないものを送りました。名指しされたフィールドを削除するか、オフにします。 |
メッセージ数に関する 400 | チャット履歴が、モデルのメッセージ数の上限より長くなっています。アプリで履歴またはコンテキストのサイズを小さくします。 |
upstream_failed、「the output budget was spent on reasoning」 | Max tokens を増やすか、モデルの reasoning effort を下げます。推論モデルと Max tokensを参照してください。 |
| 返信が文の途中で止まる | Max tokens が小さすぎるか、(Chub では)120 秒の制限に達しました。 |
| アプリに「Network error」や「Failed to fetch」と表示され、コンソールのログにリクエストがない | リクエストが SpicyAPI に届いていません。Janitor AI では、ページがそのアドレスをブロックしています。それ以外では、アドレスの打ち間違いがないか、サイトに接続できるかを確認します。 |
429 | 同時のリクエストが多すぎます。数秒待ってください。共有アプリは、多数のユーザーのリクエストを 1 つのアドレスから送ることがあります。 |
エラーコードの意味はエラーで説明しています。すべてのエラーの末尾には request_id が付きます。サポートに連絡するときにそれを伝えれば、リクエストを正確に特定できます。リクエストはコンソールの Logs にも表示され、リクエストが SpicyAPI に届いたかどうかを確認する最も手早い方法です。

