使用Unity目录功能和托管MCP进行绘图
该存储库演示了如何构建一个人工智能代理,该代理可以通过copula Managed MCP(模型上下文协议)服务器使用copula Genie Spaces、Unity Catalog Functions查询数据并创建可视化。该代理使用LangGraph来编排工具调用,并使用Mosaic AI代理框架进行部署。
高级体系结构
graph TB
User[👤 User] -->|Natural Language Query| ChatUI[🎨 Streamlit Chat App
Databricks App]
ChatUI -->|HTTP Request| AgentEndpoint[🤖 Agent Endpoint
Model Serving]
AgentEndpoint -->|Orchestration| LangGraph[🔄 LangGraph Workflow
Tool Calling Agent]
LangGraph -->|System Prompt| LLM[🧠 LLM
Claude 3.7 Sonnet]
LLM -->|Tool Call 1| MCP_Genie[📊 MCP: Genie Space
query_space tool]
MCP_Genie -->|SQL Query| GenieSpace[💾 Genie Space
Natural Language to SQL]
GenieSpace -->|Query| DataTable[(🗄️ Data Tables
samples.nyctaxi.trips)]
DataTable -->|Results JSON| MCP_Genie
MCP_Genie -->|Data JSON| LLM
LLM -->|Tool Call 2| MCP_UC[🔧 MCP: UC Functions
genie_to_chart tool]
MCP_UC -->|Invoke| UCFunction[⚡ UC Function
genie_to_chart
Python + Plotly]
UCFunction -->|Plotly JSON| MCP_UC
MCP_UC -->|Chart JSON| LLM
LLM -->|Final Response| LangGraph
LangGraph -->|Response + Charts| AgentEndpoint
AgentEndpoint -->|Parsed Output| ChatUI
ChatUI -->|Render| UserChart[📈 Interactive Chart
Plotly Visualization]
UserChart -->|Display| User
style User fill:#e1f5ff
style ChatUI fill:#fff4e6
style AgentEndpoint fill:#f3e5f5
style LangGraph fill:#e8f5e9
style LLM fill:#fce4ec
style MCP_Genie fill:#e3f2fd
style MCP_UC fill:#e3f2fd
style GenieSpace fill:#f1f8e9
style UCFunction fill:#fff3e0
style DataTable fill:#efebe9
style UserChart fill:#e8eaf6存储库内容
笔记本
- 01-uc-绘图功能.ipynb -创建Unity Catalog函数,将Genie查询结果转换为Plotly图表
- 02-langgraph-mcp-tool-calling-agent.ipynb -构建、测试和部署一个LangGraph代理,该代理使用MCP连接到Genie和UC功能
- 03-deploy-run-databricks-app.ipynb -将代理部署为具有聊天界面的copula应用程序
Python文件
- agent.py -使用MCP工具集成实现主代理
- 数据包_应用程序/数据包_聊天app/app.py -Rancher应用程序的流线型聊天界面
- 数据包_应用程序/数据包_聊天app/agent_endpoint_client.py -用于查询已部署代理终结点的客户端
先决条件
- docker工作区,可访问:
- Unity目录 - 模型服务端点 - copula应用程序 - 精灵空间
- 要查询的数据集(示例使用
samples.nyctaxi.trips) - LLM端点(示例使用
databricks-claude-3-7-sonnet)
安装说明
按照以下笔记本的顺序操作:
步骤1:创建绘图函数
此笔记本创建了一个名为 genie_to_chart 即:
- 从Genie MCP查询中获取JSON输出
- 将数据转换为Plotly可视化
- 支持条形图、折线图和饼图类型
配置:
- 设置
catalog,schema,以及space_id笔记本顶部的小部件 - 该功能将在以下时间创建
{catalog}.{schema}.genie_to_chart
第二步:创建Rancher Genie空间
重要提示:在运行notebook 02之前,请在您的copula工作区中创建一个Genie Space
- 导航到您的copula工作区UI
- 转到Genie Spaces部分
- 创建一个新的精灵空间,可以访问您的数据(例如。,
samples.nyctaxi.trips) - 从URL复制Genie Space ID(格式:
01f0ab8c079d17b8a00584e70d2ac18c) - 下一个笔记本需要此空间ID
步骤3:构建和部署MCP代理
跑 02-langgraph-mcp-tool-calling-agent.ipynb
此笔记本:
- 配置MCP与Genie Space和UC功能的连接
- 创建可以查询数据和创建图表的LangGraph代理
- 使用流式追踪在本地测试试剂
- 将代理注册到Unity目录
- 将代理部署为模型服务端点
配置:
- 设置
catalog,schema,以及space_id小部件 - 更新
GENIE_SPACE_ID在代理代码(单元格5)中使用您的Genie Space ID - 可选择为自定义MCP服务器配置OAuth(大多数用户可以跳过此步骤)
关键工作流程:
- 代理接收用户请求(例如,“以折线图显示每日行程”)
- 呼叫
query_space从Genie获取数据的工具 - 呼叫
genie_to_chartUC功能创建可视化 - 将Plotly图表返回给用户
步骤4:部署聊天应用程序
跑 03-deploy-run-databricks-app.ipynb
此笔记本:
- 将基于Streamlit的聊天界面部署为copula应用程序
- 从步骤3将聊天UI连接到代理端点
配置:
- 设置
app_name小部件(默认值:managed-mcp-plotting-app) - 设置
source_code_path指向聊天应用目录的小部件
部署后,您将有一个用户友好的聊天界面与您的代理进行交互。
示例用法
部署后,您可以向代理提出以下问题:
- “2016年每天有多少次旅行?给我看一个折线图”
- “按行政区划分的总行程是多少?创建一个柱状图”
- “以饼图形式显示付款类型”
代理人将:
- 查询您的Genie Space以获取数据
- 将结果转换为Plotly可视化
- 显示交互式图表
工作流程
User Query
↓
LangGraph Agent (with MCP)
↓
├── Managed MCP: Genie Space (query_space tool)
│ ↓
│ Returns data as JSON
│
├── Managed MCP: UC Functions (genie_to_chart)
│ ↓
│ Transforms JSON → Plotly chart
│
└── Returns visualization to user故障排除
- 身份验证错误:确保您的工作区对MCP、模型服务和应用程序具有适当的权限
- 未找到工具:验证Genie Space ID和UC函数名称在代理代码中是否匹配
- 图表渲染问题:检查Genie查询是否以预期格式返回数据
- 部署失败:等待端点完全部署(可能需要10-20分钟)
