3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

マルチエージェントシステムライブラリLangGraph SwarmをDatabricksで動かしてみる

Last updated at Posted at 2025-03-02

こちらで知りました。マルチエージェントシステムとな。

こちらで公開されています。

クイックスタートなどを動かしてみます。

🤖 LangGraph マルチエージェント スウォーム

LangGraph を使用してスウォームスタイルのマルチエージェントシステムを作成するための Python ライブラリ。スウォームは、エージェントがそれぞれの専門分野に基づいて動的に制御を引き継ぐタイプのマルチエージェントアーキテクチャです。システムは最後にアクティブだったエージェントを記憶し、次回の対話ではそのエージェントとの会話が再開されることを保証します。

特徴

  • 🤖 マルチエージェント協調 - 専門化されたエージェントが協力し、コンテキストを引き継ぐことが可能
  • 🛠️ カスタマイズ可能な引き継ぎツール - エージェント間の通信のための組み込みツール

このライブラリは、エージェントアプリケーションを構築するための強力なフレームワークであるLangGraphの上に構築されており、ストリーミング短期および長期メモリ人間の介在をサポートする機能が標準で備わっています

%pip install langgraph-swarm langchain-openai
%pip install -U mlflow
%restart_python

MLflow Tracingでエージェントの挙動をトレースします。

import mlflow
mlflow.langchain.autolog()
import os
os.environ["OPENAI_API_KEY"] = dbutils.secrets.get("demo-token-takaaki.yayoi", "openai_api_key")

複数のエージェントBobAliceを実装します。

from langchain_openai import ChatOpenAI

from langgraph.checkpoint.memory import InMemorySaver
from langgraph.prebuilt import create_react_agent
from langgraph_swarm import create_handoff_tool, create_swarm

model = ChatOpenAI(model="gpt-4o-mini")

def add(a: int, b: int) -> int:
    """2つの数字を足す"""
    return a + b

alice = create_react_agent(
    model,
    [add, create_handoff_tool(agent_name="Bob")],
    prompt="あなたはAlice、足し算の専門家です。",
    name="Alice",
)

bob = create_react_agent(
    model,
    [create_handoff_tool(agent_name="Alice", description="Aliceに転送、彼女は数学を手伝うことができます")],
    prompt="あなたはBob、海賊のように話します。",
    name="Bob",
)

checkpointer = InMemorySaver()
workflow = create_swarm(
    [alice, bob],
    default_active_agent="Alice"
)
app = workflow.compile(checkpointer=checkpointer)

config = {"configurable": {"thread_id": "1"}}
turn_1 = app.invoke(
    {"messages": [{"role": "user", "content": "Bobと話したい"}]},
    config,
)
print(turn_1)
turn_2 = app.invoke(
    {"messages": [{"role": "user", "content": "5 + 7 は何ですか?"}]},
    config,
)
print(turn_2)

MLflow Tracingで挙動を確認します。ツールが定義されています。

Screenshot 2025-03-02 at 14.21.05.png

デフォルトのエージェントはAliceでしたが、Bobに転送されています。

Screenshot 2025-03-02 at 14.22.26.png

海賊っぽいです。その後で算数の質問をするとAliceに転送されています。

Screenshot 2025-03-02 at 14.22.41.png

Aliceによって加算ツールが呼び出され、回答が返却されました。

Screenshot 2025-03-02 at 14.24.00.png

メモリー

スウォームマルチエージェントシステムに短期および長期メモリを追加できます。create_swarm() は使用前にコンパイルする必要がある StateGraph のインスタンスを返すため、.compile() メソッドに直接チェックポインタまたはストアインスタンスを渡すことができます:

from langgraph.checkpoint.memory import InMemorySaver
from langgraph.store.memory import InMemoryStore

# 短期記憶
checkpointer = InMemorySaver()
# 長期記憶
store = InMemoryStore()

model = ChatOpenAI(model="gpt-4o-mini")
alice = create_react_agent(
    model,
    [add, create_handoff_tool(agent_name="Bob")],
    prompt="あなたはAlice、足し算の専門家です。",
    name="Alice",
)

bob = create_react_agent(
    model,
    [create_handoff_tool(agent_name="Alice", description="Aliceに転送、彼女は数学を手伝うことができます")],
    prompt="あなたはBob、海賊のように話します。",
    name="Bob",
)

workflow = create_swarm(
    [alice, bob],
    default_active_agent="Alice"
)

# チェックポインタ/ストアでコンパイル
app = workflow.compile(
    checkpointer=checkpointer,
    store=store
)

config = {"configurable": {"thread_id": "2"}}
turn_1 = app.invoke(
    {"messages": [{"role": "user", "content": "5 + 7 は何ですか?"}]},
    config,
)
print(turn_1)
turn_2 = app.invoke(
    {"messages": [{"role": "user", "content": "前の回答を覚えていますか?"}]},
    config,
)
print(turn_2)

メモリーが動作しています。

Screenshot 2025-03-02 at 14.25.13.png
Screenshot 2025-03-02 at 14.25.21.png

重要

短期メモリを追加することは、複数の対話にわたって会話の状態を維持するために重要です。これがないと、スウォームは最後にアクティブだったエージェントを「忘れ」、会話の履歴を失ってしまいます。マルチターンの会話で使用する場合は、必ずチェックポインタを使用してスウォームをコンパイルしてください。例: workflow.compile(checkpointer=checkpointer)

この他、ハンドオフツールやエージェント実装のカスタマイズ方法も紹介されています。

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?