知識ベースを使用したカスタマーサービスボット¶
前回の実験では、ファイルアップロードの基本的な使い方を学びました。しかし、読み込む必要のあるテキストがLLMのコンテキストウィンドウを超える場合、知識ベースを使用する必要があります。
コンテキストとは?
コンテキストウィンドウとは、LLMがテキストを処理する際に「見る」ことができ、「記憶」できるテキストの範囲を指します。これは、モデルが応答を生成したりテキストを続ける際に、どれだけの過去のテキスト情報を参照できるかを決定します。ウィンドウが大きいほど、モデルはより多くの文脈情報を利用でき、生成されるコンテンツは通常より正確で一貫性があります。
以前、LLMの幻覚の概念について学びました。多くの場合、LLM知識ベースによりエージェントは正確な情報を見つけることができ、質問に正確に答えることができます。カスタマーサービスや検索ツールなどの特定分野での応用があります。
従来のカスタマーサービスボットは、多くの場合キーワード検索に基づいています。ユーザーがキーワード外の質問を入力すると、ボットは問題を解決できません。知識ベースはこの問題を解決するために設計されており、セマンティックレベルの検索を可能にし、人間のエージェントの負担を軽減します。
実験を始める前に、知識ベースの核心は検索であり、LLMではないことを覚えておいてください。LLMは出力プロセスを強化しますが、本当の必要性は依然として回答を生成することです。
この実験で学ぶこと¶
- チャットフローの基本的な使い方
- 知識ベースと外部知識ベースの使用方法
- 埋め込みの概念
前提条件¶
アプリケーションの作成¶
FlexAIで、空白から作成 - チャットフローを選択します。

モデルプロバイダーの追加¶
この実験では埋め込みモデルを使用します。現在サポートされている埋め込みモデルプロバイダーには、OpenAIとCohereが含まれます。FlexAIのモデルプロバイダーで、TEXT EMBEDDINGラベルがあるものがサポートされています。少なくとも1つを追加し、十分な残高があることを確認してください。

埋め込みとは?
「埋め込み」は、離散変数(単語、文、または文書全体など)を連続ベクトル表現に変換する技術です。
簡単に言えば、自然言語をデータに処理する際、テキストをベクトルに変換します。このプロセスを埋め込みと呼びます。意味的に類似したテキストのベクトルは近くになり、意味的に反対のテキストのベクトルは離れます。LLMはこのデータを使用してトレーニングを行い、後続のベクトルを予測し、テキストを生成します。
知識ベースの作成¶
FlexAIにログイン -> 知識 -> 知識を作成
FlexAIは3つのデータソースをサポートしています:ドキュメント、Notion、ウェブページ。
ローカルテキストファイルの場合、ファイルの種類とサイズ制限に注意してください。Notionコンテンツの同期にはNotionアカウントのバインドが必要です。ウェブサイトの同期にはJinaまたはFirecrawl APIを使用する必要があります。
まずローカルドキュメントのアップロードを例として始めます。
チャンク設定¶
ドキュメントをアップロードすると、次のページが表示されます:

右側にセグメンテーションプレビューが表示されます。デフォルトでは自動セグメンテーションとクリーニングが選択されています。FlexAIはコンテンツに基づいて記事を自動的に多くの段落に分割します。カスタム設定で他のセグメンテーションルールを設定することもできます。
インデックス方法¶
通常は高品質を選択することが好まれますが、これは追加のトークンを消費します。経済的を選択するとトークンを消費しません。
FlexAIのコミュニティ版はQ&Aセグメンテーションモードを使用します。対応する言語を選択すると、テキストコンテンツをQ&A形式に整理でき、追加のトークン消費が必要です。
埋め込みモデル¶
使用前にモデルプロバイダーのドキュメントと価格情報を参照してください。
異なる埋め込みモデルは異なるシナリオに適しています。例えば、Cohereのembed-englishは英語ドキュメントに適しており、embed-multilingualは多言語ドキュメントに適しています。
検索設定¶
FlexAIは3つの検索機能を提供しています:ベクトル検索、全文検索、ハイブリッド検索。ハイブリッド検索が最もよく使用されます。
ハイブリッド検索では、重みを設定したり、再ランキングモデルを使用したりできます。重みを設定する際、検索がセマンティクスとキーワードのどちらをより重視すべきかを設定できます。例えば、下の画像では、セマンティクスが重みの70%を占め、キーワードが30%を占めています。

