コンテンツにスキップ

ツールと拡張

TomoriBotは自律エージェントです。単なるチャットを超えて、ツールを呼び出し、ウェブ検索、ドキュメントの読み込み、メディアの生成、リマインダーの設定、他のチャンネルでの行動などを行うことができます。会話の内容に基づいて、いつツールを使用するかは彼女が決定します。このページでは、組み込みのツール、MCPサーバーを使用した拡張方法、および明示的ツールモード(Deliberate Tool Mode)を使用してツールの宣言をコンパクトに保つ方法について説明します。

以下はいくつかのおふざけな例です:

  • 1. ウェルネスチェッカー
    数時間おきに、@Bredrumbの様子を必ず確認する。
    今の気分はどうか、最近コーディングの休憩を取れているかを尋ねる。
    {memory_tool}や{memory_update_tool}で彼の感情の状態を時系列で記録し、後で本人に報告する。
  • 2. 週刊 時事 百合ニュース
    毎週金曜日、{web_search_tool}を使ってその週の注目の百合漫画の章、アニメエピソード、コミュニティのファンアートをまとめる。
    まとめた内容を{voice_message_tool}で艶っぽいASMRボイスで発表する。
  • 3. 睡眠ポリス
    {message_metadata_tool}で誰かが午前2時を過ぎてもチャットしていることに気づいたら、{voice_message_tool}で不気味なほど穏やかなASMRの子守唄を送り、寝るように伝える。
    10分後もまだ話し続けていたら、{manage_message_tool}でその人のためを思ってメッセージを削除し、睡眠不足が彼らの問題の主な原因であることを念押しする。

ツールの使用は、有効なプロバイダーやモデルがツール呼び出しをサポートしているかどうかに依存します。また、多くのツールは機能フラグ(/config > 権限 の切り替え)、Discordの権限、モデルの機能、またはオプションのAPIキーによって制限されています。

ツールプロンプトマクロ必要なもの説明
機能の確認{capabilities_tool}なし回答する前に、現在のチャットの機能、コマンド、または設定を確認します。
Create / update long-term memory{memory_tool} / {memory_update_tool}self_teaching_enabledサーバーの永続的な事実やユーザーの好みを保存または上書きします。
短期記憶の更新{short_term_memory_tool}(NovelAIでは使用不可)現在のチャンネルやストーリー展開に関する一時的な作業記憶を保存します。
タスクの作成/更新{task_tool} / {task_update_tool}なしリマインダーやセルフタスクをスケジュールまたは編集します(スケジュール済みタスクを参照)。
別チャンネルへのメッセージ{cross_channel_tool}(NovelAIでは使用不可)別のチャンネルやスレッドで行動し、オプションで報告を返します。
Create thread{create_thread_tool}thread_creation_enabled + スレッド権限公開スレッドを作成し、開始メッセージを投稿します。
Select sticker{sticker_tool}sticker_usage_enabled返信に一致するサーバーのスタンプを追加します。
Manage message{manage_message_tool}manage_message_enabled最近のメッセージをピン留め、編集、または削除します(ピン留めには「メッセージの管理」権限が必要です)。
Block / unblock user{block_user_tool} / {unblock_user_tool}user_blocking_enabledユーザーのペルソナごとのミュートやブロックを行います(記憶には影響しません)。
最近のメッセージへの反応{message_interaction_tool}なし最近のメッセージにリアクションを付けたり、短い返信を送信したりします。
Peek profile picture{profile_picture_tool}ビジョンモデルまたはvision_llmユーザーやペルソナのアバターを調べます。
ドキュメントの読み取り{document_tool}なしPDFや任意のUTF-8テキストファイルからテキストを抽出します。ソースコード(.py/.ts/.rs/…)、.json.yaml.md.txt、およびバイナリ以外の添付ファイルに対応しています。
メッセージメタデータの表示{message_metadata_tool}なし正確なターゲティングのために、最近の会話にハンドルネームとタイムスタンプの注釈を付けます。
Process YouTube video{youtube_tool}動画対応モデル要求に応じて、特定のYouTubeリンクを分析します。
Analyze image{image_analysis_tool}設定済みのvision_llm画像の理解を専用のビジョンモデルに委任します。
Generate image / anime image{image_generation_tool} / {anime_image_generation_tool}imagegen_enabled + 対応プロバイダー画像を生成または編集します(メディア生成を参照)。
Generate voice message{voice_message_tool}ElevenLabsキー + ペルソナの音声 + voice_message_enabled音声によるDiscordボイスメッセージの返信を送信します。

上記のツールマクロを利用できるプロンプト文では、スコープ付き条件分岐も利用できます:

{{if capability:self_teaching}}
Use {memory_tool} when a detail is worth remembering.
{{else}}
Do not promise to save long-term memories.
{{/if}}

TomoriBotの設定が有効な場合に表示するには capability:<name> を、アクティブなプロバイダーとモデルで特定のツールが実際に利用できる場合にのみ表示するには tool:<function_name> を使います。組み込みのURLリーダーまたはギルドMCPの代替ツールのどちらかが利用できる場合は tool_family:url_fetch を使います。条件の先頭に ! を付けると反転できます。ブロックはネストでき、{{else}} を1つ含められます。一般的な and / or 式には対応していません。

対応する機能名は tool_useself_teachingpersonal_memoriesemoji_usagesticker_usageweb_searchmanage_messagethread_creationimage_generationvideo_generationvoice_messageuser_blockingshort_term_memorytime_awareness です。

ツール条件には、プロバイダーやモデルの対応状況、サーバー設定、設定済みバックエンド、MCPによる置き換え、現在の明示的ツールモードの許可リストが反映されます。ツール実行時のDiscord権限チェックを回避したり予測したりするものではありません。不明な機能名はfalseとして評価されログに記録され、不正なブロックは省略されます。生のチャットメッセージ、モデル出力、ツール結果は条件テンプレートとして処理されません。

モデルは単一の統合されたweb_search(query, category)ツールを認識します。この背後で、ディスパッチャーが各呼び出しをエンジンのチェーンを通してルーティングし、最初に成功したものを返します:

Brave → SearXNG → DuckDuckGo → IAsk

  • Braveは、Brave APIキーが設定されている場合に最初に実行されます(/providersで設定します)。画像、動画、ニュースの検索が追加されます。⚠️ 予期しない請求を避けるため、Braveダッシュボードで5ドルの使用制限を設定してください。
  • DuckDuckGoは、キーが設定されていない場合のデフォルトであり、レート制限または空の結果の場合はIAskにカスケードします。
  • SearXNGCrawl4AIは、オプションのセルフホストサイドカーであり、より多くのカテゴリーとブラウザでレンダリングされたページの取得を可能にします。セルフホストを参照してください。

特定のページを読み込むには、fetch_urlを使用します。これはNovelAIでは利用できません。

MCP(Model Context Protocol)サーバーを使用すると、自分で登録した外部ツールで彼女を拡張できます。

