-
Notifications
You must be signed in to change notification settings - Fork 38
Open
Description
素材预分配到章节方案
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 | 可选使用 | 如果篇幅允许可以引用 |
分配策略
- 每条素材至少分配到一个章节(避免遗漏)
- 有关键数据的素材标记为 must_use
- 同一素材最多分配到 2 个章节
- 每个章节分配 1-3 条素材
- 用途必须与章节的叙事角色匹配
叙事角色与用途的推荐映射
| 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(字数分配):互补,字数控制写多少,素材控制用什么
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels