软件工程课程第二次团队作业
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13559 |
| 这个作业的目标 | 一、掌握智能体开发的核心概念与工具链 二、构建 “能说会做” 的 AI 智能体 |
| 学号 | 102300213,102301311,102301316,102301328,102301336,102301337,102301338,102301340,102301631,102301635,102301642 |
旅行助手 ( Agent) 说明文档
一、需求描述
(一)用户需求背景✨
现代用户在规划旅行时,常面临 “信息分散查询” 的痛点 —— 需分别打开天气 APP 查目的地天气、在不同平台找旅行攻略、手动筛选适配天气的景点,流程繁琐且耗时。本旅行助手 Agent 旨在通过 AI 整合能力,让用户仅通过一次交互,即可获取 “天气 + 攻略 + 景点推荐” 的一站式旅行规划信息,降低旅行规划的时间成本与操作复杂度。
(二)功能需求✨
- 🤖 智能对话: 基于DeepSeek AI模型的自然语言对话
- 🌦️ 天气查询: 实时查询全球城市天气信息
- 🏛️ 景点推荐: 基于高德地图API推荐旅游景点
- 💾 对话记忆: 支持上下文记忆,多轮对话连贯
- 🎤 语音交互: 支持语音输入和语音播报(前端)
- 📱 现代UI: 美观的响应式聊天界面
(三)非功能需求✨
- 响应效率:从用户输入完成到输出结果,总耗时不超过 10 秒(含 API 调用、攻略抓取、推荐计算);
- 准确性:天气数据误差不超过官方 API 的默认范围,攻略信息提取准确率不低于 80%(核心景点、游玩建议无明显偏差);
- 易用性:前端界面简洁,输入区域(打字 / 语音按钮)、结果展示区域(文字 / 语音切换按钮)清晰可见,无学习成本;
二、业务流描述
整体流程概览
用户发起请求 → 交互模块处理输入 → 意图解析与信息提取 → 工具调用(天气 API + 高德地图攻略) → 数据整合与景点推荐 → 结果输出 → 支持多轮对话补充
三、实现说明
技术栈选择🛠️
| 模块 | 技术 / 工具 | 选择理由 |
|---|---|---|
| 核心框架 | Python + LangGraph + MCP 协议 | Python 生态丰富,LangGraph 支持对话记忆与工具链串联,MCP 协议适配智能体工具调用标准 |
| 语音交互 | Web Speech API / vosk离线模型 | 无需依赖额外框架,仅通过原生 JavaScript 即可实现 / vosk模型提供离线支持 |
| 天气查询 | wttr.in | 免费充足,支持城市 + 日期查询,数据实时性强,可查询未来几天的天气 |
| 景点和攻略查询 | 高德地图API | 官方 API 确保合规,主流平台评分更加权威 |
| 前端界面 | HTML+JavaScript+TailwindCSS框架 | 轻量易上手,组件化开发,适配 PC / 移动端,支持快速对接后端接口 |
| 后端框架 | FastAPI | 兼顾了 “开发效率”“性能” 和 “易用性”,尤其适合快速构建高性能 API、前后端对接或数据服务 |
| 对话记忆存储 | LangChain ConversationBufferMemory | 轻量存储当前会话上下文,适配多轮对话需求 |
使用示例(功能演示)



