单元三 做一个网络服务 · 第 12 课

周报助手·规则版

先做一个不用 AI 的版本:按关键词把工作记录分组。它不花钱、不依赖网络,跑通了再加 AI,出了问题也好定位。

本课目标

  • 写一份清楚的需求,让 AI 做出周报助手的第一版。
  • 用 npm start 启动项目。
  • 按验收清单逐条检查,满意后存档。

先懂概念:先跑通,再加功能

做产品有一个朴素的原则:先做一个最简单但能用的版本,再一点点加功能。每一步都能跑、都存档,出了问题就知道是最近哪一步引入的。

周报助手的第一版这样工作:

  1. 你在网页上贴一段工作记录,每行一件事;
  2. 程序看每行开头的关键词,比如“完成:”“进行中:”“问题:”“下周:”,把它们分到对应的组;
  3. 拼成一份 Markdown 格式的周报,显示在网页上。

跟着做

1. 写需求,交给 AI

cd ~/ai-course/weekly-report
codex

把下面这份需求完整发给它:

请在当前文件夹做一个“AI 周报助手”的第一版(规则版),要求如下。

技术要求:
- 只用 Node.js 自带模块,不要安装任何依赖。
- 入口文件 server.js;创建 package.json,"type" 设为 "module",scripts 里的 start 为 node server.js。
- 监听地址从环境变量 HOST 读取,默认 127.0.0.1(只允许本机访问);端口从环境变量 PORT 读取,默认 3000。

功能:
- GET / 返回 public/index.html:一个文本框、一个“生成周报”按钮、一个显示结果的区域和一个“复制”按钮,界面简洁,中文显示正常。
- POST /api/report 接收 JSON {"notes": "..."},返回 JSON {"report": "..."}。
- 生成规则:逐行读取,按行首关键词分组——“完成/已完成”归入“本周完成”,“进行中/跟进”归入“进行中”,“问题/风险/阻塞”归入“问题与风险”,“下周/计划”归入“下周计划”,其余归入“其他”。关键词后面的中文或英文冒号要去掉。没有内容的分组不显示。
- GET /healthz 返回 ok,后面部署时用来检查服务是否活着。
- 输入为空时返回 400 和一句中文提示。

验收:先告诉我你的计划和文件结构,等我确认后再写。写完后告诉我怎么启动,并用一句话说明每个文件的作用。

审查它的计划,确认后回复“可以”。写完后退出 Codex。

2. 启动

npm start

终端打印访问地址后,打开 http://localhost:3000。

Windows 上如果 npm 报“因为在此系统上禁止运行脚本”,回到第 5 课,运行那条 Set-ExecutionPolicy 命令。

3. 用测试数据试一试

把下面这段贴进文本框,点“生成周报”:

完成:客户回访名单整理,共 4 家
完成:9 月报销汇总已提交财务
进行中:国庆促销方案,预算 2.8 万,完成 80%
问题:打印机墨盒缺货,影响出单
下周:确认上海展会合同
下周:寄送北辰教育样品
顺便买了绿植

你应该看到

一份分好组的周报,大致是这样:

# 本周工作周报

## 本周完成

- 客户回访名单整理,共 4 家
- 9 月报销汇总已提交财务

## 进行中

- 国庆促销方案,预算 2.8 万,完成 80%

## 问题与风险

- 打印机墨盒缺货,影响出单

## 下周计划

- 确认上海展会合同
- 寄送北辰教育样品

## 其他

- 顺便买了绿植

措辞、标题和排版不必完全一样,分组对就行。

验收清单

逐条试一遍,不通过就把现象告诉 AI,让它修改:

  • 文本框为空时点按钮,显示中文提示,而不是报错或白屏。
  • 用英文冒号写“完成:”也能正确分组。
  • 行首没有关键词的内容进了“其他”。
  • “复制”按钮能把结果复制下来。
  • 访问 http://localhost:3000/healthz 显示 ok。
  • 中文没有乱码。

读懂它

你不需要会写代码,但应该大概知道它是怎么工作的。重新打开 Codex,问它:

用 5 句话给我讲讲这个程序是怎么工作的:用户点按钮之后,数据经过了哪些步骤?

存档

确认都没问题后,停止服务器(Ctrl + C),存档。第 11 课的 hello.js 已经用不上了,顺手删掉:

git rm hello.js
git add -A
git commit -m "周报助手规则版"

参考实现

如果 AI 写的版本怎么改都跑不起来,可以下载 参考实现 对照。它包含到第 22 课为止的全部功能(AI 版、访问密码、每日上限),第 25 课的“清空”按钮留给你自己完成。不必和它一模一样。

常见问题

改了代码,网页没变化? 服务器启动时就把代码读进去了,改完要 Ctrl + C 停止,再 npm start 重新启动,然后刷新网页。

点按钮没反应? 按 F12 打开开发者工具,看“控制台(Console)”有没有红色报错,把报错复制给 AI。

自检

  • npm start 能启动周报助手。
  • 测试数据生成了分好组的周报。
  • 验收清单全部通过。
  • 规则版已经存档。