# workflow实例场景
# 能展示sub workflow
# 能展示env的整合
# 能展示filter的使用
# 能展示function的调用
# 能展示基于工作目标/KPI的sub workflow迭代流程
# 多人场景安排

# 例子：举办一个团队活动
# 方案讨论（通过交互引导的方式收集主人的需求）与确定

# 活动前：
# 通讯员，对接管理参加活动的人的情况 (email spider)
# 酒店预订 简单：搜索（酒店评价） 处理异常
# 行程（票务）预订 ：搜索，处理异常
# 餐饮预订：给出方案，确定细节，预订
 
# 活动中：
# 进行统计和分析，调整设备
#	安保，空调，音乐，拍照，录像
# 响应紧急情况

# 活动结束后：
# 整理照片，视频，进行必要的二次创作，发送给相关人员
# 对活动进行总结，提出改件意见（指导下一次活动）

# 1. 人员
# 主管，负责和客户沟通，并对每个环境的结果进行总结
# 嘉宾对接
# 酒店组
# 行程组
# 财务组
# 多媒体组


[filter]
"*" = "manager"

[roles.manager]
fullname = "经理"
agent="manager"
[[roles.manager.prompt]] 
role="system"
content="""你是一个活动策划公司的经理,与客户对接并向团队下达指令。你的团队分为下面几个小组:嘉宾对接组,酒店预定组,行程预订组,财务组,活动摄像组。活动策划分为四个阶段：方案讨论，活动前，活动中，活动后。你会根据客户的需求，对团队进行分工，分别完成各个阶段的工作。你的基本工作模式是：\
1. 收到客户的明确的指令后,基于客户的已有信息和客户商量活动方案，和活动策划公司无关的业务你会回答‘与我无关’。当和客户完成活动方案的确认后,你会将拆解后的任务分配给各个小组 \
2. 根据目前已经确认的活动方案，你要根据时间适时的检查不同小组的工作情况。当收到小组的工作情况反馈后，你会站在全局的角度判断是否需要调整活动方案，如果需要调整，你会和客户商量重新确定方案，然后再将调整后的方案分配给各个小组。\
3. 有时工作小组会主动与你沟通，反馈一些问题。你会站在全局的角度给与指导，适当的调整工作小组的工作目标。如果反馈的问题需要你和客户沟通，你会和客户沟通后重新确定方案。再将调整后的方案分配给受到影响各个小组。\
4. 当你决定要和工作小组通信时，请使用`send_message({小组名称},{内容}`）的形式。"""}]




[sub_workflows]
[sub_workflows."嘉宾对接组"]
# 展现读取email和发送email与嘉宾沟通的能力
[sub_workflows."嘉宾对接组".environments.email]
new_mail = "收到来自{event.data.from},标题为{event.data.subject}的邮件，内容为{event.data.content}的电子邮件" # 这里将new_mail事件转换为了一个来自环境的message

[sub_workflows."嘉宾对接组".roles.leader]
name = "嘉宾对接组组长"
[[sub_workflows."嘉宾对接组".roles.leader.prompt]] 
role="system"
content="""你是一家活动策划公司的嘉宾对接组的组长，你的工作是基于已知信息,当前活动信息、公司经理的指令与嘉宾沟通，收集嘉宾的信息，然后将信息反馈给经理。在你看来，参加活动的多少有成员都是嘉宾，你可以通过你知道的信息给不同的成员进行分级。你的基本工作模式是：\
1. 处理收到的邮件，如果邮件来自嘉宾，你会尝试从邮件的表态和内容中分享嘉宾的需要，并结合你对当前活动方案的理解判断是否需要和经理沟通，如果需要和经理沟通，你会将嘉宾的需求总结和告诉经理。不需要沟通的事项可以直接回复嘉宾。\
2. 你总是通过`call_function(get_env,'parent.topic'`的形式查询当前的活动方案。等待函数返回后，你会根据函数的返回结果继续处理上一个对话。\
3. 当你决定要和经理通信时，请使用`send_message(manager,{内容}`）的形式，内容的长度不超过200字。\
4. 当你决定要回复嘉宾时，请使用`call_function(sendmail,{嘉宾邮件地址},{标题},{内容}）的形式，内容的长度不超过500字。"""
# 这里是孤立工作模式，组长只和经理沟通，也可以赋予其和其它组沟通的能力

[sub_workflows."酒店预定组"]
# 展现使用搜索引擎，并调用预订酒店的能力
[sub_workflows."酒店预定组".environments.email]

[sub_workflows."酒店预定组".roles.leader]
name="酒店预定组组长"
prompt = [{role="xxx",content="yyy"}]

[sub_workflows."酒店预定组".roles.research]
name="酒店搜索专家"

[sub_workflows."行程预订组"]
# 展现处理冲突并反推
nam3="3"
