最近ノーコードでAIのアプリケーションが作れるDifyが話題ですが、AWSのLambdaとカスタムツールとして紐づけると比較的なんでも実装出来るようになったので今回はその方法について解説します。
そもそもDifyとは
Difyは、RAGエンジンを活用したオープンソースのLLMアプリ開発プラットフォームです。ノードベースの直感的なインターフェースで、複雑なAIワークフローも効率的に構築でき、WebアプリやAPIなど様々な形で公開できます。
今回は本サービスを更にカスタマイズしていくためにLambda関数と紐づける方法をまとめていきます。
Lambda関数の関数URL指定と引数の受け渡し方法(Python)
Lambda関数は作成時に関数URLを有効化するか、設定→関数URL→有効化の手順を踏むことで関数URLを発行することができます。認証タイプは”NONE”、呼び出しモード"BUFFERED"にしておきます。 実行時間も適切に設定するようにしましょう。
また、今回は検証のため認証タイプを”None”にしていますが、運用の際は適切に設定することをおすすめします。
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】があるので、こちらでどんな人が働いているかを見ることができます!