Agent-camel框架学习记录(3)


原作者链接🔗:https://fmhw1n4zpn.feishu.cn/docx/AF4XdOZpIo6TOaxzDK8cxInNnCe

CAMEL 多智能体工作流系统概览

CAMEL是一个用于构建多智能体协作系统的框架,它通过角色扮演机制,让不同的AI智能体扮演特定角色,并协同完成复杂任务。其核心特点包括:

1
2
3
4
任务分解:将复杂任务拆解为可管理的子任务。
角色分工:为每个智能体分配专业角色。
依赖管理:智能地处理任务之间的依赖关系。
高效协作:智能体通过对话和合作共同达成目标。

RolePlaying:对话式协作

RolePlaying 是 CAMEL 中实现多智能体协作的主要方式。它模拟人类对话和协作过程,通过 AI用户(发布指令并引导对话)和 AI助手(提供解决方案并执行指令)的多轮对话来完成任务。

核心概念与参数

任务(Task):由初始提示(task_prompt)启动,可由任务指定智能体(with_task_specify)进一步明确。

1
2
3
AI用户(User Agent):由 user_role_name 定义角色名称。
AI助手(Assistant Agent):由 assistant_role_name 定义角色名称。
评审者(Critic Agent):可选,通过 critic_role_name 配置,可以是人类("human")或自动评审智能体,用于评估和优化任务完成情况(with_critic_in_the_loop)。

实践流程

1.设置参数:导入模块,配置模型,并为任务、AI用户和AI助手设置角色名称及相关参数。
2.组建 AI-Society:使用 RolePlaying 类初始化多智能体社会。
3.解决任务:通过循环调用 society.step() 进行多轮对话,直至任务完成或达到终止条件。is_terminated() 函数可用于检查会话终止原因。

Workforce:大规模团队协作

Workforce 适用于更复杂的、需要多个智能体并行或串行协作的场景,如软件开发、内容生产和项目管理。它允许用户定义多个“工作节点”(Worker Nodes),每个节点可以是一个拥有特定能力和职责的 ChatAgent。

核心组件

1
2
3
4
5
Workforce 实例:用于管理整个工作组,包含描述、协调智能体(coordinator_agent)和任务规划智能体(task_agent)等。

工作节点(Worker Nodes):由 ChatAgent 实例表示,每个节点拥有独特的系统消息(system_message)、模型配置和可选的工具集(tools),如搜索工具。

任务(Task):封装具体工作需求,包含 content(任务内容)、additional_info(附加信息)和 id(唯一标识)。

实践流程

1.创建 Workforce 实例:初始化 Workforce 对象,并可配置其描述、协调器和任务代理模型。
2.定义 Worker:创建具有不同角色和能力的 ChatAgent 实例(例如:搜索助手、规划师、评审员)。
3.添加工作节点:使用 add_single_agent_worker() 方法将定义的 ChatAgent 添加到 Workforce 中,并为其提供精准的描述,以便协调器分配任务。
4.启动 Workforce 并处理任务:创建 Task 对象,然后调用 workforce.process_task(task) 启动任务处理流程,Workforce 将根据节点描述自动分发子任务并整合结果。

综上,CAMEL 提供了两种主要的多智能体协作模式:

1
2
3
RolePlaying:适用于双向对话和逐步协作的场景,通过 AI 用户和 AI 助手的互动来细化并完成任务。

Workforce:适用于多角色、大规模团队协作的场景,通过协调智能体调度多个拥有特定能力的 ChatAgent 共同完成复杂任务,并可引入外部工具辅助。

两种模式都强调通过明确的角色定义和系统消息来提升智能体的能力和协作效率。

由于先前我们已经在之前的学习笔记以及练习中梳理过RolePlaying相关的内容以及演示,我们接下来主要演示Workforce场景的使用:


下面我们将创建一个简单的 Workforce 示例,让不同的智能体共同完成一个任务,比如生成一份关于东京旅游的行程规划。我们将定义以下角色:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 工作节点(Worker Agents)的定义
在这个优化版本中,我们为每个智能体赋予了更明确、更专业的职责,并移除了对外部搜索工具的依赖,让它们专注于利用自身的“知识库”来提供信息和执行任务。

东京旅游专家 (Researcher Agent):

角色定位:一位经验丰富的东京旅游专家。

职责:利用其丰富的内置知识提供东京的景点、美食、交通和购物信息,不再进行网络搜索,以确保信息来源可控且避免速率限制。

高级旅游规划师 (Planner Agent):

角色定位:专业的行程规划师。

职责:根据“东京旅游专家”提供的信息和游客的详细需求,精心制定一份合理、详细且吸引人的3日东京旅游行程,注重时间、交通和体验平衡。

资深旅行评论员 (Reviewer Agent):

角色定位:眼光独到的旅行评论员。

职责:严格评估规划师制定的行程,从实用性、趣味性、性价比、潜在问题和文化体验等多个维度给出建设性反馈和优化建议。

准备工作

首先,确保你安装了必要的库并配置了API密钥。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType, TaskType
from camel.societies.workforce import Workforce
from camel.messages import BaseMessage
from camel.tasks import Task
import os
from dotenv import load_dotenv

load_dotenv()
api_key = os.getenv('MODELSCOPE_SDK_TOKEN')

# 创建模型实例
model = ModelFactory.create(
model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
model_type="Qwen/Qwen2.5-72B-Instruct",
url='https://api-inference.modelscope.cn/v1/',
api_key=api_key
)

