概要1. よくある要望ChatGPTが知らない独自データをベースとした回答をさせたい2. Embeddingsを使ったソリューションあらかじめ独自データをEmbeddingsでベクトルデータに化させDBに保存ユーザの質問に答える前に、関係のありそうな独自データをDBから検索して、プロンプトに注入するChatGPTがそれをもとに回答するので、独自データに即した回答をしてくれる4. このソリューションの課題以下のような理由で正しくない回答をする可能性がある。関連するデータが取れないため答えも違う取得された関連データが不十分で答えが不十分関連情報は取得できたが、答えの生成を間違える※ 詳細は本文で記載しています。一般的な実装方法一般的には以下の2ステップで実装をすることができます1️⃣ 独自データのデータベースを作る独自データが記載されたテキストデータを用意するChunkingで短い文章に区切る (100文字で区切る、文章で区切る、ずらしながら区切るなど工夫可能)OpenAI Embeddings APIで文章をベクトル化させるベクトルデータをDBに保存する2️⃣ プロンプトに独自データを追加ユーザ入力をEmbeddingsでベクトル化ベクトルのコサイン類似度の高いデータをDBから複数件取得するプロンプトの末尾に取得したデータを追加するプロンプト内に「以下の情報を使って回答してください。もし関連する情報がなければ回答できないことを伝えてください」等の文章を加える。課題正しい回答をするためには、「正しく独自データを取得できて」「正しくそこから答えを作る」ができて初めて達成できます。どちらかをミスると正しくない回答になります。原因対策具体例関連するデータが取れない関連情報の検索部分を改善必要QAシステムに導入したが、ユーザ自身検索ワードが分かっていないので、曖昧な入力をしてしまい、関係ない情報を引っ張ってきてしまう。具体例: 住宅レコメンドシステムに導入したが、家賃15万円以下という明確な要望があるのにベクトル検索では明確な条件検索ではないため、家賃20万円の家も出してしまう取得された関連データが不十分不完全なデータ取得になっているのでChunkingを改善するニュース記事の分析システムにおいて、記事の全文を分析すべきなのに、システムが一部の段落しか取得していないため、その情報だけでは結論を導き出せない状況が発生する。関連情報は取得できたが、答えが違うプロンプトの改善が必要関連情報を使って回答を作成する部分のプロンプトがイマイチだと、勝手にAIが解釈を加えたり、関連情報を掛け合わせて嘘を作り出してしまうことがある。デモLangChainなどのライブラリを活用して上記を実装するのが一般的ですが、LangCore SaaSではより簡便にEmbeddingsによる独自データ活用ができます。使い方1️⃣ ドメイン知識のデータベースを作るURLはこちら: https://langcore-embeddings.streamlit.app/register_textOpenAI APIキーを入力グループ名を入力 (今回は demo にします)学習させたいテキストデータを入力 (今回は、お寿司と唐揚げが好きというデータを登録します)Register Embeddingsを入力すると登録が完了されます。https://langcore.org/feature/embeddings から登録されたデータの確認と削除を行うことができます。2️⃣ 実際に独自データを加味しているのか確認してみるURLはこちら: https://langcore-embeddings.streamlit.app/実際に、先ほど学習させたデータを元にした回答をするか試してみましょう。OpenAI APIキーを入力グループ名を入力 (先ほど入力したは demo にします)「好きな食べ物は?」と聞いてみるすると以下のような結果が返ってきます。きちんとお寿司と唐揚げが好きと回答してくれました。3️⃣ 実際に実行されたリクエストを見てみるLangCore で実行されたログが保存されているので、確認してみます。最初のシステムプロンプト部分に、登録したデータがプロンプト内に注入されていることを確認できました。今回は登録データ数が少なかったですが、登録データ数が多くなった場合はユーザ入力の関連性の高いものだけをピックアップして注入されます。ソースコードも公開しています。登録画面 と チャット画面。まとめEmbeddingsを使って独自データをChatGPTが扱えるようになると、ユースケースがグッと広がります。LangCore SaaSを使うことでインフラ不要で手軽にEmbeddingsを活用した独自データの活用を行うことができます!活用に興味のある方はお気軽にお問い合わせください。