はじめに
ローコードツールであるDifyをご存知でしょうか。
ドラッグ&ドロップ操作でアプリケーションを構築することができる、Agentic AI開発プラットフォームです。
非常に便利ではあるのですが、Difyを構築する際にはAPIやDBなど複数のコンテナの構築が必要になります。
Difyで構築したサービスを運用するとなった際には、このコンテナの管理というのがネックになることがあります。
そのため、今回はDifyで作成したワークフローをLangChainに変換する方法を紹介します。
変換方法
今回はAzure OpenAI Serviceのモデルを使用いたします。
まず、Difyで作成したワークフローのブロックごとに関数化します。
ブロックの結果は戻り値として返すようにします。
ブロックごとに入力情報や前段のLLMの結果などが必要になると思いますが、これらも関数実行時に引数として渡すことで、問題なくブロックの処理が動作します。
※モデル名やプロンプト情報は使用しやすさから、定数及び設定ファイルなどで管理して呼び出しています。
def node_1(message, key):
model = get_model(PROVIDER_AZURE, MODEL_NAME)
prompt = prompts["prompt"]
system_message_content = prompt
system_messages = [
SystemMessage(
content=f"{system_message_content}",
additional_kwargs={},
response_metadata={}
)
]
user_messages = [
HumanMessage(
content=f'## 入力\n{message}\n\n## 出力\n(ここに来る内容を出力してください)//',
additional_kwargs={},
response_metadata={}
)
]
chat_prompt = ChatPromptTemplate.from_messages(system_messages + user_messages)
response = model.invoke(chat_prompt.format(message=message))
return response.content
また、IF ELSEの分岐についても、PythonのIF文を活用すればOKです。
if node_1_output == "A":
return node_1_output
ワークフローでは開始や終了といったブロックもありますが、LangChain変換するにあたっては必要ありません。
最後にmain関数で作成した関数をワークフローと同じになるように記載していけば完成です。
def main():
message = sys.argv[1]
key = sys.argv[2]
node_1_output = node_1(message, key)
if node_1_output == "A":
return "入力をやり直してください"
return node_1_output
さいごに
今回はシンプルな作り方の紹介でしたが、HTTPリクエストやより細かなオプションの制御などといった点も実現できます。
Difyでの構築は非常に便利ですが、運用上難しいというケースもありますので、今回のLangChain変換のように柔軟に置き換えていっていただければ幸いです。

