CUEBiC TEC BLOG

キュービックTECチームの技術ネタを投稿しております。

DifyとLambdaを組み合わせたアプリケーションの作り方

サムネイル

最近ノーコードでAIのアプリケーションが作れるDifyが話題ですが、AWSのLambdaとカスタムツールとして紐づけると比較的なんでも実装出来るようになったので今回はその方法について解説します。

そもそもDifyとは

Difyは、RAGエンジンを活用したオープンソースのLLMアプリ開発プラットフォームです。ノードベースの直感的なインターフェースで、複雑なAIワークフローも効率的に構築でき、WebアプリやAPIなど様々な形で公開できます。

今回は本サービスを更にカスタマイズしていくためにLambda関数と紐づける方法をまとめていきます。

dify.ai

Lambda関数の関数URL指定と引数の受け渡し方法(Python)

Lambda関数は作成時に関数URLを有効化するか、設定→関数URL→有効化の手順を踏むことで関数URLを発行することができます。認証タイプは”NONE”、呼び出しモード"BUFFERED"にしておきます。 実行時間も適切に設定するようにしましょう。

また、今回は検証のため認証タイプを”None”にしていますが、運用の際は適切に設定することをおすすめします。

it.kensan.net

関数URLの有効化の方法

lambda_handlerに関しては下記の通り、bodyから引数を受け取る設定をします。今回はsample_textとという値を受け渡すことにします。 またスクリプトPythonで作成しました。

import json

def lambda_handler(event, context):
    try:
        body = json.loads(event.get("body", "{}"))
    except json.JSONDecodeError:
        return {
            'statusCode': 400,
            'body': json.dumps('Invalid JSON format in request body')
        }
    
    sample_text = body.get('sample_text')
    
    if not sample_text:
        return {
            'statusCode': 400,
            'body': json.dumps('Missing "sample_text" key in the request body')
        }
    print(sample_text)

    return {'statusCode': 200, 'body': json.dumps(sample_text)}

これでlambda関数の設定は完了です。試しに関数のテストを行う際はcurlコマンドなどで確認可能です。

curl -v 'https://xxxxxxxxxxxxxxxxxxxxxxx.lambda-url.ap-northeast-1.on.aws/' \
-H 'content-type: application/json' \
-d '{ "sample_text": "this is a test message" }'

this is a test messageと、bodyに渡したテキストが正しく返ってきたのでこれで設定完了です。

Difyのカスタム関数の作り方とOpenAPIの記載方法

画面上部よりツールを選択肢、カスタムツールを作成ボタンをクリックします。 カスタムツールの作成方法

するとカスタムツールの作成画面が現れるので名前とスキーマを定義します。 試しに今回のlambda関数を利用するための関数を作ってみます。

urlやsample_textという変数名は適宜変更が必要です

openapi: 3.0.0
info:
  title: lambda test
  version: "1.0"
servers:
  - url: 'https://xxxxxxxxxxxxxxxxxxx.lambda-url.ap-northeast-1.on.aws'
paths:
  /:
    post:
      summary: summary of tool
      operationId: invokeLambda
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                sample_text:
                  type: string
                  description: The keyword to be processed by the Lambda function.
              required:
                - sample_text
      responses:
        '200':
          description: Successful response with suggestions
          content:
            application/json:

入力すると利用可能なツールのテストアクションボタンが出現するのでテストしてみます。 正しく実行されたので保存をクリックします。

カスタムツールの設定方法

テスト結果

カスタムツールのテスト方法

実際に使ってみる

保存が完了するとスタジオからカスタムツールが選択できるので選択し正しく入力変数を設定します。

入力した値が返答され、正しく実装できていることがわかります。

カスタムツールを実際に使ってみた結果

ただし実際に使ってみた結果、カスタムツールは1分しか待ってくれないようなのでLamda上での処理は1分以内に完了するようにしましょう。

まとめ

今回、カスタムツールとしてLambda関数を利用し、Difyアプリケーションをカスタマイズする方法をご紹介しました。

一分の制約はあれど、Dify内に存在する”コード”のブロックよりも遥かに実現できる機能が多くなります。 今回紹介したようにDifyとLambdaを必要に応じて紐づけることで、より自由度の高いDifyアプリケーションの構築ができるので是非お試しください!

お知らせ!!

キュービックでは、一緒に働いてくれる仲間を募集しています。興味がある方はカジュアル面談Webエンジニアから応募をお願いします。ご応募お待ちしております。 herp.careers

また、エンジニアチームが運営しているYoutubeチャンネル【TEC TV】があるので、こちらでどんな人が働いているかを見ることができます!

www.youtube.com