0
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?

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

プロジェクトの構成

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

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

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

リポジトリ

0
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
0
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?