OpenAI Swarm : トリアージエージェントの実装

AIエージェント

このプロジェクトは、ユーザーの入力を適切なエージェントに振り分けるトリアージエージェントを含むSwarmの実装例です。主に3つのエージェント(トリアージ、販売、返金)が相互に連携して動作します。

Swarm (実験的サンプル)~リポジトリの日本語化~
Swarm (実験的サンプル)エルゴノミックで軽量なマルチエージェントオーケストレーションフレームワークSwarmは現在、マルチエージェントシステムのエルゴノミックなインターフェースを探求するための実験的なサンプルフレームワークです。本番環...

プロジェクトの構成

プロジェクトは以下のファイルで構成されています:

  1. agents.py: エージェントとその機能を定義
  2. evals.py: テストケースと評価関数を定義
  3. evals_util.py: LLMを使用した会話評価のユーティリティ関数
  4. run.py: メインのデモループを実行

主要なコードの解説

agents.py

このファイルでは、トリアージ、販売、返金の各エージェントとその機能を定義しています。

from swarm import Agent
from loguru import logger

# エージェントの定義
triage_agent = Agent(
    name="トリアージエージェント",
    instructions="ユーザーの要求を最適に処理できるエージェントを判断し、その会話をそのエージェントに転送します。",
)

sales_agent = Agent(
    name="販売エージェント",
    instructions="販売に対して非常に熱心になってください。",
)

refunds_agent = Agent(
    name="返金エージェント",
    instructions="ユーザーの返金要求を処理します。理由が高額すぎる場合は、返金コードを提供してください。ユーザーが主張する場合は、返金を処理します。",
    functions=[process_refund, apply_discount],
)

# 転送機能の定義
def transfer_back_to_triage():
    logger.info("トリアージエージェントに転送します")
    return triage_agent

def transfer_to_sales():
    logger.info("販売エージェントに転送します")
    return sales_agent

def transfer_to_refunds():
    logger.info("返金エージェントに転送します")
    return refunds_agent

# エージェントに転送機能を追加
triage_agent.functions = [transfer_to_sales, transfer_to_refunds]
sales_agent.functions.append(transfer_back_to_triage)
refunds_agent.functions.append(transfer_back_to_triage)

このコードでは、各エージェントの役割と指示を定義し、エージェント間の転送機能も実装しています。例えば、トリアージエージェントは販売エージェントと返金エージェントに転送する機能を持っています。

evals.py

このファイルでは、エージェントの動作をテストし、会話の成功を評価するための関数とテストケースを定義しています。

from swarm import Swarm
from agents import triage_agent, sales_agent, refunds_agent
from evals_util import evaluate_with_llm_bool, BoolEvalResult
import pytest

client = Swarm()

def conversation_was_successful(messages) -> bool:
    conversation = f"CONVERSATION: {json.dumps(messages)}"
    result: BoolEvalResult = evaluate_with_llm_bool(
        CONVERSATIONAL_EVAL_SYSTEM_PROMPT, conversation
    )
    return result.value

@pytest.mark.parametrize(
    "query,function_name",
    [
        ("返金したいです!", "transfer_to_refunds"),
        ("販売担当と話したいです。", "transfer_to_sales"),
    ],
)
def test_triage_agent_calls_correct_function(query, function_name):
    tool_calls = run_and_get_tool_calls(triage_agent, query)
    assert len(tool_calls) == 1
    assert tool_calls[0]["function"]["name"] == function_name

このコードでは、トリアージエージェントが正しい機能を呼び出しているかをテストしています。また、conversation_was_successful関数を使用して、会話全体の成功を評価しています。

run.py

このファイルは、トリアージエージェントを使用してデモループを実行します。

from swarm.repl import run_demo_loop
from agents import triage_agent
from loguru import logger

if __name__ == "__main__":
    logger.info("Triage Agent のデモを開始します")
    run_demo_loop(triage_agent)
    logger.info("デモが終了しました")

このシンプルなスクリプトは、run_demo_loop関数を使用してトリアージエージェントのデモを実行します。

販売エージェントの例

返金エージェントの例

プロジェクトの特徴

  1. 複数のエージェント : トリアージ、販売、返金の3つのエージェントが連携して動作します。
  2. 動的な転送 : ユーザーの要求に応じて、適切なエージェントに会話を転送します。
  3. 自動評価 : LLMを使用して会話の成功を自動的に評価します。
  4. テスト駆動開発 : Pytestを使用したユニットテストにより、エージェントの動作を確認します。

まとめ

このプロジェクトは、Swarmを使用して複数のエージェントを連携させる方法を示しています。トリアージエージェントが中心となり、ユーザーの要求を適切に振り分けることで、効率的な対応が可能になります。また、自動評価とテスト駆動開発のアプローチにより、エージェントの品質を維持しやすくなっています。

このような構造は、カスタマーサポートや情報提供システムなど、様々な応用が考えられます。プロジェクトの目的や要件に合わせて、エージェントの種類や転送ロジックをカスタマイズすることで、より効果的なシステムを構築できるでしょう。

リポジトリ

swarm-sample-box/examples/triage_agent at main · Sunwood-ai-labs/swarm-sample-box
Personal collection of sample code and experiments using the Swarm multi-agent framework. - Sunwood-ai-labs/swarm-sample-box
swarm/README_JP.md at feature/docs-jp · Sunwood-ai-labs/swarm
Framework for building, orchestrating and deploying multi-agent systems. Managed by OpenAI Solutions team. Experimental framework. - Sunwood-ai-labs/swarm
GitHub - openai/swarm: Framework for building, orchestrating and deploying multi-agent systems. Managed by OpenAI Solutions team. Experimental framework.
Framework for building, orchestrating and deploying multi-agent systems. Managed by OpenAI Solutions team. Experimental framework. - openai/swarm

コメント

タイトルとURLをコピーしました