MENU

Difyでナレッジ検索チャットボット作成!カスタムツール連携

当ページのリンクには広告が含まれています。

Dify(ディファイ)を使って、独自のナレッジベース(知識データベース)を参照する高度なチャットボットを作成してみませんか?

この記事では、Difyの標準機能だけでなく、Amazon Bedrock Knowledge Baseと連携する「カスタムツール」を作成し、RAG(検索拡張生成)チャットボットを構築する手順を詳しく解説します。

目次

1. シンプルなチャットボットの作成(動作確認)

まずはDifyの基本的な機能を使って、シンプルなチャットボットを作成し、動作を確認してみましょう。

  1. Difyのスタジオから「最初から作成」を選択し、「チャットボット」を選びます。
  2. 使用するLLMモデル(Claude 3 Haikuなど)を選択します。
  3. 設定を変更したら必ず「公開」→「更新」ボタンを押して保存してください。

※モデルを選択
※更新する (何か設定変更したら更新して保存するように!)

チャットボットを起動

プレビュー画面で適当な質問を投げかけ、AIから応答が返ってくることを確認します。これでベースとなる環境の準備は完了です。

チャットしてみる
Claude 3 Haiku は、ChatGPT をベースに作られていることが分かりました…

2. Amazon Bedrock連携用カスタムツールの作成

外部のナレッジベース(ここではAmazon Bedrock Knowledge Base)を検索するために、Difyの「カスタムツール」機能を使用します。

OpenAPIスキーマの設定

「ツール」タブから「カスタムツールを作成」を選択し、以下のOpenAPIスキーマを入力します。これにより、Difyが外部API(Amazon API Gateway等で構築したBedrock検索API)を呼び出せるようになります。

openapi: "3.0.1"
info:
  title: "DifyAPI"
  version: "2024-10-04T04:37:52Z"
servers:
  - url: "https://idocl2ul73.execute-api.ap-northeast-1.amazonaws.com/prod" # ここを正しいリクエストURLに変更する
    variables:
      basePath:
        default: "prod"
paths:
  /:
    post:
      summary: QueryBedrockKnowledgeBase # 追加
      operationId: queryBedrockKnowledgeBase # 追加
      requestBody: # 以下の requestBody を追加
        description: "Request body containing the query"
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/query"
      responses:
        "200":
          description: "200 response"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Empty"
      security:
        - api_key: []
components:
  schemas:
    query: # 以下の query を追加
      title: "query"
      type: "object"
      properties:
        query:
          type: "string"
      required:
        - query
    Empty:
      title: "Empty Schema"
      type: "object"
  securitySchemes:
    api_key:
      type: "apiKey"
      name: "x-api-key"
      in: "header"

認証情報の設定

APIへのアクセスに必要な認証キー(x-api-key)を設定します。

KeyValue
x-api-key(発行したAPIキーを入力)

設定後、「テスト」ボタンを押して実際にAPIが動作するか確認します。「bedrock と teams は連携できますか」などのクエリを送信し、検索結果が返ってくれば成功です。

bedrock と teams は連携できますか


3. チャットフローの構築

カスタムツールが完成したので、これを組み込んだチャットボットのワークフロー(チャットフロー)を構築します。全体の流れは以下のようになります。

以下のようなフローにします

各ブロックの設定詳細

  • 開始ブロック: ユーザーの入力(sys.query)を受け取ります。
    デフォルトで問題ないです
    • sys.query変数にユーザの質問内容が入ります
    • 変数は、全てのブロックから利用できます
  • 質問分類器: ユーザーの質問内容を分析し、ナレッジベース検索が必要かどうかを判定します。不要な場合は通常の会話へ分岐させます。
    入力変数は、sys.queryにします
    クラスで、条件を日本語で記載します
    ユーザの質問に対して、自然言語で IF 文を定義すると考えてください
  • カスタムツールブロック: 作成したツールを呼び出します。入力変数には sys.query を設定し、出力結果(検索されたナレッジ)を受け取ります。
    カスタムツールブロックは、カスタムツールを呼び出すブロックになります
    入力変数は、sys.queryにします
    出力変数に、API Gateway からのレスポンスが入ります
    からテストをすると、textに Knowledge Base の回答が入っていることが分かります
  • LLMブロック: 最終的な回答を生成します。
    • コンテキスト: カスタムツールブロックの出力結果を設定します。
    • プロンプト: 「以下のコンテキストを元に質問に答えてください」といった指示を記述します。
      SYSTEMUSERの 2 つの内容を元に生成 AI が回答を生成します
      回答結果は、出力変数textに入ります
  • 回答ブロック: LLMが生成したテキストをユーザーに表示します。
    回答ブロックは、ユーザの質問に対して回答するアシスタントのメッセージ文を記載します
    ここでは、Knowledge Base から情報が取得できなかった場合のブロックになるので、以下の日本語を直接返します
    Knowledge Baseに情報はありませんでした

動作確認

プレビュー画面で再度質問を投げてみます。今回は外部のナレッジベースを検索し、その内容に基づいた回答が生成されているはずです。

bedrock と teams は連携できますか

このようにDifyでは、標準機能だけでなく外部APIと連携することで、AWSなどのクラウドサービス上に構築した既存の資産を有効活用したチャットボットをノーコード(ローコード)で構築することが可能です。

【推奨】業務システム化に有効なアイテム

生成AIを学ぶ

システム化のパートナー

VPSサーバの選定

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次