区別しやすくするため、本稿では以下のように記述する。 ダイファイ 本プラットフォーム外の知識リポジトリを総称して「外部知識リポジトリ」と呼ぶ。
機能紹介
Difyに内蔵された知識ベース機能とテキスト検索メカニズムは、テキスト想起結果をより正確にコントロールすることを必要とする上級開発者のニーズを満たさないかもしれません。
自己研究を選択するチームもある ラグ アルゴリズムを使用し、テキスト・リコール・システムを独自に保守するか、クラウド・プロバイダーが提供する知識ベース・サービス(AWS Bedrockなど)を使用する。
DifyはオープンなLLMアプリケーション開発プラットフォームとして、開発者により多くの選択肢を与えたいと考えている。
Difyは、"Connect to External Knowledge Bases "機能により、外部のナレッジベースに接続することができます。これにより、AIアプリケーションはより多くの情報源にアクセスできるようになります。
具体的には以下のような利点がある:
- Difyは、クラウドプロバイダーのナレッジベースにホストされているテキストに直接アクセスすることができ、開発者がDifyのナレッジベースにコンテンツをコピーする必要がなくなります。
- Difyは、自分で構築した知識ベース内のアルゴリズム処理されたテキストに直接アクセスすることができ、開発者は想起精度を向上させるために情報検索メカニズムを最適化することだけに集中すればよい。
- クラウドベンダーのナレッジベースサービスを直接利用するのに比べ、Difyはより柔軟なアプリケーションレイヤー統合機能を提供しており、開発者は多様なAIアプリケーションを容易に構築することができる。
次の図は、外部知識ベースへの接続の原理を示している:
接続手順
1.準拠した外部知識ベースAPIの確立
APIサービスを設定する前に、ディファイが作成した外部知識ベースAPI仕様をよくお読みください。
2.外部ナレッジベースAPIとの連携
Difyは現在、外部知識ベースの取得のみをサポートしており、変更はサポートしていません。外部の知識ベースは開発者自身でメンテナンスする必要があります。
Knowledge Base "ページに行き、右上の "External Knowledge Base API "をクリックし、"Add External Knowledge Base API "をクリックする。
ページの指示に従ってフォームに記入してください:
- 知識ベース名: 異なる外部知識ベースAPIを区別するようにカスタマイズできます。
- APIインターフェースのアドレス: 外部知識ベースへのリンクのアドレス。
アピ終点/検索
.詳細な手順については、外部知識ベースAPIを参照してください。 - APIキー 外部ナレッジベースの接続キー。詳細は外部ナレッジベースAPIを参照してください。
3.外部の知識ベースへの接続
ナレッジ・ベース」画面で、「ナレッジ・ベース追加」の「外部ナレッジ・ベースに接続」をクリックし、パラメータ設定画面に入ります。
以下のパラメータを入力する:
- 知識ベースの名前と説明
- 外部知識ベース API: DifyはAPI接続を通して外部知識ベースのテキストコンテンツを呼び出します。
- 外部のナレッジベースID 関連付ける外部ナレッジベースのIDを指定します。詳細は外部ナレッジベースAPIを参照してください。
- リコール設定を調整する:
- トップK 値が大きいほど、より多くのテキスト断片が呼び出される。小さい値から実験を始め、最適なバランスが見つかるまで徐々に値を大きくしていくことをお勧めします。
- スコアのしきい値: 値が高いほど、呼び出されたテキストセグメントが質問に関連しますが、数は減ります。十分な量の関連テキストを得るためには、高い値から始め、徐々に値を下げていくことをお勧めします。
4.接続とリコールのテスト
接続が確立されたら、"Recall Test "で問題のキーワードをシミュレートし、外部知識ベースからリコールされたテキスト断片をプレビューすることができます。結果に満足できない場合は、リコール・パラメータを変更したり、外部知識ベースの検索設定を調整したりすることができます。
5.アプリケーション内の統合
- チャットボット/エージェントタイプのアプリケーション: アレンジメント・ページのコンテキストで、"Context "が表示されているスクリーンを選択する。
外部
タグは 外部知識ベース.
- チャットフロー/ワークフロー型アプリケーション: Knowledge Retrievalノードを追加し、以下のノードを選択します。
外部
タグは 外部知識ベース.
6.外部知識ベースの管理
ナレッジ・ベース・ページでは、外部ナレッジ・ベース・カードの右上に以下のテキストが表示されます。 外部
タブをクリックします。変更したいナレッジベースを入力し、「設定」をクリックして変更します:
- ナレッジベースの名前と説明
- 可視性の範囲(「私だけ」、「すべてのチームメンバー」、「一部のチームメンバー」)。権限のないメンバーはナレッジベースにアクセスできません。
- リコール設定(トップKとスコアのしきい値)
注:関連付けられた外部知識ベースAPIと外部知識IDを変更することはできません。変更する場合は、新しい外部知識ベースAPIを関連付け、再接続してください。
接続例:AWS Bedrock Knowledge Baseに接続するには?
本稿では、Difyプラットフォームが外部のナレッジベースAPIを介してAWS Bedrock Knowledge Baseに接続され、Difyプラットフォーム内のAIアプリケーションがAWS Bedrock Knowledge Baseに保存されたコンテンツに直接アクセスすることを可能にし、新たな情報源へのアクセスを拡大する方法について概説する。
プレ・ポジショニング
- AWS Bedrock ナレッジベース
- Dify SaaSサービス / Dify コミュニティエディション
- バックエンドAPI開発の基本
1.AWSナレッジベースの登録と作成
AWS BedrockでKnowledge Baseサービスを作成してください。
2.バックエンドAPIサービスの構築
DifyプラットフォームはまだAWS Bedrock Knowledge Baseに直接接続することができないため、開発チームはDifyの外部ナレッジベース接続に関するAPI定義を参照し、AWS Bedrockとの接続を確立するためのバックエンドAPIサービスを手動で作成する必要があります。アーキテクチャ図をご参照ください:
バックエンド・サービスAPIを構築するために、以下の2つのコード・ファイルを参照することができる。
ナレッジ.py
from flask import request
from flask_restful import Resource, reqparse
from bedrock.knowledge_service import ExternalDatasetService
class BedrockRetrievalApi(Resource).
# url : /retrieval
def post(self): parser = reqparse
parser = reqparse.RequestParser()
parser.add_argument("retrieval_setting", nullable=False, required=True, type=dict, location="json")
parser.add_argument("query", nullable=False, required=True, type=str,)
parser.add_argument("knowledge_id", nullable=False, required=True, type=str)
args = parser.parse_args()
#認証チェック
auth_header = request.headers.get("Authorisation")
もし" "がauth_headerになければ、" "を返します。
return {
"error_code": 1001, "error_msg": 1001, "error_code": 1001, "error_msg": 1001
"error_msg": "Invalid Authorization header format. 期待される 'Bearer 'フォーマット。"
}, 403
auth_scheme, auth_token = auth_header.split(None, 1)
auth_scheme = auth_scheme.lower()
if auth_scheme != "bearer".
return {
「error_code": 1001, "error_msg": 1001
"error_msg": "無効なAuthorizationヘッダー形式。 期待される'Bearer '形式。"
}, 403
if auth_token: "期待される'Bearer 'フォーマット。
#はここで認証ロジックを処理する
パス
# ナレッジを呼び出す 回収 result = ExternalDatasetService.knowledge_retrieval()
result = ExternalDatasetService.knowledge_retrieval()
args["retrieval_setting"], args["query"], args["knowledge_id"].
)
return result, 200
knowledge_service.py
インポートboto3
class ExternalDatasetService.
静的メソッド
def knowledge_retrieval(retrieval_setting: dict, query: str, knowledge_id: str):
#岩盤クライアントを取得
client = boto3.client(
"bedrock-agent-runtime"、
aws_secret_access_key="AWS_SECRET_ACCESS_KEY"、
aws_access_key_id="AWS_ACCESS_KEY_ID"、
#の例:us-east-1
region_name="AWS_REGION_NAME"、
)
#フェッチ外部知識検索
response = client.retrieve(
knowledgeBaseId=knowledge_id、
retrievalConfiguration={
"vectorSearchConfiguration": {"numberOfResults": retrieval_setting.get("top_k"), "overrideSearchType": "HYBRID"}.
},
retrievalQuery={"テキスト": query}、
)
#パースレスポンス
results = [] (結果)
if response.get("ResponseMetadata") and response.get("ResponseMetadata").get("HTTPStatusCode") == 200:: if response.get("ResponseResults"): if response.get("ResponseMetadata").get("HTTPStatusCode") == 200
if response.get("retrievalResults")::
retrieval_results = response.get("retrievalResults")
for retrieval_result in retrieval_results: #で結果をフィルタリングする。
#はスコアがしきい値未満の結果を除外する
if retrieval_result.get("score") < retrieval_setting.get("score_threshold", .0):: スコアがしきい値未満の結果を#でフィルタリングする
続ける
result = {
"metadata": retrieval_result.get("metadata")、
"score": retrieval_result.get("score")、
"title": retrieval_result.get("metadata").get("x-amz-bedrock-kb-source-uri")、
"content": retrieval_result.get("content").get("text")、
}
results.append(結果)
return {
"records": 結果
}
このプロセスで、認証とその後の接続のためのAPIインターフェース・アドレスとAPIキーを構築することができる。
3.AWS Bedrock Knowledge Base IDの取得
AWS Bedrock Knowledgeバックエンドにログインし、作成されたナレッジベースのIDを取得します。このパラメータは、以降のステップでDifyプラットフォームへの接続に使用されます。
4.リンクされた外部知識API
Difyのプラットフォームへ "知識ベース" ページ右上の "外部知識ベースAPI"元気を出して。 "外部ナレッジベースAPIの追加".
ページのプロンプトに従い、以下を順番に記入する:
- ナレッジベースの名前。Difyプラットフォーム内で接続されている異なる外部ナレッジAPIを区別するために、カスタマイズした名前を付けることができます;
- APIインターフェースアドレス、外部知識ベースの接続アドレスは、2番目のステップでカスタマイズできます。例
アピ終点/検索
.; - 外部知識ベース接続キーであるAPIキーは、2番目のステップでカスタマイズできます。
5.外部の知識ベースへの接続
出向く "知識ベース" ページの下にあるAdd Knowledge Baseカードをクリックします。 "外部の知識ベースへの接続" パラメータ設定ページにジャンプします。
以下のパラメータを入力する:
- 知識ベースの名前と説明
- 外部知識ベースAPI手順4で関連付けた外部ナレッジベースAPIを選択します。
- 外部ナレッジベースIDステップ 3 で取得した AWS Bedrock ナレッジベース ID を入力します。
- リコール設定の調整トップK: ユーザーが質問を開始すると、関連性の高いコンテンツセグメントを取得するために、外部のナレッジAPIがリクエストされます。このパラメータは、ユーザの質問と類似度の高いテキストセグメントをフィルタリングするために使用されます。デフォルト値は3です。値が高いほど、より関連性の高いテキストセグメントが呼び出されます。
スコアのしきい値:テキスト断片のフィルタリングのための類似度のしきい値で、設定されたスコアを超えるテキスト断片のみが呼び出されます、デフォルト値は0.5です。値が高いほど、テキストと質問の間の類似度が高く、呼び出されると予想されるテキストの数が少なく、結果は比較的正確になります。
一度セットアップすると、外部のKnowledge Base APIへの接続を確立することができます。
6.外部知識ベースとの接続とリコールのテスト
外部の知識ベースへの接続を確立した後、開発者は次のことができる。 "リコールテスト" AWS Bedrockナレッジベースから呼び出されたテキストセグメントのプレビューで、想定される問題のキーワードを模擬表示します。
リコールの結果に満足できない場合は、リコールのパラメータを変更したり、AWS Bedrock Knowledge Baseの検索設定を自分で調整したりしてみてください。
一般的な問題
外部のKnowledge Base APIへの接続エラーが発生した場合は?
以下は、エラーコードと対応する解決策です:
エラーコード | 擬似 | 決着方法 |
---|---|---|
1001 | 無効な認証ヘッダー形式 | リクエストのAuthorizationヘッダーのフォーマットをチェックする。 |
1002 | 異常の検証 | APIキーが正しいか確認する |
2001 | 知識ベースが存在しない | 外部の知識ベースをチェックする |
外部知識ベースAPI仕様
ふりだし
POST /検索
リクエストヘッダ
このAPIは、チーム内で独立して管理されているナレッジベースに接続するために使用されます。この方法の詳細については、外部知識ベースへの接続を参照してください。
はHTTPリクエストヘッダの 認可
フィールドで APIキー
を使用してパーミッションを認証します。認証ロジックは、Retrieval APIで定義します:
認可:ベアラ {API_KEY}
依頼者
リクエストは以下のJSONフォーマットでデータを受け付ける:
因果性 | 必須項目 | 類型論 | 説明 | 例 |
---|---|---|---|---|
ナレッジID | であります | ストリング | ナレッジベース固有ID | AAA-BBB-CCC |
クエリー | であります | ストリング | ユーザークエリ | ディファイとは? |
検索設定 | であります | ボーイフレンド | 知識検索パラメータ | 下記参照 |
検索設定
属性には以下のキーが含まれる:
因果性 | 必須項目 | 類型論 | 説明 | 例 |
---|---|---|---|---|
トップ・ケー | であります | 整数 | 検索結果の最大数 | 5 |
スコアしきい値 | であります | 浮動小数点 | クエリに対する結果の関連性のスコア制限、範囲:0~1 | 0.5 |
リクエスト例
POST /検索 HTTP/1.1
コンテントタイプ: application/json
認証:ベアラyour-api-key
{
"knowledge_id": "your-knowledge-id"、
"retrieval_setting": {
"top_k": 2、"score_threshold": { { "top_k": 2、"score_threshold": 0.5
"score_threshold": 0.5
}
}
応答本文
操作に成功すると、サービスはHTTP 200レスポンスとJSON形式の以下のデータを返す:
因果性 | 必須項目 | 類型論 | 説明 | 例 |
---|---|---|---|---|
記録 | であります | オブジェクトリスト | 知識ベースから照会されたレコードのリスト | 下記参照 |
記録
属性は、以下のキーを含むオブジェクトのリストである:
因果性 | 必須項目 | 類型論 | 説明 | 例 |
---|---|---|---|---|
内容 | であります | ストリング | 知識ベースのテキストブロック | Dify: GenAIアプリケーション開発プラットフォーム |
スコア | であります | 浮動小数点 | 結果とクエリの相関スコア、範囲:0~1 | 0.98 |
タイトル | であります | ストリング | 文書タイトル | ディファイ入門 |
メタデータ | 詰り | JSON | データ・ソース内のドキュメントのメタデータ属性とその値 | 例を見る |
応答例
HTTP/1.1 200
コンテントタイプ:application/json
{
"records": [
{
"メタデータ": {
"説明": "dify知識文書"
},
"score": 0.98, "title": "knowledge.txt".
"title": "knowledge.txt", "content": "これは外部ドキュメントです。
"content": "これは外部の知識文書です。"
},
{
"metadata": {
"path": "s3://dify/introduce.txt", {
"description": "difyを紹介します。"
},
"title": "introduce.txt", "content": "GenAI Apps": "GenAI Apps".
"content": "GenAIアプリケーションのイノベーションエンジン"
}
]
}
不正確
操作に失敗した場合、サービスは以下のエラーメッセージ(JSON形式)を返します:
因果性 | 必須項目 | 類型論 | 説明 | 例 |
---|---|---|---|---|
エラーコード | であります | 整数 | エラーコード | 1001 |
error_msg | であります | ストリング | API例外の説明 | 無効な Authorization ヘッダ形式。 |
エラーコード
属性タイプ:
コーディング | 説明 |
---|---|
1001 | 無効な認証ヘッダー形式 |
1002 | 認証失敗 |
2001 | 知識ベースが存在しない |
HTTPステータスコード
- AccessDeniedException: アクセス権がありません。 (HTTPステータスコード:403)
- InternalServerException: 内部サーバーエラー。 (HTTPステータスコード:500)