202501软件工程第二次团队作业

news/2025/10/23 21:24:33/文章来源:https://www.cnblogs.com/sureyoung/p/19161670

202501软件工程第二次团队作业

智能天气出行助手 —— 基于MCP协议的自然语言交互系统

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13559
这个作业的目标 构建一个具备自然语言理解与工具执行能力的智能体,能够通过语言交互建议生成
小组成员与学号 陈琨辉052303140 102301614肖铭昊 102301619梅宇杰 102301616 王汉森 102301615吴同堃

一、项目概述

本项目旨在实现一个具备自然语言理解与任务执行能力的“智能天气出行助手”。系统可通过自然语言输入理解用户意图,自动调用天气服务API获取实时与未来天气信息,并生成针对性的出行建议,并且可以进行相关于气象数据调用的其他智能回复。项目基于 Model Context Protocol (MCP) 构建,整合了大语言模型接口、异步服务通信与可视化前端展示。

主要功能包括:

  • 自然语言天气查询(支持多轮会话与上下文记忆)
  • 调用高德地图天气API以获取实时和预测数据
  • 自动生成结构化出行建议
  • 提供简洁网页界面用于展示结果
  • 调用DeepseekAPI接口处理自然语言

二、系统需求描述

模块 功能描述 输入 输出
对话模块 解析用户自然语言并识别意图 用户语句 工具调用或直接回答
工具调用模块 (MCP Client) 调用天气服务端工具函数 查询文本 JSON 格式天气数据
天气服务模块 (MCP Server) 连接高德地图API并返回实时或预测数据 城市名称 天气信息(JSON)
出行建议模块 根据温度、天气、湿度生成建议 天气数据 文本建议
智能回复模块 根据多轮记忆来以及自然语言回复 自然语言 文本建议
前端展示模块 图形化展示天气与建议 城市输入 交互式网页

三、系统架构与业务流程

3.1 系统整体结构

系统分为三个主要层次:前端界面层、智能体核心层、数据服务层
数据流与指令流通过 MCP 协议交互。

flowchart TDA[用户输入] --> B[client.py - 智能体核心]B --> C[DeepSeek 模型 - 意图识别]C --> D[MCP Server - server.py]D --> E[高德API - 天气数据获取]E --> F[返回JSON结果]F --> G[自然语言生成]G --> H[终端输出 / 前端展示]

3.2 工作流程说明

  1. 用户输入自然语言指令(如“明天上海天气如何”);
  2. client.py 将输入发送至语言模型以识别意图;
  3. 系统自动匹配相应的工具(get_weatherget_forecast);
  4. server.py 向高德API发送HTTP请求并返回结构化数据;
  5. 智能体根据返回数据生成解释性文本和建议;
  6. 结果在终端及网页界面中展示。

四、系统实现说明

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)

1


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)

屏幕截图 2025-10-23 205651

屏幕截图 2025-10-23 205915


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>

66B3487DCFB716DE114E7233E6BC02CD

D6AE7CB094730F3D2189457636939594

EEEA420141BE608BA894BC305CA4F517


五、系统运行与测试

5.1 运行方式

python client.py server.py
5.1 示例终端输出

080E3DE5DD45C644A57A45E91A70EF46

