103
社区成员
发帖
与我相关
我的任务
分享
| 这个作业属于哪个课程 | 2501_CS_SE_FZU |
|---|---|
| 这个作业要求在哪里 | 软工实践——CodeArts团队实战总结 |
| 这个作业的目标 | 基于大语言模型的购车意向咨询软件 |
| 其他参考文献 | 无 |
仓库名称:TeamPractice6
仓库地址:仓库地址
运行类型:前后端分离架构(前端:Electron+Vue,后端:Spring Boot+MySQL,支持Docker部署)
部署包:通过CodeArts Releases发布 frontend.zip(前端)、backend.jar(后端)及Docker Compose配置文件。
(插入团队仓库提交记录截图,示例提交信息:
feat(backend): 用户注册接口完成
fix(frontend): 咨询表单校验优化
chore(llm): 集成通义千问API
test: 压力测试脚本编写 )


| 组员姓名 | 学号 | Commit次数 | 核心领域 |
|---|---|---|---|
| 张铭鑫 | 102300231 | 20 | 项目统筹+前端架构 |
| 陈宗冉 | 082300207 | 16 | 购车咨询前端交互 |
| 许晓镔 | 102300227 | 18 | 购车咨询后端+LLM对接 |
| 邱毅伟 | 052301436 | 14 | 用户模块+管理员后台 |
| 都正宇 | 292300206 | 12 | 积分系统(附加功能1) |
| 应国浩 | 102300230 | 17 | 后端架构+压力测试(附3) |
| 郑炜豪 | 102300232 | 15 | 数据库设计+接口优化 |
后端:Java 17、Spring Boot 3.2、MySQL 8.0、Redis(缓存)
前端:Node.js 18、Vue 3、Electron 28
LLM:通义千问、智谱AI
压力测试:JMeter(附加功能3)
java -jar backend/target/consult-system.jar --spring.profiles.active=prod
cd frontend && npm run electron:serve
jmeter -n -t tests/consult-test.jmx -l result.jtl
用户角色:核心操作包括注册账号、手机号登录、填写购车偏好(如品牌、动力类型、空间需求)、发起购车咨询(输入预算、使用场景、核心诉求)、查看历史咨询记录、参与积分兑换(附加功能1)。
管理员角色(附加功能2):核心操作包括审计所有咨询记录、分析平台热门车型与咨询趋势、管理用户积分规则、维护LLM模型配置。
系统角色:核心能力包括接收用户咨询请求、调用指定大模型生成个性化购车建议、缓存高频咨询响应、支撑压力测试(附加功能3)。
- 普通用户:发起购车咨询、管理个人信息、查看咨询记录和结果、参与积分活动的主体。
- 管理员:管理用户账号、查看所有咨询记录、进行用户行为统计与热门话题分析。
- LLM 服务:接收咨询请求,生成详细分析与建议的智能服务。

| 用例名称 | 参与者 | 描述 |
|---|---|---|
| 用户注册 | 普通用户 | 用户填写基本信息(用户名、密码、手机号等),完成账号注册流程。 |
| 发起购车咨询 | 普通用户 | 用户填写购车预算、车型、使用场景、燃料类型、品牌偏好等信息,提交咨询请求。 |
| 获取 LLM 分析建议 | 普通用户 | 系统调用 LLM 服务,基于用户提交的咨询信息,生成包含车型推荐、购车建议的详细分析报告。 |
| 积分兑换礼品 | 普通用户 | 用户使用积累的积分,兑换汽车周边礼品(如车模、保养券等)。 |
| 热门话题分析 | 管理员 | 管理员查看系统中用户咨询的热门车型、预算区间、使用场景等统计分析结果。 |

