【Dify活用】生成AIでSNS投稿を爆速で作成する方法②エージェントの活用
前回は①文字調整関数の使い方を紹介しました。当記事では②エージェント(Function Calling)の活用を解説します。
目次[非表示]
Difyには外部関数をツールとして生成AIに使わせる機能「エージェント」が用意されています。
このエージェントに「SNS投稿文章の作成」と「文字数のチェック」をペアで実行させることが当記事の目的となります。
Difyについて
Difyは、オープンソースのLLM(大規模言語モデル)アプリケーション開発プラットフォームです。
Difyでは会話形式の「チャットボット」、フローチャート形式で処理を行う「ワークフロー」、そして外部ツールを実行させる「エージェント」と大きく3つの機能に分かれています。
エージェントを使うべき理由
Difyを使うと「テキストジェネレーター」というメニューがあるので、SNSの文章やプレスリリース作成などはこちらを使いたくなると思います。
しかしテキストジェネレーターは、出力できるのは1回のみで、修正・改善する機能はありません。
テキスト原稿の作成などは「出力→評価→再修正」を繰り返すことが重要になります。
この作業が可能で、かつ外部関数(外部の機能)が使えるのが「エージェント」です。
※チャットフローも外部ツールを利用できますが、分岐が面倒で結果的に人為的になってしまうため、まずはシンプルなエージェントがおすすめです。
外部関数の利用 Function Calling
この外部関数を生成AIに使わせる機能のことをOpen AIでは「Function Calling」と読んでいます。
Function Callingは複雑な処理となり、例えばPython上の実装だけでも以下の分量のコードが必要となります。
初回の出力を入れなくてもFunction Callingはこんなにコードが長くなってしまいます。
これをDifyであれば、複雑なコード処理なしでクリックだけで実装することが可能です。
今回紹介するものは、前回①で解説したparse_tweet関数をエージェントに外部関数として使わせるという流れになります。
ちなみにFunction Callingの重要なポイントは、関数の実行そのものは生成AIは一切関与しないという点です。
Difyで関数を実行する手段は今のところ、Codeブロックの中でコードを実行する方法が上げられます。
しかしCodeブロックは、現状ライブラリのインストールが3種(jinja2、httpx、requests)しか対応していません。よって「!pip install twitter-text-parser」は使えず、このparse_tweet関数は使えません。
このような場合、この関数をAPIサーバーとして公開し、外部カスタムツールから使う方法であれば対応が可能です。
Difyでの外部APIは「ツール」という形で、様々なものが用意されています。
このツールは、カスタムツールとして自由にユーザーが追加することが可能です。
ここに先程のparse_tweet機能を追加すれば、生成AIがXの文字数チェックを自動的に行うことができるようになるわけです。
その方法を段階ごとに解説します。
Difyで自作APIを叩く方法
①コードファイルをサーバーにデプロイする
まずparse_tweetのPythonコードを外部サーバーにアップロードします。
今回はAWS Lambdaを使ってみたいと思います(GoogleならCloud Functionsが同様の機能だと思います)。
プロセスとしては以下のような流れになります。
ローカルでpip installなどを実行し作ったファイルをまるまるzip保存し、AWS Lambdaにアップロードします。
なおこうしたAWS Lambdaの詳しい操作方法など、前提知識は全くない状態でしたが、全てClaudeが教えてくれました。
生成AI時代は『良くわからないけどまずやってみてエラーをAIに報告する』のが得策だと思います。
②APIサーバーを立てる
ファイルをサーバーにアップロードした後は、このコードにネット経由でアクセスするため、APIとして公開する流れになります。
APIサーバーはいくつかあるようですが、ここではAmazon Gatewayというものを使ってみます。
ちなみに各社のサービス名称をClaudeに聞いたらこれまた一発で教えてくれました。今回はAmazonのAPI管理とサーバレス関数を使ったことになります。
APIは、URLでアクセスすることでこのコード実行結果を取得するものです。requestsなどでデータが戻ってきたら成功です。
③Dify用のOPEN APIスキーマを作る
APIサーバーが立てられたら、次はDifyのLLMでこのAPIにアクセスするための説明書(スキーマ)を作成します。
これはGPTsでも使われている手法で、生成AIに先程のparse_tweet関数のコードと共に「このコードを呼び出すOPEN APIスキーマを作って」と入れるだけでほぼ完成したものが出力されます(エラー出たらAIに戻しましょう)。
上記のようなコードが出力されます。
これをDifyのカスタムコードのスキーマ欄に貼り付ければ準備完了です。
エージェントで使う
この作ったカスタムツールをエージェントで使います。
エージェントはツールに関して、
- 使用するかどうかの判断
- 実行(正確にはAPIリクエスト)
を行うことが可能です。
このツールを有効化することで、指定文字数に収まる投稿が完成するまで、出力・チェック・修正を繰り返し行うわけです。
- SNSの投稿文章を作らせる(文字数など条件はある程度プロンプトで指定しておく)
- ツールで文字数をチェックさせる(外部APIの使用)
- 長過ぎたら修正する(以後繰り返し)
戻り値には具体的な改善ポイントを入れる
①の解説にてparse_tweet関数には、戻り値に具体的な改善ポイントを入れたほうが良いと記載しましたが、これはFunction Callingにおいては、戻り値がそのままLLMの入力変数となるからです。
戻り値が「文字数が多い」だけでなく、「文字数が今n文字なので280文字以下にしてください」と具体的な指示を入れておくことで、「出力→評価→再修正」を繰り返し実行することができるわけです(Difyの場合は現在、一つの関数を最大5回まで繰り返し実行可能のようです)。
おすすめの組み込みツール
SNS投稿文の作成において、おすすめのツールをいくつかご紹介します。
current_time
current_timeは現在の日時を取得するものです。これを使わせることで、季節感などにも強くなり、「明日の投稿考えて」というような投げかけにも日時を考慮した回答が可能となります。
tavily_search
tavily_searchは、キーワードで検索し、検索結果をLLM向けに変換して取得するものです。会社アカウトであれば、ここで会社名などで検索させることで、会社の基本情報やニュースなどを取得した上で、内容を提案してもらえます。
※なお下記でも触れましたが、Difyのバージョンによってはtavily_searchのパラメーターが聞かないことがありますのでご注意ください。その場合は、独自ツールとしてAPIから設定すると問題なく動くと思います。
jina_reader
jina_readerは、URLを渡すことで、そのページ内容をLLM向けに取得するものです。上記Tavilyと違いこちらは入力変数がURLとなります。
もし既存のWebサイトなどの情報を参考にできるようなケースであれば、入力変数に商品ページやLPなどのURLを入れておけば、その内容を参考に、投稿内容を提案してもらうことができます。
以上、Difyのエージェントを活用したSNS投稿文章の作成方法の解説でした。
次回はRAGを活用した方法を解説します。