ナレッジデータストアの利用

このチャプターのゴール

  • ナレッジデータストアの活用法が理解できている

ナレッジデータストア

ナレッジデータストアは、miiboがサービス内で所有する、AIに与える専門知識を保持するためのデータベースです。 AIに与える情報をプールしておく、専門知識のバケツだとイメージしてください。


ナレッジデータストアに入れた情報は直ちにRAGの仕組みを適用し、AIの応答に専門知識を与えられるようになります。


ナレッジデータストアの特徴

本書では様々なRAG環境構築方法を紹介しています。 その中でナレッジデータストアは下記の特徴を有しています。

  1. 登録した情報はEmbedding(ベクトル化)されること
  2. データの追加が手軽なこと
  3. 様々なデータフォーマットの追加に対応していること
  4. 検索結果を素早く確認できること
  5. API経由でデータ追加ができること

後の使い方紹介で上記の特徴はご体感いただけるかと思います。 一言で言うと、「超手軽なRAG環境」です。 RAG環境を自前で一から構築しようとすると、非常に高度な作業と手間が必要になります。 ナレッジデータストアは、直感的な作業で素早くRAG環境を構築できます。また、AIフレンドリーな高精度なデータ検索アルゴリズムを有しており、手軽な反面、高精度な応答生成を行うこともできます。

利用方法

ナレッジデータストアの作成

「会話の設定」 -> 「ナレッジデータストア」を開きましょう。


初回のみ、「ナレッジデータストアを作成する」をクリックする必要があります。


データの追加

右下の「データを追加する」からデータの追加が可能です。 様々なフォーマットに対応しています。

  • 自由入力
  • URLを指定してデータを追加する
  • ファイルのインポート
  • 指定の形式のcsv形式でインポート
  • miiboでエクスポートしたJSONファイルのインポート
  • Notionページからデータを入稿する
  • API経由でデータをインポートする

1. 自由入力

自由にテキストを入力できます。ラベル、URL(任意)、本文、カスタムフィールド(任意)を設定しましょう。

指定された文字数(上限50000文字)の中で、データの本文を入力します。フォーマットは自由です。フォーマットは自由ですが、下記の方針に従うと応答の精度が安定します。

  • 1つのデータ入稿に複数の話題を含めない
  • 全てのデータのフォーマットに統一感をもたせる

データ本文の例1

miiboの料金プラン

miiboの初期利用時は、どなたでも「無料」でお試し利用が可能な「トライアルプラン」が適用されています。
また、プランごとに、月あたりの会話回数の上限が設定されており、それを超えた場合は、上位のプランの導入をご検討ください。
各料金プランの詳細は、こちらのページをご確認ください。

データ本文の例2

質問: miiboの料金プランを教えて下さい。
回答: 
miiboの初期利用時は、どなたでも「無料」でお試し利用が可能な「トライアルプラン」が適用されています。
また、プランごとに、月あたりの会話回数の上限が設定されており、それを超えた場合は、上位のプランの導入をご検討ください。
各料金プランの詳細は、こちらのページをご確認ください。


2. URLを指定してデータを追加

指定したURLから情報を読み込み、ナレッジデータストアに読み込みます。URLは複数読み込めます。

留意事項

  1. Webページの構造によっては、正常に読み込めない場合があります
  2. ログイン等の認証が必要なWebページは読み込むことができません
  3. 手動で入稿するのに比べ、検索精度が落ちる可能性があります
  4. 本文が25000文字以上ある場合は、それ以降の文字列が無視されます
  5. 子ページのURLを抽出する場合、データ登録可能数以上のページはスキップされます。

例えば、NotionやSTUDIOで作成したWebページが正常に読み込めない場合があります。


3. ファイルのインポート

フリーフォーマットの下記の拡張子のファイルを読み込むことができます。

  1. .pdf
  2. .txt
  3. .xlsx
  4. .docx
  5. .pptx
  6. .json

文字数とファイル容量には上限があります。

文字数:20万文字まで ファイル容量: 1GBまで ※ 今後、変更の可能性があります。


4. 指定の形式のcsv形式でインポート

指定された形式のcsvファイルをインポートできます。



csvファイルのフォーマット


label,url,text
料金について,https://miibo.jp,無料で利用を開始できます。
サービスについて,https://miibo.jp,miiboは会話型AI構築プラットフォームです。
使い方について,https://miibo.jp,"miiboの使い方を説明します。
1. miiboにサインアップします
2. エージェントを新規作成します"

CSVのヘッダーには、「label」「url」「text」の3項目を必ず用意してください。