- User 类:封装用户的基本属性和行为,负责用户注册、登录和信息维护。
- Consultation 类:管理购车咨询的信息(预算、车型等),支持提交、保存和查看操作。
- ConsultationResult 类:存储 LLM 生成的分析结果,包含摘要、推荐车型和购车建议。
- PointSystem 类:处理用户积分的获取(咨询、反馈)和兑换逻辑。
- Administrator 类:实现管理员对系统数据的查看、统计和用户管理功能。
- LLMService 类:提供调用大语言模型生成分析建议的核心服务。
表现层:Electron+Vue实现可视化交互,封装Axios调用后端接口。
业务层:Spring Boot实现用户、咨询、积分核心逻辑,通过LLMProxy切换大模型。
数据层:MySQL存储用户/咨询数据,Redis缓存高频LLM响应。
| 接口路径 | 方法 | 功能 | 入参示例 | 出参示例 |
|---|---|---|---|---|
/user/register | POST | 用户注册 | {"phone":"138xxx","password":"xxx"} | {"code":200,"msg":"注册成功"} |
/consult/create | POST | 发起咨询 | {"budget":"20-30万","scenario":"家庭"} | {"code":200,"advice":"推荐车型..."} |
/admin/consults | GET | 管理员查询记录 | {"page":1,"size":10} | {"code":200,"records":[...]} |
// LLMProxy.java
public class LLMProxy {
private Map<String, LLMClient> clients = new HashMap<>();
public LLMProxy() {
clients.put("tongyi", new TongyiClient());
clients.put("zhipu", new ZhipuClient());
}
public String getAdvice(String userInput, String model) {
LLMClient client = clients.get(model);
if (client == null) throw new IllegalArgumentException("无效模型");
return client.generate(userInput);
}
// 内部类封装具体模型调用
private class TongyiClient {
public String generate(String input) {
// 通义千问API调用逻辑
return callApi("https://tongyi-api.com", input);
}
}
}
登录页:支持手机号快捷登录

咨询表单:动态联动选项(如选“电动”则隐藏燃油车推荐)

结果页:左侧列表展示历史咨询,右侧分栏显示LLM生成的车型对比表

