103
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 2501_CS_SE_FZU |
|---|---|
| 这个作业要求在哪里 | 软工实践——CodeArts团队实战总结 |
| 这个作业的目标 | 结合之前的大模型评测作业,做出一个基于大语言模型的购车意向咨询软件 |
| 其他参考文献 | 《构建之法》、Google Style Guides |
使用说明: 点击制品仓库中的软件发布库,找到并下载Car Advisor Setup 0.1.0.exe安装包,直接安装即可使用。
如何构建项目:
1.首先克隆整个代码
2.在代码根目录下用管理员权限打开cmd
3.运行npm install和npm run build即可构建出.exe安装包,安装包位置将位于.\release下






| 学号 | 姓名 | 账号 | commit次数 |
|---|---|---|---|
| 102300215 | 陈志豪 | zh c | 4 |
| 102300216 | 胡定赟 | gossipcase | 7 |
| 052301144 | 汪涛 | 052301144 | 22 |
| 052301348 | 阮航宇 | startway123 | 7 |
| 092300125 | 张天荣 | hid_04dy_4818s18s96 | 14 |
| 222200327 | 莫馥玮 | Ozydias | 7 |
必要工具
Node.js 16+(与本项目依赖兼容),npm(或 pnpm/yarn)
Electron(由 electron-builder 下载并在打包时使用,开发运行时通过项目脚本启动)
Vite(renderer dev & build)
TypeScript(main 进程通过 tsc 编译)
Windows 开发注意:本地打包时 electron-builder 可能需要管理员权限或启用“开发者模式”以允许创建符号链接(%LOCALAPPDATA%\electron-builder\Cache 目录)
关键环境变量(在 .env / .env.production 中配置)
VITE_TELEMETRY_ENABLED=true|false(启用前端埋点上传)
VITE_ENABLE_ZHIPU=true|false、VITE_ZHIPU_API_KEY=...(智谱相关,注意区分开发/生产 .env)
其他大模型供应商开关/密钥(如阿里/百炼)同样放到 VITE_* 或运行时注入配置
常用命令(Windows CMD 示例)
打包注意
打包命令会执行:vite build && tsc -p tsconfig.main.json && electron-builder(见 package.json scripts)
若不希望本地触发 electron-builder 的自动 winCodeSign 下载/解压,可临时在 build 配置中禁用签名(仅用于本地开发)
运行时调试
打包后的 Electron 应用可打开开发者工具(菜单 → 开发者工具)查看 renderer 控制台与 network 请求
在开发时可通过在浏览器/renderer 控制台打印 fetchProviders、overview、behavior 来确认运行时配置
咨询创建与存储(Consultation)
触点:src/renderer/components/ConsultationForm.tsx(表单收集 ConsultationRequestPayload)
API:src/renderer/api/client.ts -> createConsultation 调用后端
后端:src/main/server.ts 接收并持久化 ConsultationRecord(包含 request.brandPreference 等字段)
说明:表单字段尽量入库并在后续聚合(topics/brand)使用
管理仪表盘(AdminDashboard)
组件:src/renderer/components/AdminDashboard.tsx
数据来源:调用 client 中的 fetchAdminOverview、fetchAdminTopics、fetchAdminBehavior、fetchConsultations、fetchCurrentUser 等
行为统计兜底:当 fetchAdminBehavior 返回空或不完整时,由前端用 consultations + users 合成 AdminBehaviorPlaceholder(recentEvents、topActions、totalActions、avgSessionMinutes、conversionRate)
显示:Overview、Topics(品牌热度 brandMentions)、Behavior、礼品与兑换等卡片均在该组件整合展示
品牌热度(Brand Mentions)
后端聚合:src/main/server.ts 中的 buildTopicStats 聚合 consultation.request.brandPreference 等,结果以 AdminTopicStats 返回
前端展示:AdminDashboard 使用 topics.brandMentions 渲染“品牌热度”列表
行为分析与 avgSession / 转化率 的估算
后端优先提供真实数据(AdminBehavior API);前端在缺失时用简易估算:
avgSessionMinutes:基于 result 文本词数按速率估算(如 150 词/分钟)或默认值(实现位于 AdminDashboard 的合成逻辑)
conversionRate:基于 status === 'archived' 或存在 result 文本作为“已转化”判断
建议:把合成逻辑封装为纯函数并编写单元测试(便于验证与替换策略)
大模型(LLM Providers)集成
现状:providers 列表由 client.ts 的 fetchProviders 或构建时 env 决定
问题与改进:避免把 provider 开关写死为 import.meta.env(构建时静态替换会导致打包后 provider 消失);推荐改为运行时获取(后端 / 主进程在 BrowserWindow 注入 window.APP_CONFIG 或提供 /config/providers 接口)
相关:src/shared/llm.ts 包含 Provider 与请求适配
埋点(Telemetry)
前端发送点:sendTelemetryEvent 在 client.ts 中实现(受 VITE_TELEMETRY_ENABLED 控制)
上报场景:AdminDashboard 加载、咨询归档/删除、用户角色变更等(已在 AdminDashboard 中调用)
实现要点:非阻塞、静默失败;event schema { type, payload, timestamp, userId } 建议统一
后端:/telemetry/events 端点需在数据管道准备好后接入处理
权限/用户管理与礼品兑换
用户管理与角色变更、礼品创建/更新/删除、兑换管理的 API 都在 src/renderer/api/client.ts(adminCreateGift、adminUpdateGift、adminDeleteGift、adminUpdateRedemptionStatus 等)
前端对应实现集中在 AdminDashboard 与相关模态窗口中
代码组织/类型约定
类型定义散见:src/renderer/types.ts、src/shared/llm.ts(ConsultationRequestPayload、ConsultationRecord、UserPayload、AdminTopicStats、AdminBehaviorPlaceholder、LLMProviderOption)
建议把公共类型集中(若需更好维护可在 shared/types.ts 合并)
调试与验证要点(与代码对应)
验证 brandMentions:在 AdminDashboard 打开并观察 topics.brandMentions(若为空,检查 ConsultationRecord.request.brandPreference 是否有值)
验证 provider 在生产可用:在打包后的应用中打开 devtools,检查 fetchProviders / runtime config 是否包含智谱(避免只在 .env.development 中启用)
验证埋点:设置 VITE_TELEMETRY_ENABLED=true 并在动作后在后端 /telemetry/events 或本地 mock 接收项里观察事件到达
每个用例包含:参与者、触发、主流程、备选流程、验收条件、相关文件。
UC01 创建咨询
参与者:终端用户
触发:在 ConsultationForm 填写并提交
主流程:前端构造 ConsultationRequest -> createConsultation -> 后端持久化 -> 返回 ConsultationRecord -> 前端刷新列表
备选:网络或校验失败提示
验收:数据库新增记录且前端立即可见
相关文件:src/renderer/components/ConsultationForm.tsx、src/renderer/api/client.ts、src/main/server.ts
UC02 管理员查看仪表盘(Overview / Topics / Behavior / Brand)
参与者:管理员
触发:打开 AdminDashboard
主流程:并行请求 fetchAdminOverview、fetchAdminTopics、fetchAdminBehavior、fetchAdminConsultations、fetchAdminUsers -> 渲染卡片
备选:fetchAdminBehavior 为空 -> 前端用 consultations/users 合成行为统计(兜底)
验收:各卡片显示合理数据,后端空数据时前端仍有展示
相关文件:src/renderer/components/AdminDashboard.tsx、src/renderer/api/client.ts、src/renderer/types.ts
UC03 管理员操作咨询(归档/删除)
参与者:管理员
触发:点击归档/删除按钮
主流程:调用 updateConsultationStatus/deleteConsultationRecord -> 成功后刷新数据 -> sendTelemetryEvent 上报(静默失败)
备选:上报失败静默;操作失败回滚并提示
验收:数据一致且事件上报(若启用)
相关文件:src/renderer/components/AdminDashboard.tsx、src/renderer/api/client.ts
UC04 用户管理(查看/变更角色)
参与者:管理员
触发:在用户表格进行角色变更
主流程:调用 updateUserProfile -> 刷新用户列表 -> sendTelemetryEvent 上报
验收:用户角色更新并持久化
相关文件:src/renderer/components/AdminDashboard.tsx、src/renderer/api/client.ts
UC05 切换/使用 LLM Provider(阿里/智谱/百炼)
参与者:系统/管理员/用户(取决 UI)
触发:选择 provider 或运行时配置加载
主流程:fetchProviders 或运行时 config -> 在调用 LLM 时使用选中 provider 的密钥与接口
问题点:如果 provider 启用逻辑基于 import.meta.env,打包后可能缺失(需运行时注入)
相关文件:src/renderer/api/client.ts、src/shared/llm.ts
UC06 行为埋点(Telemetry)
参与者:前端(Admin 操作)、后端埋点接收端
触发:dashboard 加载、咨询操作、用户角色变更等
主流程:sendTelemetryEvent -> POST /telemetry/events(仅在 VITE_TELEMETRY_ENABLED=true 时发送)-> 后端管道消费
验收:启用后后端收到事件;前端在不可用时不影响主流程
相关文件:src/renderer/api/client.ts、src/renderer/components/AdminDashboard.tsx
ConsultationRecord:保存单次咨询,包含 ConsultationRequestPayload 与可选 result
ConsultationRequestPayload:表单输入(preferredType、brandPreference、budget 等)
UserPayload:用户信息(role、preferredType 等)
AdminOverviewStats / AdminTopicStats / AdminBehaviorPlaceholder:用于仪表盘展示的聚合统计
LLMProviderOption:大模型提供者配置(id、name、enabled、config)
TelemetryEvent:前端上报的埋点事件结构

注册界面

登录界面

咨询界面

积分商城界面(兑换商品由管理员创建)

咨询内容

提交反馈

管理员界面




| 学号 | 姓名 | 分工 | 贡献度 |
|---|---|---|---|
| 102300215 | 陈志豪 | 前端功能实现 | 18% |
| 102300216 | 胡定赟 | 后端代码编写,博客撰写 | 17% |
| 052301144 | 汪涛 | 后端代码编写,整体框架构建 | 20% |
| 052301348 | 阮航宇 | 前端功能实现 | 17% |
| 092300125 | 张天荣 | 前端功能实现 | 16% |
| 222200327 | 莫馥玮 | 前端功能实现 | 12% |
| 阶段 | 阶段具体描述 | 计划时间(小时) | 实际时间(小时) |
|---|---|---|---|
| 需求分析 | 分析用户模块和购车咨询模块的前端功能需求,明确界面交互逻辑和样式要求。 | 0.5 | 1 |
| 前端界面设计 | 设计系统前端页面的布局、配色、组件样式,绘制高保真原型图。 | 1.5 | 1.5 |
| 组件开发(用户模块) | 开发用户注册、登录、个人信息管理等相关前端组件,实现交互逻辑。 | 2 | 2.5 |
| 组件开发(咨询模块) | 开发购车咨询发起、记录查看等前端组件,对接后端接口展示咨询结果。 | 2 | 3 |
| 测试与调试 | 对前端功能进行兼容性测试、功能测试,修复界面bug和交互问题。 | 1.5 | 1 |
| 阶段 | 阶段具体描述 | 计划时间(小时) | 实际时间(小时) |
|---|---|---|---|
| 需求分析 | 分析后端用户模块、咨询模块的功能需求,明确接口设计和数据处理逻辑。 | 0.5 | 1 |
| 后端架构设计 | 设计后端服务的分层架构,确定技术栈和开发框架,规划模块间的交互方式。 | 2 | 2.5 |
| 接口开发(用户模块) | 开发用户注册、登录、信息管理等后端接口,实现数据校验和数据库操作。 | 2 | 2.5 |
| 博客撰写 | 整理项目开发过程、技术选型、功能实现等内容,撰写团队博客并优化排版。 | 2 | 3 |
| 阶段 | 阶段具体描述 | 计划时间(小时) | 实际时间(小时) |
|---|---|---|---|
| 需求分析 | 分析系统整体需求,明确各模块的功能边界和交互关系,为框架构建做准备。 | 0.5 | 1 |
| 整体框架构建 | 搭建后端服务的整体框架,配置开发环境,集成数据库、中间件等基础组件。 | 2 | 3 |
| 后端核心模块开发 | 开发系统的核心业务模块,如用户权限管理、咨询业务逻辑处理等关键功能。 | 3 | 2.5 |
| 数据库设计与优化 | 设计数据库表结构,建立索引,优化查询语句,确保数据存储和查询性能。 | 2 | 3 |
| 阶段 | 阶段具体描述 | 计划时间(小时) | 实际时间(小时) |
|---|---|---|---|
| 需求分析 | 分析前端页面的功能需求和用户交互场景,明确页面布局和操作流程。 | 0.5 | 0.5 |
| 前端页面开发 | 开发系统各功能页面,实现页面的基础展示。 | 2 | 2.5 |
| 交互逻辑实现 | 为页面添加交互逻辑,实现表单提交、数据展示、页面跳转等功能。 | 2 | 3 |
| 测试与优化 | 对前端页面进行功能测试和用户体验测试,优化页面性能和交互效果。 | 1.5 | 2 |
| 阶段 | 阶段具体描述 | 计划时间(小时) | 实际时间(小时) |
|---|---|---|---|
| 需求分析 | 分析前端组件的功能需求,明确组件的复用场景和交互逻辑。 | 1 | 1.5 |
| 前端组件开发 | 开发可复用的前端组件,如表单组件、列表组件、弹窗组件等,封装组件的属性和方法。 | 2.5 | 3.5 |
| 页面整合 | 将开发好的前端组件整合到系统页面中,实现页面的完整功能。 | 1.5 | 3 |
| 代码优化 | 优化前端组件的代码结构,提高组件的性能和可维护性。 | 2 | 2 |
| 阶段 | 阶段具体描述 | 计划时间(小时) | 实际时间(小时) |
|---|---|---|---|
| 需求分析 | 分析前端界面的视觉需求和交互效果需求,明确设计风格和动画效果。 | 0.5 | 1 |
| 前端界面开发 | 开发系统前端界面的视觉设计,实现页面的配色、排版和动态效果。 | 2 | 2.5 |
| 交互效果实现 | 为页面添加动画、过渡效果等交互元素,提升用户体验。 | 2.5 | 3 |
| 测试与改进 | 对前端界面的视觉效果和交互体验进行测试,根据反馈进行改进。 | 1.5 | 2 |