直接进行打字输入或语语音输入。支持语音播报,上下文记忆。
GitHub 链接
https://github.com/b-yx/EchoLogic/tree/main/travel_agent
小组分工
102300213陈宇:实现多轮对话的记忆功能
102301311张艺宝、102301328林昊:天气查询工具开发
102301316余睿康、102301337郭泽凯、102301338郭砚康:高德地图API的智能问答与攻略查找工具开发
102301336何顺康、102301340范智杰:语音的输入与输出模块
102301631贾子康,102301635傅世杰:前端
102301642鲍宇轩:项目规划(PM)与前后端对接
每个小组成员的心得
102300213陈宇
- 我们组的项目是“旅行助手”:通过 AI 整合能力,让用户仅通过一次交互,即可获取 “天气 + 攻略 + 景点推荐” 的一站式旅行规划信息,降低旅行规划的时间成本与操作复杂度。
- 本次项目,我主要负责的模块是实现多轮对话的记忆功能。$langgraph$ 内置了相当方便的对话记忆和工具调用功能,简单入门了$langgraph$的部分功能后,我发现我负责的这部分内容需要整合其他组员的代码,调用他们写的$api$,由于对$python$语言和$vscode$的不熟悉,我花费了不少时间才正确使用$import$。
- 开始做项目之前,我花了两个小时速成了一下$python$语言的一些简单语法,对变量的作用域还没有完全学明白,不过也支持我写出一些简易函数及看懂其他组员和$ai$提供的代码的大致意义。$python$的变量不确定类型这点让我觉得非常有趣。
- 通过$langgraph$的简单学习,我觉得能借用$langgraph$写出很多有趣的事情,比如让接入的语言模型与我们一起玩某些游戏(最好是语言类游戏)。
102301311张艺宝
作为 EchoLogic 团队成员,我主要负责开发基于 LangGraph 和 DeepSeek 的智能旅行助手项目中的天气查询工具 get_weather,该工具作为独立模块集成于 LangGraph Agent,是为用户提供天气查询与旅游景点推荐服务的核心功能之一,需调用外部 API 获取实时天气并友好呈现;开发中选用免费且功能强大的 wttr.in API(请求 URL 格式为https://wttr.in/{city}?format=j1),可获取全球城市的当前天气状况、温湿度、风速等信息,同时构建了全面的异常处理机制,包括设置网络超时、处理连接异常、针对不同 HTTP 状态码(如 404 城市未找到)返回对应提示及应对数据解析异常,还通过@lru_cache(maxsize=100)装饰器实现查询结果缓存以优化性能,并编写_format_forecast函数扩展未来 1-3 天预报功能;开发过程中也面临诸多挑战,如 API 返回数据结构复杂,需深入研究文档与实际数据编写解析逻辑,为支持中文城市名查询需优化 URL 编码与请求头配置,集成到 LangGraph Agent 时需使用@tool('get_weather')装饰器确保被正确识别调用;此次实践让我深刻认识到工具设计需兼顾功能、错误处理与用户反馈,API 集成要充分预判异常,性能优化对提升用户体验至关重要,且团队协作中接口设计合理性是模块无缝集成的基础,未来计划增加多天气数据源、优化缓存更新机制、补充天气图标等本地化功能及空气质量、紫外线指数等详细信息,此次开发不仅深化了我对工具开发的理解,也提升了实际项目问题解决能力。
102301316余睿康
在开发AI旅行助手的过程中,我负责构建了基于LangGraph与高德地图API的智能问答模块。通过这段代码实践,我深刻体会到工具调用在构建实用AI应用中的关键作用。我们不仅需要设计清晰准确的函数规范(如严格的参数注解与文档字符串),还要充分考虑异常处理与用户提示的友好性。特别是在整合第三方API时,除了基本的功能实现,更要注意网络请求的健壮性与数据解析的容错性,确保即使在部分数据缺失的情况下仍能提供有价值的响应。这次经历让我对AI智能体的工作流程有了更直观的理解,也认识到在真实场景中,细节处理往往决定了用户体验的上限。
102301328林昊
除去性能因素,缺少形式化的语法约束、模块化机制以及其他工程复杂性控制手段,注定了Python 并不适合中大型应用程序开发工程。Python作为脚本语言的同时,任意子版本的破坏性变更、不兼容性助长了这个社区大部分开发者不动脑一次性写出仅仅能运行的代码的风气。这不是说Python不能写出高维护性代码;而仅仅说明,Python让那些本不该参与工程的开发者快速地学会了使用这门语言。
The most treacherous metaphors are the ones that seem to work for a time, because they can keep more powerful insights from bubbling up.
Alan Kay, 1984, Computer Software
102301336何顺康
本次小组作业中,我与102301340范智杰共同负责语音交互模块,在这个过程中学到了很多,包括但不限于python的基础知识、在线与离线语音功能部署各自的优缺点、github基础协作功能的使用。我认为这是一次很有意义的小组作业,受益良多。
102301337郭泽凯
在编写get_introduction函数的过程中,我深刻体会到工具函数设计需兼顾核心功能与实际场景的复杂性:明确以获取城市景点信息为核心目标,通过简洁的参数设计和结构化返回值聚焦功能,同时针对 API 交互中可能出现的网络异常、数据格式不符等问题,用try-except捕获异常并返回清晰提示,增强了程序的健壮性;在数据解析时,考虑到 API 返回字段可能存在的嵌套或缺失情况,通过get方法设置默认值、判断数据类型等方式兼顾灵活性与严谨性,避免了异常数据导致程序崩溃;此外,用Annotated标注参数和详细文档字符串提升了易用性,返回自然语言结果也更贴合实际使用需求,这让我意识到,一个可靠的工具函数不仅要准确完成任务,还需在异常处理、易用性和场景适配等细节上不断打磨,才能真正具备实用价值。
102301338郭砚康
通过编写这个高德地图API调用工具,我深刻体会到在开发第三方API集成时,数据安全性和错误处理的重要性。代码中不仅需要正确处理API响应,还要对各种异常情况进行周全考虑,比如网络请求失败、数据解析错误、城市不存在等场景。特别是对于嵌套数据的提取,必须进行类型检查和空值处理,避免因数据结构变化导致的程序崩溃。同时,清晰的错误信息返回能够帮助用户快速定位问题,提升工具的整体健壮性和用户体验。
102301340范智杰
在这次的团队项目中,我与何顺康同学共同负责了语音的输入与输出模块。通过这次合作,我深刻体会到将一个想法变为可交互功能的不易。每一个环节都充满了挑战。与队友的紧密协作至关重要,我们通过明确分工、频繁沟通,高效地解决了集成中的各种技术难题。
102301631贾子康
- 用Tailwind CSS快速搭建了响应式界面,把页面拆成头部、聊天区、输入区等模块,思路清晰了很多
- 解决了语音功能的兼容性问题(不同浏览器对SpeechRecognition支持不同),学会了加权限判断和错误提示
- 响应式设计踩了坑:按钮挤在一起,调了多次断点样式才搞定
- 和后端对齐接口格式很重要,一开始因字段名不一致导致请求报错,后来每天同步进度才顺畅
- 产品同学提的 “历史对话” 功能,看似简单却提升了体验,让我明白前端不仅要实现功能,还要考虑用户场景
虽然,ai的作用远大于我,但调教ai也算收获~
102301635傅世杰
在本次团队作业中,我负责前端以及前端和后端的连接。我在这门课开始之前就自己学过一些前端的知识,例如html,css,javascript。我和贾子康负责前端部分,通过本次团队合作,加深了我对html,css,javascript的理解,在前端实现了现代化聊天UI,消息发送,显示语音输入,语音播报,历史对话管理,加载状态显示,API接口调用。本次团队作业的另一大收获是学会如何运用API实现前后端的对接。前端页面按预设协议发起请求,API 网关接收请求后,通过路由转发至对应后端服务,服务处理并生成结果,将结果按规范格式封装为响应,经网关返回前端,前端解析数据后完成展示。总之,我在本次团队合作中学到了很多。
102301642鲍宇轩
作为PM,我在体会到这次 agent 项目开发的难度远超出预期。最初,我对 agent 开发知之甚少,从补全 MCP、LangChain & LangGraph 框架的相关知识,到学习 git 版本管理,再到推进整个项目的规划设计、征集团队意见与协同开发,每一步都需要投入大量时间钻研。对毫无相关经验的我来说,这无疑是一场巨大的挑战,好在磕磕绊绊最终完成了任务。
传说 LangGraph 的学习曲线陡峭、上手难度高,亲身实践后才发现确实如此。现在回想,或许这个框架并不适合我们这样的新手团队起步,但团队需要这样的冒险与探索 —— 而这段学习经历,也让我收获颇丰,对框架设计与 agent 开发的理解都更进了一步。在技能提升上,协同开发让我熟练掌握了 git 的常用指令与版本管理思路;代码实操中,我学会了 LLM 的接入方法与项目框架的构建逻辑,同时也初步掌握了前后端对接的相关知识。此外,借着这次项目开发,我还更新了编辑工具,加强了 Claude Code、Trae 等现代 AI 辅助编程工具的使用能力,进一步提升了开发效率。最后还是要总结一下这个 agent 仍需要完善的地方,比如流式输出功能的优化、更多功能的配备等,这些也将是我们后续作业中有关智能体开发的关注重点。

浙公网安备 33010602011771号