人工智能大模型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),仅供参考