202501软件工程第二次团队作业
智能天气出行助手 —— 基于MCP协议的自然语言交互系统
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13559 |
这个作业的目标 | 构建一个具备自然语言理解与工具执行能力的智能体,能够通过语言交互建议生成 |
小组成员与学号 | 052303140陈琨辉 102301614肖铭昊 102301619梅宇杰 102301616 王汉森 102301615吴同堃 |
项目源代码已托管于:
👉 https://github.com/sureyoung86-byte/smilefacetiger/tree/main/agent/weather-agent
仓库包含:
client.py
智能体客户端模块server.py
服务端工具模块index.html
前端展示文件README.md
与运行说明
一、项目概述
本项目旨在实现一个具备自然语言理解与任务执行能力的“智能天气出行助手”。系统可通过自然语言输入理解用户意图,自动调用天气服务API获取实时与未来天气信息,并生成针对性的出行建议,并且可以进行相关于气象数据调用的其他智能回复。项目基于 Model Context Protocol (MCP) 构建,整合了大语言模型接口、异步服务通信与可视化前端展示。
主要功能包括:
- 自然语言天气查询(支持多轮会话与上下文记忆)
- 调用高德地图天气API以获取实时和预测数据
- 自动生成结构化出行建议
- 提供简洁网页界面用于展示结果
- 调用DeepseekAPI接口处理自然语言
二、系统需求描述
模块 | 功能描述 | 输入 | 输出 |
---|---|---|---|
对话模块 | 解析用户自然语言并识别意图 | 用户语句 | 工具调用或直接回答 |
工具调用模块 (MCP Client) | 调用天气服务端工具函数 | 查询文本 | JSON 格式天气数据 |
天气服务模块 (MCP Server) | 连接高德地图API并返回实时或预测数据 | 城市名称 | 天气信息(JSON) |
出行建议模块 | 根据温度、天气、湿度生成建议 | 天气数据 | 文本建议 |
智能回复模块 | 根据多轮记忆来以及自然语言回复 | 自然语言 | 文本建议 |
前端展示模块 | 图形化展示天气与建议 | 城市输入 | 交互式网页 |
三、系统架构与业务流程
3.1 系统整体结构
系统分为三个主要层次:前端界面层、智能体核心层、数据服务层。
数据流与指令流通过 MCP 协议交互。
3.2 工作流程说明
- 用户输入自然语言指令(如“明天上海天气如何”);
client.py
将输入发送至语言模型以识别意图;- 系统自动匹配相应的工具(
get_weather
或get_forecast
); server.py
向高德API发送HTTP请求并返回结构化数据;- 智能体根据返回数据生成解释性文本和建议;
- 结果在终端及网页界面中展示。
四、系统实现说明
4.1 智能体核心 (client.py)
该模块通过 MCP 协议 建立客户端会话,管理与服务器端的通信,并使用 DeepSeek 模型完成意图识别与结果生成。其主要功能包括:
- 初始化异步通信环境;
- 维护多轮对话上下文;
- 根据模型输出调用相应工具;
- 对API结果进行二次语言生成。
关键代码结构:
if tool_calls:
tool_result = await self.session.call_tool(name, args)
self.context.append({"role": "tool", "content": tool_result})
ds_follow = self.client.chat.completions.create(model=self.model, messages=self.context)
4.2 天气服务端 (server.py)
该模块基于 FastMCP 框架 实现异步服务端,负责天气数据查询与格式化输出。核心功能:
- 实现
get_weather(location: str)
获取实时天气; - 实现
get_forecast(location: str)
获取未来3-4天的天气预报; - 自动匹配城市中文名称、拼音及别称;
- 根据天气类型添加对应表情符号以增强可读性。
关键代码结构:
@mcp.tool()
async def get_weather(location: str) -> str:
url = f"{AMAP_BASE_URL}/weather/weatherInfo?key={AMAP_API_KEY}&city={adcode}&extensions=base"
return json.dumps(weather_data, ensure_ascii=False, indent=2)
4.3 前端展示模块 (index.html)
前端使用 HTML + JavaScript 实现天气查询与结果展示。用户可输入城市名称,系统自动显示温度、湿度、风速及天气状况,并附带出行建议。
主要结构示例:
<input type="text" id="city-input" placeholder="输入城市名称">
<button id="search-btn">查看天气</button>
<div id="chat-box"><p><em>系统:</em>请输入城市进行查询</p></div>
五、系统运行与测试
5.1 运行方式
python client.py server.py
5.1 示例终端输出
六、小组分工
成员 | 职责 | 主要工作 |
---|---|---|
陈琨辉 | 核心算法与通信 | MCP 客户端实现、模型集成与对话管理 |
肖铭昊 | 服务端开发 | FastMCP 工具封装与高德API集成 |
梅宇杰 | 前端开发 | 页面结构与交互逻辑设计 |
王汉森 | 测试与文档 | 功能测试、日志与配置校验 |
吴同堃 | 报告与演示 | 文档撰写,markdown制作 |
七、成员心得体会
陈琨辉
通过在本项目中负责智能体核心与通信模块的设计,我深入理解了 MCP 协议在智能体体系中的作用机制。在构建客户端与模型交互逻辑的过程中,如何保持上下文一致性与响应时效性成为关键问题。
我体会到,一个稳定的智能体不仅依赖语言模型性能,更依赖 合理的消息管理、异步机制与错误恢复策略。这些设计理念为后续复杂系统的开发奠定了基础。
肖铭昊
通过FastMCP封装高德API的实践,我深刻认识到优秀封装的核心在于完成从技术接口到业务能力的转变。
关键要平衡易用性与灵活性,通过参数精炼、数据清洗和标准化错误处理,将复杂API转化为稳定可靠的服务。
同时,重试、缓存等机制保障了服务韧性,让业务开发更高效专注。
梅宇杰
在前端开发中,我重点关注了 用户交互体验与信息可视化。通过 HTML 与 JavaScript 的集成,实现了天气数据的实时展示与动态更新。
我认识到在智能系统设计中,数据展示逻辑与用户心理模型的匹配同样重要。通过调整交互流程、优化视觉层次,使系统在功能与易用性之间达到平衡。
这次开发强化了我对前后端协同设计的系统理解。
王汉森
在测试与调试阶段,我负责验证系统各模块的稳定性与一致性。
通过设计边界测试用例与异常捕获机制,我发现问题主要集中在 API延迟与环境变量配置。
我通过日志记录与分层验证,逐步完善了系统的健壮性。
这让我认识到,在工程实践中,测试不仅是发现问题,更是系统质量保障的核心环节。
吴同堃
在项目总结与展示准备中,我学习了如何将技术成果 转化为结构化、可传播的工程文档。
通过梳理系统架构与实验过程,我更加理解了团队协作的价值:不同模块间的接口标准化是项目顺利集成的关键。
此外,撰写报告的过程也让我意识到,工程思维不仅在代码实现中体现,更体现在问题抽象与表达方式上。
八、参考与学习资源
posted on 2025-10-23 21:23 SureyoungOuO 阅读(9) 评论(0) 收藏 举报