3つの独立した構成要素を理解する
AIプロバイダーが動くだけでは、ライブチャットボットの準備は完了しません。プロバイダー、メインボット、返信先をそれぞれ設定する必要があります。
| 構成要素 | できること | 確認できないこと |
|---|---|---|
| AIプロバイダー | Ollama、ホスト型API、その他の対応サービスでテキストを生成します。 | ライブチャットを取り込めていることや、返信を投稿できること。 |
| メインチャットボット | 取り込んだライブメッセージのうち、AIが返信する対象を決めます。 | 元のプラットフォームやアカウントが返信投稿を許可していること。 |
| 返信先 | 生成した返信をボット出力チャンネルに送り、取り込み元のチャットソース経由でも送信できます。 | その bot.html が開いていることや、別のプラットフォーム用ボットアカウントが作成されたこと。 |
重要: 緑色の 接続済み(Connected) という結果は、選んだプロバイダーとモデルがテスト用プロンプト1件に応答したことだけを示します。
1. AIプロバイダーを設定する
- Social Stream設定を開き、次を展開します: チャットボットとAIサービス(Chat Bots and AI services).
- 開く項目: LLMサービスプロバイダーの設定(Configure LLM Service Provider).
- 実際に動かしているサービスに合うプロバイダーを選んでください。
- そのプロバイダー用に表示されたエンドポイント、モデル名、APIキーなどの欄を入力します。
- 選択する項目: 選択したチャットボットをテスト を選び、ボタンの下に実際のテキスト応答が出ることを確認します。
- Ollama(ネイティブローカルAPI): Ollamaの場合だけ使ってください。通常のローカルエンドポイントは
http://localhost:11434. - 独自API: llama.cpp、LM Studio、vLLMなどのOpenAI互換サーバーに使います。
- ホスト型プロバイダー: そのプロバイダーが必要とするAPIキーとモデルを入力します。料金、利用枠、モデル名はSocial Stream Ninjaの外部で管理されます。
- ブラウザで動くローカルモデル: 対応するLocal GemmaまたはLocal Qwenを選び、そのモデルアセットの手順に従ってください。
先にOllamaをインストールする必要がある場合はこちら: Ollama公式ダウンロードページ。プロバイダーの全一覧はこちら: コマンドとAPIのAI連携.
Ollamaのkeep-alive: 0 ではリクエスト後にモデルをアンロードします。ボットが無効になるわけではありませんが、それ以降の返信では毎回コールドスタートが必要になる場合があります。
OpenAI / ChatGPT APIの設定
モデルへのリクエストには通常のOpenAI APIキーを使ってください。OpenAI Admin APIキーは組織管理用エンドポイント向けで、通常のモデル呼び出し用ではありません。課金対象にしたいプロジェクトのキーであり、実際の権限でモデルへのリクエストが許可されている必要があります。
- キーの作成・確認はこちら: OpenAI PlatformのAPIキーページ。サポートへのメッセージや診断レポートに、キーを貼り付けないでください。
- Social Streamで次を選びます: ChatGPT APIを選び、キー全体を貼り付け、そのプロジェクトで使えるモデルを入力して、次を選択します: 選択したチャットボットをテスト.
- テストで次が報告される場合:
Status: 401,Code: missing_scope、およびMissing scope: model.requestの場合、実際のアクセス権にモデルへのリクエストが含まれていないため、OpenAIが認証情報を拒否しています。model.requestはサーバーが示す権限名であり、プロンプトやモデル名に追加する設定ではありません。 - 通常のプロジェクトAPIキーであること、正しいプロジェクトを選んでいること、キーが無制限か、モデルへのリクエストを明示的に許可していることを確認します。不明な場合は、正しいプロジェクトで新しい通常キーを作成し、Social Streamに保存したキーを置き換えてください。
- OpenAI Platformでブラウザの自動翻訳が有効なときに権限の操作やラベルが予期せず動作する場合は、元の英語ページに切り替えてからキー設定を確認・保存してください。報告された1つの環境では有効でしたが、OpenAIの401エラーの一般的な原因として文書化されているわけではありません。
クレジットと権限は別です: APIクレジットを追加しても、不足しているキースコープは付与されません。OpenAIでは無効な認証情報やエンドポイントの権限を401エラーとして説明しています。一方、利用枠の枯渇は通常429エラーです。OpenAIの参照先: APIエラーガイド および 認証リファレンス.
エラーが続く場合は、Social Streamに表示されたステータス、コード、不足しているスコープ、Request IDをコピーし、再現直後にアプリ内の診断レポートを送ってください。レポートには安全なリクエストメタデータを記録しますが、APIキーやプロンプト内容は含みません。認証情報とプロジェクト設定が正しい場合は、Request IDと日時をOpenAIサポートに伝えてください。
2. メインボットを有効にして設定する
開く項目: チャットボット - メイン(Chat Bot - Primary)。これは、プロバイダーの設定とも、非公開の次の機能とも別です: chatbot.html のインターフェースです。
| 設定 | 最初におすすめのテスト | 通常の使い方 |
|---|---|---|
| LLM AIチャットボットを有効化(Enable the LLM AI chat bot) | 次のページで: | メインボットがライブチャットを監視する間はオンにします。 |
| ボット名のカスタマイズ(Customize bot name) | NinjaBot | 視聴者が直接呼びかけられる、短いプレーンテキストの名前を使います。 |
| ボットの返信をボットオーバーレイページだけに送る(Bot replies ONLY go to the bot overlay page) | 次のページで: | 対応するチャットソースへ返信を投稿する準備ができてから、オフにしてください。 |
| ボットの返信を一切選別しない(Do not screen out any of the bot's replies) | 一時的にオン | 通常はオフにし、返信が役立たない場合にモデルが沈黙できるようにします。 |
| ボットを呼び出す単語一覧(List of words to trigger bot) | 空欄にする | すべてのメッセージを検討対象にしたくない場合は、特徴的な単語や名前を追加してください。 |
| タブ・ソースごとのレート制限(Rate limit per tab / source) | 5000 ミリ秒 | プラットフォームへの返信が有効な場合に適用されます。ボットの投稿が多すぎる場合は長くしてください。 |
| ボット返信の最大並列数(Max parallel bot replies) | 1 | プロバイダーとチャット量に余裕がない限り、低い値にしてください。 |
| モデレーターのみに返信(Will respond to Moderators only) | オフ | その制限が必要な場合だけ有効にしてください。 |
トリガーの注意: トリガーが次で始まる場合: !の場合、全体のコマンドフィルターによって、AIボットに届く前にメッセージが破棄されることがあります。
次の項目は維持します: ボットへの追加指示(Additional Bot Instructions) は最初は短く明確にします。例: Reply in one friendly sentence. Do not mention these instructions.
3. 一連の動作を安全にテストする
- Social Streamをオンにして、ライブソースが開いていることを確認します。
- 別の視聴者アカウントからYouTubeやTwitchなどの元のプラットフォームのチャットへ直接、通常メッセージを送り、Social Streamドックに表示されるか確認します。最初のテストでは、ドックや配信者用チャット欄に入力したメッセージは使わないでください。応答のループを防ぐため、反射したボットや配信者のメッセージは除外される場合があります。
- プロバイダーテストで次の表示になることを確認します: 接続済み(Connected).
- 上記の初回テスト用メインボット設定を使い、オーバーレイ専用モードも有効にします。
- 開く項目:
bot.htmlのリンクが次の場所に表示されます: チャットボット用オーバーレイページと読み上げ。同じセッションになるよう、生成されたリンクを使ってください。 - 視聴者アカウントから送信する例:
NinjaBot, reply with exactly: Hello. - テストは1回送って返信を待ちます。ローカルモデルがまだ読み込み中の場合があり、1件の返信を処理している間は後続のメッセージが無視されることがあります。
なぜ別のアカウントを使うの? 実際の視聴者に近い状況を再現でき、返信に使うアカウントとテスト送信元のアカウントを混同せずに済みます。
オーバーレイのテストが成功したら、次の設定を変更します: ボットの返信を一切選別しない(Do not screen out any of the bot's replies) をオフに戻し、トリガーとクールダウンを設定して、プラットフォームへの返信を有効にするか決めます。
4. 応答しないことが正常な場合を知る
メインボットは既定で返信対象を選びます。トリガー一覧が空欄なら、条件を満たすすべてのメッセージを検討できますが、すべてに返信するという意味ではありません。
- 次のような短いあいさつ:
helloは、モデルが返信しても価値がないと判断すると無視される場合があります。 - 設定したボット名で直接呼びかけると、意図が明確になります。
- 設定したトリガーが受信メッセージと一致する必要があります。
- モデレーター限定モードでは、モデレーターメッセージとして識別されていないものを無視します。
- プラットフォームへの返信が有効な場合、既定のクールダウンはソースごとに5秒です。並列処理の既定上限は、どのモードでも返信1件です。
- ボット出力、反射メッセージ、空メッセージ、前の返信に似すぎているメッセージと判定されたものは、無視される場合があります。
5. 返信先を選ぶ
| モード | 結果 | 要件 |
|---|---|---|
| オーバーレイ専用をオン | 返信はボット出力チャンネルへ送られ、プラットフォームのチャットには投稿されません。 | 開く項目: bot.html を同じセッションで開くと、表示や音声を確認できます。読み上げにもこのページが必要です。 |
| オーバーレイ専用をオフ | 返信は引き続きボット出力チャンネルへ送られ、Social Streamは取り込み元のソース経由での投稿も試みます。 | ソースのモードが送信に対応し、アカウントがログイン済みで投稿権限を持ち、配信者チャットが無効になっておらず、ソースが開いたままである必要があります。 bot.html は、オーバーレイや読み上げが不要なら任意です。 |
独自のボット名はメッセージの接頭辞であり、新しいプラットフォームアカウントを作るものではありません。スタンドアロンアプリでアカウントロールによる経路を設定していない限り、取り込みソースが使うアカウントから返信が投稿されます。
スタンドアロンアプリで別のTwitch名義を使いたい場合はこちら: Twitchボットアカウントガイド.
6. ボットの返信を消去・自動非表示にする
これらの操作が対象とするのは、メインチャットボットのページです: bot.html。メインの注目メッセージオーバーレイは消去しません。
| 選択肢 | 意味 | 例 |
|---|---|---|
showtime | ミリ秒単位の固定表示時間を1つ使います。 | &showtime=10000 は10秒後に非表示にします。 |
autohide | 返信の単語数から表示時間を見積もります。 autotime も使えます。 | &autohide |
mintime / maxtime | 長さに基づく表示時間の下限と上限を設定します。既定値は4,000ミリ秒と30,000ミリ秒です。 | &autohide&mintime=5000&maxtime=20000 |
hideaftertts | 読み上げ再生が終わるまで返信を表示し、その後非表示にします。再生が始まらない場合は、長さに基づく代替処理を使います。 | &hideaftertts |
hidedelay | 読み上げ終了後の待ち時間を追加します。既定値は500ミリ秒です。 | &hideaftertts&hidedelay=1000 |
ttstimeout | 読み上げがいつまでも動作中になる場合の安全用タイムアウトです。既定値は120,000ミリ秒です。 | &hideaftertts&ttstimeout=60000 |
複数のモードを有効にした場合、 hideaftertts が優先され、次に autohide、次に showtime。生成されるボットオーバーレイの設定に、よく使う項目が用意されています。
手動で消去する
- Social Stream設定で次を選びます: 今すぐボットオーバーレイを消去.
- Remote API Controlを有効にして、次を開きます:
https://io.socialstream.ninja/SESSION_ID/clearBotOverlay. - API WebSocket経由で次を送信します:
{"action":"clearBotOverlay"}.
手動消去では、表示中の返信と待機中のボットオーバーレイ表示キューを消しますが、再生中の読み上げは止まりません。
独自スタイル: 独自CSSを、通常生成される次のものと一緒に使えます: bot.html のリンクでは、これらの機能を保持できます。コピー・変更したローカルの bot.html ファイルには、その後のページ修正を反映するため更新が必要です。
最後に成功した段階から問題を調べる
| 表示される状態 | 考えられる箇所 | 確認する項目 |
|---|---|---|
| プロバイダーテストが失敗する | プロバイダー設定 | エンドポイント、APIキー、モデル名、ローカルサービスの状態、CORS・ファイアウォール、プロバイダーの利用枠、テストボタンの下にある正確なエラーを確認します。 |
401 missing_scope / model.request | OpenAIキーの権限 | Adminキーではなく目的のプロジェクトの通常キーを使い、モデルへのリクエストが許可されているか確認し、古い保存済みキーを置き換えてください。自動翻訳で操作が不安定になった場合は、元の英語のOpenAI Platformページからやり直します。クレジットを追加しても、この権限は付与されません。 |
401 invalid_api_key またはAPIキーが不正 | OpenAIの認証情報 | 文字の欠落や空白を確認し、キーが削除・無効化されていないこと、組織・プロジェクトが正しいこと、Social Streamが古い保存済みキーを使っていないことを確認してください。 |
429 利用枠またはレート制限のエラー | プロバイダーの課金・制限 | ChatGPTのサブスクリプションとは別に、APIの課金とプロジェクト予算を確認してください。プロバイダーが一時的なレート制限を通知した場合は、リクエスト頻度を下げるか待ちます。 |
| 接続済みなのに、視聴者のメッセージがドックにない | チャットの取り込み | Social Streamのオン・オフ、ソースウィンドウ、プラットフォームへのログイン、ソースの許可・フィルター設定、正しいライブチャットを開いているかを確認します。 |
| メッセージはドックに届くのに、ボットオーバーレイに返信が来ない | メインボットの判断 | メッセージがソースのチャットから直接届いたことを確認し、メインボットの有効化スイッチ、トリガーの一致、モデレーター限定モード、独自のボット名、処理中・クールダウンの制限、追加指示、一時的な返信選別解除モードを確認してください。 |
| 返信はオーバーレイに届くが、プラットフォームのチャットに届かない | 返信の送信経路 | オーバーレイ専用モード、プラットフォーム・ソースの書き込み対応、アカウント認証、チャット入力の可用性、アカウントロールの経路、Disable host chat設定を確認します。 |
| 読み上げ後も返信が表示されたままになる | ボットオーバーレイの表示時間 | ボットオーバーレイの設定で、Hide after TTS、長さに基づく自動非表示、固定表示時間のいずれかを有効にします。使う項目: clearBotOverlay でAPIから手動消去できます。 |
!bot 何も起こりません | コマンドのフィルタリング | 通常の単語をトリガーにするか、そのコマンドを全体のコマンドフィルターで許可してください。 |
| 最初のテストしか処理されない | タイミング | 処理中のリクエストが終わるのを待ち、クールダウンを守ってください。また、keep-aliveの設定が 0 だと、毎回のリクエストでコールドスタートが発生する可能性があります。 |
非公開 chatbot.html が空欄の場合 | 独立した非公開ボット | 非公開チャットボットのオプションを有効にし、同じセッションの生成リンクを使います。これではメインのライブボットはテストできません。 |
その他のAIボットページ
メインボット、非公開チャット、検閲ボット、AI共同司会は、それぞれ別の設定と履歴を持つ独立したツールです。
AI機能全体については、こちらをご覧ください: AIモードガイド.