在两小时内使用 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慢。

两小时的取舍应让核心可运行、关键边界可解释、扩展点清楚。技术亮点是确定性事实处理与生成表达分工,生成和送达分开恢复。

对应教程

参考资料

  • 国内:zero2Agent:AI生成代码验证:采用静态、运行与语义验证的分工,组织正文中限时项目对主链路、关键边界与模型事实覆盖的检查。
  • 国内:JavaGuide:Workflow、Graph与Loop:借鉴固定工作流与状态转移的设计,说明正文中生成、发送和确认状态为何要分开保存与恢复。
  • 国内:JavaGuide:Harness Engineering:采用工具执行、产物与观察的职责划分,说明正文中 AI Coding 的开发反馈与周报系统实际运行结果应分别验证。
  • 国外:Anthropic:Effective harnesses for long-running agents:参考增量实现与逐项验证的实践,组织正文中贯通可运行切片、根据实际报错修正并完成演示主链路的步骤。
  • 国外:Anthropic:Reduce hallucinations:借鉴基于给定事实生成与逐项证据校验的做法,说明正文中事项、日期和完成状态必须来自输入数据,计划不能写成已完成。

相关面经

2 篇

美团

后端开发工程师(AI / Agent 方向)
秋招一面
查看原面经 →
面试之前发了一个aicoding,限时两小时,没写完。是做一个自动汇报周报的系统。

美团

后端开发
暑期实习二面
查看原面经 →
一二面前都发了个ai coding题让我做,然后面试官上来就要看我的ai coding题。二面的ai coding题是做一个自动周报系统,不难。

相关题目

4 题