Data-Juicer optimize_prompt_mapper 算子实战:基于同批次样本的提示词自动优化
人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载本篇技术指南围绕 Data-Juicer 的optimize_prompt_mapper算子展开讲解它如何以同一批次中的既有提示词为示例、借助 LLM 批量生成更优提示词的完整原理与用法。你将掌握该算子的三种推理后端API / Hugging Face / vLLM、全部可配置参数、提示词模板定制方法以及如何在 YAML 配置或 Python 代码中落地这一“以批内样本为上下文”的提示词优化流程。算子定位与核心能力optimize_prompt_mapper注册名OP_NAME为optimize_prompt_mapper属于 Data-Juicer 的mapper类型算子被声明为_batched_op True批量算子且_accelerator cuda官方标签为gpu, vllm, hf, api定义见 optimize_prompt_mapper.py并已在 mapper/init.py 中注册导出。其核心思路是把当前批次中已有的提示词当作示例请求 LLM 总结规律并生成一批新的、质量更高的提示词新生成的提示词会继续被纳入示例池用于优化后续提示词从而形成“越优化越准”的迭代式生成。核心能力可以归纳为五点利用批内既有与新建提示词作为示例驱动模型产出优化后的提示词支持 Hugging Face 模型与 API 两种文本生成来源并可开启 vLLM 加速可保留原始样本也可用生成结果替换原始样本keep_original_sample解析结果为空时自动重试重试次数可配置retry_num以批处理模式运行CUDA 设备上可借助 vLLM 加速推理。从源码结构看该算子的设计参考了 AgentScope 的 Prompt Optimization 教程见 源码 docstring适合用于大规模 prompt 数据的自动化增强与迭代打磨。工作流程与底层原理结合 optimize_prompt_mapper.py 的源码实现算子的完整执行链路如下初始化模型__init__根据enable_vllm、is_hf_model两个开关选择三种初始化路径之一通过 model_utils.py 中的prepare_model生成模型键model_key实际模型由get_model按需懒加载并缓存于MODEL_ZOO。进入批量处理process_batched取当前批次中prompt_key字段对应的提示词列表若批次中不存在该字段直接原样返回样本这是重要的容错行为。随后用random.sample从批内随机抽取min(max_example_num, batch_size)条提示词作为初始示例。循环生成gen_num条新提示词每一轮调用generate_one_prompt将当前示例池经build_input组装成输入与system_prompt组成 chat messages 后送模型生成解析成功后把新提示词追加进示例池若池子超过max_example_num则从头部弹出滑动窗口式“滚动示例”确保上下文始终是最新的示例组合。写回结果process_batched收尾deepcopy原样本若keep_original_sampleTrue将新提示词追加到prompt_key列表末尾否则直接用新提示词替换原列表。其余字段按第一条原始样本的值复制len(output_prompts)份保证各列等长。输入组装build_inputbuild_input由三层模板嵌套而成对应代码 build_inputinput_prompt input_template.format( 拼接后的示例 ) 其中每个示例 example_template.format( prompt_template.format(提示词) )默认情况下三层模板均提供了可直接使用的中文默认值详见下文“模板定制”小节。输出解析与重试parse_output与generate_one_prompt模型返回的原始文本通过正则output_pattern抽取第一条有效匹配re.findall(..., re.DOTALL)后取matches[0].strip()见 parse_output。若解析结果为空字符串则进入重试循环generate_one_prompt每轮重试都会重新调用模型生成累计失败次数达到retry_num时记录Retry to generate the prompt failed!警告并放弃本轮成功解析后立即跳出循环。需要说明的是默认的输出模板要求模型在回答中带【提示词】前缀配合默认正则【提示词】(.*?)(?【|$)即使模型在回答中附带分析文字也能准确截取提示词本体。参数配置详解以下是该算子的完整参数表与官方文档保持一致并补充源码级说明name 参数名type 类型default 默认值desc 说明api_or_hf_modelstrQwen/Qwen2.5-7B-InstructAPI 模型名或 Hugging Face 模型名也支持本地模型路径。gen_numPositiveInt需 03每个批次要生成的新提示词数量。max_example_numPositiveInt需 03生成新提示词时作为上下文的最大示例条数。keep_original_sampleboolTrue是否保留原始样本为False时最终数据集中只含生成文本原始文本被移除。retry_numint3解析出的生成提示词为空时的最大重试次数。api_endpointOptional[str]NoneAPI 的 URL 端点。response_pathOptional[str]None从 API 响应中提取内容的路径默认choices.0.message.content。system_promptOptional[str]None引导生成任务的系统提示词缺省时使用内置中文默认提示词。input_templateOptional[str]None构建输入提示的模板必须含一个占位符{}由example_num条按example_template格式化后的示例填充。example_templateOptional[str]None格式化单条提示词示例的模板必须含一个占位符{}填入一条格式化后的提示词。prompt_templateOptional[str]None在每条示例内格式化单条提示词的模板含一个占位符{}。output_patternOptional[str]None从模型响应中抽取提示词的正则表达式。enable_vllmboolFalse是否使用 vLLM 做推理加速。is_hf_modelboolFalse为True时使用 Transformers 加载 Hugging Face 或本地 LLM。model_paramsOptional[Dict]None初始化模型的额外参数。sampling_paramsOptional[Dict]None文本生成的采样参数例如{temperature: 0.9, top_p: 0.95}。kwargs-额外关键字参数。关键参数的源码语义gen_num/max_example_num声明为PositiveInt对应 optimize_prompt_mapper.py传入 0 或负数会在算子构造阶段被 pydantic 校验拒绝。示例池在每轮生成后做“追加新提示词 超限弹出头部”的滚动更新因此max_example_num直接影响上下文窗口与生成稳定性。keep_original_sampleTrue时输出条数 原始条数 gen_numFalse时输出条数 ≤gen_num空解析会跳过这是判定数据处理量与测试断言的关键依据。sampling_params仅当enable_vllmTrue或is_hf_modelTrue时会被update_sampling_params自动补齐max_tokensvLLM 路径或max_new_tokensHF 路径阈值下限为 512API 模式不注入此类参数API 服务商有自己的默认值见 model_utils.py。is_hf_model与enable_vllm二选一两者都为False时走 API 路径同时为True时 vLLM 优先级更高先走 vLLM 分支。三种推理后端的选择与差异从init方法 可以看出算子按以下优先级初始化vLLM 后端enable_vllmTrueprepare_model(model_typevllm, ...)加载模型sampling_params转为vllm.SamplingParams。注意当不在 Ray 模式下is_ray_mode()为假无法在不同 GPU 上初始化多个 vLLM 副本源码强制self.num_proc 1即单进程运行。Hugging Face 后端is_hf_modelTrueprepare_model(model_typehuggingface, return_pipeTrue, ...)加载为 Transformers pipeline调用时传return_full_textFalse仅取生成的文本采样参数按普通 dict 透传。API 后端两者皆False默认prepare_model(model_typeapi, modelapi_or_hf_model, endpointapi_endpoint, response_pathresponse_path, ...)。response_path默认取choices.0.message.content对应 OpenAI 兼容接口的标准响应结构。在 generate_one_prompt 中三种后端的取结果方式各不相同vLLM 取response[0].outputs[0].textHF 取response[0][generated_text]API 直接对model(messages, **sampling_params)的返回做正则解析。模型实例统一由 get_model 按MODEL_ZOO缓存复用并按rank % cuda_device_count()分配到对应 CUDA 设备。模板定制默认模板与占位符规则算子内置了一套中文默认模板见 optimize_prompt_mapper.pyDEFAULT_SYSTEM_PROMPT ( 请你仔细观察多个示例提示词按照你的理解总结出相应规矩然后写出一个新的更好的提示词以让模型更好地完成指定任务。 注意新生成的【提示词】需要满足如下要求\n 1. 生成的【提示词】不能与输入的【提示词】完全一致但是需要保持格式类似。\n 2. 生成的【提示词】相比于输入的【提示词】不能有很大的变化更多应该是关键词、核心参数等方面的微调。\n 3. 生成时只需生成带有【提示词】前缀的提示词不需生成其他任何额外信息。\n ) DEFAULT_INPUT_TEMPLATE {} DEFAULT_EXAMPLE_TEMPLATE \n如下是一条示例数据\n{} DEFAULT_PROMPT_TEMPLATE 【提示词】\n{}\n DEFAULT_OUTPUT_PATTERN r【提示词】(.*?)(?【|$)模板组合逻辑与占位符规则prompt_template只有一个{}负责把单条提示词包上【提示词】前缀example_template只有一个{}把上面格式化好的单条提示词包装成“一条示例数据”input_template只有一个{}接收max_example_num条示例的拼接结果作为发给模型的用户消息output_pattern是非贪婪正则【提示词】(.*?)(?【|$)配合re.DOTALL可跨行捕获直到下一个【或文本结尾为止。定制时需保持占位符数量与嵌套关系不变例如想要英文输出风格可同时替换system_prompt、prompt_template如Prompt:\n{}\n与output_pattern如rPrompt:\s*(.*?)(?\n|$)否则解析将失败并触发重试。实战YAML 配置与 Python 调用方式一在数据处理配置中声明在 Data-Juicer 的 YAML 配置的process列表中加入该算子即可例如基于默认 API 后端的最小配置process: - optimize_prompt_mapper: api_or_hf_model: Qwen/Qwen2.5-7B-Instruct gen_num: 3 max_example_num: 3 keep_original_sample: true retry_num: 3 sampling_params: temperature: 0.9 top_p: 0.95使用本地/Hugging Face 模型并开启 vLLM 加速需 CUDA 设备Ray 模式下支持多 GPUprocess: - optimize_prompt_mapper: api_or_hf_model: /path/to/local/model # 或 Qwen/Qwen2.5-7B-Instruct enable_vllm: true gen_num: 5 max_example_num: 4 keep_original_sample: false # 只保留生成结果 sampling_params: max_tokens: 512 temperature: 0.9使用外部 API 端点时需显式指定api_endpoint与response_path并保持enable_vllm、is_hf_model均为Falseprocess: - optimize_prompt_mapper: api_or_hf_model: your-api-model-name api_endpoint: https://your-api.example.com/v1/chat/completions response_path: choices.0.message.content gen_num: 3 max_example_num: 3方式二Python 代码直接调用参考 test_optimize_prompt_mapper.py 的用法可在脚本中直接构造算子并对NestedDataset做 batched mapfrom datasets import load_dataset from data_juicer.core.data import NestedDataset from data_juicer.ops.mapper.optimize_prompt_mapper import OptimizePromptMapper op OptimizePromptMapper( api_or_hf_modelQwen/Qwen2.5-7B-Instruct, gen_num3, max_example_num3, is_hf_modelTrue, # 使用 Transformers 加载 HF 模型 sampling_params{max_new_tokens: 200}, ) dataset NestedDataset( load_dataset(json, data_filesdemos/data/auto-prompt-optim/demo-dataset-prompts.jsonl, splittrain)) results dataset.map(op.process, num_proc1, with_rankTrue, batchedTrue, batch_size2)示例数据仓库自带的演示数据位于 demos/data/auto-prompt-optim/demo-dataset-prompts.jsonl每条记录以prompt字段存放一条待优化提示词例如“扮演数学解题评估器对解法打分……”可直接用于跑通该算子。单元测试验证仓库为该算子提供了完整的单元测试位于 test_optimize_prompt_mapper.py覆盖了以下行为HF 模型与 API 模型两条主路径test与test_api_model以batch_size2、gen_num3跑通全流程并断言结果条数 原始条数 批次数 ×gen_num验证“保留原始样本”的输出规模。纯解析逻辑ParseOutputTest无需模型验证parse_output能从【提示词】这是一个优化后的提示词【分析】这是分析中正确截取这是一个优化后的提示词对无匹配与空输入返回空字符串。边界情形EdgeCaseTest当样本字典缺少prompt键时process_batched原样返回样本保证流程不崩溃。keep_original_sampleFalsetest_keep_original_false断言输出条数不超过 批次数 ×gen_num即原始样本被移除。gen_num1test_gen_num_1验证最小生成数下的输出规模正确。这些测试与 optimize_prompt_mapper.py 的实现一一对应可作为你接入该算子时的行为参考。使用注意事项CUDA 依赖算子_accelerator cudaHF 与 vLLM 路径在 GPU 环境下效果最佳非 Ray 模式下 vLLM 强制单进程num_proc1多机多卡请使用 Ray 模式。字段约定算子默认读取prompt字段prompt_key实际生产中可通过基类text_key相关配置调整目标字段名。输出规模变化keep_original_sampleTrue时数据条数会按每批gen_num增长可能带来下游去重/过滤成本的增加False时条数可能小于gen_num的整数倍空解析跳过。模板一致性一旦自定义模板output_pattern必须与模型输出格式严格匹配否则将反复触发重试并产生大量日志警告。更多算子如需了解其它 mapper 类算子可查阅 docs/Operators.md 中的完整算子列表。总之optimize_prompt_mapper提供了一条“用批内已有提示词滚动优化、再由 LLM 批量生成新提示词”的自动化增强路径配合 API、HF 与 vLLM 三种后端可以灵活嵌入各类 prompt 数据加工流水线。赞分享人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载相关推荐OLMo数据管线教程三步把原始文本变成训练用的.npy文件OLMo数据管线教程三步把原始文本变成训练用的.npy文件 为什么不能把原始文本直接喂给模型训练OLMoAI2 的开源大模型项目的答案是先把文本变成纯人工智能大模型数据工程数据清洗数据增强数据质检两周前笔试如何用 LeetCode-Book 刷完 75 道剑指 Offer两周前笔试如何用 LeetCode Book 刷完 75 道剑指 Offer 笔试只剩两周必须选定一个题集集中突击——这是大多数求职者的共同处境。剑指 Of人工智能大模型数据工程数据清洗数据增强数据质检Data-Juicer naive_reverse_grouper 算子详解批量样本拆解与 batch_meta 导出实战Data Juicer naive_reverse_grouper 算子详解批量样本拆解与 batch_meta 导出实战 naive_reverse_gro人工智能大模型数据工程数据清洗数据增强数据质检上一篇CyberChef循环操作迭代处理与批量转换下一篇Jupyter Notebook工具栏项目闪烁问题分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

