Skip to content

ask_followup_question

ask_followup_questionツールは、タスク完了に必要な追加情報を収集するためにターゲットを絞った質問を行い、対話型コミュニケーションを実現します。

パラメータ説明

このツールは以下の入力パラメータをサポートします:

  • question(必須):ユーザーに対する具体的な質問内容
  • follow_up(オプション):ユーザーの回答を誘導するための推奨回答リスト。2-4個の回答を含み、各回答は<suggest>タグで囲みます

機能概要

このツールはVJSPとユーザー間の対話インターフェースを構築します。要件が曖昧であったり意思決定ポイントに遭遇したりした場合、ユーザーの明確化、追加詳細、または設定の嗜好を収集することができます。各質問には推奨回答を添付でき、対話効率を向上させます。

適用シナリオ

  • 元のリクエストからコア情報が欠落している場合
  • VJSPが複数の有効な実装オプションから選択する必要がある場合
  • タスクを推進するために技術的詳細またはユーザーの嗜好を明確にする必要がある場合
  • VJSPが解決すべき要件の曖昧さに遭遇した場合
  • 追加のコンテキストによってソリューションの品質が大幅に向上する場合

コア機能

  • 業務プロセスを中断することなく、構造化された情報収集を提供
  • ユーザーの入力を減らし、回答方向を誘導するための推奨回答を含む
  • 対話セッション全体で対話履歴とコンテキスト情報を保持
  • 画像やコードスニペットを含む回答内容をサポート
  • 「グローバルに利用可能」なツールセットのコンポーネントとして、すべての運用モードをサポート
  • ユーザーが実装の意思決定プロセスを直接ガイドできるようにする
  • 回答内容を<answer>タグを使用してフォーマットし、通常の対話と区別する
  • ツールが成功した呼び出し時に連続エラーカウンターをリセット

制限事項

  • 単回のツール呼び出しでは1つの具体的な質問のみをサポート
  • 推奨回答はユーザーインターフェースでオプションとして表示されます
  • ユーザーに構造化された形式で回答することを強制することはできず、自由入力もサポートします
  • 過度な呼び出しはタスク完了効率を低下させ、対話体験を断片化させます
  • 推奨回答は完全な内容でなければならず、ユーザーが編集する必要のあるプレースホルダーを含めることはできません
  • ユーザーの回答を検証するための組み込みメカニズムはありません
  • 特定の回答形式を強制するための実装メカニズムは提供されていません

実行フロー

ask_followup_questionツールを呼び出すと、以下のフローに従って実行されます:

  1. パラメータ検証:必須パラメータquestionが存在することを確認し、オプションの推奨回答の有効性を確認

    • 質問テキストが提供されていることを確認
    • fast-xml-parser解析ライブラリに基づいて、follow_upパラメータ内の推奨回答を解析
    • 推奨回答が1つだけでも、配列形式に標準化
  2. JSON形式変換:XML構造のパラメータを、インターフェース表示用の標準化されたJSON形式に変換

    typescript
    {
      question: "ユーザーへの質問",
      suggest: [
        { answer: "推奨回答1" },
        { answer: "推奨回答2" }
      ]
    }
  3. インターフェース統合

    • ask("followup", ...)メソッドを介してJSON構造をUI層に渡す
    • ユーザーインターフェースにクリック可能な推奨回答ボタンを表示
    • 「推奨回答の選択/カスタム入力」の対話体験を実装
  4. 回答収集と処理

    • ユーザーのテキスト入力と回答に含まれる画像コンテンツをキャプチャ
    • ユーザーの回答を<answer>タグで囲み、インテリジェントアシスタントにフィードバック
    • ユーザーの回答に含まれるすべての画像コンテンツを保持
    • ユーザーの回答を対話履歴に追加し、セッションコンテキストを維持
    • ツールの呼び出しが成功すると、連続エラーカウンターをリセット
  5. 例外処理

    • カウンターによって連続操作エラー回数を追跡
    • ツールの呼び出しが成功すると、このカウンターをリセット
    • ターゲット指向のエラーメッセージを出力:
      • パラメータの欠落:「必須パラメータ'question'が欠落しています」
      • XML解析失敗:「操作解析に失敗しました:[具体的なエラーメッセージ]」
      • 形式が無効:「操作XML形式が無効です」
    • 必須パラメータが欠落している場合にツールの実行を阻止する組み込み保護メカニズム
    • エラーが発生した場合、連続エラーカウンターを増分

対話フロー

