掌中生活——LLM 结合 CodeArts 团队实战总结(CNCC 2026 会议网站)

掌中生活 掌中生活 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

掌中生活——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

交付物链接:

账号角色用途
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)
LLMOpenAI 兼容协议,当前 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"}。

img

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

img

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

img

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

img

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

img

图 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、缺陷清单、测试报告
杨俊鑫12Vite 脚手架、首页、论坛列表/详情、登录注册、我的报名、推荐页
吴军峰10设计令牌、主席看板、秘书面板、日程页、ECharts 按需引入
李天赐7认证、权限、报名、通知、参会者、CSV
陈志6LLM 客户端、Prompt、推荐接口、降级、日志
胡昊5五张表、种子数据、会议/议程/统计接口

img

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

img

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

img

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

img

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

img

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

img

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

img

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

img

图 13|吴军峰提交记录:设计令牌、看板、秘书、日程


四、程序运行截图

以下按参会者主流程排列,每张图下方标注对应页面。

4.1 首页与五种语言

img

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

img

图 15|五种语言首页拼图:简中 / 繁中 / 英 / 日 / 法

4.2 论坛与报名

img

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

img

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

img

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

img

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

img

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

4.3 智能推荐

img

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

img

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

4.4 个人日程

img

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

4.5 角色看板

img

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

img

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

img

图 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.01.0读作业、拆范围、定分工
设计2.02.5契约 v0.1、表结构、API、i18n key
编码6.07.0脚手架、i18n、通知页、T55、部署脚本
测试1.52.0build、check-i18n、pytest、联调
文档/博客2.02.5分工文档、启动包、博客
部署2.01.5华为云 Flexus L + Nginx/Uvicorn,公网已验证
合计14.516.5—

7.2 胡昊

阶段预估(h)实际(h)说明
计划/需求0.40.5读 01/02 文档,确认 M1 只做数据、会议内容与统计
设计1.51.8五张表与约束、时间统一 +08:00、种子同时喂饱推荐/冲突/边界
编码3.53.2骨架 + 5 张表 + 种子 + 5 个接口,约 2470 行
测试1.21.853 条用例(接口 37 + 时间/冲突 16)、2 个冒烟脚本
文档/博客1.01.2数据库设计(ER/建表 SQL/3 个取舍)、M1 交接说明
联调/部署配合1.21.0给 M2/M4/M7 留函数与插槽、配合部署
合计8.89.5—

7.3 陈志

阶段预估(h)实际(h)说明
计划/需求0.50.5读契约 §4.6/§5,确认输入输出与错误码
设计1.01.2推荐响应模型、Prompt、校验/降级/日志流程
编码5.05.5LLM 客户端、Prompt、schema、recommend_service、路由
测试1.01.313 条推荐用例(正常/坏 JSON/超时/编造 id/无 Key)
文档1.01.0M4 交接说明、3 条 mock 用例、博客材料
联调/合并1.01.5合并 origin/dev、解决 main.py 路由冲突、推送与 MR
合计9.511.0—

7.4 李天赐

阶段预估(h)实际(h)说明
计划/需求0.81.0读作业、契约,认领 M2/M3
设计1.51.7认证/权限/报名/通知/参会者接口与权限矩阵
编码5.56.27 个任务、12 个接口
测试1.82.239 项自测,含 403/401 与取消后通知消失
文档/博客1.00.9权限矩阵、个人材料
部署/联调1.41.5与前端联调、配合部署
合计12.013.5—

7.5 杨俊鑫

阶段预估(h)实际(h)说明
计划/需求0.10.07阅读分工、契约、看板与验收材料
设计0.40.40首页/登录/注册视觉与交互、议程演示数据
编码1.21.02Vite 主流程、路由鉴权、请求层、7 个页面、T55 改选
测试0.40.24production build、五语言 key、前后端烟测
文档/博客0.30.15M5 说明、困难与解决、AI 案例、截图清单
部署/联调0.10.12同步 dev、本地联调、创建 MR
合计2.52.00按 AI Coding 辅助 + 人工复核节奏重估

7.6 吴军峰

阶段预估(h)实际(h)说明
计划/需求0.50.5读作业与启动包、认领 M6、建 Issue
设计1.01.2设计令牌、6 组件 props/emits、三页面信息架构
编码5.05.5tokens + 6 组件 + Dashboard/Secretary/Schedule
测试1.01.2三角色自测、三种日程状态、CSV 导出验证
文档0.50.8前端开发规约、i18n key 片段、AI 交互记录
联调/部署1.51.0/schedule 联调替换 mock、公网走查
合计9.510.2—

7.7 陈瀚楷

阶段预估(h)实际(h)说明
计划/需求0.50.6读作业与三份契约,确认 M7/M8 范围
设计1.21.4冲突判定 [start,end) 与严格不等号;纯函数 + 服务层分层
编码2.52.2detect_conflicts / is_conflict / build_schedule / GET /api/schedule
测试4.05.191 条用例(算法 14 + 接口 10 + 账号报名 27 + 权限通知 25 + LLM 15)
文档/博客1.31.6缺陷清单(8 条)、测试报告、PSP
联调/评审1.01.8与 M1 基线对齐、与 M3 集成、代修 D-08
合计10.512.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 适合批量初稿,术语和一致性必须人来定规则、写脚本兜底。