GhostTrack:OSINT 追踪与 IP 定位实用指南

GhostTrack:OSINT 追踪与 IP 定位实用指南

GhostTrack:OSINT 追踪与 IP 定位实用指南 【免费下载链接】GhostTrack Useful tool to track location or mobile number 项目地址: https://gitcode.com/GitHub_Trending/gh/GhostTrack GhostTrack 是一款命令行 OSINT 追踪工具。OSINT(开源情报…

2026/10/5 1:45:19 阅读更多 →
Atmosphère DNS.mitm 上手:用一个 hosts 文件屏蔽遥测与重定向域名

Atmosphère DNS.mitm 上手:用一个 hosts 文件屏蔽遥测与重定向域名

Atmosphre DNS.mitm 上手:用一个 hosts 文件屏蔽遥测与重定向域名 【免费下载链接】Atmosphere Atmosphre is a work-in-progress customized firmware for the Nintendo Switch. 项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere 想让 Switch …

2026/10/5 1:45:19 阅读更多 →
Talebook 后端开发指南:webserver 目录架构、请求处理与测试规范详解

Talebook 后端开发指南:webserver 目录架构、请求处理与测试规范详解

后端前端CMS 【免费下载链接】talebook 一个简单好用的个人书库 项目地址: https://gitcode.com/gh_mirrors/ta/talebook 点击查看 免费下载 导读 本文以 Talebook 仓库中 webserver/AGENTS.md 及其展开文档 webserver/CLAUDE.md 为核心骨架,面向需要在…

2026/10/5 1:44:18 阅读更多 →

最新新闻

基于Unet的心脏分割实战:从数据预处理到模型部署的完整指南

基于Unet的心脏分割实战:从数据预处理到模型部署的完整指南

简介:本资源面向计算机、人工智能、通信工程等专业的在校学生与教师,以及从事深度学习入门进阶的开发者,提供一套基于U-Net网络实现心脏图像分割任务的完整Python源码与训练模型,可作为毕业设计、课程设计、作业或项目立项演示的参…

2026/10/5 5:44:58 阅读更多 →
Ace Data Cloud 接入 OpenAI Embeddings 的工程实践指南

Ace Data Cloud 接入 OpenAI Embeddings 的工程实践指南

最近一段时间,我在给一个文档问答系统做语义搜索的升级改造,折腾了一圈之后,最大的体会是:Embeddings 不是那种“调个 API 拿个结果”就完事的小功能,它更像是一层基础数据管道。你把这层管道铺好了,后面做…

2026/10/5 5:44:58 阅读更多 →
【转】逻辑基础知识

【转】逻辑基础知识

来源:《图解基础知识手册高中语文》刘来刚主编 吉林大学出版社 P185~P187版权归原作者所有,如有侵权请联系删除,谢谢!详情请阅读《图解基础知识手册高中语文》学习知识必须扎实掌握语文这一重要基础工具摘录一、逻辑定义&#xff…

2026/10/5 5:44:58 阅读更多 →
大模型推理性能调优实战:显存管理、批处理与量化策略全解析

大模型推理性能调优实战:显存管理、批处理与量化策略全解析

1. 项目概述1.1 核心需求解析OpenRig,翻译过来就是"开放的测试台架"或者"开放的装配台",你可以把它理解成一个专门为大模型推理场景量身打造的硬件调校工具集。这两年大模型浪潮席卷各行各业,本地部署、私有化推理成了刚…

2026/10/5 5:44:58 阅读更多 →
从零手搓AI工程流水线:模型部署、批处理与性能调优实战

从零手搓AI工程流水线:模型部署、批处理与性能调优实战

1. 为什么我要从零手搓一套AI工程流水线第一次看到ai-engineering-from-scratch这个项目名的时候,我正坐在工位上对着一个跑不通的推理服务发呆。模型权重加载没问题,单条请求测试也没问题,但一上并发就开始出现显存溢出、响应时间从200ms飙到…

2026/10/5 5:44:58 阅读更多 →
树的直径、重心与动态查询:从原理到嵌入式落地

树的直径、重心与动态查询:从原理到嵌入式落地

1. 这不是“背模板”,而是理解树结构本质的三把钥匙你翻过无数算法笔记,见过“树的直径”“树的重心”“动态查询”这些词被反复加粗、标红、塞进各种“高频考点清单”。但真正写代码时,一遇到换根DP就卡壳,一碰到边权修改就懵&am…

2026/10/5 5:43:58 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

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

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

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

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/4 11:40:45 阅读更多 →
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/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练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/4 20:14:29 阅读更多 →