ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #25 - ControlFlow」という勉強会を開催しました。
generative-agents.connpass.com
アーカイブ動画はこちらです。
ControlFlow
今回は、Agentic AI WorkflowのPythonフレームワーク「ControlFlow」について、公式ドキュメントを読んだり動かしたりしてみました。
ControlFlowのGitHubリポジトリはこちらです。
公式ドキュメントはこちらです。
今回のポイント
ControlFlowの概要
ControlFlowは、Agentic AI Workflowを構築するためのPythonフレームワークです。
Pythonのワークフローオーケストレーションツール「Prefect」の開発元がOSSとして公開しています。
ControlFlowでは、「タスク」「エージェント」「フロー」の3つで処理を構成します。
フローの実装例
ControlFlowでのフローの実装例は以下のようになります。
import controlflow as cf @cf.flow def my_flow(x: int) -> int: y = cf.run("5を足してください", result_type=int, context=dict(x=x)) z = cf.run("結果を2倍してください", result_type=int) return z print(my_flow(10))
y = cf.run("5を足してください", result_type=int, context=dict(x=x))の箇所では、context=dict(x=x)としてxの値をcontextとして与えています。
その後、z = cf.run("結果を2倍してください", result_type=int)が実行される際は、yの値が自動でcontextとして与えられる挙動になります。
@cf.flowをつけた関数では、contextの値が自動でプロンプトに注入されるという挙動のようです。
プロンプト
ControlFlowのプロンプトは、ソースコードのsrc/controlflow/orchestration/prompt_templatesディレクトリにあります。
たとえばtask.jinjaを参照すると、contextがあれば文字列として入れられることが分かります。
{% if task.context %}- context: {{ task.context }}{% endif %}
このあたりのプロンプトの構成はControlFlowが標準で提供するものを使うのがベースであり、細かいカスタマイズまでは想定していないようです。
個人的にはもっと細かいカスタマイズができるワークフロー型LLMフレームワークを想像していたのですが、そこは少し違ったようです。
今回そこまで試していませんが、ControlFlowはもしかするとPrefectとの連携に強みがあるのかもしれません。
次回のご案内
以上、今回は「ControlFlow」をキャッチアップしました。
次回は「AIエージェントキャッチアップ #26 - Agno」ということで、メモリ・知識・ツールを備えたマルチモーダル エージェントを構築するための軽量ライブラリ「Agno」がテーマです!
generative-agents.connpass.com
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!