AIパーソナル・ラーニング
と実践的なガイダンス
ビーンバッグ・マースコード1

外部知識ベースへの接続に関するDifyチュートリアル

区別しやすくするため、本稿では以下のように記述する。 ダイファイ 本プラットフォーム外の知識リポジトリを総称して「外部知識リポジトリ」と呼ぶ。

機能紹介

Difyに内蔵された知識ベース機能とテキスト検索メカニズムは、テキスト想起結果をより正確にコントロールすることを必要とする上級開発者のニーズを満たさないかもしれません。

自己研究を選択するチームもある ラグ アルゴリズムを使用し、テキスト・リコール・システムを独自に保守するか、クラウド・プロバイダーが提供する知識ベース・サービス(AWS Bedrockなど)を使用する。


DifyはオープンなLLMアプリケーション開発プラットフォームとして、開発者により多くの選択肢を与えたいと考えている。

Difyは、"Connect to External Knowledge Bases "機能により、外部のナレッジベースに接続することができます。これにより、AIアプリケーションはより多くの情報源にアクセスできるようになります。

具体的には以下のような利点がある:

  • Difyは、クラウドプロバイダーのナレッジベースにホストされているテキストに直接アクセスすることができ、開発者がDifyのナレッジベースにコンテンツをコピーする必要がなくなります。
  • Difyは、自分で構築した知識ベース内のアルゴリズム処理されたテキストに直接アクセスすることができ、開発者は想起精度を向上させるために情報検索メカニズムを最適化することだけに集中すればよい。
  • クラウドベンダーのナレッジベースサービスを直接利用するのに比べ、Difyはより柔軟なアプリケーションレイヤー統合機能を提供しており、開発者は多様なAIアプリケーションを容易に構築することができる。

次の図は、外部知識ベースへの接続の原理を示している:

Dify 外部知識ベースへの接続 チュートリアル-1

 

接続手順

1.準拠した外部知識ベースAPIの確立

APIサービスを設定する前に、ディファイが作成した外部知識ベースAPI仕様をよくお読みください。

2.外部ナレッジベースAPIとの連携

Difyは現在、外部知識ベースの取得のみをサポートしており、変更はサポートしていません。外部の知識ベースは開発者自身でメンテナンスする必要があります。

Knowledge Base "ページに行き、右上の "External Knowledge Base API "をクリックし、"Add External Knowledge Base API "をクリックする。

ページの指示に従ってフォームに記入してください:

  • 知識ベース名: 異なる外部知識ベースAPIを区別するようにカスタマイズできます。
  • APIインターフェースのアドレス: 外部知識ベースへのリンクのアドレス。 アピ終点/検索.詳細な手順については、外部知識ベースAPIを参照してください。
  • APIキー 外部ナレッジベースの接続キー。詳細は外部ナレッジベースAPIを参照してください。

Dify 外部知識ベースへの接続 チュートリアル-1

3.外部の知識ベースへの接続

ナレッジ・ベース」画面で、「ナレッジ・ベース追加」の「外部ナレッジ・ベースに接続」をクリックし、パラメータ設定画面に入ります。

Dify 外部知識ベースへの接続 チュートリアル-1

以下のパラメータを入力する:

  • 知識ベースの名前と説明
  • 外部知識ベース API: DifyはAPI接続を通して外部知識ベースのテキストコンテンツを呼び出します。
  • 外部のナレッジベースID 関連付ける外部ナレッジベースのIDを指定します。詳細は外部ナレッジベースAPIを参照してください。
  • リコール設定を調整する:
    • トップK 値が大きいほど、より多くのテキスト断片が呼び出される。小さい値から実験を始め、最適なバランスが見つかるまで徐々に値を大きくしていくことをお勧めします。
    • スコアのしきい値: 値が高いほど、呼び出されたテキストセグメントが質問に関連しますが、数は減ります。十分な量の関連テキストを得るためには、高い値から始め、徐々に値を下げていくことをお勧めします。

Dify 外部知識ベースへの接続 チュートリアル-1

4.接続とリコールのテスト

接続が確立されたら、"Recall Test "で問題のキーワードをシミュレートし、外部知識ベースからリコールされたテキスト断片をプレビューすることができます。結果に満足できない場合は、リコール・パラメータを変更したり、外部知識ベースの検索設定を調整したりすることができます。

Dify 外部知識ベースへの接続 チュートリアル-1

5.アプリケーション内の統合

  • チャットボット/エージェントタイプのアプリケーション: アレンジメント・ページのコンテキストで、"Context "が表示されているスクリーンを選択する。 外部 タグは 外部知識ベース.

