ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #28 - Graphite」という勉強会を開催しました。
generative-agents.connpass.com
アーカイブ動画はこちらです。
Graphite
今回は、AIエージェントのイベント駆動フレームワーク「Graphite」について、公式ドキュメントを読んだり動かしたりしてみました。
GraphiteのGitHubリポジトリはこちらです。
紹介記事はこちらです。
今回のポイント
Graphiteの概要
Graphiteは、ワークフロー型のAIエージェントを構築するためイベント駆動型フレームワークです。 Graphiteのコアコンポーネントは以下の画像のように構成されます。
画像引用元: https://github.com/binome-dev/graphite
ワークフロー型のAIエージェントのフレームワークとしては「LangGraph」が有名です。 GrahpiteはLangGraphと異なり、ノード間の通信を「トピック」を使ったパブリッシュ/サブスクライブ(Pub/Sub)パターンを使用して実装することが特徴です。
Graphiteでのエージェント実装
Graphiteを使ったシンプルな実装例を見ていきます。 まずはGraphiteをインストールします。
pip install graphite
Graphiteでワークフローを実装する際は、まず「トピック」を作成します。
from grafi.common.topics.topic import Topic example_topic = Topic(name="example_topic")
続いて、「ノード」を作成します。 「ノード」には、どのトピックを購読(Subscribe)・パブリッシュ(Publish)するかを指定します。
llm_node = ( LLMNode.Builder() .name("LLMNode") .subscribe( SubscriptionBuilder() .subscribed_to(agent_input_topic) .build() ) .command( LLMResponseCommand.Builder() .llm( OpenAITool.Builder() .name("LLM") .api_key(api_key) .model(model) .system_message(system_message) .build(), ) .build(), ) .publish_to(example_topic) .build() )
最後に「ノード」を登録して「ワークフロー」が出来上がります。
workflow = (
EventDrivenWorkflow.Builder()
.name("example_workflow")
.node(llm_node)
.node(other_node)
.build()
)
LangGraphと比較すると、ノード間を繋ぐ「トピック」の存在が大きな違いですね。
Phoenixでのトレーシング
Graphiteでは、「Phoenix」を使ったトレーシングがサポートされています。
Phoenixをインストールしてphoenix serve
コマンドで起動しておくと、Graphiteの実行結果が自動でPhoenixに記録されます。
Human-in-the-Loop
Graphiteでは、ワークフロー内に人間の介入ポイント(Human-in-the-Loop)を設けることができるとのことです。
ただし、READMEに記載されているHuman-in-the-Loopのサンプルコードは、私が試した範囲ではうまく動作しませんでした。
ドキュメントには「HumanRequestTopic」というHuman-in-the-Loop用のトピックがあると書かれているので、そのあたりを参考にすれば動かすことができるかもしれません。
次回のご案内
以上、今回は「Graphite」をキャッチアップしました。
次回は「AIエージェントキャッチアップ #29 - Agent Development Kit (ADK)」ということで、Googleが公開したAIエージェントのフレームワーク「Agent Development Kit (ADK)」がテーマです!
generative-agents.connpass.com
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!