※文字コードはUTF-8を利用してください。


5. miiboでエクスポートしたJSONファイルのインポート

指定されたフォーマットのJsonファイルをインポートできます。


フォーマット指定のJsonファイルのインポートは、他のナレッジデータストアからエクスポートされたデータをインポートするために利用します。


この「すべてのデータをエクスポート」ボタンで、ナレッジデータストアのデータをJson形式でエクスポートできます。(バックアップやエージェント間のデータ以降にご活用いただけます。)


6. Notionページからデータを入稿する


まずは「APIキーを設定する」から、NotionのAPIキーを登録しましょう。


Noitonの「インテグレーション設定」へ移動します。

<https://www.notion.so/profile/integrations>

インテグレーションを新たに作成します。


下記では「miibo-ナレッジデータストア連携」というインテグレーションを作成しています。

種類は「内部(インターナル)」を指定します。

シークレットキーが取得できるのでコピーし、Notion APIキーの欄にペーストします。

読み込むページの「コネクト」を設定する。

Notionページの右上にあるメニューから「コネクト」を選択します。

「接続先」の中から、先ほど用意したインテグレーションを選択します。

ここでインテグレーションを接続すると、miiboが設定したページのコンテンツを読み込めるようになります。

最後に、読み込むページのIDをURLの中からコピーします。

ページのIDはURLに含まれるページ固有の識別子です。

ページの種類によっては、URLにページのタイトルが含まれている場合があります。IDの部分のみコピーしてください。

ナレッジデータストアにページIDを登録することで、コンテンツがナレッジデータストアに追加されます。


7. API経由でデータをインポートする

API経由でナレッジデータストアにデータを登録することができます。

API仕様

API経由でデータを入稿する場合、以下の仕様に従ってください。

APIの仕様の詳細は下記のAPIリファレンスもご参照ください。

<https://miibo.readme.io/reference/add-datastore>


メソッド
  • PUT
エンドポイント
  • https://api-mebo.dev/datastore/create
JSON Bodyパラメータ
パラメータ名必須説明
api_keystringAPIキーを指定します。公開設定画面でAPI連携を有効にすると取得できます。
agent_idstringエージェントのIDを指定します。公開設定画面でAPI連携を有効にすると取得できます。
labelstringデータのラベルを指定します。
textstringデータの本文を50,000文字以内で指定します。
urlstringデータのソースとなるURLを指定します。
Curlサンプル
curl -X PUT -H "Content-Type: application/json" -d '{"agent_id":"<エージェントのID>","api_key":"<APIキー>","label":"<ラベル>","text":"<本文>"}' https://api-mebo.dev/datastore/create

⚠APIリクエストを連続で行う場合は、必ず1秒以上のスリープ期間を設けてください。

APIキーの取得は 「外部サービスと連携する」 -> 「APIを利用する」 の画面にて、取得が可能です。

<https://miibo.dev/admin/externalServices/api>


検索結果の確認

ナレッジデータストア上部に設置された「検索バー」からは、登録されたデータに対して検索をかけることができます。


検索を行うと、スコアの高い順にデータが表示されます。


スコアの定義について

ナレッジデータストアのスコアは、クエリーに対するデータの「類似度」です。 1に近いほど、類似性の高いデータだとみなされています。


スコアの算出方法

スコアは大きく下記の2つによって決定されます。

① 検索クエリーとEmbeddingされたベクトルの類似度 ② ラベルとクエリーの類似度

比重は① >>> ②です。


実際の検索時の挙動

RAGの仕組みに乗っ取り、会話のラリーが行われるたびに検索が行われます。 検索結果の上位から本文を取得し、プロンプトに追加されます。 類似度の高いデータが多い場合は、上からプロンプト文字数の上限に達するまで文章をプロンプトに追加します。 (上限の文字数は2024年1月時点では非公開です。)

類似度の高いデータが多くない場合は、Score 0.7以上を目安に、プロンプトに挿入されます。


検索結果と会話の精度をテストする

エージェントと会話を行うと、会話の履歴のレポートに「クエリー」が出力されます。 実際に会話で生成されたクエリーが確認できます。

実際に生成されたクエリーをナレッジデータストアで検索してみることで、どのような情報が上位にマッチしていたのかを確認できます。この確認を行い、想定されるデータが上位に来ない場合は、本文を編集するなどして、チューニングを行ってください。



チャンクの制御

ナレッジデータストアに格納されるテキストは、およそ「1000文字」の塊に分けて処理されます。この塊をチャンク(CHUNK)と呼びます。1000文字を超えるテキスト自動的にチャンク分けが行われます。この区切りはシステムが自動的に判定しますが、文章の区切りが不適切な場合、RAGの精度を悪化させる可能性があります。


miiboでは、チャンクの位置を明示的に指定することができます。[CHUNK]という表記をナレッジデータストアに登録するテキストに含めることで、その位置でチャンクを行うようになります。

データの例:

会話型AIとは
本書では、人間が話しかけた言葉に対してAIが自動で応答するシステムを「会話型AI」と総称しています。似たような言葉として、「対話システム」「対話AI」「Conversational AI」といった表現があります。miiboは、人間の発話に対して自動応答するための様々機能を提供します。また、必ずしも話しかける側は人間であるとも限りません。AIがAIに話しかけて自動で業務を遂行することもあり得ます。会話型AIの扱う範囲は非常に広義になりつつあります。
代表的な活用例といえば「チャットボット」が有名です。カスタマーサポートの自動化など身の回りでチャットボットに触れる機会も増えてきているのではないでしょうか。
[CHUNK]

会話型AIの意義
会話型AI構築の方法をご紹介する前に、会話型AI開発の意義をご説明させてください。
会話型AIの一番重要なポイントは、「会話」は人類がもっとも長く慣れ親しんだ、「強力なコミュニケーションインターフェース」であるということです。人間は今まで様々な方法でコンピュータとコミュニケーションを図ってきました。キーボードやマウス、音声入力、スマートフォンのタッチ操作など、そのインターフェースは様々な変遷を辿ってきたわけです。
人間同士で古代から培ってきた「会話」というインターフェースは、利用者を限定せずシームレスに情報交換ができる洗練された方法です。それを人間とAI間に適用できることは、様々なIT技術を駆使したプロダクトが提供できる対象を拡大することにつながります。「デジタル・ディバイド」の解消もその恩恵の一つでしょう。AIの技術進歩は凄まじく、様々な問題を解決するポテンシャルを秘めています。しかし、コミュニケーションインターフェースが限定されると、せっかくのAI技術の恩恵も限定されてしまっていました。AI技術の恩恵を多くの人が享受しやすくなるためには、会話型AIの普及が不可欠です。
[CHUNK]

少々余談になりますが、本書で紹介する内容のアウトプットは「チャットボット」が大きな割合を占めます。それでも「チャットボット」ではなく「会話型AI」とわざわざ表記しているのは、ボイスボットやロボットなど文字コミュニケーションに閉じない範囲に応用できるという含みを持たせたい意図があります。チャットボットでの紹介が多くはなりますが、その他のユーザーインターフェースについても言及をしていきます。
2024年以降のAI領域は「マルチモーダルAI」の普及が加速します。チャットボットという既存のメッセージングUIにとらわれず、会話型AIの柔軟な活用に目を向けていくべきです。miiboも「マルチモーダルAI」の開発を行うプロダクトとしての進化を常に目指しています。

※ [CHUNK]を挿入する場合も、文章は1000文字ごとに区切られます。

[CHUNK]を複数挿入する場合、[CHUNK]ごとの間の文字数が1000文字以上になると区切られてしまうため、1000文字を超えない分量で区切ることをおすすめします。


カスタムフィールド

※現在は、自由入力、URLからの入稿の場合のみ対応しています

カスタムフィールドには、データの属性情報やタグ、キーワードなどを含めることができます。(最大5件まで) カスタムフィールドで追加したキーワードは、類似のキーワードがユーザーの発話に含まれるとScoreが上昇しやすくなります。また、カスタムフィールドに追加した情報は会話時のプロンプトにも含まれます。

ナレッジデータストアの文字数が多い場合、プロンプトには分割された文字列が入りますが、時に文字列が切れてしまい想定した情報が必ず前提データに入りきらない場合があります。Custom Fieldの内容は、ナレッジデータストアの本文の文字数に限らず、確実に前提データの上部に設置されます。必ず前提データに含め、プロンプトから指示をしたい場合等に有効です。

前提データの利用時のプロンプト:

前提データ1
ラベル:クイックリプライについて
参考URL: https://miibo.readme.io/docs/%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%83%AA%E3%83%97%E3%83%A9%E3%82%A4
カテゴリ:利用方法
機能名:クイックリプライ
本文: # クイックリプライとは   [Skip link to クイックリプライとは](\#クイックリプライとは)
miiboでは、次にユーザーが発言したくなる可能性の高い発話候補のことを「クイックリプライ」と呼んでいます。

上記のように、プロンプトに採用される際に本文の上部にCustom Fieldの内容が格納されます。