| 组员 | 学号 | 模块职责 | 关键产出 |
|---|---|---|---|
| 张铭鑫 | 102300231 | 项目管理+前端架构 | Electron窗口管理、前后端联调方案 |
| 陈宗冉 | 082300207 | 购车咨询前端 | 表单交互逻辑、结果可视化组件 |
| 许晓镔 | 102300227 | 购车咨询后端+LLM对接 | ConsultController、LLM重试策略 |
| 邱毅伟 | 052301436 | 用户系统+管理员模块 | JWT认证、管理员后台API |
| 都正宇 | 292300206 | 积分系统(附加1) | 积分规则引擎、兑换接口 |
| 应国浩 | 102300230 | 后端架构+压力测试(附加3) | 分布式锁设计、JMeter测试计划 |
| 郑炜豪 | 102300232 | 数据库+性能优化 | MySQL索引设计、Redis缓存策略 |
| 组员姓名 | 核心领域 | 遇到的困难 | 解决方法 |
|---|---|---|---|
| 张铭鑫 | 项目统筹+前端架构 | 1. 部分组员开发延迟,影响联调进度; 2. 前端API用法有分歧(组合式vs选项式) | 1. 用Trello看板跟踪进度,每日同步,优先协调延迟模块; 2. 做小demo对比,统一用组合式API,写简单编码规范 |
| 陈宗冉 | 购车咨询前端交互 | 1. 咨询表单联动复杂(选电动后要加续航输入); 2. LLM返回结果排版乱 | 1. 封装联动组件,用配置文件定义字段关联; 2. 用vue-markdown-editor渲染,自定义CSS调排版 |
| 许晓镔 | 购车咨询后端+LLM对接 | 1. 不同LLM返回格式不一样; 2. LLM调用偶尔超时,咨询失败 | 1. 写统一解析工具,转成标准结构; 2. 加3秒超时重试,热门场景缓存到Redis |
| 邱毅伟 | 用户模块+管理员后台 | 1. JWT过期后前端没刷新,接口报错; 2. 管理员查记录数据太多,卡顿 | 1. 前端拦截器检测过期,自动刷新令牌; 2. 加索引,分页查询,限制单页条数 |
| 都正宇 | 积分系统(附加功能1) | 1. 并发时积分重复加; 2. 积分规则修改后,历史数据不对 | 1. 用Redis锁保证更新原子性; 2. 建规则版本表,按生效时间算积分 |
| 应国浩 | 后端架构+压力测试(附3) | 1. 高并发时数据库连接不够,接口超时; 2. 压测时LLM调用占线程,吞吐量低 | 1. 调大连接池,Redis缓存高频数据; 2. 用异步线程池处理LLM调用,隔离线程 |
| 郑炜豪 | 数据库设计+接口优化 | 1. 咨询记录字段重复,数据不一致; 2. 接口返回字段太多,传得慢 | 1. 拆分表,咨询表只存用户ID,关联查询; 2. 按接口需求写专用返回模型,少传冗余字段 |
| PSP阶段 | 计划时间(h) | 实际时间(h) | 工作内容 |
|---|---|---|---|
| 需求分析 | 1 | 1.5 | 快速对齐核心需求,明确前后端分工与联调节点 |
| 技术选型 | 1 | 1 | 确定前端技术栈,搭建基础项目骨架 |
| 架构设计 | 2 | 2.5 | 规划前端组件结构,制定数据交互规范 |
| 统筹协调 | 3 | 4 | 同步组员进度,解决跨模块对接问题 |
| 文档编写 | 1 | 1 | 整理部署说明与核心文档 |
| PSP阶段 | 计划时间(h) | 实际时间(h) | 工作内容 |
|---|---|---|---|
| 需求分析 | 1 | 1 | 明确咨询表单、结果页的核心交互逻辑 |
| 界面设计 | 1 | 1.5 | 快速设计表单与结果页布局 |
| 组件开发 | 3 | 4 | 开发表单联动组件、LLM结果渲染组件 |
| 联调测试 | 2 | 2.5 | 对接后端接口,修复表单校验与渲染Bug |
| 文档编写 | 0.5 | 0.5 | 记录组件使用要点 |
| PSP阶段 | 计划时间(h) | 实际时间(h) | 工作内容 |
|---|---|---|---|
| 需求分析 | 1 | 1 | 明确LLM调用场景与接口格式 |
| 接口设计 | 1 | 1.5 | 设计咨询接口,定义请求响应格式 |
| 开发实现 | 3 | 4 | 开发后端逻辑,对接LLM API,编写结果解析工具 |
| 测试优化 | 2 | 2.5 | 测试LLM调用稳定性,添加基础重试机制 |
| 文档编写 | 0.5 | 0.5 | 整理接口与LLM对接说明 |
| PSP阶段 | 计划时间(h) | 实际时间(h) | 工作内容 |
|---|---|---|---|
| 需求分析 | 1 | 1 | 明确用户认证与管理员权限需求 |
| 接口设计 | 1 | 1 | 设计注册、登录、管理员查询接口 |
| 开发实现 | 3 | 3.5 | 实现JWT认证与管理员核心功能 |
| 联调测试 | 1.5 | 2 | 对接前端,修复令牌与权限相关Bug |
| 文档编写 | 0.5 | 0.5 | 记录用户模块核心逻辑 |
| PSP阶段 | 计划时间(h) | 实际时间(h) | 工作内容 |
|---|---|---|---|
| 需求分析 | 0.5 | 1 | 明确积分规则与关联业务逻辑 |
| 设计方案 | 0.5 | 1 | 简化设计积分表结构与更新逻辑 |
| 开发实现 | 2 | 3 | 开发积分累加、查询、兑换核心功能 |
| 测试优化 | 1 | 1.5 | 测试积分计算准确性,修复并发问题 |
| 文档编写 | 0.5 | 0.5 | 记录积分规则与接口说明 |
| PSP阶段 | 计划时间(h) | 实际时间(h) | 工作内容 |
|---|---|---|---|
| 架构设计 | 2 | 2.5 | 搭建Spring Boot后端架构,配置数据库与缓存 |
| 开发实现 | 1.5 | 2 | 开发异步线程池与分布式锁基础组件 |
| 压测设计 | 1.5 | 2 | 编写JMeter压测脚本,设计简单并发场景 |
| 性能优化 | 2 | 2.5 | 优化数据库连接与缓存策略 |
| 文档编写 | 1 | 1 | 整理架构设计与压测报告 |
| PSP阶段 | 计划时间(h) | 实际时间(h) | 工作内容 |
|---|---|---|---|
| 需求分析 | 0.5 | 1 | 梳理各模块数据需求,明确表关联关系 |
| 数据库设计 | 1 | 1.5 | 设计核心表结构,添加基础索引 |
| 接口优化 | 2 | 2.5 | 简化接口查询逻辑,编写DTO减少冗余字段 |
| 数据测试 | 1 | 1.5 | 测试数据库查询性能,修复数据一致性问题 |
| 文档编写 | 0.5 | 0.5 | 整理表结构与接口优化说明 |