DS代理工作流程
Demo GIF *演示具有实时执行和智能错误解决功能的自主探索性数据分析*
一个由Cursor AI和两个专用模型上下文协议(MCP)服务器支持的综合数据科学代理工作流系统。该系统通过实现真正自主的工作流程,将本地开发环境和远程计算资源连接起来,并具有智能知识管理和自动化笔记本执行功能,从而改变了传统的数据科学开发。
🚨 问题:数据科学发展摩擦
在与Cursor合作完成各种DS项目后,我们发现了两个阻碍真正代理数据科学工作流程的关键差距:
问题1:远程执行障碍🚧
现实:DS数据处理和模型训练发生在远程环境中——Spark集群用于大数据,GPU实例用于深度学习,高内存机器用于大型数据集。
限制:Cursor在笔记本电脑上本地运行。Cursor代理无法无缝执行以下操作:
- 直接在远程Jupyter笔记本中开发和调试代码
- 在云资源上执行计算密集型操作
- 从远程环境流式传输实时结果
- 处理Jupyter内核连接、环境管理和资源监控的复杂性
疼痛:你不断地进行上下文切换——在本地编写代码,推送到远程,通过浏览器连接,调试,清洗和重复。AI代理无法跟随您进入实际工作发生的远程环境。
问题2:记忆差距🧠
现实:DS工作遵循可预测的模式——探索性数据分析、特征工程实验、模型比较工作流程、调试常见错误。
限制:每个项目都从零开始。没有永久内存服务可以:
- 存储和检索成功的分析模式
- 记住常见错误的调试解决方案
- 从之前的模型实验中学习并推荐方法
- 保持超越个人会议的团队知识
疼痛:你不断地重新解决同样的问题。上个月的精彩调试见解?迷路的。相似数据集的最佳特征工程方法?被遗忘的。代理人无法随着时间的推移学习和积累专业知识。
💡 我们的解决方案:为代理DS提供两台MCP服务器
意识到这些差距,我们建立了 两台专用MCP服务器 将Cursor转变为真正自主的数据科学开发环境:
🏗️ 架构概述
DS代理工作流由两个核心MCP服务器组成,它们协同工作,提供完整的数据科学开发体验:
🔧 核心MCP服务器
1. Jupyter MCP服务器 -解决远程执行障碍🤖
它解决的问题:弥合本地Cursor开发和远程计算环境之间的差距。
它使Cursor代理能够做什么:
- 直接远程Jupyter控制:直接在远程Jupyter笔记本中执行代码单元格
- 实时流媒体:从Spark作业、GPU训练和长时间运行的计算中获取实时反馈
- 无缝环境管理:自动处理Jupyter内核连接、会话管理和资源监控
- Git同步:通过MCP发送的Python/Bash代码在远程环境中执行git命令
- 资源优化:监控CPU、内存和GPU使用情况以优化性能
2. 知识MCP服务器 -解决记忆差距🧠
它解决的问题:为DS模式、解决方案和积累的专业知识创建持久内存。
它使Cursor代理能够做什么:
- 模式识别:存储和检索成功的EDA方法、功能工程技术和模型架构
- 错误解决方案内存:记住常见数据科学错误(内存问题、数据类型问题、收敛失败)的调试解决方案
- 语义搜索:使用向量嵌入找到类似的问题和经过验证的解决方案
- 团队知识共享:建立超越个人开发人员的集体专业知识
- 智能推荐:根据积累的经验提出办法
🌟 代理流——它们如何协同工作🎯
当这些服务器组合在一起时,它们可以实现完全自主的DS工作流,Cursor代理可以:
- 研究阶段:查询知识库以了解类似问题和经过验证的方法
- 规划阶段:将复杂的分析任务分解为可执行的步骤
- 执行阶段:在远程资源上运行计算密集型工作
- 调试阶段:发生错误时应用累积的调试模式
- 学习阶段:存储新的见解和成功模式以供将来使用
结果:你在战略层面工作,而代理人处理运营的复杂性。
🔄 系统架构
DS代理工作流集成了多层,提供无缝的数据科学开发体验:
graph TB
subgraph "Dev Layer (Local)"
DS[Data Scientist]
CA[Cursor Agent]
LG[Local Git]
JMCP[Jupyter MCP]
KMCP[Knowledge MCP Server]
PG[(PostgreSQL + pgvector)]
EMB[Ollama Embedding]
end
subgraph "External Sources"
DOCS[Documentation]
WEB[Web Search]
FILES[Uploaded Files]
end
subgraph "Shared Repository"
RR[Remote Repository]
end
subgraph "Remote Environment"
RG[Remote Git]
RJE[Remote Jupyter Environment]
end
%% User interactions
DS --> CA
%% Agent orchestration
CA KMCP
CA JMCP
CA LG
CA FILES
CA WEB
CA DOCS
%% Knowledge layer connections
KMCP PG
KMCP EMB
%% Execution layer connections
JMCP RJE
JMCP RG
%% Git workflow: Local → Remote Repository → Remote Environment
LG RR
RR RG
%% Jupyter MCP orchestrates remote git operations
JMCP -.-> RR
%% Styling for clarity
classDef localComp fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef remoteComp fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef sharedComp fill:#fff3e0,stroke:#e65100,stroke-width:3px
classDef externalComp fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
class DS,CA,LG,KMCP,JMCP,PG,EMB localComp
class RJE,RG remoteComp
class RR sharedComp
class FILES,WEB,DOCS externalComp🎯 工作流组件
1.本地开发层
- 数据科学家:与Cursor代理交互以执行数据科学任务
- 光标代理:整个工作流的代理驱动编排
- 本地Git:本地开发的版本控制
- Jupyter MCP:远程Jupyter环境的接口
- 知识MCP:使用嵌入进行语义搜索的知识存储
- PostgreSQL+pgvector:用于嵌入和知识存储的矢量数据库
- 奥利玛嵌入:用于语义搜索的本地嵌入服务
2.远程执行层
- 远程Jupyter环境:强大的数据处理计算资源
- 远程Git:远程环境中的同步代码存储库
- 会话跟踪:实时监控笔记本状态和执行情况
3.知识整合
- 外部来源:文档、网络搜索和上传的文件
- 语义搜索:使用向量嵌入的基于代理的知识检索
- 模式识别:自动识别类似问题和解决方案
🚀 入门指南
先决条件
- Python 3.8+ 使用conda环境管理
- PostgreSQL 带pgvector扩展
- 奥拉马 用于本地嵌入服务
- 光标代理 支持MCP的编辑器
- 远程Jupyter环境 (可选但推荐)
快速设置
- 克隆存储库:
git clone
cd ds-agentic-workflow- 设置知识MCP:
cd mcp-servers/knowledge-mcp
pip install -r requirements.txt
# Configure PostgreSQL and Ollama (see knowledge-mcp/README.md)- 设置Jupyter MCP:
cd ../jupyter-mcp
pip install -r requirements.txt
# Configure environment tokens (see jupyter-mcp/README.md)- 配置光标MCP:
{
"mcpServers": {
"knowledge-mcp": {
"command": "python",
"args": ["main.py"],
"cwd": "/absolute/path/to/knowledge-mcp"
},
"jupyter-mcp": {
"command": "/opt/anaconda3/envs/py310/bin/python3",
"args": ["/absolute/path/to/jupyter-mcp/main.py"],
"env": {
"LOCAL_JUPYTER_TOKEN": "",
"REMOTE_JUPYTER_TOKEN": ""
}
}
}
}🔄 自主开发与调试循环
该系统将现有的开发工作流程从手动上下文切换转变为完全自主的操作:
flowchart TD
subgraph "❌ Before Integration"
T1[Manual Research
Google, Stack Overflow]
T2[Local Development
Limited Resources]
T3[Manual Remote Sync
Git Push/Pull/Browser]
T4[Manual Debugging
Repetitive Patterns]
T5[Lost Knowledge
Individual Silos]
T1 --> T2 --> T3 --> T4 --> T5
T5 -.->|Context Lost| T1
end
subgraph "✅ After Integration"
A1[Knowledge Search
Automated Research]
A2[Remote Planning
Resource Optimization]
A3[Seamless Execution
Real-time Streaming]
A4[Pattern Recognition
Auto-fixing]
A5[Knowledge Storage
Shared Learning]
A1 --> A2 --> A3 --> A4 --> A5
A5 -->|Enhanced Expertise| A1
subgraph "🧠 Knowledge Loop"
K1[Search Similar
Problems]
K2[Apply Proven
Solutions]
K3[Store New
Insights]
K1 --> K2 --> K3 --> K1
end
A1 K1
A4 K2
A5 K3
end
style T1 fill:#ffcdd2
style T2 fill:#ffcdd2
style T3 fill:#ffcdd2
style T4 fill:#ffcdd2
style T5 fill:#ffcdd2
style A1 fill:#c8e6c9
style A2 fill:#c8e6c9
style A3 fill:#c8e6c9
style A4 fill:#c8e6c9
style A5 fill:#c8e6c9
style K1 fill:#e1f5fe
style K2 fill:#e1f5fe
style K3 fill:#e1f5fe第一阶段:智能研究与情境构建
集成前:代理缺少DS专用工具,无法访问远程环境和历史知识 整合后:Agent查询知识库,综合历史经验,自动构建综合上下文
第二阶段:智能规划与代码生成
集成前:代理计划基于当前环境,无法利用过去的DS最佳实践 整合后:Agent调用过去的成功经验,生成经过验证的优化代码
阶段3:无缝远程执行
集成前:代理只能在本地开发,需要手动切换到远程环境执行 整合后:代理直接控制远程Jupyter,无缝执行大规模计算
阶段4:智能错误解决
集成前:代理每次都会重新分析错误,无法利用过去的DS解决方案 整合后:代理检索类似的历史错误解决方案,快速定位并修复问题
阶段5:持续学习和知识存储
集成前:DS经验在会话结束后丢失,无法在项目间积累 整合后:自动存储成功的模式和解决方案,形成不断增长的知识库
🎯 真实世界用例
场景1:大规模特征工程
你: *“分析s3://xxx/xx中的客户交易数据集,并设计流失预测功能。”*
自主发生的事情:
- 知识MCP 寻找相似的特征工程解决方案
- Jupyter MCP 将代码发送到远程Jupyter环境(Spark服务器)执行
- Agent应用知识库中经过验证的特征工程技术
- 结果实时反馈,并更新进度
- 为未来的项目存储新的成功模式
场景2:模型实验工作流程
你: *“比较此数据集上的XGBoost、随机森林和神经网络性能。”*
自主发生的事情:
- 知识MCP 从类似项目中检索最优超参数
- Jupyter MCP 使用GPU/Spark资源将训练代码发送到远程Jupyter环境
- 代理处理交叉验证、度量计算和可视化
- 最佳实践和最佳配置会自动存储
场景3:调试复杂的数据问题
你: *“加载数据集时,此内存错误不断发生。”*
自主发生的事情:
- Jupyter MCP 从远程环境捕获完整的错误上下文
- 知识MCP 搜索类似的内存错误模式
- 代理应用经过验证的解决方案(分块、数据类型优化、延迟加载)
- 如果成功,解决方案将被存储以供将来自动应用
📊 MCP服务器详细信息
Jupyter MCP(mcp-servers/jupyter-mcp/)
- 目的:远程Jupyter笔记本执行和管理
- 主要特点:代码执行、EDA自动化、git集成、内核管理
- 技术:FastMCP、Jupyter内核客户端、NbModel客户端
- 看: jupyter mcp/README.md
知识MCP(mcp-servers/knowledge-mcp/)
- 目的:基于向量嵌入的知识存储和语义搜索
- 主要特点:矢量搜索、降价知识存储、混合搜索、基于代理的推荐
- 技术:FastMCP、PostgreSQL、pgvector、Ollama嵌入
- 看: 知识mcp/README.md
📋 游标代理规则
将此DS代理工作流与Cursor一起使用时,添加以下规则以实现最佳集成:
You have access to two MCP servers: `knowledge-mcp` and `jupyter-mcp`. Use `knowledge-mcp` for additional context related to Spark or database tables. For matters specifically related to Jupyter notebooks, utilize `jupyter-mcp`.
MANDATORY SEARCH-FIRST WORKFLOW:
BEFORE executing any technical action, you MUST:
1. Search the knowledge base using relevant queries covering:
- "Solution to [specific issue]" or "Best practice for [specific task]"
- "How to [technical operation] in [context]"
- "Debugging [symptom] in [environment]"
2. Review existing solutions and apply known patterns if available
3. Only proceed with custom solutions if no relevant knowledge exists
DECISION PATH AFTER SEARCH:
- 📚 Relevant knowledge found → Apply existing solution/pattern
- 🔍 Partial knowledge found → Use as foundation, extend with investigation
- ❌ No relevant knowledge → Proceed with investigation, document solution
WHEN TO STORE KNOWLEDGE:
Store when you have: successfully resolved complex issues, discovered non-obvious solutions, found debugging patterns, implemented architectural improvements, or identified common pitfalls.
STORAGE FORMAT:
Title: "Solution to [SPECIFIC_PROBLEM]" or "Best Practice for [SPECIFIC_TASK]"
Content Structure:
## Symptoms That Trigger This Solution
## Quick Diagnosis Steps
## Implementation Steps
## Common Mistakes to Avoid
## Verification Steps
## Related Knowledge
Tags: [technical-component, symptom-type, solution-category]
TECHNICAL SETUP:
- When executing python/jupyter in terminal, switch to py310 environment:
`conda deactivate && CONDA_SHLVL=0 conda activate py310`
JUPYTER CONNECTION RULES:
- When the user provides connection_info (typically as JSON with fields like timestamp, jupyterlabVersion, currentWidget, notebookPath, sessionName, kernelId, kernelName, kernelState), you MUST pass it EXACTLY as provided to jupyter-mcp tools without any modification, parsing, or field changes
- DO NOT attempt to transform, extract, or modify any fields from the provided connection_info
- DO NOT create custom connection objects or modify the structure
- Pass the entire connection_info object directly as the connection_info parameter
STORAGE LIMIT: Ensure each knowledge document stays within 7,000 words due to BGE embedding model token limits. For long context models like Qwen3 Embedding, this limit can be adjusted accordingly.🤝 贡献
我们欢迎为改进DS代理工作流系统做出贡献!请参阅各个MCP服务器的README文件,了解具体的贡献指南。
开发工作流程
- 分叉存储库
- 为每个MCP服务器创建功能分支
- 在两台服务器都运行的情况下进行本地测试
- 提交带有全面描述的拉取请求
🙏 致谢
该项目的灵感来自并建立在以下优秀工作的基础上 数据层的Jupyter MCP服务器。我们通过专门为数据科学工作流程设计的其他工具和功能扩展了他们的基础方法。
关键扩展和创新
- 📊 增强的EDA支持:添加了全面的探索性数据分析工具,包括人工智能引导的模板和自动建议
- 🔄 多笔记本会话管理:已开发 Jupyter会话跟踪器 扩展,使多个光标窗口能够同时连接到不同的远程笔记本电脑
- 🛠️ 扩展工具套件:添加了自动变量检查、资源监控和Git集成等高级功能
- 🎯 数据科学焦点:用于常见DS任务的专用工具,包括模型比较、特征工程和统计分析
- 🚀 生产就绪功能:增加了对复杂的多环境工作流和团队协作的支持
- 🧠 知识管理:集成语义知识存储和检索系统,用于积累专业知识
这 Jupyter会话跟踪器 扩展是专门为支持多个开发人员或多个分析会话的独特需求而开发的,允许在不同的远程笔记本电脑之间无缝切换,而不会发生连接冲突。
📄 许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