print("🔧 正在创建优化版本的 Workforce...")

定义工作节点 (Worker Agents)

我们将创建三个不同职责的 ChatAgent,每个 Agent 都有自己的系统消息和潜在的工具。
工作节点(Worker Agents)的定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 1. 研究员 Agent:负责信息搜索
researcher_agent = ChatAgent(
system_message=BaseMessage.make_assistant_message(
role_name="旅游信息研究员",
content="你是一个专业的旅游信息研究员,精通网络搜索。你的职责是准确、全面地收集指定目的地的景点、美食、交通和住宿信息,并提供给规划师。你会使用搜索工具来获取最新和最准确的数据。"
),
model=model,
tools=[SearchToolkit().search_duckduckgo] # 赋予搜索能力
)

# 2. 规划师 Agent:负责行程规划
planner_agent = ChatAgent(
system_message=BaseMessage.make_assistant_message(
role_name="高级旅游规划师",
content="你是一位经验丰富的高级旅游规划师。你的职责是根据研究员提供的信息和用户的具体需求,制定一份合理、详细且富有吸引力的旅游行程。你需要考虑时间安排、交通便利性、景点特色和用户体验。"
),
model=model
)

# 3. 评审员 Agent:负责评估和优化
reviewer_agent = ChatAgent(
system_message=BaseMessage.make_assistant_message(
role_name="资深旅行评论员",
content="你是一位眼光独到的资深旅行评论员。你的职责是像真正的旅行者一样,从实用性、趣味性、性价比和潜在问题等角度,严格评审规划师提供的旅游行程,并提出建设性的改进意见,确保行程质量。"
),
model=model
)

print("✅ 所有工作节点(研究员、规划师、评审员)已定义。")

本部分代码可以采用Tools实时从网站调取最新的旅游相关信息,以提高研究院代理的推荐精准性并保持最新信息。
但是,由于存在“多个搜索任务同时执行,短时间内发送了太多请求,触发了DuckDuckGo 搜索速率限制”问题,最终导致研究员代理无法获取实时的东京旅游信息的问题。
因此我们进行了进一步的版本改进:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#--------------------------------------------------
# 定义工作节点 (不使用搜索工具,避免速率限制)
#--------------------------------------------------

# 1. 研究员 Agent:使用内置知识提供信息
researcher_agent = ChatAgent(
system_message=BaseMessage.make_assistant_message(
role_name="东京旅游专家",
content="""你是一位资深的东京旅游专家,拥有丰富的东京旅游知识。你熟悉东京的热门景点、特色美食、交通方式和购物场所。
你的职责是基于你的专业知识,为游客提供准确、实用的东京旅游信息,包括:
- 融合现代与传统的热门景点
- 特色美食推荐和餐厅位置
- 便捷的交通方式和路线
- 适合购物的区域和商场
请提供详细、实用的建议,不需要进行网络搜索。"""
),
model=model
)

# 2. 规划师 Agent:负责行程规划
planner_agent = ChatAgent(
system_message=BaseMessage.make_assistant_message(
role_name="高级旅游规划师",
content="""你是一位经验丰富的高级旅游规划师,专门制定东京旅游行程。
你的职责是根据提供的信息和用户需求,制定合理、详细且富有吸引力的旅游行程。
你需要考虑:
- 时间安排的合理性
- 交通便利性和路线优化
- 景点的特色和游客体验
- 餐饮和购物的平衡安排
- 现代与传统文化的结合体验"""
),
model=model
)

# 3. 评审员 Agent:负责评估和优化
reviewer_agent = ChatAgent(
system_message=BaseMessage.make_assistant_message(
role_name="资深旅行评论员",
content="""你是一位眼光独到的资深旅行评论员,专门评估旅游行程质量。
你的职责是从真正旅行者的角度,严格评审旅游行程,并提出建设性改进意见。
评估维度包括:
- 实用性:交通是否便利,时间安排是否合理
- 趣味性:景点是否有吸引力,体验是否丰富
- 性价比:费用预算是否合理
- 潜在问题:可能遇到的困难和解决方案
- 文化体验:是否能深入了解日本文化"""
),
model=model
)

print("✅ 所有工作节点已定义(无搜索工具依赖)")

在这个优化版本中,我们为每个智能体赋予了更明确、更专业的职责,并移除了对外部搜索工具的依赖,让它们专注于利用自身的“知识库”来提供信息和执行任务。

Workforce 实例的创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#--------------------------------------------------
# 创建简化的 Workforce 实例
#--------------------------------------------------

# 创建协调器 Agent
coordinator_agent = ChatAgent(
system_message=BaseMessage.make_assistant_message(
role_name="工作组协调员",
content="你是一个高效的工作组协调员,负责协调旅游规划团队的工作。你需要合理分配任务,确保工作流程顺畅,最终产出高质量的旅游行程规划。"
),
model=model
)

# 创建任务代理 Agent
from camel.toolkits import TaskPlanningToolkit
task_agent = ChatAgent(
system_message=BaseMessage.make_assistant_message(
role_name="任务规划专家",
content="你是一个专业的任务规划专家,负责将复杂的旅游规划任务分解为具体的子任务。你擅长分析任务需求,识别关键步骤,并合理安排任务执行顺序。"
),
model=model,
tools=TaskPlanningToolkit().get_tools()
)

