掌中生活——LLM 结合 CodeArts 团队实战总结(CNCC 2026 会议网站)
掌中生活——LLM 结合 CodeArts 团队实战总结(CNCC 2026 会议网站)
| 这个作业属于哪个课程 | 202601福大-软件工程实践-W班 |
|---|---|
| 这个作业要求在哪里 | LLM结合探索CodeArts团队实战总结 |
| 团队名称 | 掌中生活(LifeMap) |
| 这个作业的目标 | 7 人团队在 39 小时内完成 CNCC 2026 会议网站:会议/分论坛展示、报名管理、四角色看板、LLM 智能推荐,附加多语言与个人日程冲突检测;用 CodeArts 留下可核查的分工、提交与 AI Coding 证据 |
| 其他参考文献 | 《构建之法》、FastAPI、Vue 3、Element Plus、智谱开放平台 |
团队:掌中生活(LifeMap)|成员:黄炫文、胡昊、陈志、李天赐、杨俊鑫、吴军峰、陈瀚楷|日期:2026-11-04
交付物链接:
- 华为云 CodeArts 仓库(默认分支 dev)
- 在线部署地址
- 演示账号(密码统一
123456):
| 账号 | 角色 | 用途 |
|---|---|---|
zhang | 普通参会者 | 看论坛、报名/改选/取消、推荐、日程、通知 |
chair_llm | 分论坛主席 | 只看自己论坛人数、发本论坛通知 |
chair_conf | 会议主席 | 看全会人数与各论坛柱状图 |
sec | 秘书 | 全部参会者名单、CSV、发通知 |
目录
- 掌中生活——LLM 结合 CodeArts 团队实战总结(CNCC 2026 会议网站)
- 一、项目信息
- 二、组员职责分工
- 三、提交日志与 commit 统计
- 四、程序运行截图
- 4.1 首页与五种语言
- 4.2 论坛与报名
- 4.3 智能推荐
- 4.4 个人日程
- 4.5 角色看板
- 4.6 操作路径(用户体验 4')
- 五、遇到的困难及解决方法
- 5.1 黄炫文(组长)
- 5.2 胡昊
- 5.3 陈志
- 5.4 李天赐
- 5.5 杨俊鑫
- 5.6 吴军峰
- 5.7 陈瀚楷
- 六、贡献比例
- 七、PSP 表格
- 7.1 黄炫文
- 7.2 胡昊
- 7.3 陈志
- 7.4 李天赐
- 7.5 杨俊鑫
- 7.6 吴军峰
- 7.7 陈瀚楷
- 八、AI Coding 过程
- 8.1 案例一:i18n 五语言资源包与 key 检查(黄炫文)
- 8.2 案例二:LLM 推荐的结构化校验与降级(陈志)
- 8.3 案例三:日程冲突测试用例(陈瀚楷)
- 8.4 案例四:论坛详情 HTTP 200 但页面一直加载(杨俊鑫)
- 8.5 案例五:JWT 当前用户与角色依赖(李天赐)
- 8.6 案例六:SQLAlchemy 模型与种子数据(胡昊)
- 8.7 案例七:设计令牌、ECharts 与 CSV 下载(吴军峰)
- 8.8 LLM 功能说明(8 分)
- 九、数据库设计
- 十、附加功能
- 10.1 多语言(5 种)
- 10.2 个人日程与冲突检测
- 十一、第二部分:Alpha 冲刺答辩 Q&A 重新回答
- 十二、第二部分:新思考与具体行动
- 十三、总结与展望
- 参考文献
一、项目信息
项目一句话:参会者用自然语言描述研究方向,系统从真实分论坛中推荐并说明理由,一键报名后自动生成个人日程、检测时间冲突。
技术栈:
| 层 | 选型 |
|---|---|
| 前端 | Vue 3 + TypeScript + Vite + Element Plus + ECharts + vue-i18n |
| 后端 | FastAPI + SQLAlchemy 2.0 + SQLite(WAL) |
| LLM | OpenAI 兼容协议,当前 DeepSeek deepseek-chat(可用环境变量切回智谱 glm-4-flash);无 Key 自动降级关键词匹配 |
| 部署 | 华为云 Flexus L(Ubuntu 22.04)+ Nginx + Uvicorn;Docker Compose 作为备用方案 |
| 协作 | 华为云 CodeArts:Issue / 分支 / 合并请求 / 提交记录 |
规模:11 个前端页面、8 个后端 API 模块、5 张数据库表、5 种语言资源、157 条后端测试全部通过。
部署环境:华为云 Flexus L 实例,2 核 2G / 40G / Ubuntu 22.04 / 公网 119.3.170.173;Nginx 监听 8000 托管 frontend/dist,/api/ 反向代理到 127.0.0.1:8001 的 Uvicorn(systemd 服务 cncc-api)。健康检查 GET /api/health 返回 {"status":"ok","database":"ok"}。

图 1|CodeArts 仓库首页:仓库名、默认分支 dev、7 名成员

图 2|华为云 Flexus L 实例:运行中,公网 IP 119.3.170.173

图 3|安全组入方向:放行 TCP 22 与 8000

图 4|服务器版本:git log 显示 7dd7316,cncc-api 为 active

图 5|健康检查:/api/health 返回 status=ok、database=ok
二、组员职责分工
| 成员 | 学号 | 角色 | 负责模块 | 主要产出 |
|---|---|---|---|---|
| 黄炫文 | 102400415 | 组长 / 架构 / 集成 | 仓库与契约、i18n、部署、博客、通知中心 | 接口契约 v0.1、5 语言资源包、Docker 部署、通知页 |
| 胡昊 | 102400414 | 后端·数据与会议 | 五张表、种子数据、会议/议程/统计接口 | models.py、seed.py、/forums、/agenda、/admin/stats |
| 陈志 | 102400411 | 后端·LLM | 推荐接口、Prompt、校验、降级、日志 | /recommendations、recommend_service.py、降级策略 |
| 李天赐 | 102400418 | 后端·账号与报名 | 注册登录、JWT、四角色权限、报名、通知、参会者 | /auth/*、/registrations*、/notifications*、CSV |
| 杨俊鑫 | 102400331 | 前端·参会者主流程 | 框架、首页、论坛、登录注册、我的报名、推荐页 | Vite 脚手架、8 个页面、Axios 封装 |
| 吴军峰 | 102400427 | 前端·设计系统与后台 | 设计令牌、组件库、主席看板、秘书面板、日程页 | Dashboard.vue、Secretary.vue、Schedule.vue |
| 陈瀚楷 | 102400410 | 测试 / 日程算法 | 冲突算法、pytest、缺陷清单、测试报告 | detect_conflicts、157 条后端测试、D-01~D-08 |
三、提交日志与 commit 统计
统计口径:git --no-pager shortlog -sn --all,已用仓库根目录 .mailmap 把 Tynyan / tynyan 统一为黄炫文、miracle-garbage 统一为陈志。黄炫文 47 条含别名合并;全组共 101 条。
| 成员 | commit 数 | 主要提交 |
|---|---|---|
| 黄炫文 | 47 | 契约、仓库、i18n、通知页、部署、T55 补交、.mailmap、no-Docker 部署、Prompt 调优、推荐报名 |
| 陈瀚楷 | 14 | 冲突算法、日程接口、pytest、缺陷清单、测试报告 |
| 杨俊鑫 | 12 | Vite 脚手架、首页、论坛列表/详情、登录注册、我的报名、推荐页 |
| 吴军峰 | 10 | 设计令牌、主席看板、秘书面板、日程页、ECharts 按需引入 |
| 李天赐 | 7 | 认证、权限、报名、通知、参会者、CSV |
| 陈志 | 6 | LLM 客户端、Prompt、推荐接口、降级、日志 |
| 胡昊 | 5 | 五张表、种子数据、会议/议程/统计接口 |

图 6|commit 统计:git shortlog -sn --all,7 人共 101 条

图 7|黄炫文提交记录:6 条,含 4c7064c / 7dd7316

图 8|李天赐提交记录:认证、权限、报名、通知、参会者

图 9|杨俊鑫提交记录:脚手架、首页、论坛、登录注册、我的报名、推荐

图 10|胡昊提交记录:合并请求中的 5 条 M1 提交

图 11|陈志提交记录:LLM 客户端、Prompt、推荐、降级、日志

图 12|陈瀚楷提交记录:冲突算法、日程接口、测试报告

图 13|吴军峰提交记录:设计令牌、看板、秘书、日程
四、程序运行截图
以下按参会者主流程排列,每张图下方标注对应页面。
4.1 首页与五种语言

图 14|首页:Hero、12 个分论坛、4 天议程、5 种语言

图 15|五种语言首页拼图:简中 / 繁中 / 英 / 日 / 法
4.2 论坛与报名

图 16|分论坛列表:搜索、日期筛选、12 个论坛

图 17|分论坛详情:时间、地点、主席、简介、报名入口

图 18|注册页:昵称、账号、密码、意向分论坛多选、验证码

图 19|我的报名:已选分论坛、修改报名、取消报名

图 20|修改报名弹窗:多选分论坛后整体替换
4.3 智能推荐

图 21|DeepSeek 推荐结果:大语言模型前沿 98、智能体 55、网络安全 45

图 22|推荐卡直接报名:按钮变“已报名”,提示“报名成功”
4.4 个人日程

图 23|我的日程:SE 与 DB 重叠 180 分钟,红色冲突提示
4.5 角色看板

图 24|会议主席看板:参会总人数 3、总报名人次 14、分论坛数 12

图 25|秘书面板:全部参会者、报名论坛标签、CSV 导出、发通知

图 26|分论坛主席发布通知成功:通知已发布
4.6 操作路径(用户体验 4')
- 参会者主路径:首页 → 分论坛列表(搜索/日期筛选)→ 分论坛详情 → 报名 → 我的报名(改选/取消)→ 我的日程;全程不超过 4 次点击。
- 推荐路径:智能推荐输入一句话 → 3 张卡带匹配度与理由 → 卡片上直接“报名”或“查看详情” → 报名成功提示;不必回论坛列表重新搜索。
- 角色路径:
chair_conf看全会人数与各论坛柱状图;chair_llm只看自己论坛进度条并可发本论坛通知;sec看全量名单、按论坛筛选、导出 CSV、发通知。 - 错误反馈:401 自动跳登录并保留
redirect;403 显示“无权限”;LLM 降级显示黄色“关键词匹配”而不是白屏。
五、遇到的困难及解决方法
5.1 黄炫文(组长)
困难一:前端两套脚手架撞车。 第一天上午仓库里只有 components/、styles/,没有 package.json、main.ts、App.vue,整个前端起不来;我补了 Vite 脚手架后,发现杨俊鑫的 feat/web-40 里还有一套完整页面和另一套脚手架。解决:以他的页面为主、保留我的 src/i18n 与通知页,合并时逐个文件确认 package.json、main.ts、router、http.ts 的归属,最后 npm run build 一次通过。教训:脚手架只能有一个 owner,公共文件改动前必须在群里说。
困难二:T55"修改报名"不在 dev。 这是作业基础功能"支持修改、取消报名"的必选项,但杨俊鑫的提交只在 feat/web-40 分支。解决:基于最新 dev 重做弹窗 + PUT /api/registrations,把 7 个 registrations.* key 和 common.keep 补进 5 份语言包,check-i18n 与 build 通过后合入。
困难三:i18n 后补代价高。 页面早期用了内联中文,切到英/日/法时大量文案回退中文;部署后登录页甚至直接显示 auth.welcome 这类原始 key。解决:把内联词典并进统一 i18n 实例,按"首页 → 论坛列表/详情 → 我的报名/推荐 → 登录/注册"分批补到 243 key,用 check-i18n.mjs 保证五份 key 一致;补完后重建 dist 再部署。教训:多语言必须从第一行代码开始,不能等页面写完再补。
5.2 胡昊
一份种子数据要同时喂饱三个下游,改一个时间就让另一个演示失效。 12 个分论坛的时间不是随便填的:推荐需要每篇有实写简介和关键词,否则 LLM 只能编;冲突检测需要 2 组真实重叠,且必须落在"同一参会者能同时报上名"的范围内;还要留一组端点相接(EDU 10:30 结束、MM 10:30 开始)证明算法不是粗暴的"同一天就报冲突"。我第一版只按契约填了时间,跑起来才发现 4 个演示账号都没有报名记录——"我的日程"一登录是空的,冲突得现场点五次才出得来。解决:把三个需求写成 scripts/seed.py 的 7 项自检,每次灌完自动验条数、天数、两组重叠分钟数、端点相接是否为 0、4 个契约账号是否齐全。最终 12 条 / 4 天,SE-vs-DB 重叠 180 分钟、SYS-vs-SEC 完全重叠、EDU-vs-MM 为 0,7 项全绿;预置报名后 zhang 一登录就能同时看到"部分重叠"和"相接不报冲突"。
5.3 陈志
LLM 返回的 JSON 并不稳定,联调时遇到 Markdown 围栏、字段缺失和编造的 forum_id,模型甚至把布尔值 true 当成论坛 1,前端直接渲染会报错。解决:先剥围栏再解析,逐条校验 forum_id 是否在数据库目录中,同论坛去重保留最高分,按 score 截取 5 条;坏 JSON、超时、401/429/5xx 全部降级为关键词匹配并返回 200,接口不出现 5xx。没有 API Key 时直接短路到关键词兜底,用中文 2/3 字 n-gram 匹配名称、议题和关键词,仍返回 3 个真实论坛。合并 dev 时 main.py 路由注册冲突,保留双方全部 router 后跑全量测试。结果:13 条推荐用例全绿、全量 157 条通过;无 Key 冒烟返回 source:"fallback"、命中 3 个真实论坛、耗时约 3ms;一次 mock 输入 6 条候选,过滤 1 条编造 id、1 条 bool 型 id、1 条空理由,并对 1 条重复论坛去重,保留 2 条有效推荐。
5.4 李天赐
我负责的模块最棘手的是四角色边界控制:分论坛主席只能给自己绑定的论坛发通知,其他角色不能越权。解决:先按契约列出能力矩阵,再在发布逻辑里强制校验,论坛主席的论坛标识必须与本人绑定一致,否则返回 403,参会者一律拦截。第二个难点是取消报名后通知要立刻消失:取消是软删,我在通知查询里只关联有效报名记录,并把重新报名改为"复活"原记录而非插入新行,避免违反唯一约束。结果:39 项自测全绿,含 403 越权用例 6 个、401 用例 2 个;取消后该论坛通知不再返回,CSV 中文不乱码。
5.5 杨俊鑫
开发初期后端接口尚未完全就绪,页面无法立即端到端联调。我先按接口契约和开发态演示数据搭通首页、论坛、认证、报名、推荐等 7 个参会者页面,再逐步切换到 axios 封装的真实 API,并统一处理 token、401 跳转和错误码翻译。论坛详情联调时,Network 显示 /api/forums/1 返回 HTTP 200,但页面仍停留在骨架态。我继续检查渲染代码,发现 Intl.DateTimeFormat 把 dateStyle 与单独的 hour、minute 选项混用,格式化时抛错;改为显式指定星期、年月日和时分后,详情页恢复显示。结果:生产构建与五语言 key 检查均通过,详情页标题、简介、时间地点、主席、报名入口都正常。这次排查让我把接口响应、状态更新和组件渲染分开验证,避免把前端异常误判成接口超时。
5.6 吴军峰
最深的坑是 i18n 时序:我的三个后台页面先于语言包合入 dev,视图用到 46 个 key、语言包只有 16 个且命名不一致,页面运行时直接渲染裸 key。定位:写审计脚本用正则提取全部 t() 调用与 zh-CN.json 求差集,发现 39 个缺失 key(含正则提不出的动态 key,手工补查)。解决:一次补齐五份语言资源,check-i18n 全绿。第二个坑是构建警告暴露 Dashboard chunk 1.13MB——开发期为省时间 echarts 整包引入留了 TODO,后按需引入降到 542KB。结果:三个后台页面(看板/秘书/日程)全部切真实接口,CSV 带 token 下载、中文不乱码,日程 2 组冲突同时高亮。体会:联调期"接口没好先 mock"能零空等,但 mock 开关必须有人记得切回;AI 代码要过"能跑、无写死文案、字段合契约"三关才采纳。
5.7 陈瀚楷
端点相接不算冲突,我一开始写错了。 冲突判定最初按"时间段有交集就算冲突"写,端点相接(A 10:00–12:00、B 12:00–13:00)会被判成冲突。手工测试时我以为是对的,直到对着契约 §6 逐条抄断言,才发现"相接不算冲突"是硬要求。定位:只打 overlap_minutes 一个函数,用 6 组手算用例对照,发现 min(endA,endB) - max(startA,startB) 在相接时正好等于 0,但我用 >=0 判定了。修复:改用严格不等号 startA < endB && startB < endA,相接时 startB < endA 为假,自然排除;补 14 条用例(含反序相接、跨天相接、1 分钟重叠)。结果:157 条测试全绿;100 个事件全重叠能在 28ms 内返回 4950 组冲突。
六、贡献比例
| 成员 | 贡献度 | 依据 |
|---|---|---|
| 黄炫文 | 18% | 契约/仓库/i18n/部署/博客 + 通知页 + T55 补交,贯穿全程 |
| 杨俊鑫 | 17% | 前端主流程 8 个页面与脚手架,联调量大 |
| 吴军峰 | 15% | 设计系统 + 看板/秘书/日程三页,UI 与图表工作量大 |
| 胡昊 | 14% | 五张表、种子数据、会议/议程/统计接口,后端地基 |
| 陈志 | 13% | LLM 全链路 + 异常降级 + 调优 |
| 李天赐 | 12% | 认证/权限/报名/通知/参会者 |
| 陈瀚楷 | 11% | 冲突算法/日程接口/157 条测试/缺陷跟踪 |
说明:按实际工时、commit 数、MR 评审与交付物综合估算,经全员群内确认;七人分值互不相同,合计 100%。
七、PSP 表格
7.1 黄炫文
| 阶段 | 预估(h) | 实际(h) | 说明 |
|---|---|---|---|
| 计划/需求 | 1.0 | 1.0 | 读作业、拆范围、定分工 |
| 设计 | 2.0 | 2.5 | 契约 v0.1、表结构、API、i18n key |
| 编码 | 6.0 | 7.0 | 脚手架、i18n、通知页、T55、部署脚本 |
| 测试 | 1.5 | 2.0 | build、check-i18n、pytest、联调 |
| 文档/博客 | 2.0 | 2.5 | 分工文档、启动包、博客 |
| 部署 | 2.0 | 1.5 | 华为云 Flexus L + Nginx/Uvicorn,公网已验证 |
| 合计 | 14.5 | 16.5 | — |
7.2 胡昊
| 阶段 | 预估(h) | 实际(h) | 说明 |
|---|---|---|---|
| 计划/需求 | 0.4 | 0.5 | 读 01/02 文档,确认 M1 只做数据、会议内容与统计 |
| 设计 | 1.5 | 1.8 | 五张表与约束、时间统一 +08:00、种子同时喂饱推荐/冲突/边界 |
| 编码 | 3.5 | 3.2 | 骨架 + 5 张表 + 种子 + 5 个接口,约 2470 行 |
| 测试 | 1.2 | 1.8 | 53 条用例(接口 37 + 时间/冲突 16)、2 个冒烟脚本 |
| 文档/博客 | 1.0 | 1.2 | 数据库设计(ER/建表 SQL/3 个取舍)、M1 交接说明 |
| 联调/部署配合 | 1.2 | 1.0 | 给 M2/M4/M7 留函数与插槽、配合部署 |
| 合计 | 8.8 | 9.5 | — |
7.3 陈志
| 阶段 | 预估(h) | 实际(h) | 说明 |
|---|---|---|---|
| 计划/需求 | 0.5 | 0.5 | 读契约 §4.6/§5,确认输入输出与错误码 |
| 设计 | 1.0 | 1.2 | 推荐响应模型、Prompt、校验/降级/日志流程 |
| 编码 | 5.0 | 5.5 | LLM 客户端、Prompt、schema、recommend_service、路由 |
| 测试 | 1.0 | 1.3 | 13 条推荐用例(正常/坏 JSON/超时/编造 id/无 Key) |
| 文档 | 1.0 | 1.0 | M4 交接说明、3 条 mock 用例、博客材料 |
| 联调/合并 | 1.0 | 1.5 | 合并 origin/dev、解决 main.py 路由冲突、推送与 MR |
| 合计 | 9.5 | 11.0 | — |
7.4 李天赐
| 阶段 | 预估(h) | 实际(h) | 说明 |
|---|---|---|---|
| 计划/需求 | 0.8 | 1.0 | 读作业、契约,认领 M2/M3 |
| 设计 | 1.5 | 1.7 | 认证/权限/报名/通知/参会者接口与权限矩阵 |
| 编码 | 5.5 | 6.2 | 7 个任务、12 个接口 |
| 测试 | 1.8 | 2.2 | 39 项自测,含 403/401 与取消后通知消失 |
| 文档/博客 | 1.0 | 0.9 | 权限矩阵、个人材料 |
| 部署/联调 | 1.4 | 1.5 | 与前端联调、配合部署 |
| 合计 | 12.0 | 13.5 | — |
7.5 杨俊鑫
| 阶段 | 预估(h) | 实际(h) | 说明 |
|---|---|---|---|
| 计划/需求 | 0.1 | 0.07 | 阅读分工、契约、看板与验收材料 |
| 设计 | 0.4 | 0.40 | 首页/登录/注册视觉与交互、议程演示数据 |
| 编码 | 1.2 | 1.02 | Vite 主流程、路由鉴权、请求层、7 个页面、T55 改选 |
| 测试 | 0.4 | 0.24 | production build、五语言 key、前后端烟测 |
| 文档/博客 | 0.3 | 0.15 | M5 说明、困难与解决、AI 案例、截图清单 |
| 部署/联调 | 0.1 | 0.12 | 同步 dev、本地联调、创建 MR |
| 合计 | 2.5 | 2.00 | 按 AI Coding 辅助 + 人工复核节奏重估 |
7.6 吴军峰
| 阶段 | 预估(h) | 实际(h) | 说明 |
|---|---|---|---|
| 计划/需求 | 0.5 | 0.5 | 读作业与启动包、认领 M6、建 Issue |
| 设计 | 1.0 | 1.2 | 设计令牌、6 组件 props/emits、三页面信息架构 |
| 编码 | 5.0 | 5.5 | tokens + 6 组件 + Dashboard/Secretary/Schedule |
| 测试 | 1.0 | 1.2 | 三角色自测、三种日程状态、CSV 导出验证 |
| 文档 | 0.5 | 0.8 | 前端开发规约、i18n key 片段、AI 交互记录 |
| 联调/部署 | 1.5 | 1.0 | /schedule 联调替换 mock、公网走查 |
| 合计 | 9.5 | 10.2 | — |
7.7 陈瀚楷
| 阶段 | 预估(h) | 实际(h) | 说明 |
|---|---|---|---|
| 计划/需求 | 0.5 | 0.6 | 读作业与三份契约,确认 M7/M8 范围 |
| 设计 | 1.2 | 1.4 | 冲突判定 [start,end) 与严格不等号;纯函数 + 服务层分层 |
| 编码 | 2.5 | 2.2 | detect_conflicts / is_conflict / build_schedule / GET /api/schedule |
| 测试 | 4.0 | 5.1 | 91 条用例(算法 14 + 接口 10 + 账号报名 27 + 权限通知 25 + LLM 15) |
| 文档/博客 | 1.3 | 1.6 | 缺陷清单(8 条)、测试报告、PSP |
| 联调/评审 | 1.0 | 1.8 | 与 M1 基线对齐、与 M3 集成、代修 D-08 |
| 合计 | 10.5 | 12.7 | — |
八、AI Coding 过程
8.1 案例一:i18n 五语言资源包与 key 检查(黄炫文)
- 任务:把 11 个页面的中文文案抽成 5 份语言包,且保证 key 一致。
- 关键 Prompt(截图见下):给 AI 页面清单与统一 key 命名规范,要求"扁平点号 key、输出 JSON、不要改页面逻辑"。
- AI 输出:一次生成 90+ key 的中/英/繁/日/法五份 JSON;但术语不统一("分论坛"被译成 forum/subforum 混用),且漏了
common.keep等交互词。 - 人工修改:统一术语表(forum = 分论坛),补
check-i18n.mjs(以 zh-CN 为基准,缺 key 退出码 1),把内联词典并进统一实例。 - 验证:五份均 243 key、
npm run check:i18n通过、页面切换后无裸 key。 - 结论:AI 适合批量初稿,术语和一致性必须人来定规则、写脚本兜底。

图 27|AI 对话(黄炫文):i18n 五语言与 check-i18n
8.2 案例二:LLM 推荐的结构化校验与降级(陈志)
- 关键 Prompt:按契约 §4.6/§5 实现推荐接口:只允许从数据库论坛目录推荐、输出严格 JSON、逐条校验
forum_id/reason/score、去重按分数降序、坏 JSON/超时/401/429/5xx/无 Key 一律200 + source:"fallback"、每次调用写日志,并补 pytest。 - AI 输出:一次生成
parse_and_validate()、fallback_rank()、recommend()和 13 条用例,正常路径能剥 Markdown 围栏。 - 人工修改:①
bool是int子类,AI 只判断isinstance(forum_id,int),模型返回的true会被当成论坛 1,补isinstance(forum_id,bool)排除;② 模型明确返回空数组算合法空结果,有候选但 id 全不存在才走关键词兜底;③ 日志写入失败不能拖垮推荐;④ 无 Key 时直接短路到关键词兜底。 - 验证:
test_recommend_llm.py13 passed、全量 157 passed;无 Key 冒烟返回source:"fallback"、命中 3 个真实论坛;mock 6 条候选过滤编造 id/bool id/空理由并去重后保留 2 条。 - 结论:AI 擅长"契约到代码"的机械转换,但
bool/int陷阱、契约条款冲突、日志降级这些边界语义必须人定。

图 28|AI 对话(陈志):LLM 输出校验与异常降级
8.3 案例三:日程冲突测试用例(陈瀚楷)
- 关键 Prompt:给冲突规则
[start,end)、startA < endB && startB < endA、端点相接不算冲突、包含算冲突,让 AI 想 10 个容易漏测的边界场景,只要场景不要代码。 - AI 输出:10 个场景,7 个确实没想到(跨天相接、反向输入、1 分钟重叠、同一论坛重复出现等);但把"包含关系"的
overlap_minutes写成外层 480 分钟,还建议"相接时返回 0"——返回 0 说明该冲突对已经出现在列表里,正确做法是根本不出现。 - 人工修改:场景清单采纳 7 条、修正 2 条、丢弃 1 条(负数时长已由非法入参用例覆盖)。
- 验证:
test_schedule.py14 passed,关键两条test_touching_endpoints_is_not_conflict断言== []、test_containment_conflict_overlaps_inner_duration断言== 60。 - 结论:AI 穷举场景高效,但业务规则是二手的,必须对着契约校准断言。

图 29|AI 验证(陈瀚楷):最终测试报告,157 passed / 0 failed
8.4 案例四:论坛详情 HTTP 200 但页面一直加载(杨俊鑫)
- 关键 Prompt:给出 Network 截图——
GET /api/forums/1返回 200,但页面仍是骨架屏;问怎么定位。 - AI 输出:先区分网络层与渲染层:请求成功就不该继续重试接口,应检查详情页格式化代码;定位到
Intl.DateTimeFormat同时设置dateStyle:'full'和hour/minute,是不兼容组合。 - 人工判断:核对 Network 状态 200/32ms 与源码后采纳最小修复,改为显式
weekday/year/month/day/hour/minute,保留hour12:false,不动 API 契约和 loading 流程。 - 验证:详情页恢复标题、简介、时间地点、主席、报名入口;
npm run build与npm run check:i18n通过。 - 结论:AI 能缩小排查范围,但结论依赖 Network、源码和浏览器复现,不能只凭"加载不出来"就改接口或加重试。

图 30|AI 对话(杨俊鑫):论坛详情 HTTP 200 但页面不渲染
8.5 案例五:JWT 当前用户与角色依赖(李天赐)
- 关键 Prompt:用 FastAPI 实现 Bearer JWT,提供
get_current_user与可复用的require_roles;未登录 401、越权 403,错误体符合{code,message,detail}。 - AI 输出:基于
HTTPBearer(auto_error=True)的角色守卫,结构完整;但角色判断写反、依赖函数漏了异步等待,auto_error还会返回默认错误格式。 - 人工修改:改
auto_error=False自行抛ApiError以符合契约;修正角色判断方向并补全依赖调用;登录改为 JSON 请求体。 - 验证:无 token/过期 token/越权分别 401、401、403,对应 6 个 403 与 2 个 401 自测用例全过。
- 结论:AI 能快速搭骨架,但权限方向与错误格式必须人工核对,安全边界不能直接交给 AI。

图 31|AI 对话(李天赐):JWT 当前用户与角色依赖
8.6 案例六:SQLAlchemy 模型与种子数据(胡昊)
- 关键 Prompt:用 SQLAlchemy 2.0 + SQLite 建 5 张表;报名支持"取消后可重新报名"用软删;时间统一存 ISO 8601
+08:00字符串;说明唯一约束怎么设计才不和软删打架。 - AI 输出:完整的
Mapped/mapped_column写法,UNIQUE(user_id,forum_id)、CHECK(status IN ...)基本对;但外键漏ON DELETE CASCADE、keywords给了 JSON 类型、时间给了DateTime。 - 人工修改:补
ondelete、keywords改 TEXT(LLM 目录要拼字符串)、时间改 TEXT;另加CHECK(end_time > start_time)和CHECK(capacity > 0),把约束写进库而不只靠 Pydantic。 - 验证:
tests/test_forums.py -k TestSchema5 passed,含"结束早于开始被 CHECK 拒绝""重复报名撞 UNIQUE";seed --reset7 项自检全 OK。 - 结论:AI 对 SQLite 的实际行为是二手知识(外键默认关闭、没有原生 DATETIME、JSON 列只是文本),必须对着契约和真实运行结果校准。

图 32|AI 对话(胡昊):SQLAlchemy 五张表与种子数据
8.7 案例七:设计令牌、ECharts 与 CSV 下载(吴军峰)
- 关键 Prompt:只用
tokens.css变量、全部文案走t()、props 全 TS 类型;生成 6 个公共组件;Dashboard 三角色分流 + 柱状图;CSV 必须带 Authorization 头,不能用window.open。 - AI 输出:组件和看板首版可用率约 90%;但组件里残留硬编码
#409EFF、论坛卡时间带"年/月/日"中文;CSV 初版仍用window.open('/api/admin/participants.csv')。 - 人工修改:硬编码改
var(--cncc-primary);时间改纯MM-DD HH:mm;CSV 改http.get(...,{responseType:'blob'})+URL.createObjectURL+revokeObjectURL,mock 模式补\ufeffBOM。ECharts 从整包 1,132KB 改按需注册,Dashboard chunk 降到 542KB。 - 验证:6 组件同页渲染、切语言跟随;三角色看到的数据范围不同;CSV 在 Excel/WPS 中文正常;两次构建输出对比体积减半。
- 结论:AI 能快速出组件与图表骨架,但设计纪律(硬编码)、工程取舍(包体积)、认证下载的边界必须人来收口。

图 33|AI 对话(吴军峰):设计令牌、ECharts 与 CSV 下载
8.8 LLM 功能说明(8 分)
- 自然语言输入 → 推荐结果与理由:
/recommend输入“大语言模型 推理 对齐”,返回大语言模型前沿(98)、智能体与多智能体(55),每张卡都有引用议题/关键词的理由与匹配度。 - 推荐结果与系统论坛一一对应:后端把数据库 12 个论坛目录作为唯一输入,
forum_id白名单校验;卡片的“查看详情”跳到真实/forums/{id}。 - 可直接报名:推荐卡右侧“报名”按钮调用
POST /api/registrations(幂等),成功后按钮变“已报名”,我的报名与我的日程立即出现该论坛,不需要回列表搜索。 - 异常处理:不存在的
forum_id、空理由、重复论坛、坏 JSON、超时、401/429/5xx、无 Key 全部有处理;失败时返回200 + source:"fallback"+ 提示,页面不出现 5xx/白屏;每次调用写recommendation_logs(query/source/status/latency)。
九、数据库设计
5 张表:users、forums、registrations、notifications、recommendation_logs。
| 表 | 作用 | 关键约束 |
|---|---|---|
users | 四类角色账号,forum_id 绑定分论坛主席 | username 唯一、role CHECK |
forums | 12 个分论坛、4 天议程 | end_time > start_time、code 唯一 |
registrations | 用户与论坛多对多,软删 | (user_id, forum_id) 唯一、status CHECK |
notifications | 分论坛通知 | 外键 forum_id、publisher_id |
recommendation_logs | 每次 LLM 调用的 query/结果/耗时 | 用于异常处理证据 |
三个设计取舍:
- 报名软删:取消后保留历史,查询统一
status='active';避免唯一约束冲突。 - 时间存 ISO 字符串:SQLite 无 DATETIME,统一
+08:00,前后端零转换;D-02 修复了%z丢冒号问题。 - 推荐日志单独存:把"LLM 返回坏结果怎么处理"从口头承诺变成可查记录。

图 34|数据库 ER 图:users / forums / registrations / notifications / recommendation_logs
图:5 张表与 1:N 关系;
users.forum_id绑定分论坛主席,registrations用UNIQUE(user_id, forum_id)+status软删,recommendation_logs记录每次 LLM 调用。

图 35|API 文档:/api/docs 的 forums、agenda、admin、schedule、recommendations
十、附加功能
10.1 多语言(5 种)
- 语言:
zh-CN/zh-TW/en/ja/fr,每份 243 key。 - 架构:
src/i18n/locales/*.json资源包 →i18n/index.ts(loadLocale/setLocale/t())→ 页面;Element Plus 通过ElConfigProvider跟随。 - 新增一门语言只加一个 JSON + 一行注册,不改页面代码,直接回应题目"if-else 不可维护"的提示。
check-i18n.mjs保证五份 key 一致。
10.2 个人日程与冲突检测
- 规则:
startA < endB && startB < endA;端点相接不算冲突(A 10:30 结束、B 10:30 开始)。 - 每次
GET /api/schedule实时计算,不缓存;报名变化、论坛改时间后下一次请求立即反映。 - 冲突展示:红色高亮 + 重叠分钟数 + "取消其中一个"。
十一、第二部分:Alpha 冲刺答辩 Q&A 重新回答
真实问题(10 月 30 日 Alpha 冲刺答辩现场提问):Beta 阶段是否可以考虑实现 AI 自主测试?
- 当时的回答:可以,而且这正是作业 7(LLM 结合探索)的方向。Alpha 已经跑通 AI-T 七天闭环(300+ 条用例、定位 6 个缺陷),Beta 要补三块:断言基线表、CI 流水线触发、缺陷探针资产化;三条人机边界不变——口径裁决由人、合并封板由人、假阳性有出口。
- 现在的回答(用这次 39 小时的 LLM 实践):
- 断言基线落在契约与测试里:157 条后端测试、13 条 LLM 异常用例(坏 JSON/超时/编造 id/无 Key)、日程 14 条边界用例(含端点相接)、i18n 5×243 key 一致性检查;AI 生成的断言必须能指向契约条款。
- AI 产出必须过验证:7 个真实 AI Coding 案例,每个都有 Prompt、人工修改和验证证据;AI 的错(
bool是int子类、Markdown 围栏、Intl.DateTimeFormat混用、window.open带不上 token)都写进博客,而不是只贴成功代码。 - 人机边界照旧:AI 出稿、人工评审、测试/构建/手点通过才合并;LLM 推荐异常时降级到关键词匹配并写日志,不自动改用户数据。
- 不足与下一步:这次还没做到 CI 自动拉起 AI 测试,当前是“任务驱动 + 人工触发”;Beta 再把断言基线、CI 触发和探针资产化接起来。
- 差异原因:Alpha 的回答是“计划”,这次是“把 AI 用在真实开发任务上,并留下可验证证据”;同时保留 Alpha 答辩时承诺的三条边界。
- 评审背景:Alpha 平均 90.5 分,测试与质量 16.8/20 是相对最低项;这次用 157 条测试和 7 个 AI 案例补这一块。
十二、第二部分:新思考与具体行动
| 新思考(Alpha 答辩后) | 具体行动 | 证据 |
|---|---|---|
| AI 自主测试先从“断言基线”开始,不能直接放手 | 把 LLM 异常、日程边界、i18n key 都写成可执行断言;AI 生成用例必须引用契约 | 157 条后端测试、13 条 LLM 用例、14 条日程边界用例 |
| AI 产出必须可验证 | 7 个 AI 案例都保留 Prompt、人工修改与验证;AI 的错写进博客 | §8 的 7 个案例与截图 |
| 测试与质量是 Alpha 的相对短板 | 先写测试再联调;每天合并前跑全量 pytest 与 build | pytest 157 passed、npm run build 通过 |
| 部署链路要提前 | 第一天开通华为云、放行 8000、跑通 health;2G 机器不在服务器硬构建前端 | 部署截图 + 7dd7316 版本 |
| 多语言从第一行代码开始 | 所有页面 t(),禁止裸中文;check-i18n 校验 5 份 key | 5×243 key 全绿 + 五语言截图 |
十三、总结与展望
39 小时里,7 个人从空仓库做到可运行的会议网站:11 个页面、8 个 API 模块、5 张表、5 种语言、LLM 推荐与日程冲突,后端 157 条测试全绿,CodeArts 上全组 101 条提交、每人 ≥3 次。最大的收获不是某个功能,而是三条工程纪律:契约先行、资源包而不是 if-else、AI 输出必须可验证。
下一步如果继续做,会优先补三件事:论坛容量与候补队列、日程导出 .ics、以及带审计日志的后台管理;技术上把 SQLite 换成 PostgreSQL,并给 LLM 推荐加离线评测集。感谢李老师、助教和每一位组员——尤其是最后两天在群里互相 review、一起改到凌晨的大家。
参考文献
相关推荐
国央企创新负责人如何构建多维度的科技资源评价与配置体系?.docx
国央企创新负责人如何构建多维度的科技资源评价与配置体系?
《移动通信系统》全套PPT课件2026(西安电子科技大学)
《移动通信系统》全套PPT课件2026(西安电子科技大学)
Python3 json序列化常见报错
json只能序列化字符串、数字、列表、字典、布尔、空值。无法序列化datetime、bytes、自定义类对象,直接dumps会抛出类型错误。解决方案:自定义序列化函数,通过default参数传入,手动转换特殊对象。中文乱码:默认ensure_ascii=True会转义中文,改为False直接输出原生中文。反序列化loads注意:json字符串要求双引号,Python字典单引号字符串无法解析,需要提前替换引号。 lxwuhua.cn mayawalkermx.com mccia.com.cn lzsxgqscgs.com mftug.com
产业园区运营负责人如何精准对接区域技术成果与产业需求?.docx
产业园区运营负责人如何精准对接区域技术成果与产业需求?
科技中介服务机构如何提升科技成果评估服务的专业性与效率?.docx
科技中介服务机构如何提升科技成果评估服务的专业性与效率?


