Dingo 介绍

June 16, 2026 · View on GitHub

Dingo AI 数据质量评估工具 Logo

pre-commit PyPI 版本 Python 版本 许可证 GitHub 星标 GitHub 分支 GitHub 问题 MseeP.ai 安全评估徽章 Ask DeepWiki Trust Score ClawHub Skill

English · 简体中文 · 日本語

👋 加入我们 Discord微信

如果觉得有帮助,欢迎在 GitHub 上点个 ⭐ 支持!
点击 Star 支持

Dingo 介绍

Dingo 是一款全面的 AI 数据、模型和应用质量评估工具,专为机器学习工程师、数据工程师和 AI 研究人员设计。它帮助你系统化地评估和改进训练数据、微调数据集和生产AI系统的质量。


🚀 企业级 Dingo SaaS 版本

需要 生产级数据质量平台 吗?试试 Dingo SaaS 企业版!

✨ 相比开源版,SaaS 版提供:

  • 🌐 Web UI - 可视化评估界面,无需写代码
  • 🔐 权限管理 - JWT + Google OAuth 2.0
  • 📊 可视化报告 - 交互式图表、趋势分析、导出功能
  • 🔌 RESTful API - 与现有系统无缝集成
SaaS — Dashboard Dingo SaaS dashboard
SaaS — Playground Dingo SaaS playground
SaaS — Evaluation output Dingo SaaS evaluation output

📝 如何获得免费 SaaS 代码

👉 点击申请 Dingo SaaS 代码仓库访问权限

审核时间:1-5 个工作日 | 适合企业数据治理、团队协作


为什么选择 Dingo?

🎯 生产级质量检查 - 从预训练数据集到 RAG 系统,确保你的 AI 获得高质量数据

🗄️ 多数据源集成 - 无缝连接本地文件、SQL 数据库(PostgreSQL/MySQL/SQLite)、HuggingFace 数据集和 S3 存储

🔍 多字段评估 - 对不同字段并行应用不同的质量规则(例如:对 isbn 字段进行 ISBN 验证,对 title 字段进行文本质量检查)

🤖 RAG 系统评估 - 使用 5 个学术支持的指标全面评估检索和生成质量

🧠 LLM、规则和智能体混合 - 结合快速启发式规则(30+ 内置规则)和基于 LLM 的深度评估

🚀 灵活执行 - 本地运行快速迭代,或使用 Spark 扩展到数十亿级数据集

📊 丰富报告 - 详细的质量报告,带有 GUI 可视化和字段级洞察

架构图

Architecture of dingo

快速启动

安装

# 核心包(包含规则评估、LLM 评估、MCP 服务、数据源支持)
pip install dingo-python

# 安装 HHEM 幻觉检测模型(需要 transformers + torch)
pip install "dingo-python[hhem]"

# 安装检索平台评测(MTEB + pytrec-eval-terrier)
pip install "dingo-python[retrieval]"

# 安装全部功能(HHEM + Agent + Retrieval)
pip install "dingo-python[all]"

Dingo 使用示例

1. 评估LLM对话数据

from dingo.config.input_args import EvaluatorLLMArgs
from dingo.io.input import Data
from dingo.model.llm.text_quality.llm_text_quality_v4 import LLMTextQualityV4
from dingo.model.rule.rule_common import RuleSpecialCharacter

data = Data(
    data_id='123',
    prompt="hello, introduce the world",
    content="�I am 8 years old. ^I love apple because:"
)


def llm():
    LLMTextQualityV4.dynamic_config = EvaluatorLLMArgs(
        key='YOUR_API_KEY',
        api_url='https://api.openai.com/v1/chat/completions',
        model='gpt-4o',
    )
    res = LLMTextQualityV4.eval(data)
    print(res)

def rule():
    res = RuleSpecialCharacter().eval(data)
    print(res)

rule()

2. 评估数据集

from dingo.config import InputArgs
from dingo.exec import Executor

