SQL 表也能做 LLM 质量评估?Dingo 2.0 支持多字段语义质检

Community Article Published January 12, 2026

告别繁琐配置,拥抱智能评估!Dingo 2.0.0 正式支持对传统关系型数据库(如 PostgreSQL、MySQL、Doris)中的 SQL 表进行原生、多字段的智能质量评估!

你没看错——现在,你的数据库表可以直接接受大语言模型(LLM)的“质检面试”。 无论是训练 SFT 数据中的 prompt-response 对,还是日常企业业务结构化数据,,只要它们存储在 SQL 表中,Dingo 就能:

  • 自动连接数据库,
  • 提取指定字段,
  • 调用 LLM(如 GPT、Gemini 或本地 Qwen),
  • 对数据进行语义级质量判断:回答是否完整?是否文不对题?是否存在幻觉?

这不仅是对数据源支持的扩展,更是将 LLM 原生评估能力下沉到数据源头的关键一步。 从此,高质量 AI 训练数据的保障,不再局限于文件或管道——它就在你的数据库里,实时、智能、可追溯

Dingo 2.0.0 让每一行 SQL 数据都能被“理解”,而不仅仅是被“读取”。

Dingo 是一个完全开源的项目(Apache 2.0 License):


一、为什么我们需要这个功能?

在 AI 时代,数据是燃料,而数据质量就是引擎的润滑剂。无论是训练大模型、构建 RAG 应用,还是运行企业级智能 SaaS 系统,高质量的数据都是基石。

然而,在实际工作中,我们发现:

  • 数据孤岛问题严重:很多核心数据仍然沉淀在 PostgreSQL、MySQL、Doris 等传统数据库中。
  • 评估效率低下:传统的数据质量工具(如 Great Expectations)虽然强大,但其配置和使用方式更偏向于“数据管道”或“数据湖”,对于直接操作数据库表的场景,学习成本高、流程繁琐。
  • 缺乏语义理解:许多工具只能做简单的空值、类型检查,无法理解“Prompt”和“Response”之间的逻辑关联,这对于 LLM 训练数据尤为重要。

一个典型的现实案例来自 Vimeo(全球领先的视频平台):

Vimeo 的 BI 团队每天从 Google、Facebook 等广告平台通过 Kafka 摄取大量数据,经 Airflow 处理后写入 Snowflake 数据仓库。他们曾多次遭遇上游服务中断或 Schema 变更,导致下游报表出现“静默错误”——数据缺失或陈旧,但数天都无人察觉,直到业务方投诉。

这说明:数据质量必须前置到数据源头,而不能依赖事后人工排查。Dingo 的这次更新,正是为了解决这些痛点——让数据工程师和 AI 工程师能像写 SQL 一样,直接对数据库表进行高效、智能、多维度的质量评估,真正实现“源头质检、智能洞察”。


二、与业界标杆的对比:Dingo 的独特定位

在介绍新功能前,让我们先看看 Dingo 是如何与两位行业巨头——Great Expectations (GX)DQOps ——进行差异化对比情况如下表:

特性 Great Expectations (GX) DQOps Dingo 2.0.0
核心定位 “数据测试框架”,强调通过 Expectation 定义数据契约,适用于数据流水线(ETL/ELT)。 “企业级数据质量平台”,提供完整的监控、告警、仪表盘,面向数据治理团队。 AI 原生数据质量工具”,专注于 LLM 训练数据、RAG 数据集的质量评估,同时向下兼容传统结构化数据。
使用场景 数据工程师在数据管道中嵌入单元测试。 数据治理专家对整个数据仓库进行持续监控。 AI 工程师 & 数据工程师,快速评估单个数据集或数据库表的质量,尤其擅长处理“Prompt-Response”类数据。
上手难度 需要理解 Data Context, Expectation Suite 等概念,配置文件较复杂。 功能强大但界面和配置相对厚重,适合大型组织。 极简主义。直接通过 Python SDK 或 CLI,几行代码即可完成连接和评估。
多字段关联检查 支持,但需要编写复杂的 Expectation 逻辑。 支持,通过 YAML 配置定义规则。 内置丰富规则 + LLM 智能评估。例如,可轻松检查“Response 是否回答了 Prompt”,这是 GX 和 DQOps 难以优雅实现的。
数据库支持 通过 SQLAlchemy 连接,但主要作为数据源,而非核心评估对象。 核心功能,支持多种数据库,但更侧重于监控而非一次性评估。 原生支持。将数据库表直接映射为 SqlDataset,无缝接入现有评估体系。

总结来说:

  • GX 是“数据契约”的缔造者,适合构建稳健的数据管道。
  • DQOps 是“数据健康”的守护者,适合企业级数据治理。
  • Dingo 则是“AI 数据”的质检员,它最懂 AI 工程师的需求,能用最简单的方式,解决最核心的问题——确保你的训练数据是干净、有效、安全的。

三、Dingo 的核心亮点:让多字段检查变得前所未有的简单

1. 架构示意图

为了帮助大家更好地理解 Dingo 支持多字段质检的工作原理,我们绘制了如下示意图:

模块介绍:

  1. 数据源:左侧的数据库图标代表 PostgreSQL、MySQL、Doris 等多种数据源。
  2. 数据连接:中间的漏斗代表 Dingo SqlDataset,它负责建立与数据库的直接连接,并抽取字段(如 Prompt, Label, Response)。
  3. 数据对象:右侧的立方体代表转换后的结构化 AI 数据对象(JSONL 格式),这是 Dingo 内部处理的标准格式。
  4. 质量检查:下方的放大镜和清单图标代表“多字段质量检查”,这里会应用内置规则和 LLM 模型,对数据进行全方位评估。

2. 一行代码连接数据库,无需导出

Dingo 引入了全新的 SqlDataset 概念,让你可以直接从数据库读取数据。

from dingo.config import DatasetArgs, DatasetSqlArgs, InputArgs
from dingo.data.dataset.sql import SqlDataset
from dingo.data.datasource.sql import SqlDataSource

# 配置 SQLite 连接
sql_config = DatasetSqlArgs(
    dialect="sqlite",
    database="test.db"
)

# 配置数据集
dataset_config = DatasetArgs(
    source="sql",
    format="jsonl",   # SQL 每行数据使用 jsonl 格式
    sql_config=sql_config
)

3. 内置丰富规则,覆盖多维度质量

Dingo 不仅支持基础的空值、重复、格式检查,更提供了针对 AI 数据的高级规则:

  • 语义相关性检查:检查 response 是否与 prompt 相关。
  • 事实性核查:利用 LLM 判断 response 中是否存在事实性错误。
  • 安全性评估:检测内容是否包含敏感信息或有害言论。
  • 幻觉检测 (Hallucination):识别 response 中虚构的信息。

这些规则可以组合使用,形成一套完整的质量评估方案。

4. LLM 驱动的智能评估,超越传统规则

这是 Dingo 最大的杀手锏!对于复杂的语义判断,Dingo 可以调用 GPT-4oKimi 等大模型进行评估。

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

# 创建 InputArgs
input_args = InputArgs(
    task_name="sql_eval",
    input_path=sql_query,  # SQL 查询放在 input_path
    output_path="outputs/",
    dataset=dataset_config,
    evaluator=[
        {
            "fields": {"content": "title"},  # 指定要评估的数据库字段
            "evals": [
                {"name": "LLMTextWordStick", "config": llm_config}
            ]
        },
        {
            "fields": {"content": "abstract"},  # 指定要评估的数据库字段
            "evals": [
                {"name": "LLMTextRepeat", "config": llm_config}
            ]
        }
    ]
)

想象一下,你不再需要自己编写复杂的正则表达式或 SQL 语句来判断一条记录的好坏,而是交给 AI 来做“主观判断”。这极大地提升了评估的准确性和覆盖面。


四、实战案例:如何用 Dingo 检查一个 MySQL 训练数据表?

假设你有一个名为 sft_trainingMySQL 表,包含 prompt, response, label 三个字段。你想检查这批数据的质量。

Step 1: 安装 Dingo

pip install dingo-python

Step 2: 编写评估脚本

# evaluate_mysql.py
from dingo.config import InputArgs
from dingo.exec import Executor
from dingo.dataset.sql import SqlDataset

# 1. 配置数据库连接
sql_config = DatasetSqlArgs(
    dialect="sqlite",
    driver="",        # SQLite 不需要驱动
    username="",      # SQLite 不需要用户名
    password="",      # SQLite 不需要密码
    host="",          # SQLite 不需要主机
    port="",
    database="test.db"  # 数据库文件路径
)

# 2. 创建 Dataset
dataset_config = DatasetArgs(
    source="sql",
    format="jsonl",   # SQL 每行数据使用 jsonl 格式
    sql_config=sql_config
)

# 3. 配置评估参数
sql_query = "SELECT * FROM test_table"
llm_config = {
    "model": "gpt-4o",
    "key": "YOUR_API_KEY",
    "api_url": "https://api.openai.com/v1/chat/completions"
}
input_args = InputArgs(
    task_name="sql_eval",
    input_path=sql_query,  # SQL 查询放在 input_path
    output_path="outputs/",
    dataset=dataset_config,
    evaluator=[
        {
            "fields": {"content": "title"},  # 指定要评估的数据库字段
            "evals": [
                {"name": "LLMTextWordStick", "config": llm_config}
            ]
        },
        {
            "fields": {"content": "abstract"},  # 指定要评估的数据库字段
            "evals": [
                {"name": "LLMTextRepeat", "config": llm_config}
            ]
        }
    ]
)

# 4. 执行评估
input_args = InputArgs(**input_data)
executor = Executor.exec_map["local"](input_args)
result = executor.execute()

# 5. 查看结果
print("Overall Score:", executor.get_summary()["score"])
print("Bad Records Count:", len(executor.get_bad_info_list()))

Step 3: 运行并查看报告

python evaluate_mysql.py
# 评估完成后,会生成一个 output 目录
python -m dingo.run.vsl --input outputs/xxxxxx/

打开浏览器,你就能看到一份精美的、包含图表和详细数据的报告,清晰地告诉你哪些数据需要清洗。


五、未来展望:Dingo 的无限可能

这只是开始!我们正在规划更多激动人心的功能:

  • 支持 Agent 应用类质量评估,构建从数据到模型,应用一体化的质量评估。
  • 提供更丰富的预设行业数据应用规则模板,覆盖更多行业场景。

六、加入我们,共建开源生态!

Dingo 是一个完全开源的项目(Apache 2.0 License),我们欢迎每一位开发者加入!

如果你觉得 Dingo 很棒,请给我们一个 ⭐ Star!你的支持是我们前进的最大动力!如果你有任何疑问、建议或想分享你的使用案例,欢迎在评论区留言,或直接在 GitHub 上提交 Issue!

Community

Sign up or log in to comment