-
Notifications
You must be signed in to change notification settings - Fork 38
Open
Description
搜索结果提炼与缺口分析方案
52号方案 | 状态:✅ 已实现
核心理念:搜索结果的三重价值
搜索结果不只是"写什么"的素材,更是"不写什么"和"怎么写才不同"的决策依据。
1. 事实依据(当前已有)
搜索结果最基本的作用:提供准确的技术信息,避免 LLM 幻觉。
2. 缺口发现(本方案核心)
通过分析搜索结果的分布和矛盾,发现现有内容的空白和争议,为文章找到独特切入点。
3. 写作方向指引(给 Planner 的输入)
搜索结果的类型分布直接指导 Planner 的章节设计 — 哪些内容已经饱和(可以精简),哪些内容稀缺(应该重点补充)。
现状问题
当前数据流:Researcher → summarize() → 一段模糊的 background_knowledge → Planner
| 问题 | 表现 | 根因 |
|---|---|---|
| 素材利用率低 | 搜索到 10-15 条结果,但 Planner/Writer 只看到一段模糊的"背景知识" | summarize() 把结构化搜索结果压缩成了一段文字 |
| 缺乏深度 | 文章停留在"介绍 X 是什么",缺少独特视角 | 没有分析"这个话题还缺什么" |
| 大纲与素材脱节 | Planner 设计大纲时不知道搜索到了什么具体内容 | Planner 只收到 background_knowledge 和 key_concepts |
| 信息丢失 | 搜索结果中的数据、案例、对比在传递过程中丢失 | summarize() 是一次性压缩,没有保留结构化信息 |
改造目标
在 Researcher 和 Planner 之间新增两层提炼:
- distill() — 深度提炼:逐条提取结构化信息(核心观点、关键数据、独特视角、可信度、内容分类)+ 跨源分析(共同主题、矛盾点、素材分类)
- analyze_gaps() — 缺口分析:找出搜索结果没覆盖的重要方面、独特写作角度、写作策略建议
数据结构
DistilledSource(单条提炼)
- title, url, core_insight, key_data, unique_perspective
- content_type: concept / case / data / comparison / tutorial
- credibility: high / medium / low
- relevance_score: 1-5
跨源分析
- common_themes: 多源共识
- contradictions: 矛盾点
- material_by_type: 按类型分类的素材
GapAnalysis(缺口分析)
- content_gaps: 搜索结果没覆盖的重要方面
- unique_angles: 可以让文章脱颖而出的角度
- writing_recommendations: 推荐结构、必须覆盖、可以精简、差异化策略
改动文件
| 文件 | 改动类型 | 说明 |
|---|---|---|
prompts/blog/distill_sources.j2 |
新建 | 深度提炼 Prompt 模板 |
prompts/blog/analyze_gaps.j2 |
新建 | 缺口分析 Prompt 模板 |
prompt_manager.py |
修改 | 新增 render 方法 |
agents/researcher.py |
修改 | 新增 distill() 和 analyze_gaps(),修改 run() 流程 |
agents/planner.py |
修改 | generate_outline() 接收新参数 |
prompts/blog/planner.j2 |
修改 | 新增素材分析、缺口、写作建议展示区域 |
prompts/blog/writer.j2 |
修改 | 新增章节素材引用区域 |
schemas/state.py |
修改 | SharedState 新增 7 个字段 |
效果预期
| 指标 | 改造前 | 改造后 |
|---|---|---|
| 素材利用率 | ~30% | ~80% |
| 文章深度 | 复述搜索结果 | 有独特角度 + 覆盖缺口 |
| 数据引用 | 偶尔出现,常被改写 | 原样保留,标注来源 |
| 大纲质量 | 通用模板化 | 基于素材定制,覆盖缺口 |
| 额外耗时 | 0 | ~8s(distill 5s + gaps 3s) |
兼容性设计
- 所有新增字段都有默认值,不影响现有流程
- 通过环境变量
DISTILL_ENABLED控制是否启用 - mini 模式可跳过(节省时间和 Token)
- Planner 模板中新增内容全部用
{% if %}包裹,无数据时行为与改造前一致
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels