Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
Sunwood-ai-labs committed Oct 12, 2024
2 parents efcde19 + 72f4d80 commit 7320155
Show file tree
Hide file tree
Showing 13 changed files with 537 additions and 84 deletions.
69 changes: 69 additions & 0 deletions .SourceSageignore
Original file line number Diff line number Diff line change
@@ -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
33 changes: 33 additions & 0 deletions examples/airline/.SourceSageignore
Original file line number Diff line number Diff line change
@@ -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
43 changes: 22 additions & 21 deletions examples/airline/README.md
Original file line number Diff line number Diff line change
@@ -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/`に保存されます。
58 changes: 33 additions & 25 deletions examples/airline/configs/agents.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -90,3 +92,9 @@ def triage_instructions(context_variables):
case_resolved,
],
)

# 解説:
# このファイルでは、各種エージェントとそれらの転送関数を定義しています。
# 各エージェントは特定の役割(振り分け、フライト変更、キャンセル、手荷物紛失)を持ち、
# それぞれに適した指示と利用可能な関数が設定されています。
# エージェント間の転送を管理することで、複雑な顧客サービスのフローを実現しています。
34 changes: 21 additions & 13 deletions examples/airline/configs/tools.py
Original file line number Diff line number Diff line change
@@ -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の呼び出しやデータベース操作などを行うことになりますが、
# このデモでは簡単な文字列を返すだけの実装になっています。
# 各関数は特定の顧客サービスタスク(エスカレーション、フライト変更、返金など)に対応しており、
# エージェントはこれらの関数を呼び出すことで、顧客のリクエストを処理します。
Original file line number Diff line number Diff line change
@@ -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"
}
]
26 changes: 26 additions & 0 deletions examples/airline/evals/eval_cases/triage_cases_JP.json
Original file line number Diff line number Diff line change
@@ -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"
}
]
Loading

0 comments on commit 7320155

Please sign in to comment.