Data-Juicer 问答 Copilot 示例(中文)#
本文按案例展示 输入问题(Input) 与 助手回答(Output),便于理解 QA Copilot 的实际效果。
你可以在官方文档页和我们的 问答 Copilot Juicer 聊天! 欢迎向 Juicer 提出任何与 Data-Juicer 生态相关的问题。
案例 1 · 算子介绍(alphanumeric_filter,ZH)#
类型:
operator_qa语言:
zh
输入(用户提问)
介绍alphanumeric_filter
输出(助手回答)
alphanumeric_filter 是 Data-Juicer 中的一个过滤器算子(Filter Operator),主要用于根据文本中字母和数字字符(或 Token)的比例来筛选数据样本。
📌 核心功能#
该算子计算样本中字母数字内容(Alphanumeric)占整体内容(字符或 Token)的比例,并保留该比例在指定范围 [min_ratio, max_ratio] 内的样本。这有助于过滤掉那些包含过多特殊符号、乱码或非自然语言内容的低质量数据。
⚙️ 主要参数#
参数名 |
类型 |
默认值 |
说明 |
|---|---|---|---|
|
|
|
是否基于 Token 计算比例。若为 |
|
|
|
最小比例阈值。低于此值的样本将被过滤掉。 |
|
|
|
最大比例阈值。高于此值的样本将被过滤掉。 |
💡 工作原理#
计算指标:
如果
tokenization=False:计算alnum_ratio= (字母+数字字符数) / (总字符数)。如果
tokenization=True:计算alpha_token_ratio= (包含字母或数字的 Token 数) / (总 Token 数)。
过滤判断:检查计算出的比例是否在
[min_ratio, max_ratio]区间内。缓存统计:算子会将计算出的比例值缓存到样本的
stats字段中,方便后续分析或可视化。
📊 效果示例#
假设配置为 min_ratio=0.2, max_ratio=0.9:
保留:
"a=1\nb\nc=1+2"(字母数字占比适中)。过滤:
",。、„”“«»1」"(几乎全是特殊符号,字母数字占比极低)。
当启用 tokenization=True 且 min_ratio=1.5 时(注意:Token 模式下比例计算逻辑可能因 Tokenizer 而异,通常用于确保大部分 Token 都是有意义的字母数字组合):
保留:
"Do you need a cup of coffee?"过滤:纯标点或乱码样本。
🔗 相关链接#
这个算子通常用于数据清洗的早期阶段,以快速剔除明显非文本或格式混乱的数据。
案例 2 · 模块介绍(DJ-Agents,ZH)#
类型:
submodule_qa语言:
zh
输入(用户提问)
介绍DJ-Agents
输出(助手回答)
Data-Juicer Agents (DJ-Agents) 是 Data-Juicer 生态系统中的一个智能代理套件,旨在实现代理式数据处理(Agentic Data Processing)。它构建在 Data-Juicer 和 AgentScope 之上,目标是让开发者从“如何实现”数据处理细节中解放出来,专注于“要做什么”,从而实现无代码或低代码的数据处理生命周期。
以下是 DJ-Agents 的核心介绍:
1. 核心愿景与定位#
智能副驾驶:作为数据探索和数据处理流水线的智能助手。
自然语言交互:用户可以通过自然语言描述数据处理需求(例如“为 RAG 任务去重并清洗文本”),Agent 会自动规划、选择算子并生成执行方案。
工具化与技能化:将 Data-Juicer 的强大能力封装为 Agent 可调用的
tools(工具)和skills(技能),支持通用大模型 Agent 的自主编排。
2. 主要功能模块#
根据最新的架构重构(2026-03-11),DJ-Agents 主要包含以下部分:
CLI 命令行工具 (
djx):djx retrieve:根据自然语言意图检索合适的 Data-Juicer 算子。djx plan:分析数据集并生成处理计划(YAML 格式的 Recipe)。djx apply:应用生成的计划进行数据处理。djx tool:提供 JSON 格式的工具接口,便于与其他 Agent 系统或自动化流程集成。
会话模式 (
dj-agents):提供一个交互式界面(支持 TUI 终端用户界面或 AgentScope Studio),用户可以像聊天一样与 Agent 对话,逐步完成数据检查、算子推荐、方案生成和执行。
支持中断当前操作 (
Ctrl+C) 和退出 (Ctrl+D)。
Q&A Copilot (Juicer):
一个专门针对 Data-Juicer 生态的智能问答助手,已部署在官方文档网站、钉钉群和 Discord 社区中,帮助用户解答关于 DJ 算子、菜谱和使用方法的问题。
3. 技术架构特点#
基于 AgentScope:利用 AgentScope 框架强大的多 Agent 协作和工具调用能力。
模块化设计:
Core:包含完整的
djx和dj-agents命令。Harness:最小化安装,仅包含用于自动化的
djx tool核心工具集。Full:包含核心功能以及 Q&A Copilot 和交互式菜谱(InteRecipe)等高级功能。
模型支持:支持 DashScope(通义千问系列)以及其他 OpenAI 兼容的 API。
4. 快速开始示例#
你可以通过以下步骤体验 DJ-Agents:
安装:
git clone https://github.com/datajuicer/data-juicer-agents.git cd data-juicer-agents uv pip install -e '.[full]'
配置 API Key:
export DASHSCOPE_API_KEY="your_api_key"
运行会话模式:
dj-agents --dataset ./data/demo-dataset.jsonl --export ./data/output.jsonl
然后在终端中与 Agent 对话,例如输入:“帮我检查一下数据集的质量,并去除重复项。”
5. 未来路线图 (Roadmap)#
DJ Skills:通过提示词软编排将工具打包为技能,供更通用的 Agent 使用。
InteRecipe Studio:开发前端界面,支持通过自然语言交互式构建数据菜谱,并提供多维度的数据和结果视图。
扩展应用场景:进一步支持 RAG(检索增强生成)、具身智能和数据湖仓架构等复杂场景的数据处理。
更多详细信息可以参考官方文档:
案例 3 · 概念问题(基类算子,ZH)#
类型:
concept_qa语言:
zh
输入(用户提问)
介绍一下基类算子
输出(助手回答)
在 Data-Juicer (DJ) 中,基类算子 (Base Operators) 是所有具体数据处理算子的父类或抽象基础。它们定义了算子的基本结构、接口规范以及通用的执行逻辑,确保所有算子遵循统一的标准以便组合成流水线(Pipeline)。
为了给你提供最准确的介绍,我需要检索 Data-Juicer源码中关于基类算子的定义和文档。
在 Data-Juicer (DJ) 中,基类算子 (Base Operators) 是所有具体数据处理逻辑的抽象基础。它们位于 data_juicer/ops/base_op.py 文件中,定义了算子的通用接口、执行流程以及资源管理方式。
以下是 DJ 中主要基类算子的详细介绍:
1. OP (Operator Base Class)#
这是所有算子的最顶层父类。它定义了算子的基本属性和通用方法。
核心功能:
参数初始化:统一处理数据键名(如
text_key,image_key)、批处理大小 (batch_size)、加速设备 (accelerator: cpu/cuda) 以及并行度 (num_proc)。资源管理:支持 Ray 分布式执行所需的资源配置(如
num_cpus,num_gpus,memory)。生命周期:提供
run()方法的模板,负责在执行前后添加元数据列(如meta,stats)或索引。
关键属性:
_name: 算子名称(由注册表自动设置)。_accelerator: 默认运行设备。_batched_op: 是否为批处理算子。
2. Mapper (映射算子)#
继承自 OP,用于对数据进行一对一或一对多的转换和编辑。
用途:数据清洗、格式转换、内容增强、标注等。
核心方法:
process_single(sample): 处理单个样本。process_batched(samples): 处理一批样本(如果算子支持批处理)。
特点:
输入一个样本,输出一个修改后的样本(可能增加或删除字段)。
支持异常捕获(
catch_map_batches_exception),确保流水线在遇到错误时不会完全崩溃。示例:
clean_email_mapper(删除邮箱),image_face_blur_mapper(人脸模糊)。
3. Filter (过滤算子)#
继承自 OP,用于根据特定条件筛选数据。
用途:去除低质量数据、去重前的初步筛选、基于指标的过滤。
核心方法:
compute_stats_single(sample): 计算样本的统计指标(如文本长度、困惑度、图像相似度得分)。process_single(sample): 根据计算出的 stats 返回True(保留) 或False(过滤)。
特点:
分为两步:先计算统计信息 (
compute_stats),再根据阈值进行过滤 (process)。支持将统计结果导出 (
stats_export_path) 以便分析数据分布。示例:
text_length_filter(文本长度过滤),image_face_count_filter(人脸数量过滤)。
4. Deduplicator (去重算子)#
继承自 OP,专门用于去除重复数据。
用途:MinHash 去重、精确哈希去重、语义去重。
核心方法:
compute_hash(sample): 为样本计算哈希值或指纹。process(dataset): 在整个数据集层面根据哈希值移除重复项。
特点:
通常在数据集全局范围内操作,而不仅仅是单样本。
可以追踪并返回重复对 (
dup_pairs)。示例:
ray_basic_deduplicator。
5. Selector (选择算子)#
继承自 OP,用于在数据集级别进行选择。
用途:随机采样、基于复杂逻辑的子集选择。
核心方法:
process(dataset): 接收整个数据集,返回选中的子集。
特点:
与
Filter不同,Selector通常不依赖单样本的统计指标,而是基于全局逻辑(如“随机选择 10%”)。示例:
random_selector。
6. Grouper (分组算子) & Aggregator (聚合算子)#
这两个算子通常配合使用,用于处理多对一的逻辑。
Grouper:将多个样本组合成一个批次(Batch)。
process(dataset): 返回分组后的数据集。
Aggregator:对分组后的批次进行聚合处理,生成一个新的样本。
process_single(batched_sample): 输入一组样本,输出一个聚合后的样本。
用途:构建训练对(如 SFT 数据构造)、文档级上下文聚合。
7. Pipeline (流水线算子)#
用途:将多个算子组合成一个复合算子。
特点:允许用户将常用的算子序列封装成一个独立的单元,方便复用。
基类算子的通用特性#
注册机制 (
Registry): 所有算子通过@OPERATORS.register_module()装饰器注册,用户可以通过名称直接调用。批处理支持 (
Batched Op): 基类支持_batched_op标记。如果设置为True,算子将接收一个包含多个样本的字典(Dict of Lists),这在使用 GPU 加速模型(如 LLM、CLIP)时能显著提高效率。异常容错: 基类提供了
skip_op_error参数。如果开启,当某个样本处理失败时,算子会记录错误并跳过该样本,而不是中断整个任务。Tracer 集成: 基类集成了
tracer功能,可以自动记录数据在处理前后的变化(如文本被修改了多少字符,哪些样本被过滤了),便于数据溯源和分析。分布式兼容: 所有基类都内置了对 Ray 分布式框架的支持,可以通过
num_cpus,num_gpus等参数轻松扩展到多机多卡环境。
如果你想了解如何自定义一个新的算子,可以参考 DeveloperGuide.md,其中详细说明了如何继承这些基类并实现 process 方法。
案例 4 · 快速开始(如何安装 DJ,ZH)#
类型:
quick_start_qa语言:
zh
输入(用户提问)
如何安装DJ?
输出(助手回答)
安装 Data-Juicer (DJ) 主要有几种方式,取决于您的使用场景(是作为 Python 库使用,还是使用 Docker 环境)。以下是基于官方文档的安装指南:
方法一:使用 pip 安装(推荐用于开发或作为库使用)#
这是最通用的安装方式。建议您先创建一个虚拟环境。
创建并激活虚拟环境(可选但推荐):
python -m venv dj_env source dj_env/bin/activate # Linux/Mac # 或者在 Windows 上: dj_env\Scripts\activate
安装 Data-Juicer:
pip install data-juicer
安装额外依赖(可选): Data-Juicer 有很多算子依赖不同的第三方库(如 OCR、音频处理等)。如果您需要特定功能,可以安装 extras:
# 例如,安装所有额外依赖 pip install data-juicer[all] # 或者只安装特定模块的依赖,例如: pip install data-juicer[video] pip install data-juicer[audio]
方法二:使用 Docker 安装(推荐用于快速体验或隔离环境)#
如果您不想配置本地 Python 环境,可以使用官方提供的 Docker 镜像。
拉取镜像:
docker pull datajuicer/data-juicer:latest
运行容器:
docker run -it --gpus all --shm-size 16g \ -v /path/to/your/data:/data \ -v /path/to/your/config:/config \ datajuicer/data-juicer:latest \ bash
注意:请根据您的实际需求调整挂载路径 (
-v) 和 GPU 参数。
方法三:从源码安装(用于贡献代码或获取最新特性)#
克隆仓库:
git clone https://github.com/datajuicer/data-juicer.git cd data-juicer
安装依赖:
pip install -e . # 如果需要所有额外依赖 pip install -e ".[all]"
验证安装#
安装完成后,您可以在终端输入以下命令来验证是否安装成功:
dj --help
如果看到帮助信息,说明安装成功。
参考链接#
详细安装教程: Data-Juicer Installation Guide
GitHub 仓库: datajuicer/data-juicer
如果您在安装过程中遇到特定错误(如依赖冲突),请提供错误日志,我可以帮您进一步排查。
案例 5 · 最佳实践(使用 DJ 的建议,ZH)#
类型:
best_practice_qa语言:
zh
输入(用户提问)
你能给我一些使用DJ的最佳实践吗?
输出(助手回答)
当然可以!Data-Juicer (DJ) 是一个强大的多模态数据处理框架。为了帮助你更高效地使用它,我整理了一些基于官方文档和社区经验的最佳实践。
以下是使用 Data-Juicer 的关键最佳实践:
1. 明确数据处理流程 (Pipeline Design)#
不要试图用一个巨大的配置文件完成所有事情。将数据处理分为几个逻辑阶段:
基础清洗 (Basic Cleaning):去除空白、特殊字符、过短/过长文本等。
质量过滤 (Quality Filtering):使用语言模型评分、困惑度(Perplexity)、毒性检测等算子。
去重 (Deduplication):在高质量过滤后进行去重,以减少计算资源浪费。通常先做局部去重(MinHash),再做全局去重。
增强与格式化 (Enhancement & Formatting):如添加元数据、转换格式等。
建议:参考 Data-Juicer Hub 中的官方菜谱(Recipes),它们已经展示了经过验证的处理流程。
2. 合理选择算子 (Operator Selection)#
从小规模开始:在大规模数据集上运行之前,先在小样本(例如 1000 条数据)上测试你的配置。这可以快速发现配置错误或性能瓶颈。
利用
retrieve_operators_api:如果你不确定哪个算子适合你的需求,可以使用自然语言描述你的意图,让系统推荐合适的算子。例如:"我想过滤掉包含大量非ASCII字符的文本"
查看算子文档:使用
get_operator_info获取算子的详细参数说明和示例。确保你理解每个参数的含义,特别是阈值(thresholds)。
3. 性能优化 (Performance Optimization)#
并行处理:Data-Juicer 支持多进程并行处理。根据你的 CPU 核心数调整
parallelism参数。资源管理:
对于 CPU 密集型算子(如 MinHash 去重),确保有足够的内存。
对于 GPU 密集型算子(如基于 LLM 的评分),注意显存限制,可能需要减小 batch size。
缓存中间结果:如果处理流程很长,建议在关键步骤后保存中间数据集。这样如果后续步骤失败或需要调整,可以从断点继续,而不必从头开始。
4. 监控与调试 (Monitoring & Debugging)#
启用日志:设置适当的日志级别(INFO 或 DEBUG),以便跟踪处理进度和潜在错误。
统计信息:Data-Juicer 通常会输出每个算子处理前后的数据量变化。密切关注这些统计信息,如果某个算子过滤掉了过多数据(例如 >90%),可能需要检查其参数是否过于严格。
可视化:如果可能,使用可视化工具检查处理后的数据样本,确保数据质量符合预期。
5. 利用 Data-Juicer Hub#
复用现有 Recipes:不要从头开始编写配置。浏览 Recipe Gallery,找到与你的数据类型(文本、图像、音频、视频)和目标相似的场景,然后在此基础上进行修改。
贡献与分享:如果你开发了一个有效的处理流程,考虑将其贡献回 Hub,帮助社区其他成员。
6. 特定数据类型建议#
文本:重点关注语言识别、毒性过滤和去重。
图像:关注分辨率、宽高比、美学评分和水印检测。
多模态:确保文本和图像/音频之间的对齐质量,使用多模态算子进行联合过滤。
示例:一个简单的文本处理流程#
# example_recipe.yaml
dataset_path: "path/to/your/dataset.jsonl"
export_path: "path/to/output/dataset.jsonl"
process:
- filter: # 基础过滤
op: "alphanumeric_filter"
args:
min_ratio: 0.5
- filter: # 长度过滤
op: "text_length_filter"
args:
min_len: 10
max_len: 10000
- deduplicator: # 去重
op: "minhash_deduplicator"
args:
window_size: 5
threshold: 0.8
希望这些最佳实践能帮助你更好地使用 Data-Juicer!如果你有具体的数据处理任务或遇到问题,欢迎提供更多细节,我可以给出更针对性的建议。
案例 6 · 越界问题(与 DJ 无关提问,ZH)#
类型:
off_topic_qa语言:
zh
输入(用户提问)
今天天气怎么样?
输出(助手回答)
Sorry, this question is unrelated to Data-Juicer.