Skip to content

feat: 素材预分配到章节(54号方案) #80

@lailoo

Description

@lailoo

素材预分配到章节方案

54号方案 | 状态:✅ 已实现


核心理念

问题:Writer 面对一堆素材不知道怎么用

当前数据流中,Writer 写每个章节时收到的是"全部素材",需要自己判断"哪条素材该用在哪个章节"。经常出现:重要数据被遗漏、同一素材被多个章节重复引用、不相关素材被强行塞入。

解决方案:Planner 在大纲阶段预分配素材

Planner 设计大纲时,同时为每个章节分配具体素材和使用指导。Writer 写章节时只看到本章节的素材,不需要从 10+ 条素材中自己判断。

素材预分配 = 在大纲阶段就回答"每个章节用什么素材、用来干什么",而不是把这个决策推给 Writer。


设计目标

目标 说明
减少 Writer 决策负担 Writer 不需要从全部素材中挑选,只看到本章节的素材
提高素材利用率 每条素材都有明确归属,不会被遗漏
避免重复引用 同一素材不会被多个章节重复使用(除非有意为之)
保证数据准确 关键数据在分配时就标注"必须原样引用"
支持来源标注 Writer 引用素材时可以自动标注来源链接

数据结构

MaterialAssignment(素材分配单元)

{
  "source_index": 2,
  "use_as": "data_support",
  "priority": "must_use",
  "instruction": "用这个数据证明 Skill 的价值",
  "key_data": ["效率提升 40%"]
}

用途分类(use_as)

use_as 含义 Writer 使用方式
data_support 数据支撑 引用具体数字,标注来源
case_study 案例引用 讲述具体案例,增加真实感
concept_explain 概念解释 引用权威定义或解释
comparison 对比分析 用于对比表格或对比论述
counter_argument 反面论证 展示不同观点,增加深度
best_practice 最佳实践 提供具体的 Do/Don't 建议
tutorial_step 教程步骤 提供操作步骤或代码示例

优先级(priority)

priority 含义 Writer 行为
must_use 必须使用 必须在章节中引用,不能忽略
recommended 推荐使用 建议引用,但可以根据行文需要调整
optional 可选使用 如果篇幅允许可以引用

分配策略

  1. 每条素材至少分配到一个章节(避免遗漏)
  2. 有关键数据的素材标记为 must_use
  3. 同一素材最多分配到 2 个章节
  4. 每个章节分配 1-3 条素材
  5. 用途必须与章节的叙事角色匹配

叙事角色与用途的推荐映射

narrative_role 推荐的 use_as
hook case_study, data_support
what concept_explain
why data_support, case_study
how tutorial_step, best_practice
compare comparison, counter_argument
verify data_support, case_study
summary (通常不分配)

改动文件

文件 改动类型 说明
prompts/blog/planner.j2 修改 新增素材分配指导
agents/planner.py 修改 大纲输出新增 assigned_materials 字段
prompts/blog/writer.j2 修改 新增预分配素材展示
agents/writer.py 修改 从大纲中读取 assigned_materials,传递给 writer.j2
agents/assembler.py 修改 新增 {source_NNN} 占位符替换逻辑
schemas/state.py 修改 大纲 JSON schema 新增字段

效果预期

指标 改造前 改造后
素材利用率 ~50% ~90%
数据引用准确性 偶尔改写数字 key_data 标记为"必须原样引用"
章节写作方向 content_outline 要点列表 core_question + assigned_materials
来源标注 {source_NNN} 自动替换为链接
重复引用 常见 受控(同一素材最多 2 个章节)

兼容性设计

  • 所有新增字段都有默认值
  • 无素材时 Writer 行为与改造前完全一致
  • writer.j2 中用 {% if assigned_materials %} 包裹

关联方案

  • 52号方案(搜索结果提炼):上游,distill() 输出是分配的输入
  • 55号方案(核心问题驱动):协同,素材是回答核心问题的证据
  • Step 1.1(叙事流设计):协同,叙事角色决定素材用途映射
  • Step 1.2(字数分配):互补,字数控制写多少,素材控制用什么

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions