跳到主要内容

MCP Jupyter:由 AI 驱动的机器学习和数据科学

· 阅读需 8 分钟
·
Damien Ramunno-Johnson
Principal Machine Learning Engineer
Dean Wyatte
Principal Machine Learning Engineer
Harrison Mamin
Senior Machine Learning Engineer

MCP Jupyter 服务器

机器学习和数据科学工作流本质上是迭代的。你加载数据、探索模式、构建模型,并根据结果细化方法。但传统 AI 助手在交互之间丢失上下文,迫使你反复重新加载数据并重新建立上下文——让数据密集的开发又慢又贵。

MCP Jupyter 服务器通过让像 goose 这样的 AI 智能体直接与你的 Jupyter 笔记本一起工作来解决这个问题,在交互之间保持持久记忆和状态,同时让 AI 通过代码执行而不是原始数据传输与你的数据交互。

记忆和上下文问题​

传统 AI 编程助手面临一个根本限制:它们在交互之间丢失上下文。这部分源于它们的设计是完成描述清楚的单项任务,比如重构一段代码、编译并运行测试,并把结果提交到版本控制。相比之下,数据科学工作流往往是开放式的,需要大量探索和交互。这为把 AI 用于数据密集的机器学习工作流制造了几个挑战:

  • 不断重新加载数据:每次交互都需要重新加载或描述你的数据集
  • 昂贵的迭代:大型数据集反复处理又慢又贵
  • 上下文大小:原始数据可能太大,放不进上下文
  • 不是为交互式工作设计的:更难让助手做一些步骤,然后把控制交回给人,或反过来

为了应对这些挑战,我们创建了 MCP Jupyter 服务器。

更好的方法:持久状态​

MCP Jupyter 服务器采取不同的方法。它不是在交互之间丢失上下文,而是保持持久记忆,并让 AI 通过 Jupyter 代码单元执行与你的数据交互。这创造了一个强大的范式:

  • 持久记忆:变量和状态在所有交互中保持
  • 高效迭代:不必重新加载数据或重新建立上下文
  • 基于代码的数据交互:AI 通过执行探索数据,而不是在上下文中拿到原始数据
  • 真正的结对编程:在同一个笔记本上下文中无缝协作

改变机器学习工作流​

探索性数据分析​

不必描述你的数据集,让 AI 直接探索它:

用户: 「帮我理解这个客户数据集」

AI: 「让我先探索你的数据结构」

[AI 执行:df.info()、df.describe()、df.head()]

AI: 「我看到你有 50,000 名客户和 12 个特征。数据包括人口统计(年龄、收入)、行为指标(purchase_frequency、avg_order_value),以及『phone_number』列中的一些缺失值。你想让我为关键关系创建可视化吗,比如年龄与收入,或购买模式?」

用户: 「是的,给我看年龄和收入分布,以及任何相关性」

AI: 「好!我会为年龄和收入创建直方图,再加上一张相关性热力图」

[AI 生成并显示可视化]

AI 能看到你实际的列名、数据类型和分布——从而给出相关得多的建议。

交互式模型开发​

AI 成为你建模过程中的真正协作者:

用户: 「这个模型表现不好」

AI: 「让我检查当前指标和特征重要性」

[AI 执行你现有的模型评估代码]

AI: 「我看到准确率是 72%,最重要的特征是『price』和『location』。模型似乎过拟合了——你想让我试试正则化,还是减少特征集?」

用户: 「先试正则化」

AI: 「我会加 L2 正则化,并测试不同的 alpha 值」

[AI 迭代地实现并测试更改]

AI: 「太好了!alpha=0.1 时,准确率提高到 78%,验证曲线看起来好得多。我应该进一步调它,还是试试集成方法?」

实时调试​

当错误发生时,助手有完整上下文:

用户: 「我在第 5 个单元遇到 KeyError」

AI: 「让我检查你的 dataframe 里有哪些列」

[AI 执行:df.columns、df.info()]

AI: 「我看到问题了——你在访问『customer_id』,但实际列名是大写的『CustomerID』。另外,我注意到你的『purchase_date』是字符串——我在修复 KeyError 的同时,要把它转换成 datetime 吗?」

用户: 「是的,两个问题都修」

AI: 「完成了!我更新了列引用,并把 purchase_date 转换成 datetime。这个单元现在应该能正常运行。」

持续协作​

想象你在处理一个新数据集的场景:

用户: [执行:df = pd.read_csv('sales_data.csv')]

用户: 「让我检查数据类型,并寻找任何异常」

AI: 「我会分析你的销售数据结构」

[AI 执行:df.info()、df.describe(include='all')]

AI: 「我发现几个问题:『CustomerID』存成了文本,但应该是数值,而且『SalesAmount』有 847 个缺失值。你想让我把『CustomerID』转换成数值,并用中位数填充缺失的『SalesAmount』值吗?」

用户: 「是的,请这么做,并给我看更新后的信息」

AI: 「完成了!CustomerID 现在是数值,SalesAmount 的空缺已填充。你的数据集干净了,可以建模。」

[会话稍后,在你训练了一个模型之后……]

用户: 「我的模型表现如何?」

AI: 「让我为你训练好的模型生成关键指标」

[AI 访问现有的模型变量并生成评估指标]

AI: 「你的随机森林达到了 0.84 的精确率和 0.81 的召回率。混淆矩阵显示高价值销售类别中有一些假阳性。你想让我调整决策阈值,还是试试特征工程?」

这种流畅的来回——助手理解并建立在现有笔记本状态之上——允许无缝协作,而不必不断重新建立上下文或重新加载数据。

示例笔记本​

这里你可以看到一个由 MCP Jupyter 服务器处理的示例笔记本。服务器

📓 查看完整演示笔记本

演示走过一个典型的数据科学工作流:

  • 安装缺失的库:为笔记本安装缺失的库
  • 数据生成:创建用于分析的合成数据
  • 模型训练:用 scikit-learn 拟合线性回归模型
  • 结果分析:提取模型系数和性能指标
  • 可视化:用 seaborn 创建图表

开始使用​

MCP Jupyter 服务器与现有工作流无缝集成,也可以与基于 VS Code 的 IDE 中的笔记本查看器一起使用。

详细的设置和配置,查看完整文档。