在两小时内使用 AI 实现自动生成并汇报周报的系统。
未标记
考查重点:时间预算与最小可交付链路。两小时先跑通记录导入、指定周生成、修改查看和汇报状态,外部渠道留可替换接口;用样例验漏项与重复发送
本题目录
参考答案
本答案基于相关资料,由 AI 辅助编写,供学习与面试准备参考。如有疏漏,欢迎反馈指正。
核心回答
两小时内应先交付“录入或导入工作记录 → 生成指定周的周报 → 查看修改 → 汇报状态可追踪”这条完整链路。先明确数据源、通知渠道和必需功能,按可替换接口设计,避免一开始接入多个外部平台、复杂权限和多Agent。
周报系统的难点不只是写摘要,还包括周范围、事实归属、重复生成及发送结果。AI可辅助实现项目和润色文本,但事项、日期与完成状态应来自输入数据,不能把“计划做”写成“已完成”。
最小系统怎样组织
- 数据入口:支持手工记录或文件导入,记录事项ID、负责人、日期、状态、描述和来源。先接一个真实可用入口,其他平台保留适配接口。
- 生成任务:按用户、周起始日、时区和数据版本取记录,确定本周进展、阻碍和下周计划。模型只整理已提供事实;无模型凭据时也能用规则模板生成基础周报。
- 报告与汇报:保存正文、版本、生成状态及发送状态;支持预览与修改。若题目要求自动发送,按配置调用目标渠道,生成成功与送达成功分开记录。
- 调度与恢复:定时任务与手动生成走同一服务;用业务键和状态更新避免并发重复任务。外部发送用独立发送记录、渠道回执及可用的幂等能力,超时后先查询结果,不能盲目重复发。
一个可运行的核心切片
下面是规则模板版的周报聚合,示例记录为假设数据。它把日期选择、去重、状态分组和稳定输出放在确定性代码里;模型摘要与发送渠道可以随后接在边界上。
from datetime import date, timedelta
def weekly_report(records, week_start):
start = date.fromisoformat(week_start)
if start.weekday() != 0:
raise ValueError("week_start must be Monday")
end = start + timedelta(days=7)
groups = {"done": [], "doing": [], "blocked": [], "planned": []}
seen = set()
selected = sorted(records, key=lambda r: (r["date"], r["id"]))
for row in selected:
day = date.fromisoformat(row["date"])
if not start <= day < end or row["id"] in seen:
continue
if row["status"] not in groups:
raise ValueError("unknown status")
text = row["text"].strip()
if not text or "\n" in text or "\r" in text:
raise ValueError("text must be a nonempty single line")
seen.add(row["id"])
groups[row["status"]].append(f"- {text}(记录 {row['id']})")
labels = {"done": "本周完成", "doing": "进行中",
"blocked": "问题与阻碍", "planned": "下周计划"}
lines = [f"# 周报 {start} 至 {end - timedelta(days=1)}"]
for status, title in labels.items():
lines.extend(["", f"## {title}", ""])
lines.extend(groups[status] or ["- 暂无记录"])
return "\n".join(lines) + "\n"
if __name__ == "__main__":
sample = [{"id": "T1", "date": "2026-10-13",
"status": "done", "text": "完成周报导入入口"}]
print(weekly_report(sample, "2026-10-12"))
这里的日期字段是业务时区下的日期,用户过滤应在可信服务端完成;导入跨时区时间戳时先转换。planned表示这周记录的下周计划,不是将未来所有日期都混入本周。相同ID示例采用排序后首条,真实系统若允许更新,应先按版本确定最新记录;输出到网页时还要使用安全渲染。
AI Coding时如何推进与验证
先让AI读工程结构和需求,复用现有栈,贯通数据到页面,再补生成与发送适配。每次按一个可验证切片修改,运行后用实际报错定位;不在最后才发现依赖或接口无法启动。
重点验证空周、周边界、重复记录、未知状态、模型超时、重复点击与发送失败。模型生成要检查事实覆盖和引用,关键状态或金额直接使用源字段。演示时同时展示正常路径、一个错误恢复以及任务状态;分析慢时分别量数据读取、模型生成和发送等待,而不是泛称AI慢。
两小时的取舍应让核心可运行、关键边界可解释、扩展点清楚。技术亮点是确定性事实处理与生成表达分工,生成和送达分开恢复。
对应教程
- 27-Skills技能与AI编程工具实践:理解AI辅助实现时的上下文和规则组织。
- 实战项目-深度研搜/14-FastAPI接口与项目闭环:理解接口、任务状态与项目闭环的组织。
参考资料
- 国内:zero2Agent:AI生成代码验证:采用静态、运行与语义验证的分工,组织正文中限时项目对主链路、关键边界与模型事实覆盖的检查。
- 国内:JavaGuide:Workflow、Graph与Loop:借鉴固定工作流与状态转移的设计,说明正文中生成、发送和确认状态为何要分开保存与恢复。
- 国内:JavaGuide:Harness Engineering:采用工具执行、产物与观察的职责划分,说明正文中 AI Coding 的开发反馈与周报系统实际运行结果应分别验证。
- 国外:Anthropic:Effective harnesses for long-running agents:参考增量实现与逐项验证的实践,组织正文中贯通可运行切片、根据实际报错修正并完成演示主链路的步骤。
- 国外:Anthropic:Reduce hallucinations:借鉴基于给定事实生成与逐项证据校验的做法,说明正文中事项、日期和完成状态必须来自输入数据,计划不能写成已完成。