openJiuwen DeepSearch 图表代码生成提示词解析:vlm_generate_chart_code_prompt 的运行期风格与数据契约
人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体【免费下载链接】deepsearchopenJiuwen DeepSearch是一款知识增强的深度搜索与研究框架有业界领先的片段级引用和溯源推理能力提供精准Agentic搜索与研究能力项目地址https://gitcode.com/openJiuwen/deepsearch点击查看免费下载本文围绕 openJiuwen DeepSearch 图表生成链路中的核心提示词模板vlm_generate_chart_code_prompt展开解析其用户侧模板user.md中运行期风格设置与输入数据契约的完整设计并结合源码说明该模板如何驱动 LLM 生成可执行的 matplotlib/seaborn 绘图代码、如何进入子进程沙箱执行、以及如何在 VLM 迭代优化中被复用。读完本文你可以掌握该模板每个字段与代码块的精确语义、其在 chart_generator.py 中的调用方式以及如何通过仓库内测试验证模板契约的稳定性。模板在图表生成链路中的位置vlm_generate_chart_code_prompt是 openJiuwen DeepSearch 图表生成模块chart_generation中LLM 生成绘图代码这一环节的专用提示词与同目录下的vlm_find_insert_point_prompt插入点识别、vlm_collect_data_prompt图表数据收集、vlm_iterate_promptVLM 评估反馈共同构成一条完整的识别锚点 → 收集数据 → 生成代码 → 沙箱执行 → 迭代优化 → 插入报告流水线整体流程可参考 chart-generation.md。从源码调用链看chart_generator.py 中的_generate_chart_code方法通过call_model以promptvlm_generate_chart_code_prompt指定模板并把gen_chart_input字典作为user_input传入call_model_input CallModelInput( model_nameself._llm_model, promptvlm_generate_chart_code_prompt, user_inputgen_chart_input, agent_nameAgentLlmName.VLM_CHART_GENERATOR_GENERATE_CHART_CODE.value, )其中gen_chart_input的构造见 chart_generator.py包含 6 个键与 user.md 中的变量一一对应gen_chart_input { chart_title: chart_title, chart_description: chart_description, chart_type: chart_type, chart_data: chart_data, font_path: FONT_PATH, history_messages: {}, }这些键正是 user.md 中声明的{{font_path}}、{{chart_title}}、{{chart_description}}、{{chart_type}}、{{chart_data}}、{{history_messages}}。该契约同时被仓库级测试锁定见后文模板契约的测试保障。运行期风格设置模板的第一步内容user.md 的第一部分要求模型把一段精确的exact运行期风格设置代码块原样放到生成代码的开头。该代码块的核心作用是在任何绘图语句执行前先完成中文字体注册与全局视觉基调的统一import seaborn as sns import os import matplotlib from matplotlib import font_manager matplotlib.use(Agg) font_manager.fontManager.addfont({{font_path}}) font_name font_manager.FontProperties(fnamefont_path).get_name() sns.set_style({ font.family: font_name, axes.unicode_minus: False, text.color: #000000, axes.labelcolor: #000000, axes.titlecolor: #000000, xtick.color: #000000, ytick.color: #000000 }) custom_palette [ #F1B656, #397FC7, #040676, #808080, #F6631C, #6D65A3, #FF9A9B, #A4E048 ] sns.set_palette(custom_palette)逐行拆解其设计意图matplotlib.use(Agg)强制使用非交互式 Agg 后端与沙箱环境保持一致沙箱 worker 脚本同样调用matplotlib.use(Agg)见 sandbox_executor.py避免在无显示环境服务端/子进程中打开 GUI 窗口。font_manager.fontManager.addfont({{font_path}})动态注册字体文件。{{font_path}}由源码注入实际值为FONT_PATH指向仓库内置的中文字体 kt_font.ttf定义见 chart_generator.py。随后用FontProperties(fnamefont_path).get_name()取回字体族名并设为 seaborn 默认font.family解决 matplotlib 默认字体不含中文导致的方框/乱码问题。axes.unicode_minus: False避免负号被渲染成缺失字形。统一纯黑文本色text/label/title/tick的颜色全部固定为#000000这与 system.md 第 8 条约束All text black (#000000)呼应。custom_palette8 色调色板暖色#F1B656金、#F6631C橙、#FF9A9B粉与冷色#397FC7蓝、#040676深蓝、#6D65A3紫、#A4E048绿搭配灰阶#808080通过sns.set_palette全局生效保证报告内多张图表色彩体系一致。值得注意的是system.md 第 7 条给出了一条与调色板相关的关键陷阱提示sns.set_palette并不会在单次ax.bar(x, y)调用中为不同柱子自动轮换颜色默认全部使用调色板第一个颜色因此当柱状图需要按类别区分颜色时必须显式传color[c1, c2, ...]并为每个柱加label保证图例能捕获各系列。输入数据契约五个模板变量的语义user.md 的第二部分以 XML 风格标签包裹五个变量作为模型的输入上下文chart_title{{chart_title}}/chart_title chart_description{{chart_description}}/chart_description chart_type{{chart_type}}/chart_type chart_data{{chart_data}}/chart_data history_messages{{history_messages}}/history_messages各字段的来源与语义如下模板变量语义来源与说明chart_title图表标题由FigurePlaceholderGenerator识别插入锚点时生成并下传figure_placeholders.py同时用于后续 VLM 迭代评估与报告内图注渲染chart_description图表要表达的内容描述同样来自锚点识别任务参与数据收集与代码生成并在InsertChartNode中以font size2形式写入报告insert_chart.pychart_type期望图表类型如 bar、line 等由锚点识别阶段 LLM 判定chart_data结构化图表数据由ChartDataCollector从all_classified_contents按章节收集并格式化为{数据名称: 数据}见 data_collector.py注意若chart_data为空或仅含 1 条数据_generate_single_chart会直接跳过该图chart_generator.pyhistory_messages历史反馈消息首次生成为{}VLM 迭代后变为{code: code, error_msg: ..., suggestion: [...]}见 chart_generator.py用于驱动 system.md 的 Mode A双模式执行逻辑history_messages 的分流作用history_messages是整个模板体系实现先生成、后迭代修复闭环的关键开关。system.md 依据它区分两种模式Mode A — 修改既有代码当history_messages含code字段时模型必须以既有代码为起点仅修复error_msg与suggestion指出的问题并输出完整修改后的代码而非补丁若suggestion包含机器可读令牌chart_not_generated则必须确保新代码真正创建了 matplotlib 图形对象。Mode B — 全新生成当history_messages为空/不含code时走完整的四步流程应用风格预设 → 依据四个输入变量编写绘图代码 → 执行绘图后精修工作流 → 不手动保存。在源码中这一分流体现在 chart_generator.py 的 VLM 迭代循环每轮评估后若分数未达阈值就把当前code与建议写入history_messages再次调用_generate_and_execute_code形成生成 → 评估 → 修复的闭环同时_generate_and_execute_code内部还会基于代码执行结果填充error_msgstdout/stderr或chart_not_generated令牌chart_generator.py作为 Mode A 的修复依据。生成约束与绘图规范system.md 对生成结果的硬性要求虽然 user.md 篇幅短小但其内容只有与 system.md 配合才有完整意义。system.md 对模型输出的约束可分为三层数据完整性前置检查生成代码前必须验证chart_data无缺失值、无歧义、结构清晰否则直接输出NO CODE。这与源码中数据不足直接跳过的防御逻辑形成双重保障。14 条生成约束Mode B要点包括单图禁止 subplots、零文字重叠、无裁切、不显示标题禁止ax.set_title()/fig.suptitle()、隐藏顶部边框ax.spines[top].set_visible(False)、虚线水平网格线、颜色编码语义类别、全文黑色文本、填充元素alpha0.8、只用chart_data数据、相关性过滤、空白面积不超过画布 50%收紧figsize/ylim/subplots_adjust、图例必须正确/必要/完整并置于顶部locupper centerbbox_to_anchor(0.5, 0.98)framealpha0.8字号 ≥9pt、离散比较必须用分类 x 轴ax.bar([2018,2025], ...)或range(n)加set_xticks严禁直接传数值年份否则 matplotlib 会补出 2019-2024 的空洞刻度。绘图标准表画布 5×3.5 英寸、DPI 200内容密集时可增大库限定 matplotlib seaborn坐标轴标签 ≥10pt推荐 10-12pt刻度/注释 ≥9pt布局只允许constrained_layoutTrue禁止与tight_layout()混用x 轴刻度标签一律hacenter保存参数bbox_inchestight。绘图后精修工作流共 11 步执行顺序固定隐藏顶脊 → 添加水平网格 → 判定图例必要性 → 校验图例正确性 → 校验图例完整性 → 图例置顶 → 内容密集时扩大画布与边距 → 简化/换行长标签 → 必要时旋转刻度 30-45° → 最后手段才缩小字号且不低于最小字号→强制文字碰撞检查fig.canvas.draw()后收集所有文本框用bbox1.overlaps(bbox2)两两比对注意 system.md 明确提醒intersects方法不存在有重叠必须修复并复检。输出协议为什么禁止 savefig 与 showsystem.md 明确规定输出格式为单个 markdown 代码块且禁止调用plt.savefig()与plt.show()——图表由沙箱执行器自动捕获并转成 base64。这与沙箱 worker 的 finally 块设计完全吻合sandbox_executor.py用户代码执行完毕后worker 通过plt.get_fignums()拿到全部活跃 figure对第一个 figure 执行savefig(_buf, formatpng, bbox_inchestight)写入内存 BytesIO再 base64 编码最后写入父进程预固定的结果文件路径并打印 HMAC 签名。若模型无法生成代码则必须输出恰好为NO CODE的令牌——源码中_generate_and_execute_code通过no code in code.lower()识别该情况并判定本次生成失败chart_generator.py。沙箱执行与安全设计user.md 要求模型在代码开头导入seaborn、os、matplotlib等库而这些库的可用性由沙箱保证。sandbox_executor.py 实现了子进程隔离式执行器AsyncCodeExecutor其安全机制与提示词约束一一对应分阶段加载先在没有限制的环境中预加载 matplotlib/numpy/pandas/seaborn这些库内部会 importshutil、ctypes、signal等受限模块随后再激活安全限制只约束用户代码sandbox_executor.py。导入限制RESTRICTED_MODULES冻结集合拦截subprocess、socket、requests、pickle、exec等 30 个危险模块sys.modules被包装为_SafeModulesDict对受限模块返回None或直接抛错。读写白名单_safe_open只允许向工作目录、系统临时目录写文件读文件仅限工作目录、临时目录、标准库、site-packages 与字体目录/etc、/root、/home、/proc等高风险路径一律拒绝。函数禁用os.system、os.popen、exec*、spawn*、kill*等被替换为抛PermissionError的桩内置函数白名单仅保留int/str/len/sum/sorted/print等绘图所需能力eval/exec/compile/breakpoint/input被禁用。超时与完整性默认执行超时 120 秒DEFAULT_EXEC_TIMEOUT超时 SIGKILL图表结果通过父进程预固定路径 HMAC-SHA256 签名双重校验防止子进程伪造输出。输出脱敏stdout/stderr 会过滤 API key、token、密钥、JWT、数据库 URL 等敏感模式并限制长度防止错误信息经反馈链外泄给 LLM 服务商。从源码结构可以推断这套提示词声明运行环境 沙箱强约束执行环境的组合确保了 LLM 生成的任意代码只能在受控的绘图语义内运行是报告自动插图在安全前提下的落地基础。提示词构建与代码后处理模板本身通过 message_builder.py 以 Jinja2 渲染build_prompt_messages(vlm_generate_chart_code_prompt, context)会分别渲染system.md静态、禁止运行时变量与user.md动态、注入 6 个变量最终组成systemuser两条消息VLM 场景下图片以data:image/png;base64,...形式拼入 user 消息的多模态内容_multimodal_contentmessage_builder.py。模型返回代码后ChartGenerator还会做两道后处理chart_generator.py_extract_code优先提取python ... 之间的内容若缺少闭合标记则提取python之后全部内容完全没有代码块标记时直接按纯代码处理。_normalize_code先做一次 JSON 字符串解包仅当首尾同为单/双引号时避免误改代码内字符串字面量统一换行符为\ntextwrap.dedent去除公共缩进行首 tab 转为 4 空格并去掉行尾空白——保证进入沙箱的代码缩进干净、跨平台可执行。模板契约的测试保障该模板的字段契约并非无约束的约定而是被仓库测试显式锁定test_deepresearch_prompt_contracts.py 中声明了vlm_generate_chart_code_prompt必须暴露的 6 个必填变量chart_data、chart_description、chart_title、chart_type、font_path、history_messages并通过test_prompt_contract参数化用例校验 user.md 的实际 Jinja 变量与契约完全一致任何增删字段都会导致测试失败test_contracts_cover_every_directory_prompt还保证所有提示词目录都被契约覆盖。test_prompt_migration.py 验证call_model用该模板构建出的消息为[system, user]两个 role且 user 消息中确实包含渲染后的上下文chart_title等字段。test_chart_generator_semaphore.py 则从另一面验证图表生成阶段的全局/章节双层并发控制全局 10、单章节 5见 chart_generator.py防止多章节图表任务扇出耗尽资源——这保证了大报告下多张图表并行生成时的稳定性。小结从提示词到可交付图表vlm_generate_chart_code_prompt的 user.md 虽然只有两段内容却是整条图表生成链路的交接协议风格代码块把中文字体与配色体系固化进每次生成五个输入变量把锚点、数据与迭代反馈完整传给模型再经由 system.md 的双模式约束与 14 条绘图规范、沙箱的强安全执行、以及源码侧的代码提取与规范化最终产出可直接插入报告、可溯源is_vlm_chart: True的溯源条目见 insert_chart.py的 PNG 图表。理解该模板等于掌握了 openJiuwen DeepSearch 报告自动插图能力的核心契约。赞分享人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体【免费下载链接】deepsearchopenJiuwen DeepSearch是一款知识增强的深度搜索与研究框架有业界领先的片段级引用和溯源推理能力提供精准Agentic搜索与研究能力项目地址https://gitcode.com/openJiuwen/deepsearch点击查看免费下载相关推荐openJiuwen DeepSearch 文档证据评估器brief_doc_evaluator提示词契约与流水线解析openJiuwen DeepSearch 文档证据评估器brief_doc_evaluator提示词契约与流水线解析 导读 本文围绕 openJiuwen人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体PinchTab iFrame 自动化实战从读取嵌入内容到表单交互的 frame scope 完整指南PinchTab iFrame 自动化实战从读取嵌入内容到表单交互的 frame scope 完整指南 导读 本文围绕 PinchTab 优化测试任务 Gro人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体openJiuwen DeepSearch 研究报告 HTML 外壳生成brief_html_reporter 提示词契约与自包含报告装配机制解析openJiuwen DeepSearch 研究报告 HTML 外壳生成brief_html_reporter 提示词契约与自包含报告装配机制解析 brief人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体上一篇阿里云盘Refresh Token三步获取指南扫码解锁云盘自动化能力下一篇Airbyte 声明式源连接器实战基于 Connector Builder 构建 Unleash 功能开关同步器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

SQLPad 开发者指南:从源码构建、前后端联调开发到测试与 Docker 镜像发布的完整实战手册

SQLPad 开发者指南:从源码构建、前后端联调开发到测试与 Docker 镜像发布的完整实战手册

后端数据可视化数据库数据分析 【免费下载链接】sqlpad Web-based SQL editor 项目地址: https://gitcode.com/gh_mirrors/sq/sqlpad 点击查看 免费下载 本指南面向希望在本地从源码构建 SQLPad、参与其前后端开发、运行其集成测试,或为其构建本地 Dock…

2026/10/13 6:29:47 阅读更多 →
Toga Button 按钮控件实战:回调事件、禁用状态与样式定制全解析

Toga Button 按钮控件实战:回调事件、禁用状态与样式定制全解析

跨平台UI组件桌面应用 【免费下载链接】toga A Python native, OS native GUI toolkit. 项目地址: https://gitcode.com/gh_mirrors/to/toga 点击查看 免费下载 本指南基于 Toga 官方示例 examples/button 展开,逐行剖析一个覆盖"点击回调、禁用/启…

2026/10/13 6:29:47 阅读更多 →
AnyPS5解析:PS5跨平台协议网关设计与实战

AnyPS5解析:PS5跨平台协议网关设计与实战

项目标题:“AnyPS5”这个名称本身带有强烈的指向性与模糊性并存的特征——它既像一个技术代号,又像一句口号;既暗示兼容性、泛用性(“Any”),又锚定在具体硬件平台(“PS5”)。但问题…

2026/10/13 6:29:47 阅读更多 →

最新新闻

AIGC创作训练营:从工具使用到工作流设计的系统化训练

AIGC创作训练营:从工具使用到工作流设计的系统化训练

1. 从"会用AI"到"驾驭AI":AIGC创作训练营到底在训练什么很多人第一次接触AIGC,都是从"帮我写一段文案""帮我生成一张图"开始的。提示词丢进去,结果出来,能用就复制粘贴,不能用…

2026/10/13 9:23:55 阅读更多 →
PS5第三方手柄兼容方案:用MCU做HID协议转换层

PS5第三方手柄兼容方案:用MCU做HID协议转换层

前阵子我发了条状态,说自己正在折腾一个叫AnyPS5的小项目,结果评论区一下子涌进来一堆私信,全是问同一个问题:能不能让我手里那些非官方的老手柄在PS5上正常用。说实话,这确实是这个项目最核心的诉求。PS5主机对第三方…

2026/10/13 9:23:55 阅读更多 →
devtron 仓库内 AWS SDK for Go v2 EventStream 协议包全解析:CHANGELOG 版本演进与编解码实现

devtron 仓库内 AWS SDK for Go v2 EventStream 协议包全解析:CHANGELOG 版本演进与编解码实现

云原生DevOps运维 【免费下载链接】devtron The only Kubernetes dashboard you need 项目地址: https://gitcode.com/gh_mirrors/dev/devtron 点击查看 免费下载 导读 本文以 devtron 仓库中锁定的第三方依赖 github.com/aws/aws-sdk-go-v2/aws/protocol/eventst…

2026/10/13 9:23:55 阅读更多 →
bilibili-api完全指南:从零开始掌握B站API开发与应用

bilibili-api完全指南:从零开始掌握B站API开发与应用

bilibili-api完全指南:从零开始掌握B站API开发与应用 B站作为国内领先的视频弹幕网站,拥有丰富的内容生态和开放的API接口,为开发者提供了广阔的创新空间。本指南将带你全面了解B站API的开发与应用,从基础概念到实际操作&#xf…

2026/10/13 9:23:55 阅读更多 →
自助点餐机24小时营业无人值守落地指南丨蓝速科技(larxu)

自助点餐机24小时营业无人值守落地指南丨蓝速科技(larxu)

很多餐饮老板都有过这样的纠结:看着深夜街头偶尔走过的行人,想着要是能多做几单生意该多好,但一算账又退缩了。招一个夜班收银员,工资要比白班高,还得担心人家干不久就离职,流动性大得让人头疼。更现实的是…

2026/10/13 9:23:55 阅读更多 →
Python大数据分析实验通关指南:从数据清洗到可视化全流程

Python大数据分析实验通关指南:从数据清洗到可视化全流程

1. 从lab7这个编号说起:为什么Python课设总在第七周卡住 如果你正在翻这门课的实验安排,看到lab7这个编号,大概率已经过了前六周的语法基础、循环判断、函数封装,开始进入真正要“处理数据”的阶段了。这门课的名字叫《Python程序…

2026/10/13 9:22: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/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

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

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

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

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

月新闻

我发现了一个新思路:用 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 阅读更多 →