# Evaluate a dataset from Hugging Face
if __name__ == '__main__':
    input_data = {
        "input_path": "tatsu-lab/alpaca",  # Dataset from Hugging Face
        "dataset": {
            "source": "hugging_face",
            "format": "plaintext"  # Format: plaintext
        },
        "executor": {
            "result_save": {
                "bad": True  # Save evaluation results
            }
        },
        "evaluator": [
            {
                "evals": [
                    {"name": "RuleColonEnd"},
                    {"name": "RuleSpecialCharacter"}
                ]
            }
        ]
    }

    input_args = InputArgs(**input_data)
    executor = Executor.exec_map["local"](input_args)
    result = executor.execute()
    print(result)

命令行界面

使用规则集评估

dingo eval --input .github/env/local_plaintext.json

使用LLM评估(例如GPT-4o)

dingo eval --input .github/env/local_json.json

MCP 服务端

Dingo 内置了模型上下文协议 (MCP) 服务端,支持 AI Agent 集成:

# 启动 MCP 服务端(SSE 传输,默认端口 8000)
dingo serve

# 自定义端口
dingo serve --port 9000

# stdio 传输(适用于 Claude Desktop)
dingo serve --transport stdio

详细配置和 Cursor/Claude Desktop 集成说明,请参阅专门文档:

English · 简体中文 · 日本語

视频演示

为了帮助您快速上手 Dingo MCP,我们制作了视频演示:

https://github.com/user-attachments/assets/aca26f4c-3f2e-445e-9ef9-9331c4d7a37b

此视频展示了关于 Dingo MCP 服务端与 Cursor 一起使用的分步演示。


📚 数据质量指标

Dingo 提供 100+ 评估指标,跨多个维度,结合基于规则的速度和基于 LLM 的深度。

指标类别

类别示例使用场景
预训练文本质量完整性、有效性、相似性、安全性LLM 预训练数据过滤
SFT 数据质量诚实、有帮助、无害 (3H)指令微调数据
RAG 评估忠实度、上下文精度、答案相关性RAG 系统评估
幻觉检测HHEM-2.1-Open、事实性检查生产 AI 可靠性
分类主题分类、内容标注数据组织
多模态图文相关性、VLM 质量、OCR 视觉评估视觉语言数据
安全性PII 检测、Perspective API 毒性隐私和安全

📊 查看完整指标文档 →
📖 RAG 评估指南 →
🔍 幻觉检测指南 →
事实性评估指南 →
👁️ VLM 渲染判断指南 → | English

大部分指标都有学术研究支持,以确保科学严谨性。

快速使用指标

llm_config = {
    "model": "gpt-4o",
    "key": "YOUR_API_KEY",
    "api_url": "https://api.openai.com/v1/chat/completions"
}

input_data = {
    "evaluator": [
        {
            "fields": {"content": "content"},
            "evals": [
                {"name": "RuleAbnormalChar"},           # 基于规则(快速)
                {"name": "LLMTextQualityV5", "config": llm_config}  # 基于LLM(深度)
            ]
        }
    ]
}

自定义:所有 prompts 都定义在 dingo/model/llm/ 目录中(按类别组织:text_quality/rag/hhh/ 等)。可针对特定领域需求进行扩展或修改。


🎓 实践者关键概念

让 Dingo 适用于生产环境的原因?

1. 多字段评估流水线

在单次运行中对不同字段应用不同的质量检查:

"evaluator": [
    {"fields": {"content": "isbn"}, "evals": [{"name": "RuleIsbn"}]},
    {"fields": {"content": "title"}, "evals": [{"name": "RuleAbnormalChar"}]},
    {"fields": {"content": "description"}, "evals": [{"name": "LLMTextQualityV5"}]}
]

为什么重要:无需为每个字段编写单独的脚本即可评估结构化数据(如数据库表)。

2. 大数据集流式处理

SQL 数据源使用 SQLAlchemy 的服务器端游标:

# 处理数十亿行数据而不会内存溢出
for data in dataset.get_data():  # 每次yield一行
    result = evaluator.eval(data)

为什么重要:无需导出到中间文件即可处理生产数据库。

3. 内存中的字段隔离

RAG 评估防止不同字段组合之间的上下文泄漏:

outputs/
├── user_input,response,retrieved_contexts/  # Faithfulness 组
└── user_input,response/                     # Answer Relevancy 组

为什么重要:评估多个字段组合时保证指标计算准确。

4. 混合规则-LLM 策略

结合快速规则(100% 覆盖)和采样 LLM 检查(10% 覆盖):

