openJiuwen DeepSearch 溯源内容识别 Prompt 体系:从句子级候选提取到相似度校验的完整实现
人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体【免费下载链接】deepsearchopenJiuwen DeepSearch是一款知识增强的深度搜索与研究框架有业界领先的片段级引用和溯源推理能力提供精准Agentic搜索与研究能力项目地址https://gitcode.com/openJiuwen/deepsearch点击查看免费下载openJiuwen DeepSearch 在报告生成后需要通过全局溯源为正文句子追加来源引用而溯源链路的第一步——内容识别content recognition决定了一篇报告最终会有哪些句子进入 citation 覆盖范围。本文以deepsearch/openjiuwen_deepsearch/algorithm/prompts/content_recognition/下的 Prompt 模板为骨架结合content_analyzer.py、source_tracer.py、source_tracer_preprocessors.py等源码与对应测试完整讲解该模块的输入输出契约、系统指令设计、LLM 调用链、相似度兜底校验与降级策略帮助读者掌握如何让模型精准、可复用地从研究报告中抽取出必须加引用的句子。一、内容识别在全局溯源链路中的定位全局溯源global source trace负责在报告生成后为句子添加来源引用并把引用信息整理为前端可展示的 citation data。其主流程见 source-trace.md为SourceTracer接收报告、classified content 和 LLM 模型名前置覆盖率检查判断是否需要生成新引用报告和搜索记录预处理移除参考文献区并裁剪过长内容内容识别模块找出需要引用的句子来源匹配模块按 source type 调用 LLM 或匹配算法生成候选引用add_source将引用插入报告并生成 data itemscitation checker 校验并重建段落只保留有效引用参考文献区被追加或更新前端 citation data 被组织输出。内容识别是第 4 步也是整个链路的第一步。它的职责是把完整报告收敛为需要溯源的候选句子避免后续来源匹配对整篇报告做无差别处理因此直接决定了 citation 的覆盖范围详见 content-recognition.md。该步骤基于deepsearch/openjiuwen_deepsearch/algorithm/prompts/content_recognition/目录下的双文件 Prompt 模板实现system.md定义角色、识别规则与输出格式user.md定义输入载体。二、Prompt 模板的双文件结构system 与 user 的职责分离内容识别采用稳定的 system/user 双模板结构位于 prompts/content_recognition/system.md静态系统指令不含任何运行时变量user.md仅承载报告正文这一输入变量模板内容为# Input Research report (Markdown format): report {{ report }} /report{{ report }}是唯一的 Jinja 变量运行时由调用方注入预处理后的报告正文。这一约定在 test_deepresearch_prompt_contracts.py 中被固化content_recognition: (report,)即该 Prompt 对外暴露且必须提供的变量只有report一个message_builder.py 在渲染时会校验变量契约、拒绝预留键messages、history、prior_messages、images并保证 system 模板中不出现任何运行时变量从而保证指令稳定、可复现、可单测。这种system 固定 user 注入的拆分带来两个直接收益一是识别规则与待识别文本解耦指令部分不会随每次调用波动二是便于在测试中验证 system 中不泄漏报告正文见下文测试章节。三、system.md 指令详解识别什么、排除什么system.md 首先为模型设定角色You are a professional content recognition assistant任务是识别研究报告中**需要引用requires citations**的内容具体包括三大类类别说明正向示例反向示例数值数据Numerical Data具体数字、百分比、价格等Chinas GDP grew by 5.2%Economic growth has been relatively fast in recent years具体事实Specific Facts特定事件、日期、地点等On October 15, 2023, Tesla built a factory in Shanghai——专家观点Expert Opinions引用或转述的专家看法According to World Bank forecasts...——同时模板明确列出了必须排除的四类内容Markdown 表格内的数据Data within markdown tables常识性描述Common knowledge descriptions章节标题Section headings已带引用的句子——即以[citation:x]结尾的句子Sentences with references added参考文献区内容Content in references。这一排除清单与代码侧的过滤逻辑互相呼应预处理阶段已经移除参考文献区覆盖率计算阶段也会过滤标题、表格分隔行、代码块标记等非正文内容详见第六节形成模板约束 代码兜底的双层防护。四、输出契约严格的 JSON 格式与句子级保真要求system.md 对模型输出提出了严格的结构化要求输出必须为如下 JSON{ sentences: [ Original sentence 1, Original sentence 2, ... ] }关键约束逐条拆解如下这些约束共同保证了后续相似度校验和来源匹配的可行性与可追溯性句子必须存在于原文sentences字段输出的必须是报告正文中真实存在的单句且严格遵循原文的行边界不得把不同行的内容合并成一句标点零改动不得修改、新增或删除原文的任何标点格式保真必须完整保留原文的加粗、斜体、引号、括号、标点等 Markdown 格式信息数量上限最多选择 10 条句子Select up to 10 sentences引号规范每条输出句子必须用英文双引号包裹纯净输出直接输出正确的 JSON不得附带任何额外字符包括json代码块标记。这一纯净 JSON要求非常关键。虽然代码侧在解析前会调用normalize_json_output位于 llm_utils.py做兜底剥离开头的json/ts代码块标记但模板层面仍然要求模型直接输出纯 JSON以减少解析歧义。若解析后结果不是 dict 或缺少sentences键content_analyzer.py 会安全地回退为空列表而不是中断整篇报告的溯源流程。五、源码级调用链从模板渲染到句子落库内容识别的完整调用链由 content_analyzer.py 中的recognize_content_to_cite驱动其核心步骤如下构建上下文source_tracer_context dict(reportmodified_report)其中modified_report是预处理后的报告正文渲染消息调用build_prompt_messages(content_recognition, source_tracer_context)message_builder.py从prompts/content_recognition/目录加载system.md与user.md渲染出[{role: system}, {role: user}]两条消息调用 LLM 并埋点通过ainvoke_llm_with_stats执行推理并使用AgentLlmName.SOURCE_TRACER_CONTENT_RECOGNITION定义于 node_constants.py取值为source_tracer_content_recognition作为埋点标识便于在遥测与日志中区分该次调用规范化输出normalize_json_output清理代码块标记等杂质验证与增强validate_and_enhance_sentences对模型输出的每条句子做报告内定位校验详见第六节返回得到最终需要引用的句子列表List[str]若 LLM 调用抛异常函数捕获后仅在非敏感日志模式下打印错误细节并返回空列表实现整链路降级。该函数被 source_tracer.py 的research_trace_source调用调用时传入的关键参数为preprocessed_report调用preprocess_report移除参考文献区后的报告self._similarity_threshold默认0.9source_tracer.pyself._llm_model_name当前使用的 LLM 模型名从llm_context中按名取出对应模型实例。识别结果非空后才进入下一步的match_sources来源匹配因此内容识别是来源匹配的前置闸门。六、相似度兜底让模型输出落回原文LLM 在复述句子时难免出现增删字词、标点漂移若直接信任模型输出后续来源匹配将无法在报告中精确定位句子。因此validate_and_enhance_sentences承担了模型输出 → 报告原文的对齐职责算法分两档处理第一档完全匹配精确命中若模型输出的句子sentence in reportPython 子串包含判断则直接采用原句并去重seen_sentences集合保证重复句子只保留一条。第二档相似度匹配模糊兜底若无法精确匹配则调用find_similar_sentence在报告中寻找最相似句子。其实现要点content_analyzer.py先用split_into_sentences将报告切分为句子列表再对每句用difflib.SequenceMatcher(None, sentence, report_sent).ratio()计算相似度取相似度不低于阈值默认 0.9且最高的句子作为结果无句子达到阈值时返回空串该条候选被丢弃。分句器split_into_sentencestext_utils.py以中文标点。及换行符为分界并在末尾保留无标点句子——这也是 system.md 强调严格遵循原文行边界的原因代码侧的对齐逻辑完全依赖句子级切分。该兜底逻辑在 test_content_analyzer.py 中有系统覆盖test_validate_and_enhance_sentences_basic/..._with_exact_matches精确匹配场景句子应原样保留test_validate_and_enhance_sentences_no_matches报告中完全找不到的句子应被丢弃返回空列表test_validate_and_enhance_sentences_duplicate_handling重复句子去重后仅保留一条test_validate_and_enhance_sentences_empty_json/..._no_sentences_key空 JSON 或缺sentences键时安全返回空列表test_find_similar_sentence_*覆盖精确命中、高相似命中、低于阈值返回空串、空报告/空句子等边界test_recognize_content_to_cite_llm_invoke_errorLLM 调用抛异常时整体返回空列表。七、前置的文本预处理参考文献区移除与内部标记转换内容识别的输入并非原始报告全文。在调用 Prompt 之前source_tracer_preprocessors.py 已完成两项关键预处理1. 参考文献区移除_remove_reference_section/preprocess_report通过正则^#{1,6}\s.$多行模式定位所有 Markdown 标题从后向前查找标题文字匹配(?:参考文献|参考文章|Reference Articles)忽略大小写的最后一个标题将该标题之后的所有内容作为参考文献区整体剔除。无匹配时返回原文与空字符串。这样既符合 system.md排除参考文献内容的要求也避免参考文献影响后续的引用提取与来源匹配。2. 已有引用的内部标记转换generate_origin_report_data对报告正文中已存在的[citation:X]标记通过正则r\[\s*citation:\s*(\d)\s*\]定位source_tracer_preprocessors.py并结合 classified content 构建的引用映射按编号映射到 title/url/content将其替换为[source_tracer_result]title链接格式同时记录每个引用前的一句话作为 chunk 与句内位置。这与 system.md排除已带引用句子的规则配套已被原文引用的句子在后续合并时会被当作既有引用处理而不是重复溯源。此外全局溯源入口还会对报告正文做有意义句子过滤_filter_meaningful_sentencessource_tracer.py剔除空行、#开头的标题行、开头的代码块标记行、仅含| - : 空格的表格分隔行等非正文内容——覆盖识别阶段同样的过滤目标保证覆盖率统计与候选句子的质量。八、覆盖率检查与降级策略内容识别并非每次溯源都会执行。SourceTracer.pre_check_origin_coverage会在正式流程前做前置判断source_tracer.py空报告直接返回need_generateFalse不进入识别无 classified content无法生成新引用跳过溯源覆盖率已足够通过_calculate_coverage检测带[citation:X]标记的句子占比当被引用覆盖的唯一句子数 ≥_min_origin_coverage_count默认 10且覆盖率 ≥_min_origin_coverage_ratio默认 0.3时判定need_generateFalse避免重复溯源覆盖率不足进入research_trace_source此时才真正调用内容识别。即便进入识别若 LLM 返回空列表、预处理搜索记录失败或后续来源匹配无结果research_trace_source都会逐级警告并退出保证整篇报告不会被溯源流程中断。同时敏感日志模式下LogManager.is_sensitive()不会输出完整报告正文与识别出的句子明细只记录数量级信息兼顾可观测性与数据安全。九、测试与验证如何本地复现该模块行为仓库为内容识别模块提供了可直接运行的单测推荐命令基于uvuv run pytest deepsearch/tests/source_tracer/test_content_analyzer.py uv run pytest deepsearch/tests/source_tracer/test_source_tracer_preprocessors.py uv run pytest deepsearch/tests/algorithm/prompts/test_deepresearch_prompt_contracts.py其中 test_deepresearch_prompt_contracts.py 对 Prompt 契约做了仓库级校验声明content_recognition只暴露report变量并配合 test_build_prompt_messages 验证报告正文只出现在 user 消息中、不泄漏进 system 消息、且不含CURRENT_TIME等意外占位符。这意味着任何对system.md或user.md的修改都会先经过契约测试的约束保证指令稳定性。十、扩展指南自定义识别规则与阈值调优基于上述实现开发者可从三个层面定制内容识别行为识别规则修改 system.md 中的识别三类内容与排除清单即可改变模型关注范围。例如增加机构名称、统计口径、法律条文等新类别或补充新的排除条件如公式、脚注。注意需保持输出 JSON 契约不变以免破坏content_analyzer.py的解析逻辑。输入注入user.md目前只接收report一个变量若要同时注入领域提示、语言指令或用户画像需扩展模板变量并同步更新 test_deepresearch_prompt_contracts.py 中的变量契约因为build_prompt_messages会按契约校验上下文键。相似度阈值SourceTracer默认阈值为0.9source_tracer.py。阈值越高对模型输出的句子与原文一致性要求越严候选越保守调低可容忍更多转述差异但会增加将改写句误对齐到原文句的风险。实际调优时应配合test_find_similar_sentence_with_threshold_0、test_validate_and_enhance_sentences_with_similar_sentences等测试观察匹配行为。输出规模system.md 将候选句上限固定为 10 条如需放宽或收紧直接修改该数值同时注意来源匹配阶段对候选数量的处理成本。结语内容识别是 openJiuwen DeepSearch 全局溯源的第一道闸门其价值在于以 Prompt 规则收敛候选、以代码逻辑校准输出的双层设计system.md给出数值数据、具体事实、专家观点三大识别目标与明确的排除清单user.md以{{ report }}单一变量注入正文content_analyzer.py则在模型输出后用精确匹配 difflib相似度匹配把每条句子拉回原文并去重配合参考文献区移除、已有引用标记转换、覆盖率前置检查与多级降级最终产出高质量、可对齐、可追溯的待引用句子列表为后续来源匹配与 citation 校验奠定基础。理解这套 Prompt 与代码的协作机制可以帮助开发者在保持输出契约稳定和测试约束的前提下灵活定制属于自己的溯源识别策略。赞分享人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体【免费下载链接】deepsearchopenJiuwen DeepSearch是一款知识增强的深度搜索与研究框架有业界领先的片段级引用和溯源推理能力提供精准Agentic搜索与研究能力项目地址https://gitcode.com/openJiuwen/deepsearch点击查看免费下载相关推荐openJiuwen DeepSearch 溯源内容识别将报告收敛为待溯源候选句子的第一道关卡openJiuwen DeepSearch 溯源内容识别将报告收敛为待溯源候选句子的第一道关卡 导读 本文深入讲解 openJiuwen DeepSearch人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体openJiuwen DeepSearch 图表数据溯源校验 Prompt 深度解析从字段级溯源到 Mermaid 可视化前验证openJiuwen DeepSearch 图表数据溯源校验 Prompt 深度解析从字段级溯源到 Mermaid 可视化前验证 openJiuwen Dee人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体openJiuwen DeepSearch 全局溯源Source Trace技术指南从引用识别到 Citation 校验的完整链路openJiuwen DeepSearch 全局溯源Source Trace技术指南从引用识别到 Citation 校验的完整链路 导读 本文聚焦 ope人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