質問-回答の対話サイクルは以下のフローに従います:

  1. 情報ギャップの特定:VJSPはタスク推進に必要な欠落情報を特定
  2. ターゲットを絞った質問の作成:VJSPは明確で目標指向の質問内容を作成
  3. 推奨回答の作成:VJSPは関連する推奨回答を生成(オプション、推奨)
  4. ツールの呼び出し:インテリジェントアシスタントは質問とオプションの推奨回答を入力してこのツールを呼び出し
  5. インターフェース表示:質問と推奨回答が対話要素としてユーザーに表示
  6. ユーザーの回答:ユーザーは推奨回答を選択するかカスタム回答を入力
  7. メッセージ処理:システムは部分的に送信されたメッセージと完全なメッセージを処理
    • ストリーミング回答の場合、到着順にデータブロックを処理
    • 完全なメッセージの場合、すべての回答内容を一度に処理
    • メッセージが分割されているかどうかに関係なく、状態の一貫性を維持
  8. 回答処理:システムは回答内容を<answer>タグで囲み、画像を保持
  9. コンテキスト統合:ユーザーの回答を対話履歴に追加
  10. タスクの継続:VJSPは新たに取得した情報に基づいてタスクの実行を続行

応用例

  • Webアプリケーションの開発時、VJSPは好みのスタイルフレームワーク(Bootstrap、Tailwind、カスタムCSS)を問い合わせることができます
  • APIの開発時、VJSPは認証方法(JWT、OAuth、APIキー)を問い合わせることができます
  • コードのリファクタリング時、VJSPは最適化の優先度(パフォーマンス優先/可読性優先)を問い合わせることができます
  • データベースの構築時、VJSPは特定のテーブル構造の設計の嗜好を問い合わせることができます
  • カスタム機能の開発時、VJSPは機能動作に関する具体的な期待を問い合わせることができます
  • エラーのトラブルシューティング時、VJSPは特定の環境設定の詳細を問い合わせることができます

回答形式

ユーザーが質問に回答する場合、内容は<answer>タグでフォーマットされ、明確性と一貫性が保証されます。この形式により、ユーザーの回答内容を他の対話要素と効果的に区別することができます。

回答形式の例:

<answer>
ユーティリティファーストのスタイリングアプローチに基づいて最大限の柔軟性を実現するため、Tailwind CSSを選択します
</answer>

回答形式の主な特徴:

  • 内容が<answer>タグで囲まれている
  • 元の回答のフォーマットが保持されている
  • 回答に画像が含まれている場合、完全に保持される
  • 長いテキスト回答であっても、完全に返される

呼び出し例

実装の嗜好を問い合わせる:

<ask_followup_question>
<question>今回のWebアプリケーション開発では、どのようなスタイリング実装アプローチを好みますか?</question>
<follow_up>
<suggest>標準化されたコンポーネントに基づいて迅速な開発を実現するため、Bootstrapを選択</suggest>
<suggest>ユーティリティファーストのスタイリングアプローチに基づいて最大限の柔軟性を実現するため、Tailwind CSSを選択</suggest>
<suggest>完全な制御と最小限の依存関係を実現するため、ネイティブCSSを使用してカスタムスタイルを開発</suggest>
</follow_up>
</ask_followup_question>

技術的詳細の明確化を要求する:

<ask_followup_question>
<question>このアプリケーションでは、ユーザーデータのストレージにどのデータベースを使用する必要がありますか?</question>
<follow_up>
<suggest>柔軟なスキーマ設計に基づいてドキュメント型ストレージを実現するため、MongoDBを選択</suggest>
<suggest>関係データに強い一貫性保証を実現するため、PostgreSQLを選択</suggest>
<suggest>リアルタイムデータ更新を実現し、バックエンド管理を簡素化するため、Firebaseを選択</suggest>
<suggest>外部依存関係なしで軽量なローカルストレージを実現するため、SQLiteを選択</suggest>
</follow_up>
</ask_followup_question>

要件の曖昧さを解消する:

<ask_followup_question>
<question>このアプリケーションでは、ユーザー認証機能をどのように実装すべきですか?</question>
<follow_up>
<suggest>アカウント検証プロセスを含むメール/パスワード認証を実装</suggest>
<suggest>迅速な登録とログインを実現するため、ソーシャルログインプロバイダー(Google、GitHubなど)を統合</suggest>
<suggest>メール/パスワード認証とソーシャルログインの両方を実装</suggest>
</follow_up>
</ask_followup_question>