"evals": [
    {"name": "RuleAbnormalChar"},        # 快速,在所有数据上运行
    {"name": "LLMTextQualityV5"}         # 昂贵,按需采样
]

为什么重要:平衡生产规模评估的成本和覆盖率。

5. 通过注册实现可扩展性

清晰的插件架构用于自定义规则、prompt 和模型:

@Model.rule_register('QUALITY_BAD_CUSTOM', ['default'])
class MyCustomRule(BaseRule):
    @classmethod
    def eval(cls, input_data: Data) -> EvalDetail:
        # 示例:检查内容是否为空
        if not input_data.content:
            return EvalDetail(
                metric=cls.__name__,
                status=True,  # 发现问题
                label=[f'{cls.metric_type}.{cls.__name__}'],
                reason=["内容为空"]
            )
        return EvalDetail(
            metric=cls.__name__,
            status=False,  # 未发现问题
            label=['QUALITY_GOOD']
        )

为什么重要:适应特定领域需求而无需分叉代码库。


🌟 功能亮点

📊 多源数据集成

多样化数据源 - 连接到你的数据所在之处
本地文件:JSONL、CSV、TXT、Parquet
SQL 数据库:PostgreSQL、MySQL、SQLite、Oracle、SQL Server(支持流式处理)
云存储:S3 和 S3 兼容存储
ML 平台:直接集成 HuggingFace 数据集

企业级 SQL 支持 - 生产数据库集成
✅ 数十亿级数据集的内存高效流式处理
✅ 连接池和自动资源清理
✅ 复杂 SQL 查询(JOIN、WHERE、聚合)
✅ 通过 SQLAlchemy 支持多种方言

