openJiuwen DeepSearch 推理链溯源之结论提取 Prompt:`infer_extract_conclusion_prompt` 的设计原理与工程实现
人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体【免费下载链接】deepsearchopenJiuwen DeepSearch是一款知识增强的深度搜索与研究框架有业界领先的片段级引用和溯源推理能力提供精准Agentic搜索与研究能力项目地址https://gitcode.com/openJiuwen/deepsearch点击查看免费下载导读本文深入剖析 openJiuwen DeepSearchdeepsearch仓库中推理链溯源source_tracer_infer能力的第一环——结论提取 Prompt 模板infer_extract_conclusion_prompt。该 Prompt 负责从研究报告的各正文章节中自动识别并抽取可被推理的结论句为后续结论 → 证据 → 推理图的溯源推理提供原料。读完本文你将掌握该模板双文件system.mduser.md的输入输出契约、7 条结论提取准则、JSON 输出校验机制以及它在ResearchInferPreprocess中的完整调用链与测试验证方法。一、功能定位结论提取在推理链溯源中的角色推理链溯源Inference Chain Source Tracing是 openJiuwen DeepSearch 的核心能力之一在报告已有来源引用citation的基础上针对报告结论生成结论如何由证据推出的结构化推理图并以 base64 HTML 形式返回前端展示。其完整流程如下见 feature/algorithm/source-tracer-infer.mdSourceTracerInfer.run获取报告、语言、模型名与溯源结果若未提供现成的conclusion_with_records先从报告和溯源信息中提取结论及对应搜索记录这一步正是infer_extract_conclusion_prompt的用武之地每个结论并发执行async_run筛选与结论相关的引用资料LLM 生成推理过程并过滤低质量推理推理被结构化为节点关系NumberNode为 citation、结论和中间推理节点编号SupplementGraph删除自环、修补非连通图并剪枝HTML 生成后编码为 base64并把推理标记写回报告。结论提取位于整条流水线的最前端——如果这一步无法从报告中精准抽取出值得推理的结论句后续的证据筛选、推理生成与构图都将失去输入。因此该 Prompt 的提取质量直接决定整个推理链溯源能力的上限。二、模板结构双文件 Prompt 的设计范式infer_extract_conclusion_prompt遵循 DeepResearch 的统一 Prompt 模板约定以模板目录名prompt_name引用目录内放置system.md与user.md两个文件见 feature/algorithm/prompt-template-system.mdsystem.md静态系统提示承载结论提取的角色设定、7 条提取准则、输出格式与示例。不允许出现运行时变量——message_builder的_assert_static_template_tree会静态解析并拒绝含变量或动态 include 的 system 模板见 algorithm/prompts/message_builder.py。user.md运行时用户输入模板声明渲染变量。本模板的 user.md 全文如下# User Input input {{ input }} /input Locale: **{{ language }}**从源码结构看该模板声明了两个 Jinja 变量变量含义提供方input单个报告章节的正文内容不含 H1 标题即section.get(content, )调用方infer_extract_info.pylanguage输出语言区域如zh-CN、en-US上下文context.get(language, zh-CN)这一契约在仓库级 Prompt 契约测试 tests/algorithm/prompts/test_deepresearch_prompt_contracts.py 中被固化infer_extract_conclusion_prompt: (input, language)即required_vars为input与language二者都是必填项不存在可省略的可选变量。测试同时断言 system 模板变量集必须为空system_vars set()确保运行时数据绝不泄漏进系统提示。三、结论提取准则system.md 的 7 条硬性规则system.md 将什么是可提取的结论定义为 7 条准则这是整个模板的灵魂结论通常是完整的陈述句表达一个主张或判断claim/judgment结论必须由多条前提信息支撑multiple pieces of premise information结论通常出现在论证末尾且常伴随逻辑指示词如 therefore、so、thus、shows that、proves that、implies、it can be inferred、in conclusion、in summary、this indicates 等中英文场景通用不得从引用citation中提取论据——引用通常紧跟参考标题或 URL最多提取 1 条结论每章节一个结论必须保证精确字符串匹配输出的结论句必须能在输入文本中被原样找到exact string matching省略结论句末尾的标点符号。其中第 6、7 条是工程上最关键的约束提取结果会被后续代码用content.find(sentence)在原文中定位因此要求 LLM不得改写、不得增删字符且末尾标点会被去掉。这与下方示例中的 Good/Bad Output 对比一脉相承。输出格式与示例的工程含义模板要求输出一个 JSON 列表例如[Conclusion 1]并给出正反例输入近年来央行购金需求始终是黄金市场的重要驱动力。我们估计2023年央行购金为黄金表现贡献了至少*10%*的影响力而今年迄今可能已贡献出u约5%/u的影响。Good Output[2023年央行购金为黄金表现贡献了至少**10%**的影响力而今年迄今可能已贡献出u约5%/u的影响]——保留了 Markdown 加粗与下划线标记末尾无句号Bad Output[2023年央行购金为黄金表现贡献了至少10%的影响力而今年迄今可能已贡献出约5%的影响。]——丢失了 Markdown 标记且末尾残留句号。正反例揭示了一个容易被忽视的细节结论句在输入文本中的精确匹配是按原始 Markdown 字符序列进行的模板特意要求保留**与u等标记、只删除结尾标点。这样后续content.find()才能稳定命中原文位置。模板同时强调输出必须是完整合法的 JSON且始终使用 user input 中 Locale 指定的语言如zh-CN输出中文结论。四、源码调用链从章节切分到结论位置定位结论提取的实现位于 algorithm/source_tracer_infer/infer_extract_info.py 的ResearchInferPreprocess类调用链如下SourceTracerInfer.run └─ get_conclusion_and_records() # research 模式conclusion_with_records 为空时触发 └─ ResearchInferPreprocess.run() ├─ classify_search_record() # 章节索引 → 章节搜索记录 ├─ _extract_conclusion() │ └─ _find_sentences_with_positions() │ ├─ _split_markdown_with_detailed_positions() # 按 H1 切章并记录全文坐标 │ ├─ 过滤非正文 H1目录/摘要/参考文章等 │ └─ _extract_conclusions_for_sections() # 并发调用 infer_extract_conclusion_prompt │ └─ call_model(infer_extract_conclusion_prompt, {input: ...}) │ └─ build_prompt_messages → ainvoke_llm_with_stats → 校验 └─ _match_conclusion_with_records() # 结论与搜索记录按章节配对4.1 Markdown 章节切分与坐标记录_split_markdown_with_detailed_positions使用正则(?m)^#\s(.)$找出报告的全部 H1 标题把每个标题之后到下一个 H1 之前的内容切为一个章节并记录global_start/global_end该章节在全文中的起止偏移。这些偏移是后续mark_conclusion_in_report用[结论](#inference:id)标注回写报告的基础见 algorithm/source_tracer_infer/infer.py。4.2 非正文 H1 过滤报告标题之后目录、摘要、参考文章等非正文 H1 不参与结论提取。_find_sentences_with_positions维护了一个排除标题集合excluded_titles {目录, table of contents, contents, 摘要, abstract, 参考文章, 参考文献, reference articles, references}代码先按 H1 正则切出所有章节再对sections[1:]跳过报告总标题逐章判断标题经re.sub(r\s, , title).strip().casefold()归一化后若命中排除集合则剔除。测试 tests/source_tracer_infer/test_infer.py 专门验证了目录插入不得导致正文与搜索记录章节索引错位即使存在目录 摘要 结论 参考文章等不同标题组合正文章节索引仍稳定为[0, 1, 2]。4.3 并发调用与输出校验_extract_conclusions_for_sections对每个章节构造一次模型调用detection_func_and_args {detection_func: is_list_of, args: str} tasks [call_model(self.llm_model, infer_extract_conclusion_prompt, {input: section.get(content, )}, detection_func_and_argsdetection_func_and_args, agent_nameAgentLlmName.SOURCE_TRACER_INFER_EXTRACT_CONCLUSION.value) for section in sections] results await asyncio.gather(*tasks)要点Prompt 名即目录名infer_extract_conclusion_prompt由 message_builder.py 加载渲染为 system user 两条消息输出校验采用is_list_of(result, str)要求返回list且每个元素是非 bool 的str杜绝嵌套 list / dict / str 混入校验函数见 algorithm/source_tracer_infer/infer_call_model.pyAgent 命名为SOURCE_TRACER_INFER_EXTRACT_CONCLUSION source_tracer_infer_extract_conclusion用于日志与调用统计见 utils/constants_utils/node_constants.py重试机制call_model在输出校验失败CustomValueException或调用异常时最多重试 3 次MAX_LLM_RETRY_TIMES 3并对返回内容做normalize_json_output与剥离 json 围栏后json.loads解析见 infer_call_model.py。4.4 结论位置定位与搜索记录配对提取出的结论句会经过_locate_sentence_in_sections在对应章节中用content.find(sentence)做精确字符串匹配得到全文中的start_pos/end_pos、章节索引sentence_section_index以及去除行内引用正则\[\[([^\]])\]\]\([^)]\)后的章节文本content_without_citation若未命中则标记found: False并跳过。_match_conclusion_with_records按结论位置从后往前排序配对若结论所属章节存在对应搜索记录则使用该章节记录否则回退到全部搜索记录参与推理。最终产出{conclusion: [章节内容, 结论句], search_records: [...], start_pos, end_pos}列表供SourceTracerInfer.async_run逐条并发推理。五、输入侧的工程细节搜索记录的组织虽然infer_extract_conclusion_prompt本身只消费input章节正文与language但它的上游classify_search_record决定了后续结论推理时可见的证据范围。该函数将all_classified_contents按章节组织的证据列表转换为{章节索引 → [{title, url, content}]}其中content字段优先取非空白的passage_text段落级记录的提取文本缺失或仅含空白时回退到original_content全文级记录的整篇文档以避免同一文档的 N 个段落各自携带整篇父文档全文导致 LLM 输入膨胀。测试 test_infer.py 用 4 个用例分别覆盖了 passage 优先、全文回退、空白 passage 回退与混合场景。六、测试与验证针对该 Prompt 及其上游逻辑仓库提供了多层测试保障Prompt 契约测试tests/algorithm/prompts/test_deepresearch_prompt_contracts.py 断言infer_extract_conclusion_prompt的 user 变量恰好为{input, language}、system 模板无变量结论提取流程测试tests/source_tracer_infer/test_infer.py 覆盖非正文 H1 过滤、目录插入不引起章节索引错位、锚点 HTML 不污染章节标题输出校验测试tests/source_tracer_infer/test_infer_call_model_validation.py 验证is_list_of对嵌套 list、str 元素、dict、float、boolPython 中 bool 是 int 子类等非法输出的拒绝行为端到端流程测试test_infer.py中的TestSourceTracerInfer以 mock 方式串联get_conclusion_and_records → async_run → mark_conclusion_in_report全流程。推荐运行命令参考 source-tracer-infer.mduv run pytest tests/source_tracer_infer七、边界、容错与最佳实践从源码与文档可以总结出以下工程约束见 source-tracer-infer.md 与 prompt-template-system.md空结果容错若某章节未提取出任何结论_extract_conclusion记录 warning 并返回空SourceTracerInfer侧结论或搜索记录为空时跳过当前推理单个结论失败不阻塞其他结论系统提示纯净性运行时输入章节正文、语言只出现在 user 消息system 消息必须静态无变量避免提示注入与状态泄漏输出契约先行Prompt 输出格式变化必须同步更新解析逻辑is_list_of、契约测试与 feature 文档否则契约测试会直接失败敏感日志保护LogManager.is_sensitive()模式下不输出结论正文、搜索记录或推理文本只以***占位语言一致性输出必须遵循 user input 中 Locale 指定语言保证跨语言报告场景下结论句与正文语言一致从而维持精确字符串匹配的可靠性。结语infer_extract_conclusion_prompt看似只是两个简短的 Markdown 文件实则是 openJiuwen DeepSearch 推理链溯源能力的入口质检站它以完整陈述句 多条前提支撑 精确字符串匹配 最多一条 去尾标点的硬规则配合message_builder的双文件渲染、is_list_of的严格校验与 3 次重试机制从长报告中稳定产出可定位、可推理的结论句。理解它的契约与调用链是二次开发、调优推理链溯源效果或扩展新 Prompt 模板的最佳起点。赞分享人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体【免费下载链接】deepsearchopenJiuwen DeepSearch是一款知识增强的深度搜索与研究框架有业界领先的片段级引用和溯源推理能力提供精准Agentic搜索与研究能力项目地址https://gitcode.com/openJiuwen/deepsearch点击查看免费下载相关推荐openJiuwen DeepSearch 推理链溯源SourceTracerInfer深度解析从证据到结论的结构化推理图生成openJiuwen DeepSearch 推理链溯源SourceTracerInfer深度解析从证据到结论的结构化推理图生成 本文档系统讲解 openJ人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体GetQzonehistory一步完整导出QQ空间历史说说只扫码不碰密码GetQzonehistory一步完整导出QQ空间历史说说只扫码不碰密码 翻 QQ 空间只能看到近期动态三五年前的记录想都别想。 GetQzonehist网页爬虫数据分析Rivet Actors 实战基于 Render 与 Rivet Cloud 部署实时共享计数器hello-world-render 全解析Rivet Actors 实战基于 Render 与 Rivet Cloud 部署实时共享计数器hello world render 全解析 导读 本文以人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Win10下VS2019编译curl 7.84.0 64位静态库实战指南

Win10下VS2019编译curl 7.84.0 64位静态库实战指南

简介:本资源为在 Windows 10 环境下使用 CMake 3.22 与 Visual Studio 2019 编译完成的 curl 64 位库,版本 7.84.0,支持 SSL,面向需要在 Windows 平台进行 C/C 网络开发、又不愿自行折腾编译环境的开发者。包内已整理为 lib 与 in…

2026/10/12 11:31:26 阅读更多 →
Android RecyclerView ItemTouchHelper侧滑删除与拖拽排序全攻略

Android RecyclerView ItemTouchHelper侧滑删除与拖拽排序全攻略

简介:面向安卓开发者的RecyclerView列表控件交互学习资源,围绕官方拖拽工具类实现条目的侧滑删除和拖拽排序,解决传统触摸事件处理逻辑复杂、手势冲突难以协调的问题。整个压缩包共44个文件,其中11份是Java源码,13份是…

2026/10/12 11:31:26 阅读更多 →
Java面向对象入门:彻底理解类、对象与属性的关系

Java面向对象入门:彻底理解类、对象与属性的关系

聊一聊Java面向对象里最基础、但也是最容易绕晕的三个词:类、对象、属性。很多初学者会陷入一个怪圈:概念背得滚瓜烂熟,闭着眼睛都能说出“类是抽象的概念,对象是具体的事物”,可一打开编辑器写代码,还是不…

2026/10/12 11:31:26 阅读更多 →

最新新闻

C++中判断汉字:从编码原理到跨平台实现

C++中判断汉字:从编码原理到跨平台实现

1. 从一次文本统计翻车说起:为什么“判断汉字”没那么简单前阵子帮一个做数据清洗的朋友处理一批用户提交的文本,需求听起来特别朴素:把每条记录里的汉字挑出来,统计一下字数,非汉字的字符(标点、数字、字母…

2026/10/12 13:20:31 阅读更多 →
鸿蒙开发实战:从零构建端侧AI阅读应用

鸿蒙开发实战:从零构建端侧AI阅读应用

简介:这份资源面向鸿蒙开发学习者与阅读类应用开发者,聚焦鸿蒙版阅读仓库的完整工程实现,可用于研究鸿蒙OS下阅读APP的页面结构、组件拆分与资源组织方式。压缩包共886个文件,约5.58MB,以ets组件代码为主,配…

2026/10/12 13:20:31 阅读更多 →
CSP-J初赛真题解析:算法直觉、缓存原理与递归栈深度训练

CSP-J初赛真题解析:算法直觉、缓存原理与递归栈深度训练

简介:本资源为2025年CCF CSP-J信息学奥林匹克竞赛初赛(第一轮)官方真题PDF文件,面向全国初中阶段信奥选手、指导教师及算法入门学习者,用于赛前模拟训练、考点梳理与应试能力提升。文件共1个PDF,大小2.72MB…

2026/10/12 13:20:31 阅读更多 →
Ubuntu离线中文语音识别实战:Vosk部署与调优指南

Ubuntu离线中文语音识别实战:Vosk部署与调优指南

1. 为什么要在离线环境里折腾中文语音识别把语音识别跑在本地、断网也能用,这件事听起来像是"洁癖",但真正做过项目的人都知道,它解决的是很实在的问题。我最早接触这个需求,是在一个内网数据处理的项目里:现…

2026/10/12 13:20:31 阅读更多 →
Python机器学习实战:从NumPy数据处理到客户流失预测全流程

Python机器学习实战:从NumPy数据处理到客户流失预测全流程

简介:面向Python机器学习初学者的教学配套资料包,内含《Python机器学习编程与实战》一书的源代码与实验数据,帮助读者从零基础起步,通过动手实操掌握数据处理、建模与评估的全流程。压缩包共77个文件,约82.8MB&#xf…

2026/10/12 13:20:31 阅读更多 →
Scrapy日志系统实战:配置、优化与常见问题排查

Scrapy日志系统实战:配置、优化与常见问题排查

1. 为什么日志系统是爬虫项目的生命线做爬虫的朋友大概都有过这种经历:脚本跑了一整夜,早上起来一看,数据没入库,控制台一片空白,或者满屏都是红色的报错信息,但你根本不知道是哪一步出了问题。更让人头疼的…

2026/10/12 13:19:27 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →