周报 Agent 的规则降级与草稿交付
周报生成适合先做出可用的规则草稿,再让模型改善表达。 模型不可用时,已知事项仍然能按规则交付;素材缺失或权限不足时,结果也应该说明缺了什么。
这篇取材于 2026-10-27 的周报草稿工具:它读取工作看板,可选补充群消息,生成适合人工复制到表单的内容。最终提交仍由用户完成,工具交付的是草稿与来源状态。
1 先判断任务需要哪种流程
周报任务的步骤已经确定:读取看板、整理事项、可选调用模型、检查字段、保存结果。模型不需要自由决定调用哪些业务工具,因此实现采用固定编排。
本地知识 Agent 则需要根据搜索结果调整关键词和选择阅读内容,具有动态工具循环。工作流和 Agent 的这种区别,也见于 Anthropic 对二者的定义。选择哪一种,应取决于任务是否需要动态决策。
text
必需的工作看板 ─→ 规范化事项 ─→ 规则草稿
↓
可选群消息 ─────────────────→ 可选模型整理
↓
表单字段定义 ───────────────→ 字段检查
↓
保存 JSON / Markdown / HTML
↓
可选个人通知2 数据源失败需要有不同的后果
看板是这份周报的主要依据。读取失败或内容结构不合法,本次流程就不能继续生成一份看似完整的报告。
群消息和远程模板信息属于辅助输入。它们不可用时,可以使用已有看板和内置字段定义继续处理,但要保留状态和原因。
| 数据源状态 | 用户应该知道什么 |
|---|---|
| 未启用群采集 | 本次没有尝试读取群消息 |
| 群素材不可用 | 读取被拒绝或失败,不能据此判断本周没有消息 |
| 未匹配到目标群 | 本次会话列表没有找到符合条件的群 |
| 读取成功但无相关消息 | 已经读取,但没有筛选出本次需要的内容 |
| 模板读取失败 | 本次使用内置字段定义,需要核对模板是否变化 |
程序通过结构化状态和提示信息保留这些区别。把它们全部变成一个空数组,虽然下游代码更省事,却会让报告丢失重要背景。
图片事件也只记录“有图片”。当前流程没有读取图片内容或执行 OCR,因此不会把截图推断成已经完成的工作。
3 看板当前状态不等于本周发生的事实
规范化后的每张卡片包含标题、当前列、日期、描述和进度。规则把待开始、进行中和测试中的事项列为后续计划,把已完成事项放到单独的参考区。
这个映射适用于使用者维护的周看板,但有一个前提:当前数据没有完整的状态变更时间或完成时间。卡片现在位于“已完成”,不能证明它就是本周完成的;列中的数量也不能直接当成一周的产出统计。
要回答“本周完成了多少事项”,需要完成时间或状态事件记录。当前工具可以总结当前快照,不应补造一条不存在的时间线。
4 输出结构要适合实际表单
目标表单包含四类内容:其他工作、下周工作概述、分享或协作需求、下周开发事项。它没有单独接收“已完成工作”的字段,因此工具把这部分放在参考区。
远程模板读取会更新已知字段的名称、必填标记和组件信息;字段映射本身仍是固定的。出现未映射的新字段时会提示人工检查,读取失败则回到内置定义。这不是可以自动适配任意表单的生成器。
输出以结构化字段为中心,再分别渲染 Markdown 和可逐项复制的 HTML。用户可以复制某一栏,保留没有证据的空栏,并在提交前检查表单要求。
必填标记和必填校验是两项能力
当前实现会显示模板中的必填标记,但生成器的最终检查主要是字符串处理和长度限制,没有根据远程必填标记阻止所有空字段。因此不能把“读到了必填信息”写成“已通过完整表单校验”。
若要进一步自动填写或提交,需要在写入之前补齐必填规则、字段类型、业务关系与模板版本检查。草稿阶段可以留给人处理的事项,不能直接带进自动提交阶段。
5 模型失败时交付规则草稿
规则生成器先完成可以确定的工作:根据卡片状态筛选计划,按类别统计,再逐项列出标题。没有额外证据的分享或其他工作保持为空。
之后才尝试模型整理。最终结果会记录采用了哪种生成方式:
- 没有模型配置,直接使用规则草稿。
- 模型响应被解析并通过当前字段检查,采用模型稿。
- 模型超时、请求失败或输出检查失败,回到规则草稿并记录原因。
规则和模型的结果都需要经过最终长度检查。假如规则列出的事项也超过字段上限,流程仍会失败,提示用户调整内容;不会为了交付而悄悄砍掉最后几项工作。
JSON 可解析仍不代表字段和事实都正确
当前解析器会把缺失字段补成空字符串,并把已有值转换为字符串,再做长度检查。因此它并没有严格拒绝所有字段类型错误,也没有验证每句话都能对应到原始卡片或消息。
如果需要更强的契约,应在转换之前检查必需键、原始类型和额外字段;事实核验则需要另一个步骤,例如让陈述关联具体卡片,并要求用户检查新增结论。要求模型“只根据证据写”可以帮助生成,不能代替这些验证。
字段长度的单位也要说明。此实现用字符串展开后的数量检查长度,接近 Unicode 码点数;它与 UTF-16 字符串长度、组合表情的视觉字符数以及 Token 数都不相同。是否符合实际表单限制,还要按表单的计数规则核对。
6 先保存结果再处理通知
一次生成会保留原始看板、筛选后的消息、结构化报告和渲染结果,并提供一个方便打开的最新结果目录。HTML 对素材进行转义,工作描述中的标签不会直接变成页面代码。
文件通过“写临时文件 → 重命名替换”的方式更新。这个边界是单个文件,不是整组文件的数据库事务;多个最新结果文件并行替换时,不能宣称读者一定同时看到了同一轮的全部文件。需要更强一致性时,可以写完独立运行目录,再发布一个指向完整结果的清单。
个人通知在结果保存以后执行,通知失败会单独记录。这样用户仍然可以打开已生成的草稿,而不会因为消息发送失败误以为报告丢失。
手动运行需要同时表达通知意图并启用通知开关;定时模式按配置决定是否通知。接收人从当前授权身份获取,群素材采集和个人通知分别控制。生成成功、保存成功、通知成功应分别报告。
7 定时表达式不等于可靠调度系统
当前定时器运行在普通进程中,并用一个运行中标记防止同一进程重复启动重叠任务。它没有持久化任务队列、停机补跑或跨进程互斥。
因此,进程停止以后不会自动生成报告,下一次启动也不会补上所有错过的时间。若将来需要无人值守运行,应另外设计任务登记、唯一执行标识、结果查询和失败告警,而不是只把定时表达式配得更频繁。
怎样验收这类生成工具
先用合成看板验证状态映射:未完成事项进入计划,已完成事项保留为参考,缺少证据的栏目保持为空。再检查素材不可用、字段超限、模型失败、HTML 特殊字符和通知失败等路径。
最后检查实际交付的四个字段:名称是否对应、长度是否合规、有没有把待办写成完成、有没有把来源缺失写成“没有工作”。报告是否真实,仍然需要对照原始事项,而不能只看它写得是否流畅。
延伸阅读
- 本地知识 Agent 的受限检索与来源核对:任务需要动态阅读时如何控制工具循环。
- AI 草稿保存的幂等与版本校验:从人工草稿走向业务写入时要补齐什么。
- LLM 评测与 Guardrails:怎样把失败场景变成可重复检查。
- AI 产品设计边界:清楚展示结果、缺失信息和用户需要完成的动作。