AI 日报编辑管线的提示词迭代:从模板化失败到数据驱动
背景
2026 年 10 月底,我们开始搭建一个自动化的 AI 日报编辑管线。目标很明确:让 AI 每天自动搜索、筛选、起草、审稿并发布 3-5 条高信息密度的 AI 领域新闻。
但现实很快给了教训——AI 生成的内容质量远低于预期。
第一次尝试:模板化输出
最初的 WRITER 提示词长这样:
请根据提供的搜索结果,生成一篇 AI 日报文章。
要求:
1. 包含事实和通用建议
2. 区分已验证和推测内容
3. 输出 3-5 条新闻
问题:
- AI 输出的内容结构高度模板化:“编辑判断/建议” 出现在每条新闻后面
- 缺乏具体数据:没有收入数字、用户数量、版本号
- 泛化建议过多:“建议关注”、“值得关注” 这样的空话占 40% 篇幅
第二次迭代:删除模板指令
我们删除了 “Separate reported facts…” 这样的模板指令,改为:
请将分析直接融入每个段落:
1. 每条新闻必须包含具体数据(收入、用户数、日期、版本号)
2. 覆盖 AI 产品、市场趋势、政策法规多维度
3. 每段含事实/影响/行业背景对比
结果: 内容深度提升了,但出现了新问题——AI 开始编造日期和推断未证实的因果关系。
第三次迭代:日期验证
模型开始输出类似这样的内容:
“周四 11/5,某公司发布了新模型…”
问题在于 “周四 11/5” 是模型根据上下文推断的,不是原始数据。我们添加了严格的日期验证规则:
禁止相对日期推断:
- 如果原始数据中没有明确日期,禁止推断
- 只使用原始数据中出现的绝对日期(如 "2026-11-05")
- 所有日期必须可追溯到具体来源
效果: 日期幻觉减少了 80%,但审稿阶段(REVIEWER)开始频繁拒绝稿件。
第四次迭代:独立审稿机制
我们引入了独立的 REVIEWER 模型(用 gpt-6-luna),它的提示词要求:
独立审稿规则:
1. 每个主张必须有原文支持
2. 拒绝未经证实的推断(如 "民主党控制两院")
3. 拒绝泛化采购建议(缺乏具体数据)
4. 接受单个支持良好的事件报道
关键发现: REVIEWER 的拒绝率高达 60%。主要原因:
- 市场事件日期引用歧义
- 未经原文严格证实的政治推断
- 泛化采购建议缺乏具体数据支撑
第五次迭代:选择层降级容错
我们意识到问题不在 WRITER,而在 SELECTOR 层过于保守。原提示词要求:
“提供 3-5 条不同行业角度的新闻”
但现实中,某些天可能只有 1-2 条高质量新闻。我们改为:
最低选择项:1 条
多样性检查移至审稿阶段
如果证据不支持多行业角度,接受单事件报道
效果: 管线通过率提升了 40%,审稿拒绝率降至 15%。
第六次迭代:模糊引句验证
这是最技术性的一次迭代。引句验证是确保内容真实性的核心机制,但遇到了一个问题:
AI 生成的引句是截断的,而原文是完整的。
例如,原文是:
“The Wall Street Journal reported that Nvidia fell 9.3% to $181.60…”
AI 生成的引句是:
“Nvidia fell 9.3%…”
标准字符串匹配失败了。我们实现了 _fuzzy_match() 函数:
def _fuzzy_match(quoted, original):
# 1. 显著词 60% 重叠阈值
# 2. 6 字符前缀匹配
# 3. 截断词容忍
# 4. 引号验证逻辑收紧
...
效果: 引句验证通过率从 30% 提升到 90%。
核心经验
1. 提示词是迭代出来的,不是设计出来的
每次迭代都解决了上一个迭代的问题,但没有完美的提示词。关键在于:
- 保留失败记录:每次拒绝都有 reason 字段
- 最小化改动:每次只改一个变量
- 数据驱动:用通过率、拒绝率、CTR 等指标衡量
2. 独立审稿是必要的
WRITER 和 REVIEWER 用不同的模型(Astra + Luna),不同模型的判断标准不同。交叉验证能拦截 60% 的低质量输出。
3. 不要过度约束 AI
最初的提示词要求太多(3-5 条、多行业、数据支撑),导致 AI 要么编造,要么跳过。降级到 1 条最低要求后,质量反而提升了。
4. 技术验证比语言约束更有效
提示词说 “不要编造” 没用,但 _fuzzy_match() 这样的技术验证能 100% 拦截伪造的引句。
后续方向
- 日期验证自动化:当前依赖手动规则,后续可以集成日历验证
- 审稿标准动态调整:根据历史通过率调整拒绝阈值
- 双语一致性检查:确保中英文版本传递相同的事实和限制条件
本文使用 AI 辅助起草,并经过独立模型审稿。数据来自实际的生产管线运行记录。