# 创建 Workforce 实例(完整版本)
travel_workforce = Workforce(
description="东京旅游行程规划与评估工作组",
coordinator_agent=coordinator_agent,
task_agent=task_agent
)

我们创建了一个名为 travel_workforce 的 Workforce 实例,其描述为“东京旅游行程规划与评估工作组”,清晰地概括了整个团队的职能。

1
2
3
明确的协调器 (Coordinator Agent):这次我们单独创建了一个 coordinator_agent,并为其分配了“工作组协调员”的角色,强调其负责任务分配和流程顺畅的核心职责。

明确的任务代理 (Task Agent):我们也单独创建了 task_agent,赋予其“任务规划专家”的角色,并为其配备了 TaskPlanningToolkit,使其更擅长将复杂任务分解为可执行的子任务。

工作节点的添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 添加工作节点
travel_workforce.add_single_agent_worker(
"提供东京的景点、美食和交通专业知识",
worker=researcher_agent
).add_single_agent_worker(
"制定详细的东京3日旅游行程",
worker=planner_agent
).add_single_agent_worker(
"评估旅游行程并提出改进建议",
worker=reviewer_agent
)

print("✅ Workforce 实例已创建并添加所有工作节点")

使用 add_single_agent_worker() 方法,将前面定义的“东京旅游专家”、“高级旅游规划师”和“资深旅行评论员”作为独立的工人节点添加到 travel_workforce 中。每个节点都附带了简洁明了的职责描述,这是协调器进行任务分配的关键依据。

创建任务并启动 Workforce
最后,我们定义一个要交给 Workforce 处理的任务,并调用 process_task() 方法启动协作流程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#--------------------------------------------------
# 创建任务并启动
#--------------------------------------------------

tokyo_task = Task(
content="请为一位首次访问东京的游客规划一份详细的3日旅游行程。行程应包含热门景点、特色美食体验,并考虑交通便利性。",
additional_info={
"游客偏好": "希望体验东京的现代与传统结合,对购物和美食有兴趣",
"当前日期": "2025年7月17日",
"旅行天数": "3天",
"游客类型": "首次访问东京的游客",
"特殊要求": "避免过于紧凑的行程,注重文化体验"
},
id="tokyo_trip_plan_optimized"
)

print(f"\n🚀 开始处理优化任务: '{tokyo_task.content[:50]}...'")

try:
# 处理任务
processed_task = travel_workforce.process_task(tokyo_task)

print("\n" + "="*60)
print("📋 任务处理完成")
print("="*60)
print(f"任务ID: {processed_task.id}")
print(f"\n最终结果:\n{processed_task.result}")
print("\n🎉 优化版 Workforce 演示成功!")

except Exception as e:
print(f"\n❌ 任务处理出现错误: {str(e)}")
print("这可能是由于模型配置或网络问题导致的")

让我们看看最终运行效果如何吧!:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
PS D:\Camel_Test_Project> & D:/Download/Python/py-3.11.9/python.exe d:/Camel_Test_Project/test_Workforce_optimized.py
🔧 正在创建优化版本的 Workforce...
✅ 所有工作节点已定义(无搜索工具依赖)
✅ Workforce 实例已创建并添加所有工作节点

🚀 开始处理优化任务: '请为一位首次访问东京的游客规划一份详细的3日旅游行程。行程应包含热门景点、特色美 食体验,并考虑交通便...'
Worker node a6766c80-35c1-4049-a379-70e3f09aa193 (提供东京的景点、美食和交通专业知识) get task tokyo_trip_plan_optimized.0: 收集东京的热门景点、特色美食和交通信息。
======
Reply from Worker node a6766c80-35c1-4049-a379-70e3f09aa193 (提供东京的景点、美食和交通专业知识):

对于希望体验东京现代与传统结合的首次访问游客,以下是一些建议:

**热门景点**:
- **浅草寺**:作为东京最古老的寺庙,浅草寺是体验日本传统文化的绝佳地点。附近还有雷门和仲见世商店街,可以购买到各种手工艺品和小吃。
- **明治神宫**:位于原宿,是一个供奉明治天皇及其妻子的地方。周围有大片森林,环境非常宁静。
- **东京塔/晴空塔**:这两个观景塔都是俯瞰东京全景的好地方,尤其是夜景非常美丽。
- **上野公园及博物馆区**:上野公园内有多个博物馆,如东京国立博物馆,非常适合喜欢艺术和历史的游客。

**特色美食**:
- **寿司**:银座的‘すきやばし次郎’(Sukiyabashi Jiro)是世界著名的寿司店,但价格昂贵,可以尝试其他平价但同样美味的寿司店,如‘築地場外市場’(Tsukiji Outer Market)。
- **拉面**:池袋的‘ラーメンストリート’(Ramen Street)汇集了多家拉面店,可以尝试点不同风味的拉面。
- **烤肉**:新宿的‘焼肉きんぐ’(Yakiniku King)提供自助式的烤肉,性价比高,适合家庭或朋友聚餐。

**交通信息**:
- **地铁**:东京地铁网络发达,覆盖主要旅游景点。建议购买一日券或多日券以节省费用。
- **巴士**:观光巴士线路连接了主要的旅游景点,车上有中文解说,适合外国游客。
- **出租车**:虽然价格较高,但在不熟悉地铁系统时,可以考虑使用。
- **步行**:部分景点之间距离较近,如浅草寺和上野公园,可以选择步行游览。

以上建议希望能帮助您在东京度过一个愉快的文化体验之旅。
======
🎯 Task tokyo_trip_plan_optimized.0 completed successfully.
Worker node d444ab33-281a-4184-9e5e-0e92cfc108f9 (制定详细的东京3日旅游行程) get task tokyo_trip_plan_optimized.1: 基于收集的信息,设计一个结合现代与传统元素、适合购物和美食体验的3日旅游行程。
======
Reply from Worker node d444ab33-281a-4184-9e5e-0e92cfc108f9 (制定详细的东京3日旅游行程):

### 东京3日游行程安排

#### 第1天:浅草寺 - 仲见世商店街 - 上野公园及博物馆区
- **上午**:
- 9:00 - 11:00:参观浅草寺,感受日本的传统宗教文化和建筑。
- 11:00 - 12:00:漫步仲见世商店街,品尝当地小吃,购买手工艺品。
- **中午**:
- 12:00 - 13:00:在仲见世商店街附近的餐厅享用午餐,推荐尝试传统的日式料理。
- **下午**:
- 13:30 - 16:00:前往上野公园,参观东京国立博物馆,了解日本的历史和艺术。
- 16:00 - 17:30:在上野公园内散步,欣赏自然美景。
- **晚上**:
- 18:00 - 19:30:在上野站附近的居酒屋享用晚餐,体验日本的夜生活。

#### 第2天:明治神宫 - 原宿 - 表参道 - 池袋拉面街
- **上午**:
- 9:00 - 11:00:参观明治神宫,感受宁静的自然环境和传统神道教文化。
- **中午**:
- 11:30 - 12:30:在原宿的竹下通品尝街头小吃,如章鱼烧和可丽饼。
- **下午**:
- 13:00 - 15:00:游览表参道,享受时尚购物体验,参观高端品牌店和设计师精品店。
- 15:30 - 17:00:前往池袋拉面街,尝试不同风味的拉面。
- **晚上**:
- 18:00 - 19:30:在池袋的居酒屋享用晚餐,体验当地的餐饮文化。

#### 第3天:东京塔/晴空塔 - 银座 - 新宿烤肉
- **上午**:
- 9:00 - 11:00:参观东京塔或晴空塔,俯瞰东京全景,欣赏美丽的城市风光。
- **中午**:
- 11:30 - 12:30:在银座的築地場外市場享用寿司,品尝新鲜的海鲜。
- **下午**:
- 13:00 - 15:00:在银座购物,购买高端奢侈品和时尚商品。
- 15:30 - 17:00:自由活动时间,可在银座继续探索或休息。
- **晚上**:
- 18:00 - 19:30:在新宿的焼肉きんぐ享用自助烤肉,与家人或朋友共度美好时光。

### 交通建议
- **地铁**:建议购买三日券,方便快捷地到达各个景点。
- **步行**:部分景点之间距离较近,如浅草寺和上野公园,可以选择步行游览。
- **出租车**:在不熟悉地铁系统时,可以考虑使用出租车,尤其是在携带较多行李的情况下。

希望这个行程能为您的东京之旅带来美好的回忆!祝您旅途愉快!
======
🎯 Task tokyo_trip_plan_optimized.1 completed successfully.
Worker node ebcf8ea8-a047-434f-bb70-82ba9b0f8b92 (评估旅游行程并提出改进建议) get task tokyo_trip_plan_optimized.2: 评估设计的旅游行程,确保其满足游客的需求,包括避免过于紧凑的行程,注重文化体验。
======
Reply from Worker node ebcf8ea8-a047-434f-bb70-82ba9b0f8b92 (评估旅游行程并提出改进建议):

### 东京3日游行程评估报告

#### 实用性
- **交通**:行程中建议使用地铁三日券,这是非常实用的建议,因为东京地铁网络发达,覆盖主要旅游景点,可以节省时间和费用。
- **时间安排**:整体时间安排较为合理,避免了过于紧凑的行程,每个景点都有足够的时间进行参观和体验。

#### 趣味性
- **景点吸引力**:行程中包含了许多具有代表性的景点,如浅草寺、明治神宫、东京塔/晴空塔等,这些景点不仅 有历史文化价值,还能让游客感受到东京的现代都市魅力。
- **体验丰富**:除了参观景点,还安排了购物、美食体验,如在仲见世商店街品尝小吃,在築地場外市場享用寿司,在池袋拉面街尝试不同风味的拉面,以及在新宿的焼肉きんぐ享用自助烤肉,这些都能让游客全方位体验东京的魅力。

#### 性价比
- **费用预算**:建议购买地铁三日券,这是一个经济实惠的选择。此外,行程中推荐了一些性价比高的美食地点,如築地場外市場和池袋拉面街,这有助于控制旅行成本。

#### 潜在问题
- **语言障碍**:对于不熟悉日语的外国游客,可能会在点餐和购物时遇到困难。建议提前下载翻译应用,或者选择有英文菜单和服务的餐厅。
- **天气变化**:东京的天气多变,特别是在夏季,建议游客随身携带雨具,以防突然下雨。

#### 文化体验
- **深入体验**:行程中安排了多个具有文化特色的景点,如浅草寺、明治神宫和东京国立博物馆,这些地方可以让游客深入了解日本的历史和文化。
- **互动体验**:建议在浅草寺和明治神宫增加一些互动环节,如参加祈福仪式或体验传统茶道,这样可以进一步增强文化体验。

总体来说,这个行程设计得非常好,既兼顾了实用性,又提供了丰富的文化体验。希望这些建议能帮助游客更好地享受东京之旅。
======
🎯 Task tokyo_trip_plan_optimized.2 completed successfully.

============================================================
📋 任务处理完成
============================================================
任务ID: tokyo_trip_plan_optimized

🎉 Workforce 演示成功!

以及另一个版本的不同输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
PS D:\Camel_Test_Project> & D:/Download/Python/py-3.11.9/python.exe d:/Camel_Test_Project/test_Workforce_optimized.py
🔧 正在创建优化版本的 Workforce...
✅ 所有工作节点已定义(无搜索工具依赖)
✅ Workforce 实例已创建并添加所有工作节点

🚀 开始处理优化任务: '请为一位首次访问东京的游 客规划一份详细的3日旅游行程。行程应包含热门景点、特色美食体验,并考虑交通便...'
Worker node 39687a9c-f0d1-4cd6-98d9-f71b751d4bde (提供东京的景点、美食和交通专业知识) get task tokyo_trip_plan_optimized.0: 研究东京的热门景 点、特色美食和交通方式,以满足游客对现代与传统 结合的体验需求。
======
Reply from Worker node 39687a9c-f0d1-4cd6-98d9-f71b751d4bde (提供东京的景点、美食和交通专业知 识):

为了满足您对东京现代与传统结合的体验需求,我为 您规划了为期三天的行程。第一天:上野公园和阿美 横丁,您可以在这里感受到浓厚的传统日本文化氛围 ,同时也能品尝到各种地道的日本小吃。第二天:浅 草寺和雷门,这是东京最古老的寺庙之一,旁边还有 许多传统手工艺品店,之后可以前往附近的东京晴空 塔,体验现代东京的壮观景象。第三天:原宿和表参 道,这里是东京时尚潮流的发源地,有许多独特的商 店和咖啡馆,非常适合购物和拍照。关于交通方式, 建议购买一日券或三日券乘坐地铁,这样既方便又经 济。如果您想体验更多当地生活,也可以选择租用自 行车。至于美食,推荐您尝试寿司、拉面和天妇罗, 这些都可以在上述提到的地方找到。希望这些建议能 帮助您度过一个愉快的东京之旅。
======
🎯 Task tokyo_trip_plan_optimized.0 completed successfully.
Worker node d72e4f78-769b-406d-bacc-cc4b230711b5 (制定详细的东京3日旅游行程) get task tokyo_trip_plan_optimized.1: 基于研究结果,制定一个平衡的3日旅游行程,确保行程不过于紧凑,同时注重文化体验。
======
Reply from Worker node d72e4f78-769b-406d-bacc-cc4b230711b5 (制定详细的东京3日旅游行程):

为了满足您对东京现代与传统结合的体验需求,我为 您规划了为期三天的平衡行程。第一天:上午参观上 野公园,感受浓厚的传统日本文化氛围,中午在阿美 横丁品尝各种地道的日本小吃;下午自由活动,可以 选择逛逛附近的博物馆或商店。第二天:上午游览浅 草寺和雷门,了解东京的历史文化;中午在附近品尝 传统的日式料理;下午前往东京晴空塔,体验现代东 京的壮观景象。第三天:全天探索原宿和表参道,这 里是东京时尚潮流的发源地,有许多独特的商店和咖 啡馆,非常适合购物和拍照。关于交通方式,建议购 买三日券乘坐地铁,这样既方便又经济。希望这些建 议能帮助您度过一个愉快的东京之旅。
======
🎯 Task tokyo_trip_plan_optimized.1 completed successfully.
Worker node 3a796729-1774-43b5-b481-60504a509ded (评估旅游行程并提出改进建议) get task tokyo_trip_plan_optimized.2: 评估制定的旅游行程,提出 改进建议,确保行程符合游客的兴趣和特殊要求。
======
Reply from Worker node 3a796729-1774-43b5-b481-60504a509ded (评估旅游行程并提出改进建议):

根据您的需求,我已经评估了这个3天的东京旅游行程。实用性方面,行程中的交通方式建议购买三日券乘 坐地铁,非常便利且经济,同时也提供了租用自行车 的建议,增加了旅行的灵活性。趣味性方面,行程包 含了多个具有代表性的景点,如上野公园、浅草寺、 东京晴空塔等,能够充分体验东京的传统与现代结合 的魅力。此外,还特别提到了购物和美食的地点,符 合您的兴趣。性价比方面,整体行程安排合理,没有 过多的重复和浪费时间的环节,费用预算也相对合理 。潜在问题方面,需要注意的是东京晴空塔可能需要 提前预订门票,以免现场排队时间过长。此外,原宿 和表参道的购物区可能会比较拥挤,建议避开高峰时 段。文化体验方面,行程中安排了多个能够深入了解 日本文化的景点,如上野公园、浅草寺等,能够满足 您对文化体验的需求。总体来说,这是一个很好的行 程,但建议在出行前再次确认所有景点的开放时间和 门票预订情况,以确保行程顺利进行。
======
🎯 Task tokyo_trip_plan_optimized.2 completed successfully.

============================================================
📋 任务处理完成
============================================================
任务ID: tokyo_trip_plan_optimized

🎉Workforce 演示成功!

两个输出的版本在输出格式/行程规划的具体方面均有不同,但是都遵循“旅行专家推荐→旅游规划师规划→资深评论员审评”的三大步骤,且输出都在预期范围之内。

后续我又研究了一下,并创建一个既能使用搜索工具,又能避免速率限制问题的解决方案:
确保自动在搜索请求之间添加延迟(5秒),以避免触发 DuckDuckGo 的速率限制
并进行了一些其它改进优化工作:

我们主要看搜索部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#--------------------------------------------------
# 自定义搜索工具类,添加速率限制控制
#--------------------------------------------------

class RateLimitedSearchToolkit:
"""带速率限制的搜索工具包"""

def __init__(self, delay_seconds=3):
self.search_toolkit = SearchToolkit()
self.delay_seconds = delay_seconds
self.last_search_time = 0

def safe_search_duckduckgo(self, query: str, max_results: int = 5):
"""安全的搜索方法,包含速率限制"""
current_time = time.time()
time_since_last = current_time - self.last_search_time

if time_since_last < self.delay_seconds:
sleep_time = self.delay_seconds - time_since_last
print(f" 等待 {sleep_time:.1f} 秒以避免速率限制...")
time.sleep(sleep_time)

try:
result = self.search_toolkit.search_duckduckgo(query, max_results)
self.last_search_time = time.time()
print(f" 搜索成功: {query[:50]}...")
return result
except Exception as e:
print(f" 搜索失败: {str(e)}")
return f"搜索暂时不可用,请使用已有知识回答。错误: {str(e)}"

# 创建速率限制搜索工具实例
safe_search = RateLimitedSearchToolkit(delay_seconds=5)

#--------------------------------------------------
# 定义工作节点(带安全搜索功能)
#--------------------------------------------------

# 1. 研究员 Agent:使用安全搜索工具
researcher_agent = ChatAgent(
system_message=BaseMessage.make_assistant_message(
role_name="东京旅游信息研究员",
content="""你是一个专业的东京旅游信息研究员。你的职责是:
1. 使用搜索工具获取最新的东京旅游信息
2. 如果搜索不可用,使用你的专业知识提供信息
3. 重点关注:热门景点、特色美食、交通方式、购物场所
4. 特别注意现代与传统结合的地方
5. 提供实用、准确的旅游建议

搜索策略:
- 使用简洁的关键词避免复杂查询
- 如果遇到速率限制,依靠专业知识回答
- 优先提供2025年最新信息"""
),
model=model,
tools=[safe_search.safe_search_duckduckgo] # 使用安全搜索工具
)

# 2. 规划师 Agent
planner_agent = ChatAgent(
system_message=BaseMessage.make_assistant_message(
role_name="高级旅游规划师",
content="""你是一位经验丰富的东京旅游规划师。你的职责是:
1. 根据研究员提供的信息制定详细行程
2. 考虑交通便利性和时间安排
3. 平衡现代与传统文化体验
4. 安排合理的购物和美食时间
5. 确保行程适合首次访问东京的游客

规划原则:
- 每天不超过3-4个主要景点
- 合理安排休息时间
- 考虑地理位置的邻近性
- 包含详细的交通指南"""
),
model=model
)

# 3. 评审员 Agent
reviewer_agent = ChatAgent(
system_message=BaseMessage.make_assistant_message(
role_name="资深旅行评论员",
content="""你是一位资深的旅行评论员。你的职责是:
1. 从实际旅行者角度评估行程
2. 识别潜在问题和改进空间
3. 提供具体的优化建议
4. 确保行程的实用性和趣味性

评估维度:
- 时间安排是否合理
- 交通是否便利
- 费用预算是否适中
- 文化体验是否丰富
- 是否适合目标游客群体"""
),
model=model
)

主要改变以上信息,那么让我们来再看看运行效果如何吧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
PS D:\Camel_Test_Project> & D:/Download/Python/py-3.11.9/python.exe d:/Camel_Test_Project/CAMEL_Workforce_with_search.py
🔧 正在创建带搜索功能的 Workforce...
D:\Download\Python\py-3.11.9\Lib\site-packages\camel\toolkits\function_tool.py:533: UserWarning: Parameter description is missing for the function 'search_linkup'. The parameter definition is {'enum': ['searchResults', 'sourcedAnswer', 'structured'], 'type': ['string', 'null']}. This may affect the quality of tool calling.
warnings.warn(
D:\Download\Python\py-3.11.9\Lib\site-packages\camel\toolkits\function_tool.py:533: UserWarning: Parameter description is missing for the function 'search_alibaba_tongxiao'. The parameter definition is {'enum': ['OneDay', 'OneWeek', 'OneMonth', 'OneYear', 'NoLimit'], 'type': ['string', 'null']}. This may affect the quality of tool calling.
warnings.warn(
D:\Download\Python\py-3.11.9\Lib\site-packages\camel\toolkits\function_tool.py:533: UserWarning: Parameter description is missing for the function 'search_alibaba_tongxiao'. The parameter definition is {'anyOf': [{'enum': ['finance', 'law', 'medical', 'internet', 'tax', 'news_province', 'news_center'], 'type': 'string'}, {'type': 'null'}], 'type': ['null']}. This may affect the quality of tool calling.
warnings.warn(
D:\Download\Python\py-3.11.9\Lib\site-packages\camel\toolkits\function_tool.py:533: UserWarning: Parameter description is missing for the function 'safe_search_duckduckgo'. The parameter definition is {'type': 'string'}. This may affect the quality of tool calling.
warnings.warn(
D:\Download\Python\py-3.11.9\Lib\site-packages\camel\toolkits\function_tool.py:533: UserWarning: Parameter description is missing for the function 'safe_search_duckduckgo'. The parameter definition is {'type': ['integer', 'null']}. This may affect the quality of tool calling.
warnings.warn(
✅ 所有工作节点已定义(包含安全搜索功能)
✅ Workforce 实例已创建(包含搜索功能)

🚀 开始处理带搜索功能的任务...
任务: 请为一位首次访问东京的游客规划一份详细的3日旅游行程。需要包含热门景点、特色美食体验,并考虑交通 便利性。请获取2025年最新的旅游信息。...

⏳ 正在协调多智能体工作...
Worker node 1370eb13-4f2f-4a47-99f0-cbbbcd2fb50b (负责搜索和提供东京最新的旅游信息,包括景点、美食、交通等) get task tokyo_trip_plan_with_search.0: Subtask 1 (1370eb13-4f2f-4a47-99f0-cbbbcd2fb50b): 负责搜索和提供东京最新的旅游信息,包括景点、美食、交通等
✅ 搜索成功: 东京 最新 旅游信息 热门景点 特色美食 交通方式 购物场所 2025...
======
Reply from Worker node 1370eb13-4f2f-4a47-99f0-cbbbcd2fb50b (负责搜索和提供东京最新的旅游信息,包括景 点、美食、交通等):

根据我的知识,以下是对您计划的东京之旅的一些建议,这些信息尽可能地反映了2025年的最新情况,尽管我无法即时检索到最新数据,但这些推荐仍然具有时效性。

**热门景点**
- **浅草寺**:作为东京最古老的佛教寺庙,浅草寺不仅是一个重要的文化遗址,也是感受日本传统文化的好地方。从雷门进入,可以欣赏到传统的日式建筑和热闹的商店街。
- **东京晴空塔**(Tokyo Skytree):这座634米高的电波塔不仅是东京的新地标,而且从塔顶可以俯瞰整个东京市区的景色。它很好地代表了东京的现代一面。
- **明治神宫**:位于原宿附近的明治神宫是一个供奉明治天皇和昭宪皇后的神社。这里环境宁静,是体验日本传统宗教仪式的好去处。
- **上野公园及周边**:上野公园是东京著名的赏樱地点,周围有许多博物馆,如东京国立博物馆,适合喜欢艺术和历史的游客。

**特色美食**
- **寿司**:在筑地市场或银座区尝试新鲜的寿司是许多游客的首选。虽然筑地市场已经迁移到了丰洲,但是该区域依然有许多优质的寿司店。
- **拉面**:东京有很多不同风味的拉面店,比如一兰拉面、Ichiran等,提供了多种选择来满足不同的口味。
- **居酒屋**:体验日本的居酒屋文化,品尝各种小菜和日本酒,是一种非常地道的享受方式。

**交通方式**
- **地铁/电车**:东京的公共交通系统发达且准时,是游览城市最方便的方式。购买一日券或多日券可以节省费用 。
- **出租车**:对于不熟悉路线或者携带大量行李的游客来说,乘坐出租车也是一种不错的选择,不过价格相对较高。

**购物场所**
- **涩谷109**:这里是年轻人时尚潮流的中心,可以找到各种流行的服装品牌。
- **银座**:银座区以其高端的购物环境著称,无论是国际奢侈品牌还是日本本土品牌,在这里都能找到。
- **秋叶原**:对于动漫迷和技术爱好者来说,秋叶原是必去之地,这里有众多的电器店和动漫周边产品店。

**现代与传统结合的地方**
- **表参道**:这条街道不仅有高级时装店和设计感强烈的建筑,还保留了一些传统的日式茶馆和咖啡厅,体现了东京独特的城市风貌。
- **六本木新城**:集美术馆、电影院、餐厅于一体的综合设施,周围还有美丽的绿地和公园,展现了东京现代都市生活的另一面。

希望这些建议能帮助您规划一个轻松愉快的东京之旅!如果您有任何特定的需求或问题,欢迎随时向我咨询。
======
Task tokyo_trip_plan_with_search.0 completed successfully.
Worker node 9ba18c5a-012a-4200-994d-fee79899706d (负责制定详细的东京3日旅游行程规划) get task tokyo_trip_plan_with_search.1: Subtask 2 (9ba18c5a-012a-4200-994d-fee79899706d): 根据收集到的信息,制定详细的 东京3日旅游行程规划
======
Reply from Worker node 9ba18c5a-012a-4200-994d-fee79899706d (负责制定详细的东京3日旅游行程规划):

根据您的需求,以下是为您精心规划的东京三日游行程,旨在平衡现代与传统文化体验,并确保您有足够的时间享受购物和美食。

### 第一天:传统文化与美食探索
- **上午**:
- **浅草寺**:从雷门进入,参观这座历史悠久的寺庙,体验日本的传统氛围。(建议停留1-2小时)
- **仲见世商店街**:在浅草寺附近逛逛,品尝一些传统的日本小吃,如章鱼烧、抹茶甜点等。(建议停留1小时 )
- **中午**:
- 在浅草地区尝试一家寿司店,享用新鲜美味的寿司。(建议停留1小时)
- **下午**:
- **上野公园**:参观上野公园,欣赏美丽的自然风光,如果时间允许,可以参观东京国立博物馆,了解日本的历史和文化。(建议停留2-3小时)
- **晚上**:
- **秋叶原**:前往秋叶原,体验日本的动漫文化和电子产品市场。这里有许多商店出售动漫周边产品和最新的电子产品。(建议停留2小时)
- **居酒屋**:在秋叶原或上野附近找一家居酒屋,品尝日本的小菜和清酒,感受日本的夜生活。(建议停留1-2 小时)

### 第二天:现代都市体验
- **上午**:
- **东京晴空塔**:前往东京晴空塔,乘坐电梯到达观景台,俯瞰东京市区的美景。(建议停留1-2小时)
- **中午**:
- 在晴空塔附近的餐厅享用午餐,尝试一些现代日本料理。(建议停留1小时)
- **下午**:
- **表参道**:前往表参道,参观时尚的商店和设计感强烈的建筑,体验东京的现代都市风貌。(建议停留2-3小 时)
- **晚上**:
- **六本木新城**:前往六本木新城,参观美术馆、电影院和餐厅,享受东京的夜生活。(建议停留2-3小时)

### 第三天:购物与休闲
- **上午**:
- **涩谷109**:前往涩谷109,这里是年轻人的时尚潮流中心,可以找到各种流行的服装品牌。(建议停留1-2小 时)
- **中午**:
- 在涩谷的餐馆享用午餐,尝试一些当地的特色美食。(建议停留1小时)
- **下午**:
- **明治神宫**:前往明治神宫,参观这个宁静的神社,体验日本的传统宗教仪式。(建议停留1-2小时)
- **晚上**:
- **银座**:前往银座,这里是高端购物的天堂,可以找到国际奢侈品牌和日本本土品牌。(建议停留2-3小时)
- **银座的高级餐厅**:在银座的高级餐厅享用晚餐,结束美好的东京之旅。(建议停留1-2小时)

### 交通指南
- **地铁/电车**:东京的公共交通系统发达且准时,建议购买一日券或多日券以节省费用。使用Google Maps或Yahoo! Japan Map可以方便地查询路线和换乘信息。
- **出租车**:对于不熟悉路线或者携带大量行李的游客,可以选择乘坐出租车,但价格相对较高。

希望这份行程能帮助您度过一个愉快的东京之旅!如果有任何问题,请随时联系我。
======
Task tokyo_trip_plan_with_search.1 completed successfully.
Worker node 1f0da1fb-fc98-4c70-9dc2-535058fa7990 (负责评估行程质量并提出优化建议) get task tokyo_trip_plan_with_search.2: Subtask 3 (1f0da1fb-fc98-4c70-9dc2-535058fa7990): 评估行程质量并提出优化建议
======
Reply from Worker node 1f0da1fb-fc98-4c70-9dc2-535058fa7990 (负责评估行程质量并提出优化建议):

根据提供的行程规划,以下是对东京三日游行程的评估和优化建议:

### 评估
- **时间安排是否合理**:整体时间安排较为合理,每个活动的时间分配适当,没有过于紧凑的情况。每天的活动量适中,游客可以在充分体验每个景点的同时,也有时间休息。
- **交通是否便利**:东京的公共交通系统非常发达,行程中提到的地铁和电车是最便捷的交通方式。建议购买一日券或多日券,这样可以节省交通费用并减少购票时间。
- **费用预算是否适中**:中等预算下,行程中的景点和活动选择较为合适。特别是免费或低成本的景点(如浅草寺、上野公园、明治神宫等),以及一些经济实惠的餐饮选择(如居酒屋、寿司店等),都符合中等预算的要求。
- **文化体验是否丰富**:行程涵盖了丰富的文化体验,既有传统的寺庙和神社(如浅草寺、明治神宫),也有现代的城市景观(如东京晴空塔、表参道)。此外,还包括了购物和美食体验,能够满足不同兴趣的游客。
- **是否适合目标游客群体**:行程非常适合首次访问东京的游客,尤其是对购物和美食感兴趣的游客。行程中的景点和活动既展示了东京的传统文化,又体现了其现代都市风貌。

### 优化建议
1. **增加休息时间**:虽然整体时间安排合理,但在每个活动之间可以适当增加一些自由时间,让游客可以根据自 己的节奏调整行程。
2. **提供具体交通信息**:建议在行程中提供具体的交通线路和换乘信息,特别是在转乘频繁的情况下,可以帮助 游客更高效地到达目的地。
3. **增加夜间活动选项**:虽然行程中已经包含了一些夜间活动(如居酒屋、六本木新城),但可以考虑增加更多 夜间活动选项,如夜游东京湾、观看歌舞伎表演等,以丰富夜生活体验。
4. **推荐经济实惠的住宿**:对于中等预算的游客,可以推荐一些经济实惠且位置便利的住宿选择,如胶囊旅馆、 商务酒店等。
5. **提供备用方案**:考虑到天气等因素可能影响某些户外活动,建议为每个主要活动提供一个备用方案,以确保 行程顺利进行。

希望这些建议能帮助您进一步完善东京三日游的行程规划,确保游客有一个愉快的旅行体验。
======
Task tokyo_trip_plan_with_search.2 completed successfully.

================================================================================
任务处理完成
================================================================================
任务ID: tokyo_trip_plan_with_search

🎉Workforce 演示成功!

提示:如果搜索遇到速率限制,系统会自动使用内置知识库

我们可以看到,目前搜索工具正常调用并且收集网页端最新数据信息,以确保当前旅游规划是最符合当前时间的。