カスタムフィールドの手入力

カスタムフィールドは上述の画面で入力する他、本文に下記のフォーマットで入力を行うことで登録が可能です。

(例)

@{custom_field_key=カテゴリ&custom_field_value=料金}

上記のように、custom_field_keyとcustom_field_valueを指定することで、登録することができます。


検索採用数と閾値の設定

「AIによる応答の設定」画面にて、下記の2つの項目を設定可能です。

  1. 1度の会話で利用するデータの数
  2. 採用するスコアの閾値

1度の会話で利用するデータの数

1度の会話でナレッジデータストアの検索結果をいくつ採用するかを設定できます。

採用された検索結果は、会話のログの「この応答で使われた知識」でご確認いただけます。


採用するスコアのしきい値

採用する情報のスコアのしきい値を設定できます。しきい値を設定すると、そのスコアを超えた検索結果のみが採用されます。

検索モードの設定

検索モード仕組み重視するポイント    適したユースケース
全文検索キーワードベースの検索単語や語句の完全一致製品名、型番、法令など固有名詞や専門用語を含む質問
ミックス検索
(相互採用)
全文検索とベクトル検索を交互に採用キーワードの正確性と意味の類似性の両方を均等に複合的な質問や多角的な情報提供が必要な場合
ハイブリッド検索
(デフォルト)
全文検索とベクトル検索をスコア順に採用意味的類似性と単語一致をバランスよく考慮一般的な問合せや様々な表現で来る質問

「AIによる応答の設定」画面にて、ナレッジデータストアの検索方法を2つのモードから選択できます。目的に応じて最適なモードを設定することで、より精度の高い情報検索を実現できます。

検索モードは3つあります。

  • 全文検索モード
  • ミックス検索モード
  • ハイブリッド検索モード(デフォルト)

です。2つのモードを選択しない場合、ハイブリッド検索モードになります。

検索モードの設定

検索モードの設定

検索モードの精度比較

検索モード 検索精度のメリット 検索精度のデメリット

全文検索

• キーワードの完全一致に非常に強い
• 特定の専門用語や固有名詞の検索に優れる
• クエリに含まれる単語が文書に存在する場合の検出率が高い
• 否定語や限定語を含む複雑な条件検索が可能
• 特定のフレーズや正確な表現の検索に優れる

• 同義語や類似概念を検出できない
• クエリと文書の表現が異なると検出不可
• 概念的な関連性の把握が困難
• コンテキスト理解が限定的
• 言い換えられた質問に弱い
• 暗黙的な関連性を見つけられない

ミックス検索
(相互採用)

• 最も高い意味的理解と関連性検出能力
• 相互フィードバックによる検索精度の向上
• 表現の違いに非常に強い
• 暗黙的な関連性の検出に優れる
• 検索結果が互いに補完し合う
• 複雑な質問や曖昧な表現への対応力が高い

• 過剰な一般化によりノイズを拾う可能性
• 検索手法間の相互干渉による精度低下のリスク
• チューニングが複雑で最適バランスの発見が難しい
• 検索結果の説明可能性が低下
• 相互強化による誤った関連性の増幅リスク

ハイブリッド検索
(デフォルト)

• キーワード検索と意味的検索の両方の利点を活用
• 同義語や類似概念も検出可能
• 表現の違いを超えた検索が一定程度可能
• 精度(Precision)と再現率(Recall)のバランスが良い
• 複数の検索基準による多面的な関連性評価

• キーワード検索と意味検索の統合方法により精度が変動
• 両方の弱点を部分的に持ち込む可能性
• 統合アルゴリズムの調整が難しい
• 異なる種類の関連性の重み付けが複雑
• 検索結果の一貫性確保が課題

全文検索モード

ベクトル検索を使わず、キーワードベースの全文検索のみを行うモードです。特定の単語や語句の完全一致を重視します。製品名や型番、法令など、固有名詞や専門用語を含む質問に対して効果を発揮します。

ユースケースと結果の変化

製品カタログや技術マニュアルなど、正確なキーワードマッチングが重要な場合に最適です。

「RAGの設定方法を教えてください」という質問では、検索クエリー生成プロンプトが「RAG,設定方法」などのクエリーを生成し、「RAG」「設定方法」が含まれる情報と周辺情報の文章を高精度で検索します。 miiboの利用規約や料金プランの参照など、特定の条件や名称が重要な場合、検索クエリーから得られたキーワードの完全一致による検索結果が優先されます。

同義語や類似表現よりも正確なキーワードマッチングが必要な場合、検索結果の的確性が向上します。

ミックス検索モード

ベクトル検索と全文検索の結果を交互に採用するモードです。両方の検索方法からバランスよく結果を取得します。キーワードの正確性と意味の類似性の両方を重視したい場合に効果的です。

ユースケースと結果の変化:

複合的な質問や幅広い情報提供が必要な場合に役立ちます。

「会話型AIの開発におけるベストプラクティス」のような質問では、検索クエリー生成プロンプトが「会話型AI,開発,ベストプラクティス」などのクエリーを生成し、「会話型AI」「開発」などのキーワードを含む情報と、「対話システム設計」など意味的に関連する情報を交互に取得します。 シナリオ対話設計やプロンプトの調整方法など、技術情報と概念説明の両方が必要な分野で特に効果を発揮します。検索クエリーから得られた結果をベクトル検索と全文検索で交互に採用することで、多角的な情報収集が可能になります。

偏りのない多角的な情報提供が可能になり、ユーザーの様々な観点からの質問に対応できます。

ハイブリッド検索モード(デフォルト)

ベクトル検索と全文検索を組み合わせ、スコアが高い順に検索結果を採用するモードです。意味的な類似性と単語の一致の両方を考慮した総合的な検索が可能です。多くのユースケースに適しており、バランスの取れた検索結果を提供します。

ユースケースと結果の変化:

一般的な問い合わせ対応で広く活用できます。

「ステート機能について教えて」といった質問には、「ステート」「機能」というキーワードを含む情報と、「ユーザー情報の保存方法」など意味的に関連する情報も検索結果に含まれます。

プロンプト設定やナレッジデータストアの活用など、様々な表現で問い合わせが来る場合に効果的です。

ミックス検索モードとハイブリッド検索モードの違い

ミックス検索モードとハイブリッド検索モードの違いは、データの採用の仕方が異なります。

ミックス検索モードは、全文検索とベクトル検索を交互に採用。つまり、どっちも必ず入った結果になります。 ハイブリッド検索モードは、全文検索とベクトル検索の両方で検索したScoreを加味して決定したデータを採用。つまり、両方を加味されたバランスの良い結果になります。

検索精度に関するユースケース別比較

検索精度に関するユースケース別比較です。検索モードを選択するときに参考にしてください。

事実検索(特定の情報を正確に探す場合)

  • 全文検索: ★★★★★(正確なキーワードマッチングに最適)
  • ミックス検索: ★★★☆☆(関連情報も多く含まれるため、特定情報の絞り込みが難しい場合も)
  • ハイブリッド検索: ★★★★☆(キーワード部分が機能するが、過剰検出の可能性)

概念検索(テーマや概念に関連する情報を広く探す場合)

  • 全文検索: ★★☆☆☆(関連キーワードを含まない情報は検出不可)
  • ミックス検索: ★★★★★(最も広範な関連情報の検出が可能)
  • ハイブリッド検索: ★★★★☆(意味的関連性も検出可能)

質問応答(質問の言い換えや異なる表現への対応)

  • 全文検索: ★★☆☆☆(質問の表現に強く依存)
  • ミックス検索: ★★★★★(最も多様な表現への対応力が高い)
  • ハイブリッド検索: ★★★★☆(ある程度の言い換えに対応可能)

多言語検索(異なる言語間での検索)

  • 全文検索: ★☆☆☆☆(基本的に同一言語内のみ)
  • ミックス検索: ★★★★☆(相互強化により言語間の検索精度向上)
  • ハイブリッド検索: ★★★☆☆(ベクトル部分で一部対応可能)

レアケース対応(一般的でない質問や特殊な表現)

  • 全文検索: ★★☆☆☆(特殊な表現が一致する場合のみ)
  • ミックス検索: ★★★★☆(複数の角度からのアプローチで対応力向上)
  • ハイブリッド検索: ★★★☆☆(部分的な意味解釈により一部対応)

総合評価(検索精度の観点のみ)

  • 全文検索: 特定キーワードの精確な検索に優れるが、意味的関連性や表現の違いへの対応に弱点
  • ミックス検索: 最も高度な検索精度を提供するが、チューニングの複雑さと誤検出リスクのバランス調整が必要
  • ハイブリッド検索: 精度と再現率のバランスが良く、多くのユースケースで十分な検索精度を提供

変更後の確認

検索モードの設定変更後は、テスト会話を行い、「この応答で使われた知識」で実際に採用された検索結果を確認することをお勧めします。特定の質問タイプでどのモードが最も効果的か評価し、必要に応じて調整してください。