数据工程师的AI觉醒时刻: 为什么 LLM 与MCP 如今至关重要

91 阅读6分钟

Preview image

从怀疑者到实践者: 为什么AI如今对数据工程师至关重要

几个月前我写了一篇博客文章. 其中一条评论是: “这只是一个简单的示例; 我的生产任务要复杂得多; 这对我工作没有实际应用价值. ”——但这忽略了一个更重要的点: AI 正在快速发展, 它正在重塑我们构建管道, 编写SQL甚至调试的方式. 在许多公司中, AI 技能已不再是数据工程师的可选项. 我们不能忽视这样一个事实: AI技能现在是必需的.

让我们看看现代 AI , 特别是大型语言模型(LLM), 知识检索与生成(RAG)和模型上下文协议(MCP), 如何不仅相关, 而且成为生产级数据工程的必要条件.

AI 能否解决数据工程师面临的复杂SQL和数据管道问题? 请搁置对 AI 潜力的怀疑, 我将向你展示其潜力以及 AI 如何提升数据工程.

让我们探讨为何人们对 AI 处理复杂数据工程逻辑的能力普遍持怀疑态度, 以及是什么发生了变化.

LLM: 优势与挑战

我们为 LLM 配备了卓越的语言理解能力. 我们提供必要的代码结构的高级概述, 并包含示例代码, 使LLM能够顺畅地处理程序编写. 工具如Cursor和Cline展示了LLMs如何轻松实现代码生成.

开发者既担任产品经理又担任质量保证(QA)专家. 对于产品经理而言, 需编写恰当的提示语作为问题陈述, 清晰描述AI需求. 对于QA, 需理解如何运行代码, 测试预期结果并为AI提供调试反馈.

一切看似简单. 然而, 现实并非如此直观.

LLM是通过历史数据进行训练的; 它们在LLM模型见过的数据上表现出色, 但在从未见过的数据上会产生幻觉.

如果基础模型未经过适当的后训练, LLM可能会做出错误的猜测. ChatGPT可能会生成听起来自信的代码, 但引用了不存在的库, 例如尝试使用虚构的Spark T-digest实现, 这可能会误导不熟悉底层工具的工程师.

如果LLM能够理解多种语言, 我们只需要为其提供最新数据即可.

介绍RAG: 基于上下文的更智能AI

将LLM视为一个聪明但谦逊的学生, 它会吸收任何呈现给它的全新信息. 这就是RAG的核心概念.

如果我们使用的某个库已过时, 我们会向LLM提供更新后库文档的链接, 让它学习.

如果某些事实已过时, 我们会向LLM提供维基百科链接, 让它学习.

这就是RAG的核心理念, 该技术通过将LLM与外部数据源结合, 提升其准确性和相关性.

RAG是一种技术, 其中检索系统从外部数据源搜索数据, 以识别与用户查询相关的信息. 随后, LLM利用检索到的信息生成更精准, 更及时的响应.

对于数据工程师而言, 一个典型示例是编写SQL查询以获取过去10天内最畅销的产品.

由于LLM不了解表结构或字段名称, 直接向其提出查询可能导致生成无法使用的SQL语句.

为改善这一情况, 我们可以实施RAG来获取模式和列信息, 以便LLM能更准确地生成查询.

None

AI驱动的SQL查询

对于RAG, 你基本上是在开发自己的自定义函数来调用各种工具. 如果RAG对你来说仍然感觉太过临时, 还有更新的选项.

MCP的兴起: 标准化工具访问

虽然 RAG 使 LLM 能够提供准确的上下文响应, 但 MCP 解决的是另一个问题: 如何标准化工具集成.

MCP是连接 AI 与数据库及工具的开放标准——类似于专门为 LLM 设计的 API 层. 工具提供商定义一个共享接口, 而非让每个团队单独与 DuckDB, Snowflake 或 Spark 等工具进行定制集成. LLM 随后可无缝接入该接口.

工具提供商将为 LLM 提供该接口. 现在我们可以订阅这些工具, 并让 LLM 为我们集成使用. 由于工具提供商在 MCP 中创建了这些工具, 它们正式可用, 且所有人都遵循同一标准.

None

LLM + MCP

实际案例: DuckDB + MCP + LLM

我们将使用Cline MCP服务器中的DuckDB在VS Code中进行操作.

None

Cline MCP与DuckDB

在此我们将使用DeepSeek V3作为LLM模型. 配置DuckDB时, 可参考MCP for DuckDB中的说明.

对于本地测试, 你只需将数据库路径设置为memory:

{
  "mcpServers": {
    "mcp-server-motherduck": {
      "command": "uvx",
      "args": [
        "mcp-server-motherduck",
        "--db-path",
        ":memory:"
      ]
    }
  }
}

我们将通过加载来自Kaggle的数据集来构建另一个示例——Netflix电影和电视节目数据集(CC0: 公共领域)

在 Cline 中, 你可以测试一个提示:

load file to DuckDB "~/Downloads/netflix_titles.csv", 
then Check the netflix table in DuckDB, 
get total number of shows by each director

Cline 将自动调用 DuckDB MCP 并加载适合我们目标的函数, 然后将数据加载到 DuckDB 中, 并生成查询以获取结果.

None

MCP DuckDB 示例

让我们尝试一个更复杂的示例; 我们将使用 Kaggle 笔记本进行此操作, www.kaggle.com/code/shivam… 该笔记本在此数据集上已进行了出色的探索性分析.

我随机选择了一个查询——显示电影时长的分布

Cline 将首先检查数据库的模式:

None

DuckDB MCP 检查模式

它生成以下查询. 然而, 初次尝试因需要额外数据转换而失败. 因此, 它将错误作为反馈, 尝试两次直至问题解决.

SELECT   
CASE WHEN duration_minutes BETWEEN 0 AND 60 THEN '0-60 min'    
 WHEN duration_minutes BETWEEN 61 AND 90 THEN '61-90 min'    
 WHEN duration_minutes BETWEEN 91 AND 120 THEN '91-120 min'    
 WHEN duration_minutes BETWEEN 121 AND 150 THEN '121-150 min'    
 ELSE '150+ min'  END AS duration_range,  
 COUNT(*) AS movie_count,  
 ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER(), 2) AS percentage
 FROM (  
    SELECT     TRY_CAST(TRIM(REPLACE(duration, 'min', '')) AS INTEGER) AS duration_minutes  
    FROM netflix  WHERE type = 'Movie'     AND duration IS NOT NULL    AND duration LIKE '%min%'
 )
WHERE duration_minutes IS NOT NULLGROUP BY duration_rangeORDER BY duration_range

输出:

None

DuckDB MCP 复杂示例

最后的思考

我们看到, MCP + LLM 解锁了工具集成的潜力并简化了代码开发周期. 我们观察到 AI 可以在 DuckDB 中执行数据转换, 我相信它可以与 DBT, Snowflake 和 Spark 集成以提升数据工程师的工作负载.

AI 已不再是日常工作的可选项, 而是成为必不可少的核心工具. 借助 AI, 你可以更轻松地构建更多工具并实现想法的落地.

AI 正成为数据工程师的必备工具, 而非可有可无的选项. 从小处着手, 构建一个 AI 驱动的工具. 你会惊讶于它能消除多少工作阻力.