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] 内的样本。这有助于过滤掉那些包含过多特殊符号、乱码或非自然语言内容的低质量数据。

⚙️ 主要参数#

参数名

类型

默认值

说明

tokenization

bool

False

是否基于 Token 计算比例。若为 False,则基于字符(Character)计算;若为 True,则使用 Hugging Face Tokenizer 分词后计算。

min_ratio

float

0.25

最小比例阈值。低于此值的样本将被过滤掉。

max_ratio

float

sys.maxsize

最大比例阈值。高于此值的样本将被过滤掉。

💡 工作原理#

  1. 计算指标

    • 如果 tokenization=False:计算 alnum_ratio = (字母+数字字符数) / (总字符数)。

    • 如果 tokenization=True:计算 alpha_token_ratio = (包含字母或数字的 Token 数) / (总 Token 数)。

  2. 过滤判断:检查计算出的比例是否在 [min_ratio, max_ratio] 区间内。

  3. 缓存统计:算子会将计算出的比例值缓存到样本的 stats 字段中,方便后续分析或可视化。

📊 效果示例#

假设配置为 min_ratio=0.2, max_ratio=0.9

  • 保留"a=1\nb\nc=1+2"(字母数字占比适中)。

  • 过滤",。、„”“«»1」"(几乎全是特殊符号,字母数字占比极低)。

当启用 tokenization=Truemin_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-JuicerAgentScope 之上,目标是让开发者从“如何实现”数据处理细节中解放出来,专注于“要做什么”,从而实现无代码或低代码的数据处理生命周期。

以下是 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:包含完整的 djxdj-agents 命令。

    • Harness:最小化安装,仅包含用于自动化的 djx tool 核心工具集。

    • Full:包含核心功能以及 Q&A Copilot 和交互式菜谱(InteRecipe)等高级功能。

  • 模型支持:支持 DashScope(通义千问系列)以及其他 OpenAI 兼容的 API。

4. 快速开始示例#

你可以通过以下步骤体验 DJ-Agents:

  1. 安装

    git clone https://github.com/datajuicer/data-juicer-agents.git
    cd data-juicer-agents
    uv pip install -e '.[full]'
    
  2. 配置 API Key

    export DASHSCOPE_API_KEY="your_api_key"
    
  3. 运行会话模式

    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 (流水线算子)#

  • 用途:将多个算子组合成一个复合算子。

  • 特点:允许用户将常用的算子序列封装成一个独立的单元,方便复用。


基类算子的通用特性#

  1. 注册机制 (Registry): 所有算子通过 @OPERATORS.register_module() 装饰器注册,用户可以通过名称直接调用。

  2. 批处理支持 (Batched Op): 基类支持 _batched_op 标记。如果设置为 True,算子将接收一个包含多个样本的字典(Dict of Lists),这在使用 GPU 加速模型(如 LLM、CLIP)时能显著提高效率。

  3. 异常容错: 基类提供了 skip_op_error 参数。如果开启,当某个样本处理失败时,算子会记录错误并跳过该样本,而不是中断整个任务。

  4. Tracer 集成: 基类集成了 tracer 功能,可以自动记录数据在处理前后的变化(如文本被修改了多少字符,哪些样本被过滤了),便于数据溯源和分析。

  5. 分布式兼容: 所有基类都内置了对 Ray 分布式框架的支持,可以通过 num_cpus, num_gpus 等参数轻松扩展到多机多卡环境。

如果你想了解如何自定义一个新的算子,可以参考 DeveloperGuide.md,其中详细说明了如何继承这些基类并实现 process 方法。


案例 4 · 快速开始(如何安装 DJ,ZH)#

  • 类型: quick_start_qa

  • 语言: zh

输入(用户提问)

如何安装DJ?

输出(助手回答)

安装 Data-Juicer (DJ) 主要有几种方式,取决于您的使用场景(是作为 Python 库使用,还是使用 Docker 环境)。以下是基于官方文档的安装指南:

方法一:使用 pip 安装(推荐用于开发或作为库使用)#

这是最通用的安装方式。建议您先创建一个虚拟环境。

  1. 创建并激活虚拟环境(可选但推荐):

    python -m venv dj_env
    source dj_env/bin/activate  # Linux/Mac
    # 或者在 Windows 上: dj_env\Scripts\activate
    
  2. 安装 Data-Juicer

    pip install data-juicer
    
  3. 安装额外依赖(可选): Data-Juicer 有很多算子依赖不同的第三方库(如 OCR、音频处理等)。如果您需要特定功能,可以安装 extras:

    # 例如,安装所有额外依赖
    pip install data-juicer[all]
    
    # 或者只安装特定模块的依赖,例如:
    pip install data-juicer[video]
    pip install data-juicer[audio]
    

方法二:使用 Docker 安装(推荐用于快速体验或隔离环境)#

如果您不想配置本地 Python 环境,可以使用官方提供的 Docker 镜像。

  1. 拉取镜像

    docker pull datajuicer/data-juicer:latest
    
  2. 运行容器

    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 参数。

方法三:从源码安装(用于贡献代码或获取最新特性)#

  1. 克隆仓库

    git clone https://github.com/datajuicer/data-juicer.git
    cd data-juicer
    
  2. 安装依赖

    pip install -e .
    # 如果需要所有额外依赖
    pip install -e ".[all]"
    

验证安装#

安装完成后,您可以在终端输入以下命令来验证是否安装成功:

dj --help

如果看到帮助信息,说明安装成功。

参考链接#

如果您在安装过程中遇到特定错误(如依赖冲突),请提供错误日志,我可以帮您进一步排查。


案例 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.