Dify 外部知識ベースへの接続 チュートリアル-1

  • チャットフロー/ワークフロー型アプリケーション: Knowledge Retrievalノードを追加し、以下のノードを選択します。 外部 タグは 外部知識ベース.

Dify 外部知識ベースへの接続 チュートリアル-1

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サービスを作成してください。

Dify 外部知識ベースへの接続 チュートリアル-1

AWS Bedrock ナレッジベースの作成

2.バックエンドAPIサービスの構築

DifyプラットフォームはまだAWS Bedrock Knowledge Baseに直接接続することができないため、開発チームはDifyの外部ナレッジベース接続に関するAPI定義を参照し、AWS Bedrockとの接続を確立するためのバックエンドAPIサービスを手動で作成する必要があります。アーキテクチャ図をご参照ください:

Dify 外部知識ベースへの接続 チュートリアル-1

バックエンド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プラットフォームへの接続に使用されます。

Dify 外部知識ベースへの接続 チュートリアル-1

AWS BedrockナレッジベースIDの取得

4.リンクされた外部知識API

Difyのプラットフォームへ "知識ベース" ページ右上の "外部知識ベースAPI"元気を出して。 "外部ナレッジベースAPIの追加".

ページのプロンプトに従い、以下を順番に記入する:

  • ナレッジベースの名前。Difyプラットフォーム内で接続されている異なる外部ナレッジAPIを区別するために、カスタマイズした名前を付けることができます;
  • APIインターフェースアドレス、外部知識ベースの接続アドレスは、2番目のステップでカスタマイズできます。例 アピ終点/検索.;
  • 外部知識ベース接続キーであるAPIキーは、2番目のステップでカスタマイズできます。

Dify 外部知識ベースへの接続 チュートリアル-1
5.外部の知識ベースへの接続

出向く "知識ベース" ページの下にあるAdd Knowledge Baseカードをクリックします。 "外部の知識ベースへの接続" パラメータ設定ページにジャンプします。

Dify 外部知識ベースへの接続 チュートリアル-1

以下のパラメータを入力する:

  • 知識ベースの名前と説明
  • 外部知識ベースAPI手順4で関連付けた外部ナレッジベースAPIを選択します。
  • 外部ナレッジベースIDステップ 3 で取得した AWS Bedrock ナレッジベース ID を入力します。
  • リコール設定の調整トップK: ユーザーが質問を開始すると、関連性の高いコンテンツセグメントを取得するために、外部のナレッジAPIがリクエストされます。このパラメータは、ユーザの質問と類似度の高いテキストセグメントをフィルタリングするために使用されます。デフォルト値は3です。値が高いほど、より関連性の高いテキストセグメントが呼び出されます。

    スコアのしきい値:テキスト断片のフィルタリングのための類似度のしきい値で、設定されたスコアを超えるテキスト断片のみが呼び出されます、デフォルト値は0.5です。値が高いほど、テキストと質問の間の類似度が高く、呼び出されると予想されるテキストの数が少なく、結果は比較的正確になります。

Dify 外部知識ベースへの接続 チュートリアル-1

一度セットアップすると、外部のKnowledge Base APIへの接続を確立することができます。

6.外部知識ベースとの接続とリコールのテスト

外部の知識ベースへの接続を確立した後、開発者は次のことができる。 "リコールテスト" AWS Bedrockナレッジベースから呼び出されたテキストセグメントのプレビューで、想定される問題のキーワードを模擬表示します。

Dify 外部知識ベースへの接続 チュートリアル-1

外部知識ベースとの接続と想起のテスト

リコールの結果に満足できない場合は、リコールのパラメータを変更したり、AWS Bedrock Knowledge Baseの検索設定を自分で調整したりしてみてください。

Dify 外部知識ベースへの接続 チュートリアル-1

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)
無断転載を禁じます:チーフAIシェアリングサークル " 外部知識ベースへの接続に関するDifyチュートリアル

チーフAIシェアリングサークル

チーフAIシェアリングサークルは、AI学習に焦点を当て、包括的なAI学習コンテンツ、AIツール、実践指導を提供しています。私たちの目標は、高品質のコンテンツと実践的な経験の共有を通じて、ユーザーがAI技術を習得し、AIの無限の可能性を一緒に探求することです。AI初心者でも上級者でも、知識を得てスキルを向上させ、イノベーションを実現するための理想的な場所です。

お問い合わせ
ja日本語