👋 join us on Discord and WeChat
If you like Dingo, please give us a ⭐ on GitHub!
介绍
Dingo是一个全面的人工智能数据、模型和应用质量评估工具,专为机器学习从业者、数据工程师和人工智能研究人员设计。它可以帮助您系统地评估和提高训练数据的质量,微调数据集和生产AI系统。
______________________________________________________________________
🚀 企业Dingo SaaS版本
需要一个 生产级数据质量平台?试试 Dingo SaaS 企业版!
✨ 与开源版本相比,SaaS提供:
- 🌐 网页用户界面 -可视化评估界面,无需编码
- 🔐 访问控制 -智威汤逊+谷歌OAuth 2.0
- 📊 可视化报告 -交互式图表、趋势分析、导出功能
- 🔌 RESTful API -与现有系统无缝集成
📝 如何获得免费的SaaS代码
审核时间:1-5个工作日|适合企业数据治理、团队协作
______________________________________________________________________
为什么是丁戈?
🎯 生产级质量检查 -从预训练数据集到RAG系统,确保您的AI获得高质量的数据
🗄️ 多源数据集成 -无缝连接到本地文件、SQL数据库(PostgreSQL/MySQL/SQLite)、HuggingFace数据集和S3存储
🔍 多领域评估 -将不同的质量规则并行应用于不同的字段(例如,ISBN验证 isbn,文本质量 title)
🤖 RAG系统评估 -基于5个学术支持指标的检索和生成质量综合评价
🧠 LLM&规则&代理混合 -将快速启发式规则(30+内置)与基于LLM的深度评估相结合
🚀 灵活执行 -在本地运行以实现快速迭代,或使用Spark扩展以实现十亿级数据集
📊 丰富的报告 -具有GUI可视化和现场级见解的详细质量报告
架构图
快速开始
安装
# Core package (includes rule evaluation, LLM evaluation, MCP server, datasource support)
pip install dingo-python
# With HHEM hallucination detection model (requires transformers + torch)
pip install "dingo-python[hhem]"
# With all features (HHEM + Agent)
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代理集成:
# Start MCP server (SSE transport, default port 8000)
dingo serve
# Custom port
dingo serve --port 9000
# stdio transport (for Claude Desktop)
dingo serve --transport stdio有关详细的设置和Cursor/Claude Desktop集成,请参阅专用文档:
视频演示
为了帮助您快速开始使用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-开放、真实性检查 | 生产AI可靠性 |
| 分类 | 主题分类、内容标签 | 数据组织 |
| 多模态 | 图像文本相关性、VLM质量、OCR视觉评估 | 视觉语言数据 |
| 安全 | PII检测,透视API毒性 | 隐私与安全 |
📊 查看完整的度量文档→\ 📖 RAG评估指南→ | 中文版\ 🔍 幻觉检测指南→ | 中文版\ ✅ 事实性评估指南→ | 中文版\ 👁️ VLM渲染判断指南→ | 中文版
大多数指标都有学术研究的支持,以确保科学的严谨性。
快速度量使用
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"}, # Rule-based (fast)
{"name": "LLMTextQualityV5", "config": llm_config} # LLM-based (deep)
]
}
]
}定制:所有提示均在中定义 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的服务器端游标:
# Handles billions of rows without OOM
for data in dataset.get_data(): # Yields one row at a time
result = evaluator.eval(data)为什么重要:处理生产数据库,而不导出到中间文件。
3. 内存中的场隔离
RAG评估可防止不同字段组合之间的上下文泄漏:
outputs/
├── user_input,response,retrieved_contexts/ # Faithfulness group
└── user_input,response/ # Answer Relevancy group为什么重要:评估多个字段组合时进行精确的度量计算。
4. 混合规则LLM策略
将快速规则(100%覆盖率)与抽样LLM检查(10%覆盖率)相结合:
"evals": [
{"name": "RuleAbnormalChar"}, # Fast, runs on all data
{"name": "LLMTextQualityV5"} # Expensive, sample if needed
]为什么重要:平衡生产规模评估的成本和覆盖范围。
5. 通过注册进行扩展
用于自定义规则、提示和模型的干净插件架构:
@Model.rule_register('QUALITY_BAD_CUSTOM', ['default'])
class MyCustomRule(BaseRule):
@classmethod
def eval(cls, input_data: Data) -> EvalDetail:
# Example: check if content is empty
if not input_data.content:
return EvalDetail(
metric=cls.__name__,
status=True, # Found an issue
label=[f'{cls.metric_type}.{cls.__name__}'],
reason=["Content is empty"]
)
return EvalDetail(
metric=cls.__name__,
status=False, # No issue found
label=['QUALITY_GOOD']
)为什么重要:适应特定领域的需求,而无需分叉代码库。
______________________________________________________________________
🌟 功能亮点
📊 多源数据集成
多样化的数据来源 -连接到您的数据所在的位置\ ✅ 本地文件:jsonl、CSV、TXT、拼花地板\ ✅ SQL数据库:PostgreSQL、MySQL、SQLite、Oracle、SQL Server(带流处理)\ ✅ 云存储:S3和S3兼容存储\ ✅ ML平台:直接拥抱人脸数据集集成
企业级SQL支持 -生产数据库集成\ ✅ 十亿级数据集的内存高效流式传输\ ✅ 连接池和自动资源清理\ ✅ 复杂的SQL查询(JOIN、WHERE、聚合)\ ✅ SQLAlchemy支持多种方言
多场质量检查 -不同领域的不同规则\ ✅ 并行评估流程(例如,ISBN验证+文本质量同步)\ ✅ 字段混叠和嵌套字段提取(user.profile.name)\ ✅ 每个领域的独立结果报告\ ✅ 用于灵活数据转换的ETL管道架构
______________________________________________________________________
🤖 RAG系统评估
5学术支持指标 -基于RAGAS、DeepEval、TruLens的研究\ ✅ 忠诚:答案上下文一致性(幻觉检测)\ ✅ 答案相关性:答案查询对齐\ ✅ 上下文精准度:检索精度\ ✅ 上下文回忆:检索召回\ ✅ 上下文相关性:上下文查询相关性
全面报道 -自动聚合统计\ ✅ 每个指标的平均值、最小值、最大值、标准偏差\ ✅ 现场分组结果\ ✅ 批量和单次评估模式
______________________________________________________________________
🧠 混合评估系统
基于规则 -快速、确定、经济高效\ ✅ 30+内置规则(文本质量、格式、PII检测)\ ✅ 正则表达式、启发式、统计检查\ ✅ 自定义规则注册
LLM基础 -深入的语义理解\ ✅ OpenAI(GPT-4o、GPT-3.5)、DeepSeek、Kimi\ ✅ 本地型号(Llama3、Qwen)\ ✅ 视觉语言模型(InternVL,Gemini)\ ✅ 自定义提示注册
基于代理的 -使用工具进行多步推理\ ✅ 网络搜索集成(Tavily)\ ✅ 自适应上下文收集\ ✅ 多源事实核查\ ✅ 定制代理和工具注册
可扩展架构\ ✅ 基于插件的规则/提示/模型注册\ ✅ 关注点(代理、工具、编排)的清晰分离\ ✅ 特定领域定制
______________________________________________________________________
🚀 灵活的执行和集成
多个接口\ ✅ CLI用于快速检查\ ✅ 用于集成的Python SDK\ ✅ IDE(游标等)的MCP(模型上下文协议)服务器
可扩展执行\ ✅ 用于快速迭代的本地执行器\ ✅ 用于分布式处理的Spark执行器\ ✅ 可配置的并发和批处理
数据源\ ✅ 本地文件:JSONL、CSV、TXT、拼花格式\ ✅ 拥抱脸:与HF数据集中心直接集成\ ✅ S3存储:AWS S3和S3兼容存储\ ✅ SQL数据库:PostgreSQL、MySQL、SQLite、Oracle、SQL Server(用于大规模数据的流处理)
模态\ ✅ 文本(聊天、文档、代码)\ ✅ 图像(支持VLM)\ ✅ 多模式(文本+图像一致性)
______________________________________________________________________
📈 丰富的报告和可视化
多级报告\ ✅ 总结JSON与总分\ ✅ 现场级细分\ ✅ 违反规则的详细信息\ ✅ 类型和名称分布
GUI可视化(通过 Dingo SaaS)\ ✅ 具有交互式数据探索功能的Web UI\ ✅ 带有趋势分析的可视化报告\ ✅ 异常跟踪
度量聚合\ ✅ 自动统计(平均值、最小值、最大值、标准偏差)\ ✅ 现场分组指标\ ✅ 总体质量得分
______________________________________________________________________
📖 用户指南
🔧 可扩展性
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):
"""Check domain-specific patterns"""
@classmethod
def eval(cls, input_data: Data) -> EvalDetail:
text = input_data.content
# Your custom logic
is_valid = your_validation_logic(text)
return EvalDetail(
metric=cls.__name__,
status=not is_valid, # False = good, True = bad
label=['QUALITY_GOOD' if is_valid else 'QUALITY_BAD_CUSTOM'],
reason=["Validation details..."]
)自定义LLM/快速注册
from dingo.model import Model
from dingo.model.llm.base_openai import BaseOpenAI
@Model.llm_register('custom_evaluator')
class CustomEvaluator(BaseOpenAI):
"""Custom LLM evaluator with specialized prompts"""
_metric_info = {
"metric_name": "CustomEvaluator",
"metric_type": "LLM-Based Quality",
"category": "Custom Category"
}
prompt = """Your custom prompt here..."""示例:
基于Agent的工具评估
Dingo支持基于代理的评估器,可以使用外部工具进行多步推理和自适应上下文收集。有两种实现模式可供选择:
模式1:基于LangChain (例如。, AgentFactCheck)
- 由自主多步推理驱动的框架
- 使用LangChain 1.0
create_agent采用ReAct模式 - 最适合:复杂的推理任务、快速原型制作
- 更少的代码,更具声明性
模式2:自定义工作流 (例如。, AgentHallucination)
- 开发人员驱动,具有明确的工作流控制
- 手动工具调用和LLM交互
- 最适合:组合现有评估人员,特定领域的工作流程
- 完全控制,明确行为
这两种模式共享相同的配置界面,对用户透明。
内置代理:
AgentFactCheck:基于LangChain的事实检查,具有自主搜索控制AgentHallucination:使用自适应上下文收集进行自定义工作流幻觉检测ArticleFactChecker:两阶段文章事实检查——提取可验证的声明,然后使用web搜索和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):
"""Custom agent with tool support"""
available_tools = ["tavily_search", "my_custom_tool"]
max_iterations = 5
@classmethod
def eval(cls, input_data: Data) -> EvalDetail:
# Use tools for fact-checking
search_result = cls.execute_tool('tavily_search', query=input_data.content)
# Multi-step reasoning with 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"}
}
}
}
}
}]
}]
}了解更多:
- 代理开发指南 -创建自定义代理和工具的综合指南
- 代理幻觉示例 -生产代理示例
- AgentActCheck示例 -LangChain代理示例
- ArticleFactChecker示例 -文章规模两阶段事实核查
⚙️ 执行模式
本地执行人(开发和小规模)
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()
# Access results
summary = executor.get_summary() # Overall metrics
bad_data = executor.get_bad_info_list() # Quality issues
good_data = executor.get_good_info_list() # High-quality data最佳选择:快速迭代、调试,数据集\1M行
评估报告
经过评估,Dingo生成:
- 总结报告 (
summary.json):总体指标和分数 - 详细报告:每个违规行为的具体问题
报告说明:
- 得分:
num_good/total - 类型比率:类型/总数的计数,例如:
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
}
}
}🚀 路线图和贡献
未来计划
- \[ \] 代理人作为法官 -用于减少偏见和复杂推理的多智能体辩论模式
- \[ \] SaaS平台 -具有API访问和仪表板的托管评估服务
- \[ \] 音频和视频模式 -扩展到文本/图像之外
- \[ \] 多样性指标 -统计多样性评估
- \[ \] 实时监控 -生产管道中的持续质量检查
局限性
当前的内置检测规则和模型方法主要关注常见的数据质量问题。对于特殊的评估需求,我们建议定制检测规则。
致谢
贡献
我们感谢所有贡献者为改进和加强 Dingo。请参阅 贡献指南 为项目做出贡献的指导。
许可证
该项目使用 Apache 2.0开源许可证.
此项目将fasttext用于某些功能,包括语言检测。fasttext根据MIT许可证获得许可,该许可证与我们的Apache 2.0许可证兼容,并为各种使用场景提供了灵活性。
引用
如果你觉得这个项目有用,请考虑引用我们的工具:
@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}
}