img

图 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.py 13 passed、全量 157 passed;无 Key 冒烟返回 source:"fallback"、命中 3 个真实论坛;mock 6 条候选过滤编造 id/bool id/空理由并去重后保留 2 条。
  • 结论:AI 擅长"契约到代码"的机械转换,但 bool/int 陷阱、契约条款冲突、日志降级这些边界语义必须人定。

img

图 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.py 14 passed,关键两条 test_touching_endpoints_is_not_conflict 断言 == []、test_containment_conflict_overlaps_inner_duration 断言 == 60。
  • 结论:AI 穷举场景高效,但业务规则是二手的,必须对着契约校准断言。

img

图 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、源码和浏览器复现,不能只凭"加载不出来"就改接口或加重试。

img

图 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。

img

图 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 TestSchema 5 passed,含"结束早于开始被 CHECK 拒绝""重复报名撞 UNIQUE";seed --reset 7 项自检全 OK。
  • 结论:AI 对 SQLite 的实际行为是二手知识(外键默认关闭、没有原生 DATETIME、JSON 列只是文本),必须对着契约和真实运行结果校准。

img

图 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 模式补 \ufeff BOM。ECharts 从整包 1,132KB 改按需注册,Dashboard chunk 降到 542KB。
  • 验证:6 组件同页渲染、切语言跟随;三角色看到的数据范围不同;CSV 在 Excel/WPS 中文正常;两次构建输出对比体积减半。
  • 结论:AI 能快速出组件与图表骨架,但设计纪律(硬编码)、工程取舍(包体积)、认证下载的边界必须人来收口。

img

图 33|AI 对话(吴军峰):设计令牌、ECharts 与 CSV 下载

8.8 LLM 功能说明(8 分)

  1. 自然语言输入 → 推荐结果与理由:/recommend 输入“大语言模型 推理 对齐”,返回大语言模型前沿(98)、智能体与多智能体(55),每张卡都有引用议题/关键词的理由与匹配度。
  2. 推荐结果与系统论坛一一对应:后端把数据库 12 个论坛目录作为唯一输入,forum_id 白名单校验;卡片的“查看详情”跳到真实 /forums/{id}。
  3. 可直接报名:推荐卡右侧“报名”按钮调用 POST /api/registrations(幂等),成功后按钮变“已报名”,我的报名 与 我的日程 立即出现该论坛,不需要回列表搜索。
  4. 异常处理:不存在的 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
forums12 个分论坛、4 天议程end_time > start_time、code 唯一
registrations用户与论坛多对多,软删(user_id, forum_id) 唯一、status CHECK
notifications分论坛通知外键 forum_id、publisher_id
recommendation_logs每次 LLM 调用的 query/结果/耗时用于异常处理证据

三个设计取舍:

  1. 报名软删:取消后保留历史,查询统一 status='active';避免唯一约束冲突。
  2. 时间存 ISO 字符串:SQLite 无 DATETIME,统一 +08:00,前后端零转换;D-02 修复了 %z 丢冒号问题。
  3. 推荐日志单独存:把"LLM 返回坏结果怎么处理"从口头承诺变成可查记录。

img

图 34|数据库 ER 图:users / forums / registrations / notifications / recommendation_logs

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

img

图 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 实践):
    1. 断言基线落在契约与测试里:157 条后端测试、13 条 LLM 异常用例(坏 JSON/超时/编造 id/无 Key)、日程 14 条边界用例(含端点相接)、i18n 5×243 key 一致性检查;AI 生成的断言必须能指向契约条款。
    2. AI 产出必须过验证:7 个真实 AI Coding 案例,每个都有 Prompt、人工修改和验证证据;AI 的错(bool 是 int 子类、Markdown 围栏、Intl.DateTimeFormat 混用、window.open 带不上 token)都写进博客,而不是只贴成功代码。
    3. 人机边界照旧:AI 出稿、人工评审、测试/构建/手点通过才合并;LLM 推荐异常时降级到关键词匹配并写日志,不自动改用户数据。
    4. 不足与下一步:这次还没做到 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 与 buildpytest 157 passed、npm run build 通过
部署链路要提前第一天开通华为云、放行 8000、跑通 health;2G 机器不在服务器硬构建前端部署截图 + 7dd7316 版本
多语言从第一行代码开始所有页面 t(),禁止裸中文;check-i18n 校验 5 份 key5×243 key 全绿 + 五语言截图

十三、总结与展望

39 小时里,7 个人从空仓库做到可运行的会议网站:11 个页面、8 个 API 模块、5 张表、5 种语言、LLM 推荐与日程冲突,后端 157 条测试全绿,CodeArts 上全组 101 条提交、每人 ≥3 次。最大的收获不是某个功能,而是三条工程纪律:契约先行、资源包而不是 if-else、AI 输出必须可验证。

下一步如果继续做,会优先补三件事:论坛容量与候补队列、日程导出 .ics、以及带审计日志的后台管理;技术上把 SQLite 换成 PostgreSQL,并给 LLM 推荐加离线评测集。感谢李老师、助教和每一位组员——尤其是最后两天在群里互相 review、一起改到凌晨的大家。


参考文献


...全文

相关推荐

评论
收藏 已收藏
分享
返回顶部