Skip to content

feat: 搜索结果提炼与缺口分析(52号方案) #77

@lailoo

Description

@lailoo

搜索结果提炼与缺口分析方案

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 之间新增两层提炼:

  1. distill() — 深度提炼:逐条提取结构化信息(核心观点、关键数据、独特视角、可信度、内容分类)+ 跨源分析(共同主题、矛盾点、素材分类)
  2. 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 %} 包裹,无数据时行为与改造前一致

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