基于 OpenAgents 的多智能体旅游助手实战
在大模型与智能体(Agent)技术快速发展的今天,构建一个能理解需求、协调任务、调用工具的 AI 助手已不再是遥不可及的梦想。传统的聊天机器人往往只能被动回答问题,而现代智能体系统则具备'主动性'——它能拆解复杂目标、调用多个子模块、甚至与外部服务交互,从而完成端到端的任务。本文将带你从零开始,利用 OpenAgents 这一开源框架,搭建一个由多个专业智能体协同工作的本地旅游小助手。这个系统不仅能根据用户一句话生成完整的旅行计划、推荐个性化景点,还能逐步扩展至查询实时天气、预订酒店、规划交通等实用功能,真正实现'一句话开启智能旅行'。
本地启动智能体
要运行基于 OpenAgents 的智能体系统,首先需要启动其核心网络服务。该服务负责管理所有 Agent 的注册、通信和协作,是整个多智能体生态的'中枢神经系统'。
在终端中执行以下命令:
openagents network start
首次运行时,OpenAgents 会自动打开浏览器,引导你完成初始化配置(如设置管理员密码、选择模型类型等)。配置完成后,服务将在后台持续运行,并监听默认端口。
✅ 启动成功的界面如下所示:

接下来,我们需要启动具体的智能体实例。以 von.yaml 为例,这是一个基于智谱 GLM-4.7 模型的中文助手配置文件。由于 OpenAgents 兼容 OpenAI 协议,我们只需将智谱的 API 地址和密钥通过环境变量传入即可。
在 PowerShell 中执行以下命令(请务必将 "你的 API-Key" 替换为你在智谱 AI 开放平台申请的实际密钥):
$env:PYTHONUTF8 = "1"
$env:PYTHONIOENCODING = "utf-8"
$env:OPENAI_BASE_URL = "https://open.bigmodel.cn/api/paas/v4"
$env:OPENAI_API_KEY = "你的 API-Key"
openagents agent start agents/von.yaml
💡 关键提示:YAML 配置文件中请勿包含任何中文字符(包括注释),即使文件保存为 UTF-8 编码,也可能因底层解析器兼容性问题导致启动失败。建议全程使用英文编写配置。
若终端输出类似 Agent 'von' is running on http://localhost:8080 的信息,且无报错,则说明智能体已成功加载并接入网络:

此时,该智能体已准备好接收来自 Web 控制台或其他 Agent 的消息请求。
通过 Web 平台进行测试
OpenAgents 提供了一个内置的 Web Studio 界面,用于可视化管理智能体、发送测试消息并查看响应。服务启动后,默认会跳转至控制台页面(通常为 http://localhost:8700/studio/):

点击 '管理员登录' 按钮:

输入你在首次配置 OpenAgents 网络服务时设置的管理员密码:

登录成功后,进入用户控制台主界面。这里会列出当前在线的所有智能体,并提供聊天窗口用于交互:

现在,你可以向 von 智能体发送一条中文消息,例如:'你好,你能帮我做什么?'如果一切配置正确,它将返回一段符合预设行为规范的友好回复:

这标志着从模型调用、网络通信到前端交互的完整链路已打通。
开发多 Agent 旅游小助手
单个智能体虽能完成简单问答,但面对'规划一次三天两晚的杭州旅行'这类复杂任务时,往往力不从心。为此,我们采用 多智能体协作架构(Multi-Agent Collaboration) ——将大任务拆解为多个子任务,由不同专业 Agent 分工处理,再由主控 Agent 整合结果。这种设计不仅提升系统鲁棒性,也便于后续功能扩展。
行程规划智能体
该 Agent 专注于时间管理与日程安排。当接收到'帮我安排三天行程'类指令时,它会根据目的地、天数、用户偏好(如'喜欢自然风光'或'想体验夜市')生成结构化的每日计划,包括时间段、活动内容和建议停留时长。


实现方式:通过在 YAML 的 instruction 字段中明确角色职责和输出格式,引导模型生成结构化文本。
景点推荐智能体
此 Agent 拥有丰富的旅游知识库,能结合地理位置、季节、人群热度等因素,推荐匹配度高的景点。例如,用户说'我想去人少但风景好的地方',它会优先推荐西湖周边的冷门古村落而非断桥。


优势:通过专用 Agent 隔离领域知识,避免主控逻辑臃肿,同时便于单独优化推荐算法。
天气查询智能体
理想情况下,该 Agent 应能调用天气 API(如和风天气、OpenWeather)获取未来几天的预报。然而,当前 OpenAgents 的 YAML 模式仅支持纯语言模型推理,无法直接发起 HTTP 请求或执行代码。
因此,在 YAML 配置下尝试天气查询会失败或返回模拟数据:

✅ 解决方案:OpenAgents 支持通过 Python 编写自定义 Agent 类。你可创建一个继承 BaseAgent 的模块,在 react() 方法中集成 requests 调用天气接口,并将结果注入对话上下文。这种方式虽需少量编码,但能解锁真正的'工具调用(Tool Calling)'能力。
主控小助手智能体
作为用户唯一交互入口,主控 Agent 扮演'指挥官'角色。它负责:
- 理解用户意图(如识别'规划旅行'是一个复合任务)
- 拆解子任务('需要行程 + 景点 + 天气')
- 依次调用对应专业 Agent
- 整合各子结果,生成连贯、自然的最终回复
例如,当用户输入:'帮我规划一个三天两晚的杭州旅行,包括景点和天气',主控 Agent 会内部协调其他三个模块,并返回一份整合报告:


🌟 这正是多智能体系统的魅力所在:每个 Agent 保持简单专注,整体却能完成复杂任务。