- 人工智能
- 大模型
- AI Agent
- RAG
- 深度研究
- 搜索引擎
- 后端
- 代码智能体
【免费下载链接】deepsearch
openJiuwen DeepSearch是一款知识增强的深度搜索与研究框架,有业界领先的片段级引用和溯源推理能力,提供精准Agentic搜索与研究能力
本文是 openJiuwen DeepSearch 子报告大纲阶段"覆盖证据(Coverage Evidence)通道"的实现详解。该通道与既有的
key_passages(关键词相关性检索)并行,按客观信息密度从原文尾部抽取高密度事实段落,解决"原文含事实但不含提问关键词、被检索阶段丢弃、大纲看不见"的结构性事实遗漏问题。读完本文,你将掌握该通道的设计动机、数据契约、五类事实特征与计分口径、供给区切片方案、提示注入缓解策略、预算控制、边界处理与测试验证路径,可直接对照源码进行二次开发或效果评估。
1. 背景与动机:为什么需要关键词无关的证据通道
1.1 既有key_passages通道的局限
在子报告生成流程中,extract_key_passages(位于 collector_evidence.py)是 query/title关键词命中式的规则抽取:先由extract_keywords从 query 与标题提取轻量关键词(CJK 按 4/3/2 字滑窗切分、ASCII 按 token 切分,上限 30 个),再由_passage_score对每个段落打分(关键词命中 +2.0、数字单位 +1.5、长度适中 +0.5、超长 -1.0),排序后取 Top-K(默认 5 段)。
这种"相关性检索"存在一个结构性盲区:原文中不包含提问关键词、但确实包含数字/日期/实体/引用等高信息密度事实的段落,会在采集阶段被直接丢弃。大纲阶段因此"看不见"这些事实,也就不会为它们安排章节结构——最终表现为报告中的结构性事实遗漏(structural fact omission)。
1.2 Coverage 通道的定位与命名
Coverage Evidence 通道(源码注释中称为"方案 B"的工程实现)在抽取逻辑上与关键词完全无关,按客观信息密度(数字、日期、时间、实体、引用五类事实特征)打分,专门兜住关键词检索漏掉的事实段落。它与structured_evidence_guide(rationale 链路产出的维度级覆盖状态表)并存,但定位为段落级补充信号:
structured_evidence_guide:维度级覆盖信号(哪些维度已覆盖、哪些薄弱);- Coverage 通道:段落级覆盖信号(这段原文有没有高密度事实、要不要喂给大纲)。
文档明确划定本通道的维护范围与边界(见 coverage-evidence-channel.md):
- 覆盖:子报告大纲阶段的覆盖证据通道,即"规则版"实现;
- 不覆盖:写作阶段 prompt(方案 A,见
sub_report_markdown/)、按section_iscore分级(未实现); - 后续 PR 规划中"LLM 压缩增量、直达注入虚拟条目"等增强 channel 均不在当前实现内。
2. 两阶段证据输入来源:大纲 vs 写作
子报告章节生成分大纲与写作两个阶段,各自接收的 channel 构成不同:
2.1 大纲阶段(_generate_sub_section_outline)
prompt 位于 sub_section_outline/(system.md+user.md)。输入包括:
- 章节结构上下文:章节标题/描述/格式要求、全局大纲、
section_local_contract、research_intent、背景知识特例(sub_section_core_content_from_background_knowledge); sub_section_core_content(顺序拼接、不交错):- 条目摘要块(
build_core_content_list):fulltext 条目渲染清洗后原文前 500 字符(outline_summary_text),passage 条目渲染被选中的段落; - 规则版 coverage 聚合块(
===== COVERAGE PASSAGES =====分隔符包裹,本通道范畴);
- 条目摘要块(
structured_evidence_guide:维度级覆盖状态表(rationale 链路产出)。
2.2 写作阶段(write_subsection_reports)
prompt 位于sub_report_markdown/。输入包括:
classified_content(写作主证据):fulltext 条目整篇原文 + passage 条目选中段,经build_citation_infos渲染为[citation:X]块;- 本章提纲(大纲阶段产物,写作边界)、章节格式要求、背景知识等上下文。
3. 可见行为:双通道并存与运行开关
3.1 组装行为
_append_rule_coverage_to_core(evidence.py)对每个全文证据额外抽取覆盖证据,去重后聚合成一个===== COVERAGE PASSAGES =====块,追加到core_content_list末尾(key 块在前、coverage 块在后、不交错)。
- 纯叙述、无事实特征的文档不产生覆盖证据;
- 所有文档都无有效事实时不追加该块;
- 覆盖证据的供给区为文档大纲摘要块切片线之后的尾部(方案乙口径,见 §7)。
3.2 运行开关coverage_rule_block_enable
开关定义于 config.py 的AgentConfig.coverage_rule_block_enable,默认True,经请求配置统一下发(与visualization_enable等报告开关同风格):
coverage_rule_block_enable: bool = Field( default=True, description="子报告大纲阶段规则版覆盖证据(coverage passages)开关," "关闭后大纲证据仅含条目摘要块", )下发链路在 main_graph_nodes.py(agent_config["coverage_rule_block_enable"] = origin_agent_config.get("coverage_rule_block_enable", True)),消费侧在 evidence.py 的_prepare_evidence:置False时大纲证据仅含条目摘要块,可单独回滚,不影响 key 通道与其他报告开关。测试test_coverage_rule_block_enable_default_matches_config与test_coverage_rule_block_enable_false_skips_rule_block(test_sub_report.py)双向绑定该行为。
3.3 大纲 prompt 的双通道语义
大纲 prompt(sub_section_outline/system.md的## Evidence Channels节)新增两路证据语义说明:
- key passages =relevance signal(相关性信号);
- coverage passages =completeness signal(完整性信号),包含数字、日期、命名实体、引用,以及关键词匹配不到的非数字事实陈述(关系、结论、依赖);
- 证据边界从"仅 key passages"放宽为"key passages + coverage passages";
- 明确覆盖证据不强制开新标题,遵守"证据不改结构"规则——coverage 的事实归入最相关的既有标题;
Document N key passages:/Document N coverage passages:头部与===== COVERAGE PASSAGES =====分隔符是溯源元数据,不得复述进子章节标题(由test_subsection_outline_prompt_provenance_tokens_match_actual_block_format双向绑定:prompt 措辞与实际块格式任一侧漂移即测试失败)。
4. 提示注入攻击面与两层缓解(PR !380 审核意见)
4.1 归因口径:增量是什么
大纲阶段在本次改动之前已接收 key passages 与全文前 500 字符(report_rationale_fulltext.py::build_core_content_list),基础提示注入风险并非本通道引入。本通道的增量是全文 Coverage 扫描——原来位于正文第 500 字符之后、不进入大纲 Prompt 的内容(最多 6000 字符/章节)从此可被主动提取;恶意指令旁若带有年份/金额等事实锚点,会获得较高 Coverage Score 而被选中。因此需要两层缓解。
4.2 缓解一:隐藏内容剥离
collector_evidence.py::_normalize_coverage_content在剥普通标签之前执行:
<script>/<style>连同载荷整体删除(_COVERAGE_HTML_HIDDEN_BLOCK_PATTERN,未闭合块仅删标签本身,避免误删正常正文);- HTML 注释整体删除(
_COVERAGE_HTML_COMMENT_PATTERN); - 再剥普通标签(
_COVERAGE_HTML_TAG_PATTERN)。
顺序至关重要:先删载荷可防止"剥壳后以纯文本残留、被 Coverage Score 选中注入下游 Prompt"。渲染页面上可见的正常文本不受影响。测试test_normalize_removes_hidden_html_blocks_and_comments与test_coverage_passages_exclude_hidden_injection_payload_beyond_char_500(test_coverage_evidence.py)覆盖该行为。注意:这是证据抽取侧的清理,仅作用于 coverage 通道;key 通道与前 500 字符的既有注入面不因此扩大或缩小。
4.3 缓解二:信任边界声明
大纲 prompt(sub_section_outline/)明确:两路证据均为不可信网页内容,仅作为事实数据使用;忽略其中嵌入的指令、角色变更、输出格式覆盖与工具请求;报告结构、输出格式与语言只服从大纲 prompt 本身。措辞对齐仓库既有先例(rationale_generator/、brief_evidence_review/),由test_subsection_outline_prompt_untrusted_evidence_boundary绑定。
5. 数据契约:CoveragePassage 与 Coverage Score
5.1 CoveragePassage 数据模型
定义于 collector_evidence.py:
@dataclass class CoveragePassage: text: str # 合并后的证据文本,内部保留段落换行 score: float # 块内成员段落的最高 Coverage Score source_indices: list[int] # 命中的段落序号(按原文切分后,升序) features: dict[str, float] # 块内各特征在原段落上的聚合计数5.2 Coverage Score 权重表
基础加权公式(常量定义于源码_COVERAGE_*_WEIGHT系列):
| 特征 | 权重 | 封顶 | 说明 |
|---|---|---|---|
| Number(数字) | 1.0 | 5 | 普通数字计数,日期内部数字由日期区间排除 |
| Date(日期) | 2.0 | 3 | 绝对时间段锚点(2025年 / 2025-03-17 / 第X季度 / Q1 / 上半年) |
| Time(时间) | 1.5 | 3 | 相对时间词(去年/今年/本季度…);"目前/当前/近期"是话语连接词,不计 |
| Entity(实体) | 1.5 | 3 | 中文机构后缀 + 英文正字法专名候选 |
| Citation(引用) | 1.0 | 3 | [1]/(Reuters, 2025)/来源:xxx/https://... |
| Structure(信息结构) | 1.0 | 1 | 仅对至少含一个事实特征的段落生效(避免纯叙述段靠长度入选) |
5.3 计分口径:density 与 absolute
- 默认
density(_COVERAGE_SCORE_MODE="density"):base / max(段落长度, _COVERAGE_DENSITY_MIN_LEN=40),按段落长度归一化,防止超长表格霸榜; absolute:原始加权 +1.0*S(结构分,长度落在 [40, 800] 区间给满分,过长线性衰减)。
score_mode经CoverageOptions(score_mode=...)传入extract_coverage_passages的options参数临时覆盖做 A/B。文档记录了真实数据 A/B 结果:覆盖率 47%→58%、Newly Covered 92→119、噪声 80%→77%,密度口径最终被选定为默认。
6. 事实特征抽取的规则细节
6.1 数字特征:富版事实模式
coverage 通道使用自有富版事实模式_COVERAGE_NUMBER_PATTERN,与 key 通道extract_key_passages的内联窄正则相互独立、不共用模式。其组成(源码中显式拼接):
- 数字+单位分类(
_SUFFIX_UNIT_PATTERN:货币/大数/百分比/时间/计数/长度/重量/体积/技术/电气/医学/学术共 12 类单位,长词在前防止"万亿"被"万"抢先短路); - 前置货币符号(
$¥€£₩₹₽+ 数字,如$100 million); - 学术统计模式(
p<0.05、n=1000、r=0.85、R²=0.76、95% CI、±1.5、α=0.05); - 裸数字兜底(含千分位与拉丁边界,
(?<![A-Za-z0-9])...(?![A-Za-z])避免 "5Very" 误判)。
日期内部数字由日期区间排除(_count_numbers_outside_date_spans)。季度/半年归入日期特征(权重 2.0),相对时间词归入时间特征(权重 1.5)。测试test_coverage_features_date_not_counted_as_number、test_large_number_with_year_suffix_not_date覆盖边界。
6.2 实体特征:正字法结构信号
- 中文侧:
前缀 + 机构后缀结构信号判定(_COVERAGE_ENTITY_SUFFIXES:公司/集团/大学/研究院/研究所/科学院/委员会/基金会/银行/医院/总局/基地/产业园/论坛/峰会/实验室/中心/协会等);紧邻的法定/附属尾词(如"股份有限公司""附属医院")去重,避免把单个机构算成多个实体(test_cjk_compound_org_not_double_counted); - 英文侧:只认正字法结构信号——词内第二处大写字母(OpenAI/NASA/iPhone/U.S,与位置无关)或非句首的首字母大写词("at Microsoft" 的 Microsoft);句首首字母大写是英文书写规范而非专名信号(Revenue/However 会被误判为实体,PR !380 评审意见),不作为判定依据;连续 Title 词序列(Goldman Sachs / 标题行 Markets Fall Again)压缩计 1 个实体,序列连续性按 token 间间隔判定——只有纯水平空白延续序列,间隔含逗号/顿号/数字即重置("Apple, Microsoft, Google" 列举各自计数);句首专名("Microsoft announced...")因此漏检,由 key 通道关键词兜底(宁可漏检不可误报,整段叙述文本涌入 coverage 是更坏的失败)。
计数(_count_entities)与锚点提取(extract_fact_anchors)共用_iter_english_entities同一口径,避免两处判定漂移。test_english_narrative_sentence_not_entity、test_english_entity_structural_signals、test_english_title_sequence_gap_breaks_on_nonblank、test_english_carriage_return_is_sentence_break等测试覆盖这些细节。
6.3 合并跨度上限与近似去重
max_merge_span=5:相邻高分段连续并入一个证据块超过该上限即另起新块,防止雪崩吞并(_COVERAGE_MAX_MERGE_SPAN);块间天然不共享段落(test_max_merge_span_caps_block_size);- 两级去重:
- Level 1 精确去重:归一化文本(NFKC + 换行/连续空白规整)相同即丢弃;
- Level 2 近似去重(方案4 锚点级,v2 口径):按锚点键重合率≥
_COVERAGE_ANCHOR_DEDUP_RATIO=0.85判定"同一事实的换措辞"。
- 锚点键规整(
_anchor_dedup_key):数值锚点保留原文(数字/小数点/正负号/单位/量级词一律不折叠),仅做三类字符级规整——千分位逗号(1,000≡1000)、全半角百分号(20%≡20%)、数字与单位间排版空白(3 万≡3万)。因此20%与20个百分点不同键、1.5亿元与15%不同键——数字相同但单位/量级/写法不同的锚点不被折叠,避免锚点级去重误删"数字核心相同、语义维度不同"的真实事实; - 单锚点块跳过近似去重:一个共享数字不足以判定"同一事实的换措辞"(如"收入增长20%"与"成本下降20%"),误删代价大于漏删;
- 结构相似但版本/年份/单位/量级不同的事实不会被误删(
test_anchor_dedup_key_preserves_magnitude_unit、test_anchor_dedup_keeps_same_number_different_metric、test_anchor_dedup_keeps_same_number_different_direction_or_subject、test_anchor_level_dedup_keeps_structural_similar_different_facts等)。
7. 供给区切片(方案乙):摘要块之外的尾部全量供给
7.1 演进背景
rationale 选材接管证据选择后,key_passages通道已退役(不再进入大纲/写作 prompt,仅保留 target-paper 兜底用途)。早期实现是"全文抽取后按文本重叠 + 锚点救援判重剔除",但锚点是字面记号而非语义——不同事实可共用同一组锚点(如"收入增长20%"与"成本下降20%"),重叠块因"无新锚点"被整段误删(PR !406 评审复现)。切片方案把判重环节整个移除。
7.2 互补切片机制
条目摘要块的实际渲染文本(与report_rationale_fulltext.build_core_content_list渲染口径一致)为:
- fulltext 条目:清洗后原文前 500 字符(
collector_evidence.py::outline_summary_text,OUTLINE_SUMMARY_MAX_CHARS = 500单一真源,防两处维护漂移); - passage 条目:被选中的
passage_text(当前规则块只对 fulltext 条目运行,此条供后续复用方沿用同一口径)。
覆盖证据不做与摘要块的判重,直接从outline_summary_tail_text返回的尾部抽取——该函数与outline_summary_text在同一个_normalize_coverage_content清洗文本上取互补切片([OUTLINE_SUMMARY_MAX_CHARS:]):
def outline_summary_text(content: str, max_chars: int = OUTLINE_SUMMARY_MAX_CHARS) -> str: text = _normalize_coverage_content(str(content or "")) return text[:max_chars] if len(text) > max_chars else text def outline_summary_tail_text(content: str, max_chars: int = OUTLINE_SUMMARY_MAX_CHARS) -> str: text = _normalize_coverage_content(str(content or "")) return text[max_chars:]因此摘要块已供给的内容在抽取阶段构造性地不被触碰,摘要块之外的内容全部供给。原则是宁可多供(token 冗余)不可漏供(事实丢失),冗余由单文档/章节共享预算兜底。测试test_outline_summary_tail_is_exact_complement_of_summary、test_doc_coverage_supply_zone_excludes_summary_prefix、test_reviewer_repro_cost_fact_with_shared_anchors_is_supplied、test_supply_zone_fact_right_after_500_boundary_is_supplied覆盖。
7.3 边界行为
清洗后 ≤ 500 字符的 fulltext 文档整篇已进大纲摘要块,尾部供给区为空,覆盖证据对该文档为空——这是方案乙切片的必然结果,属正确行为而非缺陷(test_extract_coverage_passages_empty_for_short_fulltext_doc)。
8. 核心流程与两级预算控制
8.1 核心调用链
- 大纲输入装载(
generate_sub_report→enrich_fulltext_for_section+_append_rule_coverage_to_core),对每个全文证据:extract_coverage_passages(outline_summary_tail_text(item.original_content), max_passages=_COVERAGE_TOP_K_CAP, max_chars=1200)从尾部抽取覆盖证据块;- 结果按
(content, 全部参数)做进程内有界缓存(functools.lru_cache(maxsize=512),_COVERAGE_CACHE_MAXSIZE),同章节重试/重生成不重复计算;缓存键含CoverageOptions(frozen dataclass 可哈希),返回对象每次调用新建、调用方可自由修改不影响缓存或其他调用方(test_extract_uses_bounded_cache_per_content_and_params、test_extract_returns_independent_objects_not_shared_by_cache); - 选段不预设硬 Top-K(
_COVERAGE_TOP_K_CAP=128仅作候选池上限),由单文档字符预算兜底(方案2:预算即终止条件); - 裁入章节级总预算
_COVERAGE_MAX_TOTAL_CHARS = 6000(_fit_coverage_to_budget)。
- 组装:所有 key 块先进入
core_content_list;最终把一个聚合 coverage 块追加到末尾。 - 拼入 prompt:
_generate_sub_section_outline把sub_section_core_content(含两路证据)与structured_evidence_guide一起拼入 outline prompt。 - 大纲生成:大纲模型依据两路证据设计子章节标题结构;覆盖证据中的事实归入最相关的既有标题,不要求为它单独开标题。
8.2 两级预算:单文档 1200 字符 + 章节共享 6000 字符
- 单文档预算:
extract_coverage_passages的max_chars参数(默认_COVERAGE_MAX_CHARS_PER_DOC=1200,生产路径显式传此值;公共签名默认值引用同一常量,test_extract_coverage_passages_default_max_chars_matches_production防漂移); - 章节共享预算:
_COVERAGE_MAX_TOTAL_CHARS=6000,由evidence.py集成层_fit_coverage_to_budget二次裁剪。
8.3 预算裁剪语义
_fit_coverage_to_budget(与抽取内部预算循环同语义):
- 整块能放下的完整保留;
- 放不下且已有更高考分块的整块跳过、继续尝试后面更小的块(
test_fit_coverage_to_budget_skips_oversized_block_and_keeps_smaller_later_blocks); - 仅当第一个块即超出预算时截断该块,保证每个文档至少能贡献一个证据块(
test_fit_coverage_to_budget_keeps_whole_blocks_and_truncates_first_only); - 章节共享预算耗尽后跳过剩余文档的抽取(结果恒为空,无谓开销)(
test_append_rule_coverage_to_core_skips_extraction_when_budget_exhausted); max_chars <= 0时extract_coverage_passages返回空列表(test_zero_budget_returns_empty)。
8.4 组装块格式
compact_doc_info.py::build_coverage_passage_block产出实际块格式(文档编号与 key 通道Document N key passages对齐,保持两路证据可溯源):
===== COVERAGE PASSAGES ===== Document 1 coverage passages: - <覆盖证据文本 1> - <覆盖证据文本 2> ... Document 3 coverage passages: - <覆盖证据文本>无任何覆盖内容时返回空串、不追加块(test_build_coverage_passage_block_empty_returns_empty_string);test_build_coverage_passage_block_formats_aggregate_sections验证多文档聚合格式。
8.5 性能预算
文档与源码注明(生产口径 top_n=10 × 10000 字符、高事实密度最坏用例,含缓存未命中的冷调用):约150 ms 纯 CPU(锚点去重键集合已按块缓存复用;2026-08 测量口径,优化前同用例约 1.5 s)。_append_rule_coverage_to_core被_prepare_evidence经asyncio.to_thread调用,不阻塞事件循环。规则版不引入 LLM/网络调用,无外部依赖。
9. 边界与错误处理
- 空内容/纯噪声:过短(
_COVERAGE_MIN_PARAGRAPH_CHARS=10)、标题行(^#{1,6}\s+\S+)、导航词(首页/上一页/下一页/目录/更多/返回/免责声明/关于我们/联系我们)、无数字分隔行、纯引用/链接列表(剥掉引用标记与网址后 < 6 字符)、无任何事实特征 → 不产覆盖证据(test_extract_coverage_passages_returns_empty_for_junk_content、test_pure_citation_list_is_filtered_as_noise、test_pipe_nav_breadcrumb_without_digits_filtered); - 时间话语连接词:仅含"目前/当前/近期"的段落不产生时间特征(
test_time_discourse_markers_alone_not_evidence); - Markdown 表格原子性:
_coverage_split_passages把连续以|起始的行识别为原子单元(表格识别复用 key 通道_is_markdown_table),超长表格经_split_long_table按行切分并逐片段保留表头;单行|片段保持独立成段。表头与数据行不会因分隔行被噪声过滤丢弃而下标断档分块,列语义随表头进入证据块(test_markdown_table_with_numeric_header_stays_one_block、test_markdown_table_header_without_digits_kept_with_data_rows、test_markdown_table_surrounded_by_paragraphs_keeps_boundaries、test_pipe_fact_table_row_survives_noise); - 段落切分独立于上游:coverage 侧固定采用句末与换行级别切分(
_coverage_split_passages),不复用split_passages的句子级滑动窗口——上游窗口会破坏 coverage 依赖的"句/段粒度"候选与邻域窗口语义; - 邻域扩张:Top-K 段落保留 ±window(默认 1)上下文,兜住跨句表达的事实(
test_extract_neighbor_expansion_merges_adjacent_fact_paragraphs、test_neighbor_window_expands_beyond_adjacent);已按事实密度达到阈值的段落不再拉取邻居(expansion_density_threshold,默认 0 即关闭,保留参数供有限 K 场景评估); - 分离事实岛不合并:非相邻高分段不会跨噪声段合并成一块(
test_extract_separated_fact_islands_do_not_merge); - 结构特征门控:仅对至少含一个事实特征的段落生效,避免纯叙述段只靠长度入选(
test_structure_feature_gated_by_fact_features)。
10. 测试与验证
覆盖证据通道的验证分三层:
- 定向单元测试:
uv run pytest tests/info_collector/algorithm/test_coverage_evidence.py—— 事实密度优先于位置(test_extract_coverage_passages_prioritizes_fact_density_over_position)、噪声过滤、特征计数与封顶(test_coverage_score_weights_and_caps)、Neighbor Expansion 与相邻合并、两级去重、字符预算、摘要基准去重(含锚点救援与基准内包含判定)、候选池两级装配、缓存键隔离与返回隔离、markdown 表格原子性; - 组装与 prompt:
uv run pytest tests/report/test_sub_report.py tests/report/test_tools_in_report.py——_append_rule_coverage_to_core追加 coverage 块(test_append_rule_coverage_to_core_builds_rule_block_and_texts)、outline prompt 渲染两路证据语义(test_subsection_outline_prompt_mentions_coverage_channels)、provenance 标记双向绑定(test_subsection_outline_prompt_provenance_tokens_match_actual_block_format)、不可信证据边界(test_subsection_outline_prompt_untrusted_evidence_boundary)、预算耗尽跳过抽取、开关默认值与关闭路径; - 集成降级:
test_generate_sub_report_degrades_when_all_coverage_batches_fail验证所有 coverage batch 失败时章节不丢失(成功降级,success is True)。
11. 关键代码路径速查
| 职责 | 位置 |
|---|---|
| 抽取函数 | collector_evidence.py:extract_coverage_passages、exclude_passages、CoveragePassage、outline_summary_text/outline_summary_tail_text、extract_fact_anchors |
| 集成组装 | evidence.py:_append_rule_coverage_to_core、_fit_coverage_to_budget、_extract_doc_coverage_passages |
| 块格式化 | compact_doc_info.py:build_coverage_passage_block |
| Prompt | sub_section_outline/(system.mdEvidence Channels / user.md 证据边界) |
| 配置开关 | config.py:AgentConfig.coverage_rule_block_enable(默认 True) |
| 测试 | test_coverage_evidence.py、test_sub_report.py |
12. 相关文档
- 子报告生成整体流程:sub-report-generation.md
- 文档选源(分类/矩阵链路):coverage-matrix-doc-selection.md
13. 小结:设计要点回顾
Coverage Evidence 通道通过"关键词无关 + 客观信息密度打分 + 摘要块互补切片供给 + 两级预算兜底 + 锚点级近似去重 + 隐藏内容剥离与信任边界"六重设计,在不引入 LLM/网络调用、不依赖外部依赖的前提下,把"原文有事实但关键词检索不到"的段落稳定送入大纲证据。其核心取舍可概括为:
- 宁多供不漏供:供给区与摘要块构造性互补,冗余由预算兜底,彻底杜绝"锚点判重误删事实";
- 宁漏检不误报:英文实体只认正字法结构信号,句首普通词不判实体,整段叙述文本不会涌入 coverage;
- 证据不改结构:coverage 是段落级补充信号,事实归入既有标题,绝不强制开新标题;
- 可单独回滚:
coverage_rule_block_enable=False即回到"仅条目摘要块"的基线行为。
该通道与structured_evidence_guide(维度级)、key passages(相关性)共同构成子报告大纲阶段的三层证据体系,是 openJiuwen DeepSearch 报告"覆盖完整、可溯源、抗注入"能力在段落粒度上的工程底座。
- 人工智能
- 大模型
- AI Agent
- RAG
- 深度研究
- 搜索引擎
- 后端
- 代码智能体
【免费下载链接】deepsearch
openJiuwen DeepSearch是一款知识增强的深度搜索与研究框架,有业界领先的片段级引用和溯源推理能力,提供精准Agentic搜索与研究能力
相关推荐
openJiuwen DeepSearch 安全规则体系解析:从凭证、路径到 SSRF 与提示词注入的代码级落地实践
openJiuwen DeepSearch 安全规则体系解析:从凭证、路径到 SSRF 与提示词注入的代码级落地实践 openJiuwen DeepSearch
人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体openJiuwen DeepSearch 的验证闭环:六阶段 Verification Loop 实操指南
openJiuwen DeepSearch 的验证闭环:六阶段 Verification Loop 实操指南 在 openJiuwen DeepSearch 仓
人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体Quivr事务隔离级别解析:保证数据一致性的关键
Quivr事务隔离级别解析:保证数据一致性的关键 在现代应用开发中,数据一致性是确保系统可靠性的核心要素。尤其是在多用户并发访问的场景下,如何避免脏读(Dirt
人工智能AI 应用大模型RAG后端前端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考