保存して処理をクリックするとドキュメントが処理されます。処理後、ドキュメントはアプリケーションで使用できます。

ウェブサイトからの同期¶
多くの場合、ヘルプドキュメンテーションに基づいてスマートカスタマーサービスボットを構築する必要があります。FlexAIを例として、FlexAIヘルプドキュメンテーションを知識ベースに変換できます。
現在、FlexAIは最大50ページの処理をサポートしています。数量制限に注意してください。超過した場合は、新しい知識ベースを作成できます。

知識ベースコンテンツの調整¶
知識ベースがすべてのドキュメントを処理した後、知識ベース内のセグメンテーションの一貫性を確認することが最善です。不一致は検索効果に影響し、手動で調整する必要があります。
ドキュメントコンテンツをクリックして、セグメント化されたコンテンツを閲覧します。無関係なコンテンツがある場合は、無効化または削除できます。
コンテンツが別の段落にセグメント化されている場合も、元に戻す必要があります。
召回テスト¶
知識ベースのドキュメントページで、左サイドバーの召回テストをクリックしてキーワードを入力し、検索結果の精度をテストします。
ノードの追加¶
作成したAPPに入り、スマートカスタマーサービスボットの構築を始めましょう。
質問分類ノード¶
異なるユーザーニーズを分離するために質問分類ノードを使用する必要があります。場合によっては、ユーザーが無関係な話題についてチャットすることもあるため、これに対しても分類を設定する必要があります。
分類をより正確にするために、より良いLLMを選択する必要があり、分類は十分に具体的で十分な区別がある必要があります。
参考分類は以下の通りです:
- ユーザーが無関係な質問をする
- ユーザーがFlexAI関連の質問をする
- ユーザーが技術用語の説明を求める
- ユーザーがコミュニティへの参加について尋ねる

直接返信ノード¶
質問分類では、「ユーザーが無関係な質問をする」と「ユーザーがコミュニティへの参加について尋ねる」はLLM処理を必要とせず返信できます。したがって、これら2つの質問の後に直接返信ノードを直接接続できます。
「ユーザーが無関係な質問をする」:
ユーザーをヘルプドキュメンテーションに誘導し、自分で問題を解決しようとしてもらうことができます。例えば:
FlexAIはMarkdown形式のテキスト出力をサポートしています。Markdownを使用して出力のテキスト形式を豊かにできます。Markdownを使用してテキスト内に画像を挿入することもできます。
知識検索ノード¶
「ユーザーがFlexAI関連の質問をする」の後に知識検索ノードを追加し、使用する知識ベースをチェックします。
LLMノード¶
知識検索ノードの次のノードでは、知識ベースから取得したコンテンツを整理するためのLLMノードを選択する必要があります。
LLMはユーザーの質問に基づいて返信を調整し、返信をより適切にする必要があります。
コンテキスト:知識検索ノードの出力をLLMノードのコンテキストとして使用する必要があります。
システムプロンプト:{{context}}に基づいて、{{user question}}に答えてください。

プロンプト作成エリアで/または{を使用して変数を参照できます。変数では、sys.で始まる変数はシステム変数です。詳細はヘルプドキュメンテーションを参照してください。
さらに、LLMメモリを有効にして、ユーザーの会話体験をより一貫性のあるものにすることができます。
質問1:外部知識ベースの接続方法¶
知識ベース機能では、AWS Bedrock知識ベースなどの外部知識ベースAPIを通じて外部知識ベースに接続できます。

質問2:APIを通じて知識ベースを管理する方法¶
FlexAIのコミュニティ版とSaaS版の両方で、知識ベースAPIを通じて知識ベースの追加、削除、ステータスのクエリができます。

知識ベースがデプロイされているインスタンスで、知識ベース -> APIに移動し、APIキーを作成します。APIキーは安全に保管してください。
質問3:カスタマーサービスボットをウェブページに埋め込む方法¶
アプリケーションのデプロイ後、ウェブページ埋め込みを選択し、適切な埋め込み方法を選択して、コードをウェブページの適切な場所に貼り付けます。