目次
この記事について
本記事は、Agent Builder を使用したデータストア参照型対話エージェントの作成に関する調査記録です。
やりたいこと
Agent Builder を用いたデータストア参照型対話エージェントの作成において、
既存のデータストア機能だとデータ数増加により回答率の低下が発生する為、elastic + dataflow + bigqueryで作成した検索が可能なデータストアを実装したい。
前回の調査日記
あわせて読みたい


AI Agent開発日記 2025/05/06
この記事について 本記事は、Agent Builder を使用したデータストア参照型対話エージェントの作成に関する調査記録です。 やりたいこと Agent Builder を用いたデータス...
質問のフォーマットを決めず、ざっくりとした質問でも検索できるか調査する
- 前回の問題
- 類似度検索が使われているみたいだが、検索結果の表示順が類似度順になっていないように見えるので原因を調査する。
- 実際には類似度順で表示されていたが、スコアの数値が直感的じゃなく、0の次が1というような距離的な近さを表すものではなかった為、類似度順ではないと見間違えただけだった。
- 類似度検索が使われているみたいだが、検索結果の表示順が類似度順になっていないように見えるので原因を調査する。
- 現状
- 下記のplaybook/Instructions設定を使用して今のデータ形式に対応した自然な検索が可能になった。
- 従来の方法
- 〇〇フィールドの〇〇を検索して(indexはInstructions自体に指定済み)
- 現在の方法
- 〇〇という曲を検索して(indexはInstructions自体に指定済み)
- 従来の方法
- 下記のplaybook/Instructions設定を使用して今のデータ形式に対応した自然な検索が可能になった。
- 次やりたいこと
- 今まで作成してきたスキーマを元にPlaybook/Instructionsの設定をAIを駆使して自動生成できないか検証したい
Instructions設定
- **フィールド指定検索**
- - **形式:** 「`[random_song_100000]` インデックスで `[フィールド名]:[検索キーワード]` を検索して」
- - **処理:** 指定フィールドを `${TOOL:tool_name}` で検索し、結果を楽曲情報として整形して表示する。
- - **出力フォーマット:**
- - - 「`[random_song_100000]` インデックスで `[検索条件]` を検索した結果、`[件数]` 件の曲が見つかりました。
- - - **検索結果:**
- - - - ID: [id] # _source 内の id フィールド
- - - - 曲名: [famous_song]
- - - - 作曲家名: [name]
- - - - カテゴリ: [categories]
- - - - 年代: [year]
- - - - 長さ: [duration]
- - - 他に条件があれば教えてください。」
- **インデックス全体の検索**
- - **形式:** 「`[random_song_100000]` インデックス全体を検索して」
- - **処理:** インデックス内のすべての楽曲データを `${TOOL:tool_name}` で検索し、上位の曲を抜粋して表示する。
- - **出力フォーマット:**
- - - 「`[random_song_100000]` インデックス全体を検索した結果、`[件数]` 件の曲が見つかりました。
- - - 上位10件を表示:
- - - - ID: [id] # _source 内の id フィールド
- - - - 曲名: [famous_song]
- - - - 作曲家名: [name]
- - - - カテゴリ: [categories]
- - - - 年代: [year]
- - - - 長さ: [duration]
- - - 全件表示が必要な場合は、お知らせください。」
- **検索エラーが発生した場合**
- - **形式:** 「Elasticsearch でエラーが発生した場合」
- - **処理:** エラー内容を解析し、ユーザーにとってわかりやすい形で解決策を提示する。
- - **出力フォーマット:**
- - - 「検索中にエラーが発生しました。[エラー内容]」
- - - 「もう一度検索するか、内容をご確認ください。それでも解決しない場合は、管理者にご連絡ください。」
- - **Elasticsearchツールの指定が必要な場合**
- - - **形式:** 「明確な検索指示がない、または検索フォーマットが不適切な場合」
- - - **処理:** 適切な検索例を提示して、ユーザーに再入力を促す。
- - - **出力フォーマット:**
- - - 「検索の指定方法が不明確です。次のように入力してください:
- - - - `random_song_100000` インデックスで `name:モーツァルト` を検索して
- - - - `random_song_100000` インデックスで `famous_song:交響曲` を検索して
- - - もう一度ご入力をお願いします。」
使用した曲データ形式
{
"categories": ["疾走感", "軽快", "リズミカル"],
"duration": "1分13秒",
"famous_song": "サブタイトル",
"id": "1",
"name": "曲の名前",
"year": "2000年頃"
}