多字段质量检查 - 不同字段使用不同规则
✅ 并行评估流水线(例如:ISBN 验证 + 文本质量同时进行)
✅ 字段别名和嵌套字段提取(user.profile.name
✅ 每个字段独立结果报告
✅ 灵活数据转换的 ETL 流水线架构


🤖 RAG 系统评估

5 个学术支持的指标 - 基于 RAGAS、DeepEval、TruLens 研究
忠实度(Faithfulness):答案-上下文一致性(幻觉检测)
答案相关性(Answer Relevancy):答案-查询对齐
上下文精度(Context Precision):检索精度
上下文召回(Context Recall):检索召回
上下文相关性(Context Relevancy):上下文-查询相关性

全面报告 - 自动聚合统计
✅ 每个指标的平均值、最小值、最大值、标准差
✅ 按字段分组的结果
✅ 批量和单次评估模式

📖 查看 RAG 评估指南 →


🧠 混合评估系统

基于规则 - 快速、确定性、成本效益高
✅ 30+ 内置规则(文本质量、格式、PII 检测)
✅ 正则表达式、启发式、统计检查
✅ 自定义规则注册

基于 LLM - 深度语义理解
✅ OpenAI(GPT-4o、GPT-3.5)、DeepSeek、Kimi
✅ 本地模型(Llama3、Qwen)
✅ 视觉语言模型(InternVL、Gemini)
✅ 自定义 prompt 注册

基于智能体 - 多步推理与工具
✅ 网络搜索集成(Tavily)
✅ 自适应上下文收集
✅ 多源事实验证
✅ 自定义智能体与工具注册

可扩展架构
✅ 基于插件的规则/prompt/模型注册
✅ 清晰的关注点分离(agents、tools、orchestration)
✅ 特定领域定制


🚀 灵活执行与集成

多种接口
✅ CLI 用于快速检查
✅ Python SDK 用于集成
✅ MCP(模型上下文协议)服务器用于 IDE(Cursor 等)

可扩展执行
✅ 本地执行器用于快速迭代
✅ Spark 执行器用于分布式处理
✅ 可配置并发和批处理

数据源
本地文件:JSONL、CSV、TXT、Parquet 格式
Hugging Face:直接与 HF 数据集中心集成
S3 存储:AWS S3 和 S3 兼容存储
SQL 数据库:PostgreSQL、MySQL、SQLite、Oracle、SQL Server(大规模数据流式处理)

模态
✅ 文本(聊天、文档、代码)
✅ 图像(支持 VLM)
✅ 多模态(文本+图像一致性)


📈 丰富的报告和可视化

多层级报告
✅ 带有总体评分的 Summary JSON
✅ 字段级分解
✅ 每条规则违规的详细信息
✅ 类型和名称分布

GUI 可视化(通过 Dingo SaaS
✅ Web UI 交互式数据探索
✅ 可视化报告与趋势分析
✅ 异常追踪

指标聚合
✅ 自动统计(avg、min、max、std_dev)
✅ 按字段分组的指标
✅ 总体质量评分


📖 用户指南

自定义规则、Prompt 和模型

Dingo 提供灵活的扩展机制来满足特定领域需求。

示例:

自定义规则示例

from dingo.model import Model
from dingo.model.rule.base import BaseRule
from dingo.io import Data
from dingo.io.output.eval_detail import EvalDetail

@Model.rule_register('QUALITY_BAD_CUSTOM', ['default'])
class DomainSpecificRule(BaseRule):
    """检查特定领域的模式"""

    @classmethod
    def eval(cls, input_data: Data) -> EvalDetail:
        text = input_data.content

        # 你的自定义逻辑
        is_valid = your_validation_logic(text)

        return EvalDetail(
            metric=cls.__name__,
            status=not is_valid,  # False = 良好, True = 有问题
            label=['QUALITY_GOOD' if is_valid else 'QUALITY_BAD_CUSTOM'],
            reason=["验证详情..."]
        )

自定义LLM集成

from dingo.model import Model
from dingo.model.llm.base_openai import BaseOpenAI

@Model.llm_register('my_custom_model')
class MyCustomModel(BaseOpenAI):
    # 自定义实现
    pass

查看更多示例:

智能体评估与工具

Dingo 支持基于智能体的评估器,可以使用外部工具进行多步推理和自适应上下文收集。提供两种实现模式:

模式 1:基于 LangChain(如 AgentFactCheck

  • 框架驱动,自主多步推理
  • 使用 LangChain 1.0 的 create_agent 和 ReAct 模式
  • 适用于:复杂推理任务,快速原型开发
  • 代码更少,更声明式

模式 2:自定义工作流(如 AgentHallucination

  • 开发者驱动,显式工作流控制
  • 手动调用工具和 LLM
  • 适用于:组合现有评估器,特定领域工作流
  • 完全控制,显式行为

两种模式共享相同的配置接口,对用户透明。

内置智能体:

  • AgentFactCheck: 基于 LangChain 的事实核查,自主搜索控制
  • AgentHallucination: 自定义工作流的幻觉检测,自适应上下文收集
  • ArticleFactChecker: 两阶段文章事实核查 —— 先提取可验证声明,再并发调用网络搜索与 Arxiv 逐条验证,支持可配置的并发控制

快速示例:

from dingo.io import Data
from dingo.io.output.eval_detail import EvalDetail
from dingo.model import Model
from dingo.model.llm.agent.base_agent import BaseAgent

@Model.llm_register('MyAgent')
class MyAgent(BaseAgent):
    """支持工具的自定义智能体"""

    available_tools = ["tavily_search", "my_custom_tool"]
    max_iterations = 5

    @classmethod
    def eval(cls, input_data: Data) -> EvalDetail:
        # 使用工具进行事实核查
        search_result = cls.execute_tool('tavily_search', query=input_data.content)

        # 使用LLM进行多步推理
        result = cls.send_messages([...])

        return EvalDetail(...)

有关选择和实现智能体模式的详细指导,请参阅智能体开发指南

配置示例:

{
  "evaluator": [{
    "evals": [{
      "name": "AgentHallucination",
      "config": {
        "key": "openai-api-key",
        "model": "gpt-4",
        "parameters": {
          "agent_config": {
            "max_iterations": 5,
            "tools": {
              "tavily_search": {"api_key": "tavily-key"}
            }
          }
        }
      }
    }]
  }]
}

了解更多:

执行引擎

本地执行

from dingo.config import InputArgs
from dingo.exec import Executor

input_args = InputArgs(**input_data)
executor = Executor.exec_map["local"](input_args)
result = executor.execute()

# 获取结果
summary = executor.get_summary()        # 整体评估摘要
bad_data = executor.get_bad_info_list() # 有问题数据列表
good_data = executor.get_good_info_list() # 高质量数据列表

Spark执行

from dingo.config import InputArgs
from dingo.exec import Executor
from pyspark.sql import SparkSession

# 初始化Spark
spark = SparkSession.builder.appName("Dingo").getOrCreate()
spark_rdd = spark.sparkContext.parallelize([...])  # 以Data对象形式的数据

input_data = {
    "executor": {
        "result_save": {"bad": True}
    },
    "evaluator": [
        {
            "fields": {"content": "content"},
            "evals": [
                {"name": "RuleColonEnd"},
                {"name": "RuleSpecialCharacter"}
            ]
        }
    ]
}
input_args = InputArgs(**input_data)
executor = Executor.exec_map["spark"](input_args, spark_session=spark, spark_rdd=spark_rdd)
result = executor.execute()

检索平台评测

评估搜索 API 在 MTEB 标准检索基准(SciFact、SCIDOCS 等)上的表现,支持 NDCG、Recall、MRR 等指标。

CLI 方式:

pip install dingo-python[retrieval]

dingo eval-retrieval --backend agentic --tasks SciFact \
    --api-url https://api.sciverse.space \
    --api-token YOUR_TOKEN --limit 100 --max-workers 8

SDK 方式:

from dingo.config import InputArgs
from dingo.exec import Executor

input_data = {
    "input_path": "SciFact",
    "output_path": "outputs/retrieval_eval",
    "executor": {
        "retrieval": {
            "backend": "agentic",
            "api_url": "https://api.sciverse.space",
            "api_token": "YOUR_TOKEN",
            "limit": 100,
            "max_workers": 8,
        }
    },
}

input_args = InputArgs(**input_data)
executor = Executor.exec_map["retrieval"](input_args)
result = executor.execute()
print(result)

支持的参数:

  • --tasks: MTEB 任务名,支持逗号分隔多任务(如 SciFact,SCIDOCS
  • --max-queries: 限制查询数量(用于快速测试)
  • --max-workers: 并发线程数(默认 4)
  • --retrieval-mode: 检索模式(hybrid/milvus

评估报告

评估后,Dingo生成:

  1. 概要报告summary.json):总体指标和分数
  2. 详细报告:每个规则违反的具体问题

报告说明:

  1. score: num_good / total
  2. type_ratio: 类型的数量 / 总数, 例如: QUALITY_BAD_COMPLETENESS / total

概要示例:

{
    "task_id": "d6c922ec-981c-11ef-b723-7c10c9512fac",
    "task_name": "dingo",
    "eval_group": "default",
    "input_path": "test/data/test_local_jsonl.jsonl",
    "output_path": "outputs/d6c921ac-981c-11ef-b723-7c10c9512fac",
    "create_time": "20241101_144510",
    "score": 50.0,
    "num_good": 1,
    "num_bad": 1,
    "total": 2,
    "type_ratio": {
        "content": {
            "QUALITY_BAD_COMPLETENESS.RuleColonEnd": 0.5,
            "QUALITY_BAD_RELEVANCE.RuleSpecialCharacter": 0.5
        }
    }
}

🔮 未来计划

即将推出的功能

  • Agent-as-a-Judge - 多轮迭代评估
  • SaaS 平台 - 托管评估服务,提供 API 访问和仪表板
  • 音频和视频模态 - 扩展到文本/图像之外
  • 多样性指标 - 统计多样性评估
  • 实时监控 - 生产流水线中的持续质量检查

局限性

当前内置的检测规则和模型方法主要关注常见的数据质量问题。对于特殊评估需求,我们建议定制化检测规则。

致谢

贡献

我们感谢所有的贡献者为改进和提升 Dingo 所作出的努力。请参考贡献指南来了解参与项目贡献的相关指引。

开源许可证

该项目采用 Apache 2.0 开源许可证

本项目部分功能使用fasttext进行语言检测功能。fasttext采用MIT许可证,与我们的Apache 2.0许可证兼容,为各种使用场景提供了灵活性。

Citation

If you find this project useful, please consider citing our tool:

@misc{dingo,
  title={Dingo: A Comprehensive AI Data Quality Evaluation Tool for Large Models},
  author={Dingo Contributors},
  howpublished={\url{https://github.com/MigoXLab/dingo}},
  year={2024}
}