【AI Agent開発】Difyを使いこなそう!ノーコードツールでもコードブロックでPythonコードを動かして複雑なAIエージェントを実現してみる。(LangChainからの移植)
はじめに
Difyは、LangGenius, Inc. が提供するオープンソースのLLM(大規模言語モデル)アプリケーション開発プラットフォームで、ノーコードで生成AIアプリを構築することができるツールです。プログラミングの知識がなくても、直感的なUIを使ってAIエージェントやチャットボット、RAGのアプリケーションを構築できます。
またワークフロー機能により、より複雑なAIエージェントを開発することも可能です。
Difyを利用し、素早く・効率よく開発を行うことにより、より多くの時間を顧客理解や業務改善などにあて、組織全体の生産性の大幅な向上や、サービスの顧客満足度の向上が図れると思います。例えば、カスタマーサポートの自動化、パーソナライズされた製品レコメンデーション、あるいは社内のナレッジマネジメントシステムの構築など、幅広い分野でDifyの活用が期待できます。
今後、Difyはさらなる機能拡張や性能向上が期待されており、AI開発の標準ツールとしての地位を確立していく可能性があります。組織はDifyを活用することで、技術的な障壁を低減し、イノベーションのスピードを加速させ、競争力を高めることができるでしょう。AIの力を最大限に活用し、ビジネスの変革を推進する上で、Difyは重要な役割を果たすツールとなっています。
このように便利かつ今後が期待されるDifyですが、その一方で、ノーコードツールが故にDifyで複雑なAIエージェントを開発するには個別の対応が必要となります。本ブログでは、LangChainで実装してきた機能をDifyで再現する試みを通じ、Difyで複雑なAIエージェントを開発するために役に立つPythonコードブロックについて、利用方法を実例をベースに解説します。
Diftyの特徴
[ワークフローからWebスクレイピング]
上記の画像はワークフローを利用して企業情報を検索し回答するアプリケーションで、企業情報をチャットボット、タスクリスト、カレンダーなど、さまざまなアプリケーションのテンプレートが用意されており、ゼロからの開発が不要です。まずは、必要に応じてカスタマイズするだけで、短期間でアプリを構築できます。また、OpenAI、Anthropic、Azure OpenAI、Llama2、Hugging Face、Replicateなど、さまざまなAIモデルプロバイダーをサポートしており、柔軟なモデル活用が可能です。
[商用利用可能でさまざまなテンプレートを参考にスタートできる]
Difyはオープンソースソフトウェア(OSS)であり、商用利用が可能ですが、一部条件があります。例えば、マルチテナントSaaSサービスの提供やロゴや著作権情報の削除・変更には商用ライセンスが必要です。ただし、社内システムやアプリケーションに組み込んで使用する場合や、特定の顧客向けにカスタマイズしてサービスを提供する場合には、特別な許可は不要です。
Difyは、生成AIプログラムの開発を簡素化し、より多くの人々がAI技術を活用できるようにすることを目指しています。繰り返し処理機能の追加(イテレーション)や新しいAIモデルの対応など、さらなる機能拡充と利便性の向上が期待されています。これにより、ビジネスにおけるAI活用の幅が広がり、効率的なAIソリューションの提供が可能になるでしょう。
[イテレーション]
ブロックのイテレーションは、配列に対して複数のステップを実行してすべての結果を出力します。この画像では、コードに記載のリストの各項目に対して同じステップを実行してLLMに回答を求めるワークフローになってます。
LangChainからDifyへのアプリケーションの移植
Difyの技術を深く理解する上で、これまで様々な実装経験を積んできたLangChainの理解が役に立ちます。LangChainは、Difyよりも先に登場した大規模言語モデル(LLM)によるアプリケーション開発のためのフレームワークです。Difyを利用している開発者の多くは、LangChainの存在を意識しており、DifyとLangChainの機能や特徴は比較のされることも多いです。
今回、Difyの技術をより深く探求するため、これまでLangChainで実装してきたアプリケーションをDifyで再現できるかどうかを検証しました。この試みは、Difyの可能性と限界を理解し、両プラットフォームの長所を活かした効果的なAIアプリケーション開発の方法を見出すことを目的としています。
この検証プロセスを通じて、Difyの独自の強みや、LangChainとは異なるアプローチでの問題解決方法を発見し、同時に、各プラットフォームの適切な使用シーンや、それぞれの技術を組み合わせることで得られる相乗効果についても考察したいと考えています。
さて今回、Difyに置き換える、LangChainをベースとしたアーキテクチャーです。この中から赤枠の部分を、Difyに置き換えてみました。Difyはノーコードベースのため複雑な処理が苦手ですが、コードブロックの機能などを利用して実現した内容について、説明していきたいと思います。
最初にLangChainのをベースとしたアーキテクチャの説明です。
この画像は、LangChainをベースにしたAI Agentのアーキテクチャを示しています。主要なコンポーネントとその関係性を以下に説明します。
langfuse:
アーキテクチャの左側に位置し、トレーシング(プロンプト管理、API管理)の役割を担っています。Difyに置き換わると、オーケストレーターからワークフローの実行と、チャットのフロント機能を提供する役割を果たしています。
interface (made by streamlit):
ユーザーインターフェースを提供するコンポーネントで、Streamlitを使用して作成されています。
langchain:
アーキテクチャの中心に位置し、AI機能の主要な処理を行います。
Agent機能 (agents.agent):
LangChainに接続されており、AgentExecutorの役割を果たします。
Tool役割定義:
Agent機能に接続されており、ツールが定義されています。Nikkei(日経)、PR Times、Googleのこれらのツールは、Web検索やNikkei Search、PR Times Searchなどの機能を提供し、外部サイトからあらゆる情報を抽出します。
今回は特に、赤枠の部分である、Agent機能や、Tool機能をDifyに置き換えて、ワークフローからDifyブロック機能を連結させて実現しています。
[Difyに置き換えたワークフロー]
[アプリケーションとして実行]
Difyの機能ブロック(HTTPリクエスト)
LangChainベースのアーキテクチャーでは、ツール機能として、Web検索や、Nikkei Search、PR Times Searchなどを記述してサイトから情報を集めていましたが、Difyでは、機能ブロックのHTTPリクエストを利用して、各サイトの情報を収集することができます。
HTTPリクエストは、HTTP プロトコルを介してサーバーにリクエストを送信することを可能にする機能で、外部データの取得、ウェブフック、画像生成、ファイルのダウンロードなどのシナリオに適用されます。指定されたネットワークアドレスにカスタマイズされたHTTPリクエストを送信し、さまざまな外部サービスとの連携を実現します。
[HTTPリクエスト]
プログラムコードの利用(コードブロック)
続いて、機能ブロックのプログラムコードの利用です。先ほどのWeb検索などで収集した情報をLLMに渡していきたいのですが、HTTPリクエストで得たHTTPレスポンスは大量のデータであるため、パースして目的に合わせて加工していく必要があります。Difyでは、機能ブロックの中でコードブロックが実現可能でしたので、利用することにしました。
コードブロックは、Python / NodeJSコードを実行してワークフロー内でデータ変換を行うことをサポートしています。これにより、Arithmetic、JSON変換、テキスト処理などのシナリオでワークフローが簡素化されます。これは開発者の柔軟性を大幅に向上させ、ワークフロー内にカスタムPythonまたはJavascriptスクリプトを埋め込んで、変数を操作することができます。また、設定オプションを使用して、必要な入力変数と出力変数を指定し、対応する実行コードを記述できます。
ただ、今回は、HTTPレスポンスが大量のデータであったので、コードブロックの制限である、80,000文字の制限により、内部エラーが発生してしまいました。今回はDifyのSaaS版ではなくDifyのローカル版を利用していたため、Pythonコードの文字列制限の上限を変更することで対応しました。但し、この文字列制限の上限は、無限に上げて設定しても、内部エラーが出てしまうので、内部エラーが出ない値を探って値を設定して回避するようことが必要でした。
[HTTPレスポンスの入力変数(arg1)を一旦文字列制限をかけて後続のブロックに出力]
続いての、コードブロックの利用は、HTTPレスポンスのデータから必要な情報を抽出して、LLM渡す部分です。これにより、大量のデータから必要な情報を抽出、加工して後続のGoogle Searchや、LLMに渡すことを実現しています。コードブロックは、Pythonや、Javascriptの標準ライブラリが利用できますが、今後も機能拡充を期待していきたいと思います。
まとめ
今回の記事では、LangChainからDifyへのアプリケーションの移植を通じて、Difyで複雑なAIエージェントを開発するために役に立つDifyの機能ブロック(HTTPリクエスト)と、コードブロックの利用について解説しました。
Difyは強力なツールで、素早く・効率よくLLMアプリケーションを開発を行うことができます。一方で、ノーコードツールが故にDifyで複雑なAIエージェントを開発するには、今回紹介したDifyの機能ブロック(HTTPリクエスト)や コードブロックを利用してのプログラムコードの実行 が一つの解決方法になります。
今回の記事が皆さんのDifyの活用シーンの拡大や、日々の開発業務の改善、更なる関心と導入につながれば大変幸いです。
お気軽にご相談ください
AI駆動開発について興味関心があり、
ご相談があれば以下よりお問い合わせください