このプロジェクトは、ユーザーの入力を適切なエージェントに振り分けるトリアージエージェントを含むSwarmの実装例です。主に3つのエージェント(トリアージ、販売、返金)が相互に連携して動作します。
プロジェクトの構成
プロジェクトは以下のファイルで構成されています:
-
agents.py
: エージェントとその機能を定義 -
evals.py
: テストケースと評価関数を定義 -
evals_util.py
: LLMを使用した会話評価のユーティリティ関数 -
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
関数を使用して、会話全体の成功を評価しています。
swarmの公式サンプルを日本語化してtriage_agentやってみた③
— Maki@Sunwood AI Labs. (@hAru_mAki_ch) October 14, 2024
無事にテストケースの動作確認までできた!
取り敢えず一旦ここまででリリースします!!
*だいぶ雰囲気が掴めてきた気がする。。。 https://t.co/azS3GmWGkR pic.twitter.com/KnhFOwzfAz
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
関数を使用してトリアージエージェントのデモを実行します。
販売エージェントの例
swarmの公式サンプルを日本語化してtriage_agentやってみて無事に購入処理をシミュレーションできた!!! https://t.co/x5WQR0GudU pic.twitter.com/ig4d1Qxbuo
— Maki@Sunwood AI Labs. (@hAru_mAki_ch) October 14, 2024
返金エージェントの例
swarmの公式サンプルを日本語化してtriage_agentやってみて無事に返金処理をシミュレーションできた!!!
— Maki@Sunwood AI Labs. (@hAru_mAki_ch) October 14, 2024
*完全に公式サンプルのやる順番を間違えた。。。 https://t.co/l4H0MMx0Sb pic.twitter.com/xBOFTjyOEa
プロジェクトの特徴
- 複数のエージェント: トリアージ、販売、返金の3つのエージェントが連携して動作します。
- 動的な転送: ユーザーの要求に応じて、適切なエージェントに会話を転送します。
- 自動評価: LLMを使用して会話の成功を自動的に評価します。
- テスト駆動開発: Pytestを使用したユニットテストにより、エージェントの動作を確認します。
まとめ
このプロジェクトは、Swarmを使用して複数のエージェントを連携させる方法を示しています。トリアージエージェントが中心となり、ユーザーの要求を適切に振り分けることで、効率的な対応が可能になります。また、自動評価とテスト駆動開発のアプローチにより、エージェントの品質を維持しやすくなっています。
このような構造は、カスタマーサポートや情報提供システムなど、様々な応用が考えられます。プロジェクトの目的や要件に合わせて、エージェントの種類や転送ロジックをカスタマイズすることで、より効果的なシステムを構築できるでしょう。
リポジトリ