蓝桥杯Python模拟赛复盘:填空题与编程题解题技巧及避坑指南

蓝桥杯Python模拟赛复盘:填空题与编程题解题技巧及避坑指南

1. 这场模拟赛到底在考什么蓝桥杯的模拟赛,很多人把它当成“热身”或者“随便打打”,但真正刷过几套的人都知道,模拟赛的题目设计往往比正式省赛还要“刁钻”一点。原因很简单:模拟赛没有排名压力,出题人反而敢放一些思…

2026/10/12 20:53:32 阅读更多 →
无模型自适应预测控制与迭代学习控制仿真对比:从伪偏导估计到参数整定

无模型自适应预测控制与迭代学习控制仿真对比:从伪偏导估计到参数整定

有一类问题,在我做过的控制系统项目里反复出现:对象本身并不复杂,但模型就是写不准。机理模型建到一半,参数漂移一来,原本压得很稳的模型预测控制突然开始震荡。后来我转向无模型自适应预测控制(MFAPC&…

2026/10/12 20:53:32 阅读更多 →
RuoYi-Vue-Pro开发指南:从权限模型到代码生成与部署实践

RuoYi-Vue-Pro开发指南:从权限模型到代码生成与部署实践

简介:《ruoyi-vue-pro开发指南》以PDF格式打包,是一份面向RuoYi-Vue框架开发者的系统化技术文档,尤其适合需要快速搭建后台管理系统、理解前后端组件开发流程的Java全栈与Vue.js工程师。文档基于RuoYi-Vue重构优化后的项目展开,清…

2026/10/12 20:53:32 阅读更多 →

最新新闻

CentOS 7.x下用Docker与Shell脚本一键部署Redis Cluster集群

CentOS 7.x下用Docker与Shell脚本一键部署Redis Cluster集群

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

2026/10/13 1:09:51 阅读更多 →
AI芯片软硬件协同优化实战:寄存器可配置化设计方法

AI芯片软硬件协同优化实战:寄存器可配置化设计方法

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

2026/10/13 1:09:51 阅读更多 →
C#虚属性与抽象属性重写详解:以Label控件为例

C#虚属性与抽象属性重写详解:以Label控件为例

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

2026/10/13 1:09:51 阅读更多 →
NFine框架登录流程源码深度解析:从MVC分层到权限体系实战

NFine框架登录流程源码深度解析:从MVC分层到权限体系实战

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

2026/10/13 1:09:51 阅读更多 →
STM32 Systick滴答定时器:从原理到实战的精准延时方案

STM32 Systick滴答定时器:从原理到实战的精准延时方案

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

2026/10/13 1:09:51 阅读更多 →
基于开路电压的改进型MPPT算法:快速辐照变化下光伏逆变器的可靠跟踪方案

基于开路电压的改进型MPPT算法:快速辐照变化下光伏逆变器的可靠跟踪方案

快速变天时,光伏逆变器最怕的不是功率不够,而是明明太阳明晃晃地照着,MPPT却在“原地打转”——电压来回扫,功率丢掉一大截。我这些年调试组串式逆变器,遇到最多的就是这种快速变化辐照下的MPPT失效问题,尤…

2026/10/13 1:08:51 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战: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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →