人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体【免费下载链接】deepsearchopenJiuwen DeepSearch是一款知识增强的深度搜索与研究框架有业界领先的片段级引用和溯源推理能力提供精准Agentic搜索与研究能力项目地址https://gitcode.com/openJiuwen/deepsearch点击查看免费下载导读本文深入剖析 openJiuwen DeepSearch 报告中「子小节可视化数据单位归一化」提示词模板 system.md 及其配套 user.md。该提示词是报告生成链路中图表数据从「原始抽取」到「可渲染归一化」的关键一环它要求 LLM 将来自不同来源、携带不同量纲如 万、亿、Thousand、Million的数值记录统一为同一基准单位与全局显示刻度并输出严格的 JSON。读完本文你将掌握该提示词的完整规则体系、5 步执行流程、输入输出契约以及它在 visualization.py 中的实际调用链、服务端 schema 校验与本地快速路径的源码实现。一、提示词在报告链路中的定位1.1 两级可视化数据流水线openJiuwen DeepSearch 的子报告可视化生成遵循「先抽取、再归一化、后渲染」的两级流水线抽取阶段sub_section_visualization_content提示词从章节原始文本origin_content中抽取可制图的结构化数据输出形如[x_or_category, value_string, unit_string]的三元组记录。此阶段允许保留原始量纲差异例如 yuan 与 10k yuan、万辆与万元。归一化阶段本文主角sub_section_visualization_normalize_units提示词负责把上一步输出中量纲不统一、刻度混杂的记录统一为同一基准单位 单一全局显示刻度最终输出可直接喂给 Mermaid 生成器的干净 JSON。这一分工在抽取提示词 sub_section_visualization_content/system.md 中有明确说明Simple scale variants of the same base unit are allowed when copied verbatim fromorigin_content, for example vehicle vs 10k vehicles, yuan vs 10k yuan, USD vs million USD. The later normalization step will unify scales.——即抽取阶段刻意保留量纲差异由归一化阶段统一。1.2 模板加载机制与仓库中所有提示词一样该提示词通过统一的消息构建器加载渲染。在 message_builder.py 中build_prompt_messages(prompt_name, context)会加载prompts/prompt_name/system.md作为system消息并做静态模板树校验system 模板不允许含运行时变量见_assert_static_template_tree加载prompts/prompt_name/user.md用传入的context变量通过 Jinja2渲染为user消息若模板缺失或渲染失败抛出CustomValueException对应的状态码。提示词契约测试 test_deepresearch_prompt_contracts.py 中登记了该模板的变量契约sub_section_visualization_normalize_units: (language, records_json)即调用方只需提供这两个变量。二、输入输出契约2.1 输入格式user.mduser.md 全文极简只有一行模板Input format: language: {{language}}, records_json: {{records_json}}两个变量均由调用方注入变量类型含义源码默认值languagestr报告语言如zh-CN、en-US调用点默认zh-CNrecords_jsonstr抽取阶段的 JSON 字符串由抽取结果序列化而来在 visualization.py 中调用方这样构造上下文records_json json.dumps({records: extracted_records}, ensure_asciiFalse) normalize_context { language: visualization_dict.get(language, zh-CN), records_json: records_json, } normalize_input build_prompt_messages( sub_section_visualization_normalize_units, normalize_context )即records_json必须是{records: [[x_or_category, value_string, unit_string], ...]}结构。2.2 输出 Schema固定system.md 中定义输出必须是且只能是如下结构{ unit: string, records: [ [category1, 123], [category2, 456.78] ] }关键约束records中每个元素是[x_or_category, 数值]二元组数值必须是合法的 JSON number不能是 NaN、Infinity不能是科学计数法unit是归一化后的统一单位字符串输出只能是纯 JSON不允许额外文本、空格、换行、注释或 markdown 代码块若输入records_json为{}空对象直接输出{}若任何一步校验失败输出{}由下游代码决定是否重试。这一 schema 与服务端校验函数validate_visualization_normalization_schema严格对应见下文 5.2 节。三、角色定义与核心目标system.md 将模型角色定义为High-Precision Unit Scale Normalization Engine高精度单位与刻度归一化引擎并强调是 a strict, deterministic engine——即要求模型扮演严格、确定性的处理引擎而非自由发挥的写作助手。其核心目标Core Purpose分四步解析并校验所有输入值与单位将所有数值转换到共同基准单位消除 万、亿、Thousand、Million 等刻度差异基于最大绝对值与语言选择一个最优的全局显示刻度输出单位一致、数值已按刻度缩放的干净归一化 JSON。四、全局规则Strict Global Rulessystem.md 列出的全局规则是归一化质量的硬约束逐条展开保留原始顺序与类别x_or_category及记录顺序不得改动、不得新增、不得删除对应源码中record count unchanged (prompt contract)的强校验见 5.3 节禁止捏造不编造数据、不推断缺失值、不给没有单位的记录默认单位数值合法性所有最终值必须是合法 JSON number无 NaN、Infinity、科学计数法舍入规则唯一分数/比率类数值保留 2 位小数除此之外不允许任何其他舍入输出纯净性只输出合法 JSON无多余文本、空格、换行、注释或 markdown失败即空任何一步校验失败输出{}。五、5 步执行流程Strict Ordersystem.md 规定了严格顺序的 5 步执行流程这是全文的技术核心逐层拆解如下。Step 1解析与校验数值/单位合法数值形式纯数字、带千分位逗号的数字如1,286.6、分数a/b、比率a:bvalue_string 中禁止出现~、约、≥、、≤、、大概以及任何非结构化的附加文本单位字符串trim 后不得为空允许货币符号、$等任一检查失败 → 输出{}。Step 2统一基准单位并计算总刻度乘数这是最核心的一步system.md 给出统一刻度乘数表刻度 token乘数千 / Thousand1000万10000百万 / Million1000000千万10000000亿100000000Billion1000000000无 / None1处理流程标准化空白trim 首尾空格连续空格合并为一个抽取所有刻度 token从unit_string中提取全部已定义的刻度 token支持任意组合如百万亿、千万亿这类复合刻度累乘将所有抽取刻度的乘数相乘得到该记录的总刻度乘数total scale multiplier剩余部分作基准单位移除所有刻度 token 后剩余部分标准化为基准单位全部记录必须共享同一规范基准单位拉丁字符忽略大小写标准单位映射RMB/CNY//人民币/元 → 元USD/US$/$/美元 → USD%/百分比 → %任一检查失败 → 输出{}。Step 3转换为基准单位数值基准单位值 解析后的数值 × 总刻度乘数若任一结果为 NaN/Infinity → 输出{}。Step 4选择全局显示刻度与单位若基准单位是%直接使用%且不带刻度否则按最大绝对值选择显示刻度且规则随语言不同语言阈值区间显示刻度中文 10000无中文10000 ≤ x 100000000万中文≥ 100000000亿英文 1000None英文1000 ≤ x 1000000Thousand英文1000000 ≤ x 1000000000Million英文≥ 1000000000Billion最终单位格式中文[刻度][基准单位]例如万元、亿元英文[刻度] [基准单位]例如Thousand USD。Step 5转换为最终显示值最终值 基准单位值 ÷ 显示刻度乘数分数/比率保持恰好 2 位小数若任一最终值需要科学计数法表示 → 输出{}。六、源码级实现证据6.1 调用链与重试机制在 visualization.py 中_normalize_visualization_content是归一化提示词的直接调用方。完整链路为_generate_content_for_visualization └─ _process_visualization_task └─ _extract_visualization_data抽取 溯源 合规校验 └─ _build_visualization_mermaid └─ _normalize_visualization_content ├─ timeline 特殊处理直接转 schema ├─ _normalize_same_unit_records_locally本地快速路径 └─ build_prompt_messages(sub_section_visualization_normalize_units, ...)LLM 归一化 └─ _generate_mermaid_code → _precheck_value_variation归一化调用发生在抽取 schema 校验通过之后。调用时以AgentLlmName.SUB_REPORTER_VISUALIZATION_NORMALIZEsub_reporter_visualization_normalize见 node_constants.py作为 agent 名记录 LLM 统计。重试逻辑为for j in range(max_attempt_num)默认max_attempt_num 3来自visualization_dict.get(max_attempt_num, 3)调用 LLM 并取content用normalize_json_output清理输出后 strip若结果为{}则跳过继续重试json.loads失败则记录 warning 后继续通过validate_visualization_normalization_schema校验校验记录条数与抽取记录数一致Keep record count unchanged (prompt contract)全部通过后组装final_obj补上image_title与image_type写入sub_section_visualization_content。若全部尝试失败置rs_successFalse、error_msgnormalize_failed下游不再生成 Mermaid。6.2 本地快速路径同单位记录不调 LLM为提高效率与确定性源码实现了本地快速路径_normalize_same_unit_records_locallyvisualization.py仅当image_type为bar/line/pie且所有记录的单位字符串完全一致时启用数值解析_parse_visualization_number使用Decimal处理千分位逗号兼容中英文逗号拒绝非有限值若统一单位以万开头且最大绝对值 10000自动升级为亿并除以 10000 缩放对应提示词 Step 4 中文阈值规则缩放运算_scale_visualization_value同样用Decimal保证精度能整除则输出int否则输出float。例如 test_visualization.py 中的测试用例输入[[万达电影,647690,万元], ...]输出{unit: 亿元, records: [[万达电影, 64.769], ...]}——这正是万元→亿元阈值升级的本地实现。而test_visualization_normalization_uses_local_same_unit_fast_pathtest_visualization.py验证当记录同为万辆且最大绝对值 10000时直接走本地路径输出unit: 万辆、数值不做缩放且LLM 完全不被调用mocked_llm.assert_not_awaited()。也就是说只有记录间单位不一致、或本地路径无法处理时才真正触发本提示词调用 LLM。6.3 服务端双重 schema 校验归一化结果在写入可视化内容前还要经过 report_utils.py 中validate_visualization_normalization_schema的严格校验unit必须是非空字符串且不得包含混合单位分隔符或、/、|、,、;、and见_has_mixed_unit_separators每条记录必须是[str, int|float]二元组数值必须有限math.isfinite饼图pie数值不允许为负该函数只接受bar/line/pie三种类型——timeline 在归一化入口被单独转成最终 schemaunit置空records降为二元组不进入本提示词。此外抽取阶段的validate_visualization_extraction_schemareport_utils.py在归一化之前就已经阻止了混合/歧义单位进入本流程非 timeline 记录unit_string为空或含混合分隔符即判失败。6.4 与相邻校验节点的协同归一化只是可视化质量保障链的一环。在完整流程中_extract_visualization_datavisualization.py在归一化之前还会执行chart_data_traceability_check校验抽取数据可回溯到原文chart_compliance_validate校验图表与章节大纲的相关性/合规性任一失败都会把错误信息作为retry_feedback反馈给抽取提示词重试。归一化完成后_precheck_value_variation会检查bar/line图数值变异度去重后数值种类 3则拒绝渲染防止平直无意义图表最后才由XYChartMermaidGenerator/PieChartMermaidGenerator/TimelineChartMermaidGenerator生成 Mermaid 代码见 report_utils.py 中的生成器实现。七、实战注意事项与建议基于 system.md 规则与源码实现在使用或改造该提示词时需注意以下几点language 变量驱动刻度选择同一组数据在不同语言下会得到不同的显示刻度万/亿vsThousand/Million调用方必须正确传入报告语言否则图表单位可能与读者预期不符。复合刻度的乘数逻辑百万亿、千万亿等复合 token 在 Step 2 中按所有 token 乘数累乘处理设计上覆盖了中文里罕见的复合量纲写法如遇此类输入可预期数值会按 100 万亿/1000 万亿 的倍数放大。分数与比率保留 2 位小数只有分数/比率a/b、a:b才允许 2 位小数舍入普通整数/小数不得舍入——这是为了保证条形图/折线图数值不被 LLM 随意取整美化。失败降级路径明确归一化失败不会阻塞整个子报告而是置rs_successFalse跳过该图若某章节数据过于复杂混合量纲过多上游抽取阶段就可能已返回{}。服务端 schema 是最后防线不要信任 LLM 输出validate_visualization_normalization_schema 记录数一致性校验len(normalized_obj.get(records, [])) ! len(extracted_records)保证了进入 Mermaid 的数据结构与条数与抽取阶段严格一致。八、小结sub_section_visualization_normalize_units是 openJiuwen DeepSearch 报告可视化链路中承上启下的确定性引擎它接收抽取阶段保留原始量纲的三元组记录通过解析校验 → 统一基准单位 → 换算基准值 → 按语言选全局刻度 → 换算显示值的严格 5 步流程产出单位统一、刻度最优、结构固定的 JSON。源码中 visualization.py 的同单位本地快速路径、Decimal精度控制、记录数一致性契约与 report_utils.py 的双重 schema 校验共同保证了图表数据可追踪、可归一、可渲染配套测试 test_visualization.py 与提示词契约测试 test_deepresearch_prompt_contracts.py 则为这一契约提供了可回归的工程保障。理解该提示词即可深入掌握 DeepSearch 报告图表数据从原始文本到 Mermaid 渲染之间的全部量纲处理逻辑。赞分享人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体【免费下载链接】deepsearchopenJiuwen DeepSearch是一款知识增强的深度搜索与研究框架有业界领先的片段级引用和溯源推理能力提供精准Agentic搜索与研究能力项目地址https://gitcode.com/openJiuwen/deepsearch点击查看免费下载相关推荐PinchTab iFrame 自动化实战从读取嵌入内容到表单交互的 frame scope 完整指南PinchTab iFrame 自动化实战从读取嵌入内容到表单交互的 frame scope 完整指南 导读 本文围绕 PinchTab 优化测试任务 Gro人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体openJiuwen DeepSearch 图表合规验证chart_compliance_validate 提示词机制与校验规则深度解析openJiuwen DeepSearch 图表合规验证chart_compliance_validate 提示词机制与校验规则深度解析 导读 在 openJ人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体openJiuwen DeepSearch Markdown Mermaid 可视化全链路图表数据抽取、单位归一化与报告插入实践指南openJiuwen DeepSearch Markdown Mermaid 可视化全链路图表数据抽取、单位归一化与报告插入实践指南 本文围绕 openJiu人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体上一篇Bilibili视频转文字工具bili2text模块化架构与工程实践下一篇如何快速完整下载电子课本PDFtchMaterial-parser创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考