
人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】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),仅供参考