![2F90E03F4B744CD4E4A813A4A08CC70A](https://img2024.cnblogs.com/blog/3707390/202510/3707390-20251023210357251-1107850678.png)

六、GitHub 仓库

项目源代码已托管于:
👉 https://github.com/your-team/weather-travel-assistant

仓库包含:

  • client.py 智能体客户端模块
  • server.py 服务端工具模块
  • index.html 前端展示文件
  • README.md 与运行说明

七、小组分工

成员 职责 主要工作
陈琨辉 核心算法与通信 MCP 客户端实现、模型集成与对话管理
肖铭昊 服务端开发 FastMCP 工具封装与高德API集成
梅宇杰 前端开发 页面结构与交互逻辑设计
王汉森 测试与文档 功能测试、日志与配置校验
吴同堃 报告与演示 文档撰写,markdown制作

八、成员心得体会

陈琨辉

通过在本项目中负责智能体核心与通信模块的设计,我深入理解了 MCP 协议在智能体体系中的作用机制。在构建客户端与模型交互逻辑的过程中,如何保持上下文一致性与响应时效性成为关键问题。
我体会到,一个稳定的智能体不仅依赖语言模型性能,更依赖 合理的消息管理、异步机制与错误恢复策略。这些设计理念为后续复杂系统的开发奠定了基础。


肖铭昊

通过 FastMCP 封装高德 API 的实践,我深刻认识到优秀封装的核心在于完成 从技术接口到业务能力的转化
在实现过程中,我不断优化参数结构、进行数据清洗与标准化错误处理,使系统能够以最少的输入完成稳定响应。同时引入重试与缓存机制,提升了系统的鲁棒性与响应效率。
这次实践让我理解了“稳定的底层是上层创新的前提”这一原则。


梅宇杰

在前端开发中,我重点关注了 用户交互体验与信息可视化。通过 HTML 与 JavaScript 的集成,实现了天气数据的实时展示与动态更新。
我认识到在智能系统设计中,数据展示逻辑与用户心理模型的匹配同样重要。通过调整交互流程、优化视觉层次,使系统在功能与易用性之间达到平衡。
这次开发强化了我对前后端协同设计的系统理解。


王汉森

在测试与调试阶段,我负责验证系统各模块的稳定性与一致性。
通过设计边界测试用例与异常捕获机制,我发现问题主要集中在 API延迟与环境变量配置
我通过日志记录与分层验证,逐步完善了系统的健壮性。
这让我认识到,在工程实践中,测试不仅是发现问题,更是系统质量保障的核心环节


吴同堃

在项目总结与展示准备中,我学习了如何将技术成果 转化为结构化、可传播的工程文档
通过梳理系统架构与实验过程,我更加理解了团队协作的价值:不同模块间的接口标准化是项目顺利集成的关键。
此外,撰写报告的过程也让我意识到,工程思维不仅在代码实现中体现,更体现在问题抽象与表达方式上


九、参考与学习资源

  • OpenAI Model Context Protocol 官方文档
  • FastMCP 开发文档
  • 高德地图开放平台API指南
  • 动手学多智能体系统实战教程——Hello Agents

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/944685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

题解:P14174 【MX-X23-T4】卡常数

题目传送门 超级水题 , 谁都可以拿的经验 考察贪心 + 堆(最简单的用优先队列实现)题面 给定 $ n$ 个数组和每个数组的常数 \(x\) 和长度 \(l\) , 给定每个数组的 $a_i $ 、 \(b_i\) , 定义是可以实施 \(k\) 次把某个…

比赛题解 总结

1.[HNOI2003] 操作系统 思路 此题是一道大模拟,主要根据任务优先级来计算最后执行此任务的时间,此时我们可以进行分类讨论:当此任务的到达时间大于等于上一个未执行完任务的结束时间,上一个任务就一定能运行完,因…

解题报告-拯救计划(概率 DP)

拯救计划 题目背景 有一天,地球护卫队的 P 队长得知,邪恶的 Y 星球要向地球发起侵略。正义感责任感极强的小 P 怎么可能允许这类事情发生。为了小 W,同时也为了保卫地球,小 P 准备动员所有力量殊死一战,正当小 P …

解码Linux文件IO之库的制作与应用

程序编译的四个核心阶段 程序从源代码(.c/.cpp)到可执行文件,需经过预处理、编译、汇编、链接四个步骤,每个步骤生成不同中间文件,最终输出可执行程序。预处理作用:展开预处理指令(#include/#define/#if等)、删…

20251023 正睿二十连测

B 时间:看了题解后花了 \(30\) 多分钟吧。给定 \(n\) 对数 \((a_i, b_i)\) 以及 \(T\) 组询问,每组询问给定 \((x, y)\),问有多少对给定的数能通过对 \((x, y)\) 进行若干次以下两种操作得到?\((x, y) \leftarrow …

1019:浮点数向零舍入(分正负取整)

【题目描述】 输入一个单精度浮点数,将其向零舍入到整数。说明:向零舍入的含义是,正数向下舍入,负数向上舍入。提示:可以使用强制类型转换来实现。 【输入】 一个单精度浮点数。 【输出】 一个整数,即向零舍入到…

创建 SQL Server 数据库【通用】

use master go-- 如果存在这个数据库名称 ,否则删除 if exists(select * from sysdatabases where name = MyFirstDB) drop database MyFirstDB-- 创建数据库 create database MyFirstDB on primary (name=MyFirstDB_…

HNSW算法实战:用分层图索引替换k-NN暴力搜索

向量检索是整个RAG管道的一个重要的步骤,传统的暴力最近邻搜索因为计算成本太高,扩展性差等无法应对大规模的搜索。 HNSW(Hierarchical Navigable Small World,分层可导航小世界图)提供了一种对数时间复杂度的近似…

日志分析-IIS日志分析

日志分析-IIS日志分析 1.phpstudy-2018站点日志.(.log文件)所在路径,提供绝对路径 按照下列步骤找到 flag{C:\inetpub\logs\LogFiles\W3SVC2}2.系统web日志中状态码为200请求的数量是多少 将日志爬下来传到linux中 在…

Spring Boot 自动配置之 TaskExecutor - 实践

Spring Boot 自动配置之 TaskExecutor - 实践2025-10-23 21:05 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

二分图/忆re.

rt: 本文分两部分二分图 忆re.part 1 二分图 定义 我会告诉你我OIwiki没看懂吗? 其实就是有一张图,将它的点分为红点和蓝点,红点只能和蓝点相连,同理蓝点只能和红点相连,满足这个条件的图就是二分图。 形式上的…

编程与数学 03-009 Linux 操作系统应用 22_Linux 故障排除与问题克服

编程与数学 03-009 Linux 操作系统应用 22_Linux 故障排除与问题克服pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

《IDEA 2025长效采用配置指南:有效期配置至2099年实战之JetBrains全家桶有效》​

《IDEA 2025长效采用配置指南:有效期配置至2099年实战之JetBrains全家桶有效》​pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font…

如何制作PDF文件目录? - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

todesk远程到被控Mac后能看到画面,鼠标键盘执行无反应

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Visual Studio 插件 - 喝水提醒 - 指南

Visual Studio 插件 - 喝水提醒 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

10/23

状态图状态图通常是对反应型对象建模 活动图 活动图展示的是流程*构件图构件图有标志 构件图展示的是构件之间的 组织和依赖供接口和需接口 部署图--对物理方面建模的方法 部署图对实施方面进行建模 立方体需求建模、…

玛哈特十一辊矫平机:把金属板送进“11 次节拍器” - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

JAVA 排序用法

目录背景和价值一、 Comparator 的基本用法二、 Java 8 之前(匿名内部类)三、 Java 8 之后(Lambda 表达式和方法引用)1. 使用 Lambda 表达式2. 使用静态工厂方法 Comparator.comparing()(推荐)3. 链式比较(多条…