🎉

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

2024/10/16に公開

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

https://hamaruki.com/swarm-experimental-sample/

プロジェクトの構成

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

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

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

リポジトリ

https://github.com/Sunwood-ai-labs/swarm-sample-box/tree/main/examples/personal_shopper

https://github.com/Sunwood-ai-labs/swarm/blob/feature/docs-jp/README_JP.md

https://github.com/openai/swarm

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Discussion