HTTPSエンドポイントを持つ公開されているMCPサーバーであれば、どれでも動作します。Smithery.aiを例に挙げます:

  1. アカウントを作成し、プロフィールからAPIキーを生成します。
  2. カタログからMCPを開き、その接続URLをコピーします(例:https://youtube.run.tools)。
  3. /config > プラグイン > MCPサーバー を開き、+ Add MCP(MCPを追加)を選び、接続URLを URL に、Smitheryキーを 認証トークン に貼り付け、必須の サーバータイプ(サーバータイプ)を選びます。初期値では 汎用(汎用)が選択されています。

サーバーが認証を必要としない場合は、認証トークン を空白のままにしてください。認証トークンは保存時に暗号化され、二度と表示されません。同じ Config ページを開いて設定状態の確認、有効化・無効化、明示的な確認付きの削除を行えます。削除すると即座に切断され、スロットが解放されます。保存済みの各行には、最後に成功した検出で得られたツール名も表示されます。検出なし(検出なし)はツールが0件だった既知の結果、検出不明(検出状況不明)は従来の行または成功したスナップショットがまだないサーバーを示します。MCP管理画面を開くだけでは保存済みメタデータを読み取るだけで、リモートサーバーには接続しません。

ローカルMCPサーバーはセルフホストのインスタンスでのみサポートされています。パブリックホストのBotはHTTPSを必要とし、ローカル/プライベートアドレスをブロックします。自身のインスタンスを運用している場合は、セットアップ:ローカルMCPサーバーを参照してください。

宣言されたツールはすべてプロンプトに追加されます。**明示的ツールモード(Deliberate Tool Mode)**は、メッセージが実際にツールを必要としているように見えない限り、通常のチャットのやり取りからツール宣言を除外します。これにより、プロンプトのサイズが縮小され、小規模/ローカルモデルがより速く応答できるようになります。

  • 彼女はまず、メッセージにツールの意図があるかどうかを確認します。組み込みのトリガーは、一般的なリクエスト(リマインダー、ウェブ検索、記憶の更新、クロスチャンネルメッセージ、画像/動画/音声の生成、メディア分析、スレッドの作成、メッセージアクション)をカバーしています。現在のモデルやツール、設定、または機能を利用できない理由についての質問では、機能レビューと公式ドキュメントへのアクセスが同時に公開されます。音声メッセージのリクエストの後に「もっと怒りながらもう一回やって」などと言うような、フォローアップの表現でも機能します。
  • サーバー管理者は、/server trigger addを使用して文字通りのカスタムトリガーフレーズを追加できます。例えば、picimg、またはpfpを画像生成にマッピングするなどです。
  • 組み込みのトリガーは英語の表現を読み取ります。他の言語は、各言語のキーワードリストを通じて同じツールに到達します。言語設定に関係なく、出荷されているすべての言語のリストがすべてのメッセージでチェックされるため、バイリンガルのサーバーは両方の言語で機能します。
  • 日本語、中国語、韓国語のカスタムフレーズは、これらの言語が単語をスペースで区切らないため、長い単語の内部でも一致します。*で終わるフレーズは、それで始まる任意の単語に一致します:remind*reminderreminding をカバーします。
  • /server dtm:サーバー管理者が切り替えます。
  • /personal config:ユーザーが自身のために上書きします。
  • 思考ログのチャンネル(/server thought-logs)が設定されている場合、成功した明示的ツールモードの呼び出しは、ツールを公開したトリガーとともにそこにログとして記録されます。

明示的ツールモードは、どのツールをモデルに表示するかを決定するだけです。モデルは依然として、いずれかのツールを呼び出すことを選択する必要があります。/helpエンジン(動作)を選び、次に デリベレイトツールモード(慎重ツールモード)を選択すると、Discordの概要が表示されます。

組み込みの update_user_info ツールは、登録ユーザーのニックネーム、接頭辞、接尾辞、性自認、代名詞、希望する呼び方、数値UTCオフセットを変更する明示的なリクエストを処理します。他の個人向けツールと同じ、衝突を考慮した名前・別名・メンション・Discord IDの解決機能を使います。対象を省略すると会話を開始した人間自身になり、alleveryoneがワイルドカードになることは決してありません。

各フィールドは独立した任意パラメーターなので、変更はフィールドを渡すことで表現されます。削除はフィールド名の clear リストで表し、テキスト・列挙・数値のどのフィールドでも同じ規則が保たれます。空文字列は拒否されるのではなく削除に統合されます。スコープやアクションのパラメーターはありません。スコープはフィールドそのものに従うからです:

フィールド保存先効果
ニックネーム、接頭辞、接尾辞ペルソナの派生元ごと変更を行ったペルソナだけが彼らの呼び方を変える
性自認、代名詞、呼称スタイル、タイムゾーンユーザーごとに1つすべてのペルソナが同じ値を読む

この分割は設定の好みではなく保存場所に従っています。アイデンティティフィールドにはユーザーごとに単一のスロットしかなく、ペルソナ別の同等のものは存在しません。成功通知ではペルソナごとの行にペルソナ名をラベルとして付けるため、違いが暗黙ではなく目に見える形になります。ラベルのない行はグローバルであり、グローバルが予想外のケースではないため独自の説明を必要としません。

参加者コンテキストでは各ユーザーの接頭辞と接尾辞がニックネームとは別に名付けられるため、称号を削除するリクエストはニックネームの書き換えではなく接辞の変更として解決されます。消去された接辞は明示的な抑制として保存されるため、下位の層が依然として値を供給していることによって削除が取り消されることはありません。

すでに解決済みの接辞を含むニックネームが送信された場合は、解決済みの値と比較することで冗長な接辞が取り除かれます。境界を推測するためにニックネームを空白で分割することは決してありません。更新は、その名前が実際に移動した場合に常に結果の呼称形式を報告するため、呼称スタイルの変更は名前フィールドが全く表示されなかったターンであっても表示されます。一方、代名詞やタイムゾーンの編集では、何も触れられなかった名前を繰り返し述べることはありません。

すべてのフィールドは、一度のアトミックな書き込みの前に検証されます。制限の強いプライバシー設定では追加と変更をブロックしますが、値の消去は依然として許可します。このツールはペルソナ全体の呼称用語を編集することはできません。/config > 権限のデフォルトでオンになっている「User Info Updates」(ユーザー情報の自動更新)スイッチは、ツールの公開と古い呼び出しへの防御の両方を制御します。それがオフの場合でも、手動の /personal config は引き続き利用可能です。