From 72d8ff95106f31080cdf253e5f0c7fc024d284cc Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:17:54 +0900 Subject: [PATCH 01/13] =?UTF-8?q?=E2=9C=A8=20chore:=20.SourceSageignore?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 複数プロジェクトで共通の無視ファイルを作成しました。 - これにより、各プロジェクトで同じファイルを個別に無視する必要がなくなります。 - 新たに追加されたファイル: `.git`, `__pycache__`, `LICENSE`, `output.md`, `assets`, `Style-Bert-VITS2`, `output`, `streamlit`, `SourceSage.md`, `data`, `.gitignore`, `*.png`, `Changelog`, `SourceSageAssets`, `SourceSageAssetsDemo`, `*.pyc`, `**/__pycache__/**`, `modules\__pycache__`, `.svg`, `sourcesage.egg-info`, `.pytest_cache`, `dist`, `build`, `.env`, `example`, `.gaiah.md`, `.Gaiah.md`, `tmp.md`, `tmp2.md`, `tests`, `template`, `aira.egg-info`, `aira.Gaiah.md`, `README_template.md`, `egg-info`, `oasis_article.egg-info`, `.harmon_ai`, `.aira`, `article_draft`, `issue_creator.log`, `oasis.log`, `debug_output`, `*.log`, `html_replacement1.html`, `html_raw.html`, `html_content.html`, `html_with_placeholders.html`, `markdown_html.html`, `markdown_text.md`, `markdown_text2.md`, `saved_article.html`, `memo.md`, `content.md`, `docs`, `.github`, `.venv`, `*.json`, `src` --- .SourceSageignore | 69 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 .SourceSageignore diff --git a/.SourceSageignore b/.SourceSageignore new file mode 100644 index 0000000..4e2b37b --- /dev/null +++ b/.SourceSageignore @@ -0,0 +1,69 @@ +.git +__pycache__ +LICENSE +output.md +assets +Style-Bert-VITS2 +output +streamlit +SourceSage.md +data +.gitignore +.SourceSageignore +*.png +Changelog +SourceSageAssets +SourceSageAssetsDemo +__pycache__ +.pyc +**/__pycache__/** +modules\__pycache__ +.svg +sourcesage.egg-info +.pytest_cache +dist +build +.env +example + +.gaiah.md +.Gaiah.md +tmp.md +tmp2.md +.SourceSageAssets +tests +template +aira.egg-info +aira.Gaiah.md +README_template.md + +egg-info +oasis_article.egg-info +.harmon_ai +.aira + +article_draft +issue_creator.log +oasis.log + +debug_output +*.log + +html_replacement1.html +html_raw.html +html_content.html +html_with_placeholders.html +markdown_html.html +markdown_text.md +markdown_text2.md + +saved_article.html +memo.md +content.md + +.SourceSageAssets +docs +.github +.venv +*.json +src From a582f36ea01d41f953b74416ef7da3e32c9c958f Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:17:57 +0900 Subject: [PATCH 02/13] =?UTF-8?q?=E2=9C=A8=20chore:=20examples/airline/.So?= =?UTF-8?q?urceSageignore=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - airline例に共通の無視ファイルを追加しました。 - 新たに追加されたファイル: `ollama-webui`, `langfuse`, `.SourceSageAssets`, `.Gaiah.md`, `spellbook`, `eval_results` --- examples/airline/.SourceSageignore | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 examples/airline/.SourceSageignore diff --git a/examples/airline/.SourceSageignore b/examples/airline/.SourceSageignore new file mode 100644 index 0000000..4a07ade --- /dev/null +++ b/examples/airline/.SourceSageignore @@ -0,0 +1,33 @@ +.git +__pycache__ +LICENSE +output.md +assets +Style-Bert-VITS2 +output +streamlit +SourceSage.md +data +.gitignore +.SourceSageignore +*.png +Changelog +SourceSageAssets +SourceSageAssetsDemo +__pycache__ +.pyc +**/__pycache__/** +modules\__pycache__ +.svg +sourcesage.egg-info +.pytest_cache +dist +build +ollama-webui +langfuse +.env +.SourceSageignore +.SourceSageAssets +.Gaiah.md +spellbook +eval_results From 1ebe4eeb76ab647289cdc894a9b22921ba81b80e Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:18:00 +0900 Subject: [PATCH 03/13] =?UTF-8?q?=E2=9C=8D=EF=B8=8F=20docs:=20examples/air?= =?UTF-8?q?line/README.md=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - タイトルと説明文を日本語に翻訳しました。 - 画像を追加しました。 - 各セクションの見出しをより明確で理解しやすいものにしました。 - コード実行方法を明確化しました。 - 評価セクションの解説を改善しました。 - 全体的に文章を修正し、より読みやすくしました。 --- examples/airline/README.md | 43 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/examples/airline/README.md b/examples/airline/README.md index e9a5959..c8a784c 100644 --- a/examples/airline/README.md +++ b/examples/airline/README.md @@ -1,55 +1,56 @@ -# Airline customer service +# Swarm airline: 航空会社カスタマーサービス -This example demonstrates a multi-agent setup for handling different customer service requests in an airline context using the Swarm framework. The agents can triage requests, handle flight modifications, cancellations, and lost baggage cases. -This example uses the helper function `run_demo_loop`, which allows us to create an interactive Swarm session. +![](https://raw.githubusercontent.com/Sunwood-ai-labs/swarm-sample-box/refs/heads/main/docs/Sample01.png) -## Agents +このサンプルは、Swarmフレームワークを使用して航空会社のコンテキストにおける様々な顧客サービスリクエストを処理するマルチエージェントセットアップを示しています。エージェントはリクエストの振り分け、フライト変更、キャンセル、手荷物紛失ケースを処理できます。 +このサンプルでは、対話式のSwarmセッションを作成できる`run_demo_loop`ヘルパー関数を使用しています。 -1. **Triage Agent**: Determines the type of request and transfers to the appropriate agent. -2. **Flight Modification Agent**: Handles requests related to flight modifications, further triaging them into: - - **Flight Cancel Agent**: Manages flight cancellation requests. - - **Flight Change Agent**: Manages flight change requests. -3. **Lost Baggage Agent**: Handles lost baggage inquiries. +## エージェント -## Setup +1. **振り分けエージェント**: リクエストの種類を判断し、適切なエージェントに転送します。 +2. **フライト変更エージェント**: フライト変更に関するリクエストを処理し、さらに以下に振り分けます: + - **フライトキャンセルエージェント**: フライトキャンセルリクエストを管理します。 + - **フライト変更エージェント**: フライト変更リクエストを管理します。 +3. **手荷物紛失エージェント**: 手荷物紛失の問い合わせを処理します。 -Once you have installed dependencies and Swarm, run the example using: +## セットアップ + +依存関係とSwarmをインストールしたら、以下のコマンドでサンプルを実行します: ```shell python3 main.py ``` -## Evaluations +## 評価 > [!NOTE] -> These evals are intended to be examples to demonstrate functionality, but will have to be updated and catered to your particular use case. +> これらの評価は機能性を示すためのサンプルですが、特定のユースケースに合わせて更新・調整する必要があります。 -For this example, we run function evals, where we input a conversation, and the expected function call ('None' if no function call is expected). -The evaluation cases are stored in `eval/eval_cases/` subfolder. +このサンプルでは、会話と予想される関数呼び出し(関数呼び出しが予想されない場合は'None')を入力とする機能評価を実行します。 +評価ケースは`eval/eval_cases/`サブフォルダに保存されています。 ```json [ { "conversation": [ - { "role": "user", "content": "My bag was not delivered!" } + { "role": "user", "content": "私の荷物が届きませんでした!" } ], "function": "transfer_to_lost_baggage" }, { "conversation": [ - { "role": "user", "content": "I had some turbulence on my flight" } + { "role": "user", "content": "フライト中に乱気流がありました" } ], "function": "None" } ] ``` -The script 'function_evals.py' will run the evals. Make sure to set `n` to the number -of times you want to run each particular eval. To run the script from the root airline folder, execute: +'function_evals.py'スクリプトが評価を実行します。特定の評価を実行したい回数を`n`に設定してください。ルートの航空会社フォルダからスクリプトを実行するには、以下のコマンドを実行します: ```bash cd evals -python3 function_evals.py +python function_evals.py ``` -The results of these evaluations will be stored in `evals/eval_results/` +これらの評価の結果は`evals/eval_results/`に保存されます。 From cbaac4d78fb633f2aa15525b226f5b8e509ca4a0 Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:18:03 +0900 Subject: [PATCH 04/13] =?UTF-8?q?=F0=9F=93=9D=20refactor:=20examples/airli?= =?UTF-8?q?ne/configs/agents.py=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=81=AE=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=A8=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA?= =?UTF-8?q?=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 関数名と変数名に日本語のコメントを追加しました。 - 各エージェントの役割を明確にするために、コメントを改善しました。 - コードの可読性を向上させました。 - 各エージェントの機能を詳細に説明するコメントブロックを追加しました。 --- examples/airline/configs/agents.py | 58 +++++++++++++++++------------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/examples/airline/configs/agents.py b/examples/airline/configs/agents.py index fe792a5..0793fa7 100644 --- a/examples/airline/configs/agents.py +++ b/examples/airline/configs/agents.py @@ -5,59 +5,59 @@ from swarm import Agent - +# 各エージェントへの転送関数 def transfer_to_flight_modification(): return flight_modification - def transfer_to_flight_cancel(): return flight_cancel - def transfer_to_flight_change(): return flight_change - def transfer_to_lost_baggage(): return lost_baggage - def transfer_to_triage(): - """Call this function when a user needs to be transferred to a differnt agent and a different policy. - For instance, if a user is asking about a topic that is not handled by the current agent, call this function. + """ + ユーザーを別のエージェントや別のポリシーに転送する必要がある場合にこの関数を呼び出します。 + 例えば、ユーザーが現在のエージェントでは扱えないトピックについて質問している場合などに使用します。 """ return triage_agent - +# 振り分けエージェントの指示を生成する関数 def triage_instructions(context_variables): customer_context = context_variables.get("customer_context", None) flight_context = context_variables.get("flight_context", None) - return f"""You are to triage a users request, and call a tool to transfer to the right intent. - Once you are ready to transfer to the right intent, call the tool to transfer to the right intent. - You dont need to know specifics, just the topic of the request. - When you need more information to triage the request to an agent, ask a direct question without explaining why you're asking it. - Do not share your thought process with the user! Do not make unreasonable assumptions on behalf of user. - The customer context is here: {customer_context}, and flight context is here: {flight_context}""" - - + return f"""ユーザーのリクエストを振り分け、適切な意図に転送するためのツールを呼び出してください。 + 適切な意図に転送する準備ができたら、ツールを呼び出して転送してください。 + 詳細を知る必要はありません。リクエストのトピックだけを理解すればよいです。 + エージェントにリクエストを振り分けるためにより多くの情報が必要な場合は、理由を説明せずに直接質問してください。 + 思考プロセスをユーザーと共有しないでください!ユーザーに代わって不合理な仮定をしないでください。 + 顧客コンテキストはこちらです: {customer_context}、フライトコンテキストはこちらです: {flight_context}""" + +# 各エージェントの定義 +# 振り分けエージェント:ユーザーのリクエストを適切なエージェントに振り分ける triage_agent = Agent( - name="Triage Agent", + name="振り分けエージェント", instructions=triage_instructions, functions=[transfer_to_flight_modification, transfer_to_lost_baggage], ) +# フライト変更エージェント:フライトの変更やキャンセルに関するリクエストを処理 flight_modification = Agent( - name="Flight Modification Agent", - instructions="""You are a Flight Modification Agent for a customer service airlines company. - You are an expert customer service agent deciding which sub intent the user should be referred to. -You already know the intent is for flight modification related question. First, look at message history and see if you can determine if the user wants to cancel or change their flight. -Ask user clarifying questions until you know whether or not it is a cancel request or change flight request. Once you know, call the appropriate transfer function. Either ask clarifying questions, or call one of your functions, every time.""", + name="フライト変更エージェント", + instructions="""あなたは航空会社のカスタマーサービスのフライト変更エージェントです。 + ユーザーがどのサブ意図に紹介されるべきかを決定する専門のカスタマーサービスエージェントです。 +意図がフライト変更関連の質問であることは既に分かっています。まず、メッセージ履歴を見て、ユーザーがフライトをキャンセルしたいのか変更したいのかを判断できるか確認してください。 +ユーザーがキャンセルリクエストなのか変更リクエストなのかが分かるまで、明確化のための質問をしてください。分かったら、適切な転送関数を呼び出してください。毎回、明確化のための質問をするか、関数の1つを呼び出してください。""", functions=[transfer_to_flight_cancel, transfer_to_flight_change], parallel_tool_calls=False, ) +# フライトキャンセルエージェント:フライトのキャンセルに特化した処理を行う flight_cancel = Agent( - name="Flight cancel traversal", + name="フライトキャンセル処理", instructions=STARTER_PROMPT + FLIGHT_CANCELLATION_POLICY, functions=[ escalate_to_agent, @@ -68,8 +68,9 @@ def triage_instructions(context_variables): ], ) +# フライト変更エージェント:フライトの変更に特化した処理を行う flight_change = Agent( - name="Flight change traversal", + name="フライト変更処理", instructions=STARTER_PROMPT + FLIGHT_CHANGE_POLICY, functions=[ escalate_to_agent, @@ -80,8 +81,9 @@ def triage_instructions(context_variables): ], ) +# 手荷物紛失エージェント:手荷物の紛失に関する問い合わせを処理する lost_baggage = Agent( - name="Lost baggage traversal", + name="手荷物紛失処理", instructions=STARTER_PROMPT + LOST_BAGGAGE_POLICY, functions=[ escalate_to_agent, @@ -90,3 +92,9 @@ def triage_instructions(context_variables): case_resolved, ], ) + +# 解説: +# このファイルでは、各種エージェントとそれらの転送関数を定義しています。 +# 各エージェントは特定の役割(振り分け、フライト変更、キャンセル、手荷物紛失)を持ち、 +# それぞれに適した指示と利用可能な関数が設定されています。 +# エージェント間の転送を管理することで、複雑な顧客サービスのフローを実現しています。 From 7f4b4cc31369f70a15d58e3be456d51e0b9ae483 Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:18:06 +0900 Subject: [PATCH 05/13] =?UTF-8?q?=F0=9F=93=9D=20refactor:=20examples/airli?= =?UTF-8?q?ne/configs/tools.py=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=81=AE=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=A8=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA?= =?UTF-8?q?=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 関数名と変数名に日本語のコメントを追加しました。 - 各ツールの機能を明確にするために、コメントを改善しました。 - コードの可読性を向上させました。 - 各ツールの機能を詳細に説明するコメントブロックを追加しました。 --- examples/airline/configs/tools.py | 34 +++++++++++++++++++------------ 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/examples/airline/configs/tools.py b/examples/airline/configs/tools.py index 02ba0a7..8216487 100644 --- a/examples/airline/configs/tools.py +++ b/examples/airline/configs/tools.py @@ -1,28 +1,36 @@ +# 人間のエージェントにエスカレーション def escalate_to_agent(reason=None): - return f"Escalating to agent: {reason}" if reason else "Escalating to agent" - + return f"エージェントにエスカレーション: {reason}" if reason else "エージェントにエスカレーション" +# フライト変更が可能か確認 def valid_to_change_flight(): - return "Customer is eligible to change flight" - + return "顧客はフライト変更の資格があります" +# フライト変更を実行 def change_flight(): - return "Flight was successfully changed!" - + return "フライトの変更が成功しました!" +# 返金プロセスを開始 def initiate_refund(): - status = "Refund initiated" + status = "返金が開始されました" return status - +# フライトクレジットの発行を開始 def initiate_flight_credits(): - status = "Successfully initiated flight credits" + status = "フライトクレジットが正常に開始されました" return status - +# ケースを解決済みとしてマーク def case_resolved(): - return "Case resolved. No further questions." - + return "ケースが解決しました。これ以上の質問はありません。" +# 手荷物の捜索プロセスを開始 def initiate_baggage_search(): - return "Baggage was found!" + return "手荷物が見つかりました!" + +# 解説: +# このファイルでは、エージェントが使用できる各種ツール(関数)を定義しています。 +# これらの関数は、実際のシステムでは外部APIの呼び出しやデータベース操作などを行うことになりますが、 +# このデモでは簡単な文字列を返すだけの実装になっています。 +# 各関数は特定の顧客サービスタスク(エスカレーション、フライト変更、返金など)に対応しており、 +# エージェントはこれらの関数を呼び出すことで、顧客のリクエストを処理します。 From 510388738fb3285aab35e3d76d2d32907ec4abc5 Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:18:10 +0900 Subject: [PATCH 06/13] =?UTF-8?q?=E2=9E=95=20feat:=20examples/airline/eval?= =?UTF-8?q?s/eval=5Fcases/flight=5Fmodification=5Fcases=5FJP.json=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 日本語のフライト変更テストケースを追加しました。 --- .../flight_modification_cases_JP.json | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 examples/airline/evals/eval_cases/flight_modification_cases_JP.json diff --git a/examples/airline/evals/eval_cases/flight_modification_cases_JP.json b/examples/airline/evals/eval_cases/flight_modification_cases_JP.json new file mode 100644 index 0000000..1148f45 --- /dev/null +++ b/examples/airline/evals/eval_cases/flight_modification_cases_JP.json @@ -0,0 +1,20 @@ +[ + { + "conversation": [ + {"role": "user", "content": "フライトを1日早く変更したいです!"} + ], + "function": "transfer_to_flight_change" + }, + { + "conversation": [ + {"role": "user", "content": "フライトをキャンセルしたいです。個人的な都合で行けなくなってしまいました"} + ], + "function": "transfer_to_flight_cancel" + }, + { + "conversation": [ + {"role": "user", "content": "このフライトはもう必要ありません"} + ], + "function": "None" + } + ] From 35efd4983184ee9934b489e9f6818636c05e6977 Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:18:13 +0900 Subject: [PATCH 07/13] =?UTF-8?q?=E2=9E=95=20feat:=20examples/airline/eval?= =?UTF-8?q?s/eval=5Fcases/triage=5Fcases=5FJP.json=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AE=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 日本語の振り分けテストケースを追加しました。 --- .../evals/eval_cases/triage_cases_JP.json | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 examples/airline/evals/eval_cases/triage_cases_JP.json diff --git a/examples/airline/evals/eval_cases/triage_cases_JP.json b/examples/airline/evals/eval_cases/triage_cases_JP.json new file mode 100644 index 0000000..de6a6f0 --- /dev/null +++ b/examples/airline/evals/eval_cases/triage_cases_JP.json @@ -0,0 +1,26 @@ +[ + { + "conversation": [ + {"role": "user", "content": "私の荷物が届いていません!"} + ], + "function": "transfer_to_lost_baggage" + }, + { + "conversation": [ + {"role": "user", "content": "フライト中に乱気流がありました"} + ], + "function": "None" + }, + { + "conversation": [ + {"role": "user", "content": "フライトをキャンセルしたいのですが"} + ], + "function": "transfer_to_flight_modification" + }, + { + "conversation": [ + {"role": "user", "content": "人生の意味は何ですか"} + ], + "function": "None" + } +] From bb9be759a4c9594037e6cbbc4c7ca0f2d1f76aee Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:18:16 +0900 Subject: [PATCH 08/13] =?UTF-8?q?=E2=9E=95=20feat:=20examples/airline/eval?= =?UTF-8?q?s/eval=5Fresults/flight=5Fmodification=5Fevals=5FJP.json?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 日本語のフライト変更評価結果を格納するファイルです。 --- .../flight_modification_evals_JP.json | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 examples/airline/evals/eval_results/flight_modification_evals_JP.json diff --git a/examples/airline/evals/eval_results/flight_modification_evals_JP.json b/examples/airline/evals/eval_results/flight_modification_evals_JP.json new file mode 100644 index 0000000..19e867d --- /dev/null +++ b/examples/airline/evals/eval_results/flight_modification_evals_JP.json @@ -0,0 +1,83 @@ +[ + { + "id": "a285f34a-7c3e-4f06-b493-abc1e9c9d61d", + "timestamp": "2024-10-13T02:13:56.047235", + "results": [ + { + "messages": [ + { + "role": "user", + "content": "\u30d5\u30e9\u30a4\u30c8\u30921\u65e5\u65e9\u304f\u5909\u66f4\u3057\u305f\u3044\u3067\u3059\uff01" + } + ], + "expected_function": "transfer_to_flight_change", + "actual_function": [ + "transfer_to_flight_change", + "transfer_to_flight_change", + "transfer_to_flight_change", + "transfer_to_flight_change", + "transfer_to_flight_change" + ], + "actual_message": [ + "None", + "None", + "None", + "None", + "None" + ], + "case_accuracy": "100.00%" + }, + { + "messages": [ + { + "role": "user", + "content": "\u30d5\u30e9\u30a4\u30c8\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u305f\u3044\u3067\u3059\u3002\u500b\u4eba\u7684\u306a\u90fd\u5408\u3067\u884c\u3051\u306a\u304f\u306a\u3063\u3066\u3057\u307e\u3044\u307e\u3057\u305f" + } + ], + "expected_function": "transfer_to_flight_cancel", + "actual_function": [ + "transfer_to_flight_cancel", + "transfer_to_flight_cancel", + "transfer_to_flight_cancel", + "transfer_to_flight_cancel", + "transfer_to_flight_cancel" + ], + "actual_message": [ + "None", + "None", + "None", + "None", + "None" + ], + "case_accuracy": "100.00%" + }, + { + "messages": [ + { + "role": "user", + "content": "\u3053\u306e\u30d5\u30e9\u30a4\u30c8\u306f\u3082\u3046\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093" + } + ], + "expected_function": "None", + "actual_function": [ + "None", + "None", + "None", + "None", + "transfer_to_flight_cancel" + ], + "actual_message": [ + "\u304a\u5ba2\u69d8\u306f\u30d5\u30e9\u30a4\u30c8\u3092\u5b8c\u5168\u306b\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u3089\u3063\u3057\u3083\u308b\u306e\u304b\u3001\u3042\u308b\u3044\u306f\u5225\u306e\u65e5\u7a0b\u306b\u5909\u66f4\u3057\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u3089\u3063\u3057\u3083\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f", + "\u30d5\u30e9\u30a4\u30c8\u304c\u4e0d\u8981\u306b\u306a\u308b\u7406\u7531\u306b\u3064\u3044\u3066\u3001\u3082\u3046\u5c11\u3057\u8a73\u3057\u304f\u6559\u3048\u3066\u3044\u305f\u3060\u3051\u307e\u3059\u304b\uff1f\u30ad\u30e3\u30f3\u30bb\u30eb\u3092\u3054\u5e0c\u671b\u3067\u3057\u3087\u3046\u304b\uff1f\u305d\u308c\u3068\u3082\u3001\u4ed6\u306e\u4fbf\u3078\u306e\u5909\u66f4\u3092\u304a\u8003\u3048\u3067\u3059\u304b\uff1f", + "\u3042\u306a\u305f\u304c\u30d5\u30e9\u30a4\u30c8\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u308b\u306e\u304b\u3092\u78ba\u8a8d\u3057\u305f\u3044\u306e\u3067\u3059\u304c\u3001\u30d5\u30e9\u30a4\u30c8\u306e\u30ad\u30e3\u30f3\u30bb\u30eb\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u3066\u3044\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f\u305d\u308c\u3068\u3082\u3001\u5225\u306e\u30d5\u30e9\u30a4\u30c8\u306b\u5909\u66f4\u3057\u305f\u3044\u306e\u3067\u3057\u3087\u3046\u304b\uff1f", + "\u30d5\u30e9\u30a4\u30c8\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u305f\u3044\u3068\u3044\u3046\u3053\u3068\u3067\u3057\u3087\u3046\u304b\uff1f\u305d\u308c\u3068\u3082\u3001\u5225\u306e\u65e5\u7a0b\u3084\u6642\u9593\u306b\u5909\u66f4\u3057\u305f\u3044\u3068\u3044\u3046\u3053\u3068\u3067\u3057\u3087\u3046\u304b\uff1f", + "None" + ], + "case_accuracy": "80.00%" + } + ], + "correct_evals": 14, + "total_evals": 15, + "overall_accuracy_percent": "93.33%" + } +] \ No newline at end of file From c7d7555a31554eb0107841b033061679e18f3ad4 Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:18:19 +0900 Subject: [PATCH 09/13] =?UTF-8?q?=E2=9E=95=20feat:=20examples/airline/eval?= =?UTF-8?q?s/eval=5Fresults/triage=5Fevals=5FJP.json=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AE=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 日本語の振り分け評価結果を格納するファイルです。 --- .../evals/eval_results/triage_evals_JP.json | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 examples/airline/evals/eval_results/triage_evals_JP.json diff --git a/examples/airline/evals/eval_results/triage_evals_JP.json b/examples/airline/evals/eval_results/triage_evals_JP.json new file mode 100644 index 0000000..c47e002 --- /dev/null +++ b/examples/airline/evals/eval_results/triage_evals_JP.json @@ -0,0 +1,107 @@ +[ + { + "id": "9d372c24-a8a5-4c8d-b368-270d5e35c3b7", + "timestamp": "2024-10-13T02:13:35.879906", + "results": [ + { + "messages": [ + { + "role": "user", + "content": "\u79c1\u306e\u8377\u7269\u304c\u5c4a\u3044\u3066\u3044\u307e\u305b\u3093\uff01" + } + ], + "expected_function": "transfer_to_lost_baggage", + "actual_function": [ + "transfer_to_lost_baggage", + "transfer_to_lost_baggage", + "transfer_to_lost_baggage", + "transfer_to_lost_baggage", + "transfer_to_lost_baggage" + ], + "actual_message": [ + "None", + "None", + "None", + "None", + "None" + ], + "case_accuracy": "100.00%" + }, + { + "messages": [ + { + "role": "user", + "content": "\u30d5\u30e9\u30a4\u30c8\u4e2d\u306b\u4e71\u6c17\u6d41\u304c\u3042\u308a\u307e\u3057\u305f" + } + ], + "expected_function": "None", + "actual_function": [ + "transfer_to_flight_modification", + "None", + "None", + "None", + "None" + ], + "actual_message": [ + "None", + "\u304a\u5ba2\u69d8\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9069\u5207\u306b\u51e6\u7406\u3059\u308b\u305f\u3081\u306b\u3001\u4e71\u6c17\u6d41\u306b\u95a2\u9023\u3057\u305f\u5177\u4f53\u7684\u306a\u5bfe\u5fdc\u3092\u78ba\u8a8d\u3057\u3066\u3044\u307e\u3059\u3002\u6b21\u306e\u70b9\u306b\u3064\u3044\u3066\u3082\u3046\u5c11\u3057\u8a73\u3057\u304f\u6559\u3048\u3066\u3044\u305f\u3060\u3051\u307e\u3059\u304b\uff1f\n\n- \u30d5\u30e9\u30a4\u30c8\u306e\u5909\u66f4\u3092\u5e0c\u671b\u3055\u308c\u3066\u3044\u307e\u3059\u304b\uff1f\n- \u304a\u8377\u7269\u306b\u95a2\u3059\u308b\u554f\u984c\u304c\u3054\u3056\u3044\u307e\u3057\u305f\u304b\uff1f", + "\u30d5\u30e9\u30a4\u30c8\u306e\u5909\u66f4\u306b\u3064\u3044\u3066\u304a\u4f3a\u3044\u3057\u305f\u3044\u306e\u304b\u3001\u305d\u308c\u3068\u3082\u5225\u306e\u61f8\u5ff5\u304c\u3042\u308b\u306e\u304b\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30d5\u30e9\u30a4\u30c8\u95a2\u9023\u306e\u554f\u984c\u306b\u95a2\u3059\u308b\u3082\u306e\u3067\u3042\u308b\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3057\u305f\u304c\u3001\u3055\u3089\u306a\u308b\u5177\u4f53\u7684\u306a\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u304c\u5fc5\u8981\u3067\u3059\u3002\u4e71\u6c17\u6d41\u306b\u3088\u308b\u554f\u984c\u306b\u3064\u3044\u3066\u30d5\u30e9\u30a4\u30c8\u306e\u5909\u66f4\u304c\u5fc5\u8981\u306a\u306e\u304b\u3001\u4ed6\u306e\u30b5\u30dd\u30fc\u30c8\u304c\u5fc5\u8981\u306a\u306e\u304b\u6559\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u308c\u3068\u3082\u3001\u624b\u8377\u7269\u306b\u95a2\u9023\u3059\u308b\u554f\u984c\u3067\u3059\u304b\uff1f\u3069\u306e\u3088\u3046\u306b\u304a\u624b\u4f1d\u3044\u3067\u304d\u307e\u3059\u304b\uff1f", + "\u30d5\u30e9\u30a4\u30c8\u4e2d\u306b\u4e71\u6c17\u6d41\u304c\u3042\u3063\u305f\u3068\u306e\u3053\u3068\u3067\u3059\u304c\u3001\u5177\u4f53\u7684\u306b\u3069\u306e\u3088\u3046\u306a\u30b5\u30dd\u30fc\u30c8\u304c\u5fc5\u8981\u304b\u3092\u6559\u3048\u3066\u3044\u305f\u3060\u3051\u307e\u3059\u304b\uff1f\u305f\u3068\u3048\u3070\u3001\u30d5\u30e9\u30a4\u30c8\u306b\u95a2\u3059\u308b\u5909\u66f4\u304c\u5fc5\u8981\u304b\u3001\u3042\u308b\u3044\u306f\u5225\u306e\u30b5\u30dd\u30fc\u30c8\u304c\u5fc5\u8981\u306a\u306e\u304b\u3092\u6559\u3048\u3066\u304f\u3060\u3055\u3044\u3002" + ], + "case_accuracy": "80.00%" + }, + { + "messages": [ + { + "role": "user", + "content": "\u30d5\u30e9\u30a4\u30c8\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u305f\u3044\u306e\u3067\u3059\u304c" + } + ], + "expected_function": "transfer_to_flight_modification", + "actual_function": [ + "transfer_to_flight_modification", + "transfer_to_flight_modification", + "transfer_to_flight_modification", + "transfer_to_flight_modification", + "transfer_to_flight_modification" + ], + "actual_message": [ + "None", + "None", + "None", + "None", + "None" + ], + "case_accuracy": "100.00%" + }, + { + "messages": [ + { + "role": "user", + "content": "\u4eba\u751f\u306e\u610f\u5473\u306f\u4f55\u3067\u3059\u304b" + } + ], + "expected_function": "None", + "actual_function": [ + "None", + "None", + "None", + "None", + "None" + ], + "actual_message": [ + "\u7533\u3057\u8a33\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u305d\u306e\u8cea\u554f\u306b\u306f\u304a\u7b54\u3048\u3067\u304d\u307e\u305b\u3093\u3002", + "\u7533\u3057\u8a33\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u305d\u306e\u8cea\u554f\u306b\u5177\u4f53\u7684\u306a\u7b54\u3048\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u4eba\u751f\u306e\u610f\u5473\u306b\u3064\u3044\u3066\u306f\u3001\u591a\u304f\u306e\u54f2\u5b66\u7684\u3001\u5b97\u6559\u7684\u3001\u500b\u4eba\u7684\u306a\u8996\u70b9\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u308c\u306f\u4eba\u305d\u308c\u305e\u308c\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u3082\u306e\u3067\u3059\u3002\u3042\u306a\u305f\u81ea\u8eab\u306e\u4fa1\u5024\u89b3\u3084\u4fe1\u5ff5\u306b\u57fa\u3065\u3044\u3066\u8003\u3048\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002", + "\u7533\u3057\u8a33\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u305d\u306e\u8cea\u554f\u306b\u5bfe\u3059\u308b\u5177\u4f53\u7684\u306a\u7b54\u3048\u3092\u6301\u3063\u3066\u3044\u307e\u305b\u3093\u3002\u4eba\u751f\u306e\u610f\u5473\u306b\u95a2\u3059\u308b\u8003\u3048\u65b9\u306f\u500b\u4eba\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u3001\u591a\u304f\u306e\u54f2\u5b66\u8005\u3084\u601d\u60f3\u5bb6\u304c\u69d8\u3005\u306a\u8996\u70b9\u3067\u8b70\u8ad6\u3057\u3066\u3044\u307e\u3059\u3002\u8208\u5473\u304c\u3042\u308c\u3070\u3001\u305d\u306e\u30c6\u30fc\u30de\u306b\u95a2\u9023\u3059\u308b\u672c\u3084\u30ea\u30bd\u30fc\u30b9\u3092\u63a2\u7d22\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002", + "\u79c1\u306f\u305d\u308c\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u304c\u3001\u4ed6\u306b\u4f55\u304b\u304a\u624b\u4f1d\u3044\u3067\u304d\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u304b\uff1f\u4f8b\u3048\u3070\u3001\u65c5\u884c\u3084\u8377\u7269\u306b\u95a2\u3059\u308b\u30b5\u30dd\u30fc\u30c8\u306a\u3069\u3002", + "\u4eba\u751f\u306e\u610f\u5473\u306b\u3064\u3044\u3066\u306f\u3001\u591a\u304f\u306e\u54f2\u5b66\u8005\u3084\u601d\u60f3\u5bb6\u304c\u69d8\u3005\u306a\u898b\u89e3\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u591a\u304f\u306e\u4eba\u304c\u4eba\u751f\u306e\u610f\u5473\u3092\u898b\u3064\u3051\u308b\u305f\u3081\u306b\u3001\u500b\u4eba\u7684\u306a\u7d4c\u9a13\u3001\u4eba\u9593\u95a2\u4fc2\u3001\u4fa1\u5024\u89b3\u3001\u76ee\u6a19\u8a2d\u5b9a\u306a\u3069\u3092\u5927\u5207\u306b\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u4eba\u306b\u3068\u3063\u3066\u4eba\u751f\u306e\u610f\u5473\u306f\u7570\u306a\u308b\u3053\u3068\u304c\u4e00\u822c\u7684\u3067\u3059\u3002\u3042\u306a\u305f\u81ea\u8eab\u306e\u4fa1\u5024\u89b3\u3084\u7d4c\u9a13\u3092\u632f\u308a\u8fd4\u308a\u3001\u81ea\u5206\u306a\u308a\u306e\u610f\u5473\u3092\u898b\u51fa\u3059\u3053\u3068\u304c\u5927\u5207\u3068\u8003\u3048\u3089\u308c\u307e\u3059\u3002" + ], + "case_accuracy": "100.00%" + } + ], + "correct_evals": 19, + "total_evals": 20, + "overall_accuracy_percent": "95.00%" + } +] \ No newline at end of file From 6a9b53511a3002a1616f7b639a97644a021f3e2c Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:18:22 +0900 Subject: [PATCH 10/13] =?UTF-8?q?=F0=9F=93=9D=20refactor:=20examples/airli?= =?UTF-8?q?ne/evals/eval=5Futils.py=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=81=AE=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA?= =?UTF-8?q?=E3=83=B3=E3=82=B0=E3=81=A8=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 関数名と変数名に日本語のコメントを追加しました。 - コードの可読性を向上させました。 - 各関数ごとの処理を説明するコメントブロックを追加しました。 --- examples/airline/evals/eval_utils.py | 53 ++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/examples/airline/evals/eval_utils.py b/examples/airline/evals/eval_utils.py index 1e069e8..e2c445f 100644 --- a/examples/airline/evals/eval_utils.py +++ b/examples/airline/evals/eval_utils.py @@ -4,16 +4,21 @@ from swarm import Swarm - def run_function_evals(agent, test_cases, n=1, eval_path=None): + # 正しく処理されたケースの数をカウント correct_function = 0 + # 全テストケースの結果を格納するリスト results = [] + # 評価の一意のIDと実行時刻を生成 eval_id = str(uuid.uuid4()) eval_timestamp = datetime.datetime.now().isoformat() + # Swarmクライアントのインスタンスを作成 client = Swarm() for test_case in test_cases: + # 各テストケースで正しく処理された回数をカウント case_correct = 0 + # テストケースの結果を格納する辞書 case_results = { "messages": test_case["conversation"], "expected_function": test_case["function"], @@ -21,9 +26,12 @@ def run_function_evals(agent, test_cases, n=1, eval_path=None): "actual_message": [], } print(50 * "--") - print(f"\033[94mConversation: \033[0m{test_case['conversation']}\n") + print(f"\033[94m会話: \033[0m{test_case['conversation']}\n") + + # 各テストケースをn回実行 for i in range(n): - print(f"\033[90mIteration: {i + 1}/{n}\033[0m") + print(f"\033[90m反復: {i + 1}/{n}\033[0m") + # エージェントを実行し、応答を取得 response = client.run( agent=agent, messages=test_case["conversation"], max_turns=1 ) @@ -31,41 +39,47 @@ def run_function_evals(agent, test_cases, n=1, eval_path=None): actual_function = output.get("tool_calls", "None") actual_message = output.get("message", "None") + # 実際の関数呼び出しとメッセージを結果に追加 case_results["actual_function"].append(actual_function) case_results["actual_message"].append(actual_message) + # ツール呼び出しがあった場合の処理 if "tool_calls" in output: print( - f'\033[95mExpected function: \033[0m {test_case["function"]}, \033[95mGot: \033[0m{output["tool_calls"]}\n' + f'\033[95m期待される関数: \033[0m {test_case["function"]}, \033[95m実際: \033[0m{output["tool_calls"]}\n' ) if output["tool_calls"] == test_case["function"]: case_correct += 1 correct_function += 1 - + # メッセージのみの場合の処理 elif "message" in output: print( - f'\033[95mExpected function: \033[0m {test_case["function"]}, \033[95mGot: \033[0mNone' + f'\033[95m期待される関数: \033[0m {test_case["function"]}, \033[95m実際: \033[0mNone' ) - print(f'\033[90mMessage: {output["message"]}\033[0m\n') + print(f'\033[90mメッセージ: {output["message"]}\033[0m\n') if test_case["function"] == "None": case_correct += 1 correct_function += 1 + # テストケースの精度を計算 case_accuracy = (case_correct / n) * 100 case_results["case_accuracy"] = f"{case_accuracy:.2f}%" results.append(case_results) print( - f"\033[92mCorrect functions for this case: {case_correct} out of {n}\033[0m" + f"\033[92mこのケースでの正解数: {case_correct} / {n}\033[0m" ) - print(f"\033[93mAccuracy for this case: {case_accuracy:.2f}%\033[0m") + print(f"\033[93mこのケースの精度: {case_accuracy:.2f}%\033[0m") + + # 全体の精度を計算 overall_accuracy = (correct_function / (len(test_cases) * n)) * 100 print(50 * "**") print( - f"\n\033[92mOVERALL: Correct functions selected: {correct_function} out of {len(test_cases) * n}\033[0m" + f"\n\033[92m全体: 正しく選択された関数: {correct_function} / {len(test_cases) * n}\033[0m" ) - print(f"\033[93mOVERALL: Accuracy: {overall_accuracy:.2f}%\033[0m") + print(f"\033[93m全体の精度: {overall_accuracy:.2f}%\033[0m") + # 最終結果をまとめる final_result = { "id": eval_id, "timestamp": eval_timestamp, @@ -75,6 +89,7 @@ def run_function_evals(agent, test_cases, n=1, eval_path=None): "overall_accuracy_percent": f"{overall_accuracy:.2f}%", } + # 評価結果をファイルに保存(オプション) if eval_path: try: with open(eval_path, "r") as file: @@ -92,10 +107,8 @@ def run_function_evals(agent, test_cases, n=1, eval_path=None): return overall_accuracy - return overall_accuracy - - def extract_response_info(response): + # レスポンスから関連情報を抽出 results = {} for message in response.messages: if message["role"] == "tool": @@ -104,3 +117,15 @@ def extract_response_info(response): elif not message["tool_calls"]: results["message"] = message["content"] return results + +# 解説: +# このスクリプトは、エージェントの機能評価を実行するためのものです。 +# 主な機能は以下の通りです: +# 1. 指定されたエージェントに対して、一連のテストケースを実行します。 +# 2. 各テストケースは指定回数(n回)実行され、期待される関数呼び出しと実際の結果を比較します。 +# 3. テストケースごとの精度と全体の精度を計算し、表示します。 +# 4. 評価結果を詳細にまとめ、オプションでファイルに保存します。 +# 5. 色付きの出力を使用して、結果を見やすく表示します。 + +# このスクリプトは、エージェントの性能を定量的に評価し、その結果を分析するのに役立ちます。 +# 特に、多数のテストケースや繰り返し実行が必要な場合に有用です。 From 8d29ddd927b695872c482264f66013b0f60c4021 Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:18:25 +0900 Subject: [PATCH 11/13] =?UTF-8?q?=F0=9F=9A=80=20feat:=20examples/airline/m?= =?UTF-8?q?ain.py=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=81=A8=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 日本語のコメントを追加しました。 - コンテキスト変数の説明を追加しました。 - 全体的にコードを整理しました。 --- examples/airline/main.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/examples/airline/main.py b/examples/airline/main.py index 8eaa055..4bf9342 100644 --- a/examples/airline/main.py +++ b/examples/airline/main.py @@ -1,8 +1,10 @@ from configs.agents import * from swarm.repl import run_demo_loop +# コンテキスト変数の設定 +# これらの変数は顧客情報とフライト情報を含み、エージェントの対話に使用されます context_variables = { - "customer_context": """Here is what you know about the customer's details: + "customer_context": """ここに顧客の詳細情報があります: 1. CUSTOMER_ID: customer_12345 2. NAME: John Doe 3. PHONE_NUMBER: (123) 456-7890 @@ -12,8 +14,16 @@ 7. BALANCE: $0.00 8. LOCATION: 1234 Main St, San Francisco, CA 94123, USA """, - "flight_context": """The customer has an upcoming flight from LGA (Laguardia) in NYC to LAX in Los Angeles. -The flight # is 1919. The flight departure date is 3pm ET, 5/21/2024.""", + "flight_context": """顧客は、ニューヨークのLGA(ラガーディア)からロサンゼルスのLAXへの次の便を予約しています。 +フライト番号は1919です。出発日時は2024年5月21日午後3時(東部時間)です。""", } + if __name__ == "__main__": + # デモループの実行 + # triage_agentを初期エージェントとして使用し、コンテキスト変数を渡してデバッグモードで実行 run_demo_loop(triage_agent, context_variables=context_variables, debug=True) + +# 解説: +# このスクリプトは、Swarmフレームワークを使用して対話式のカスタマーサービスデモを実行します。 +# context_variablesには顧客とフライトの情報が含まれており、これらはエージェントが対話中に参照できます。 +# run_demo_loopは、ユーザーとエージェント間の対話を管理し、triage_agentから始まる対話フローを実行します。 From d619a196b65adbadfe5ad59a96a4b7b34254b638 Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:18:28 +0900 Subject: [PATCH 12/13] =?UTF-8?q?=E2=9C=A8=20chore:=20examples/basic/.Sour?= =?UTF-8?q?ceSageignore=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - basic例に共通の無視ファイルを追加しました。 --- examples/basic/.SourceSageignore | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 examples/basic/.SourceSageignore diff --git a/examples/basic/.SourceSageignore b/examples/basic/.SourceSageignore new file mode 100644 index 0000000..facf9f3 --- /dev/null +++ b/examples/basic/.SourceSageignore @@ -0,0 +1,32 @@ +.git +__pycache__ +LICENSE +output.md +assets +Style-Bert-VITS2 +output +streamlit +SourceSage.md +data +.gitignore +.SourceSageignore +*.png +Changelog +SourceSageAssets +SourceSageAssetsDemo +__pycache__ +.pyc +**/__pycache__/** +modules\__pycache__ +.svg +sourcesage.egg-info +.pytest_cache +dist +build +ollama-webui +langfuse +.env +.SourceSageignore +.SourceSageAssets +.Gaiah.md +spellbook \ No newline at end of file From 57c3738920c5ee8856b535c3a57826f29babb8bf Mon Sep 17 00:00:00 2001 From: Maki Date: Sun, 13 Oct 2024 02:19:09 +0900 Subject: [PATCH 13/13] =?UTF-8?q?=E2=9C=A8=20feat:=20=E8=88=AA=E7=A9=BA?= =?UTF-8?q?=E4=BC=9A=E7=A4=BE=E3=82=A8=E3=83=BC=E3=82=B8=E3=82=A7=E3=83=B3?= =?UTF-8?q?=E3=83=88=E8=A9=95=E4=BE=A1=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97?= =?UTF-8?q?=E3=83=88=E3=81=AE=E6=97=A5=E6=9C=AC=E8=AA=9E=E5=8C=96=E3=81=A8?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E6=8B=A1=E5=BC=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - テストケースファイルのパスを日本語対応版に変更しました (`triage_cases.json` → `triage_cases_JP.json`, `flight_modification_cases.json` → `flight_modification_cases_JP.json`)。 - 評価結果ファイルのパスも日本語対応版に変更しました (`triage_evals.json` → `triage_evals_JP.json`, `flight_modification_evals.json` → `flight_modification_evals_JP.json`)。 - スクリプトに詳細な解説を追加し、各エージェントの機能と評価プロセスの理解を容易にしました。 - 読みやすさと保守性の向上のため、コードの構造を調整し、コメントを充実させました。 - `sys.path`にパスを追加することで、スクリプトのモジュールインポートをより堅牢にしました。 - これらの変更により、スクリプトの可読性と保守性が向上し、日本語環境での利用が容易になります。 --- examples/airline/evals/function_evals.py | 47 ++++++++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/examples/airline/evals/function_evals.py b/examples/airline/evals/function_evals.py index 69113c1..ce4dafd 100644 --- a/examples/airline/evals/function_evals.py +++ b/examples/airline/evals/function_evals.py @@ -1,30 +1,61 @@ import json -from examples.airline.configs.agents import * -from examples.airline.evals.eval_utils import run_function_evals +import os +import sys -triage_test_cases = "eval_cases/triage_cases.json" -flight_modification_cases = "eval_cases/flight_modification_cases.json" +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) +sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) +sys.path.append('.') +from configs.agents import * +from evals.eval_utils import run_function_evals + +# 評価用のテストケースファイルのパス +triage_test_cases = "eval_cases/triage_cases_JP.json" +flight_modification_cases = "eval_cases/flight_modification_cases_JP.json" + +# 各テストケースの実行回数 n = 5 if __name__ == "__main__": - # Run triage_agent evals + # 振り分けエージェント(triage_agent)の評価を実行 with open(triage_test_cases, "r") as file: triage_test_cases = json.load(file) run_function_evals( triage_agent, triage_test_cases, n, - eval_path="eval_results/triage_evals.json", + eval_path="eval_results/triage_evals_JP.json", ) - # Run flight modification evals + # フライト変更エージェント(flight_modification)の評価を実行 with open(flight_modification_cases, "r") as file: flight_modification_cases = json.load(file) run_function_evals( flight_modification, flight_modification_cases, n, - eval_path="eval_results/flight_modification_evals.json", + eval_path="eval_results/flight_modification_evals_JP.json", ) + +# 解説: +# このスクリプトは、航空会社のカスタマーサービスシステムにおける +# 2つの主要なエージェント(振り分けエージェントとフライト変更エージェント)の +# 機能評価を自動的に実行するためのものです。 + +# 主な機能: +# 1. 振り分けエージェント(triage_agent)の評価: +# - triage_cases.jsonファイルからテストケースを読み込みます。 +# - run_function_evalsを使用して評価を実行します。 +# - 結果はtriage_evals.jsonファイルに保存されます。 + +# 2. フライト変更エージェント(flight_modification)の評価: +# - flight_modification_cases.jsonファイルからテストケースを読み込みます。 +# - 同じくrun_function_evalsを使用して評価を実行します。 +# - 結果はflight_modification_evals.jsonファイルに保存されます。 + +# 各評価は5回(n=5)繰り返され、これにより結果の信頼性が向上します。 + +# このスクリプトを実行することで、両エージェントの性能を +# 一度に評価し、結果を別々のJSONファイルに保存できます。 +# これは、エージェントの改善や性能の継続的なモニタリングに役立ちます。