数据分析代理服务

一个使用LangChain/LangGraph与Model Context Protocol (MCP)连接AI代理到Snowflake完全托管的MCP服务器的演示,展示了代理工作流程,通过Snowflake Cortex Agent进行安全数据分析并触发下游业务操作。

  • by sfc-gh-aperezgonzalez
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 sfc-gh-aperezgonzalez/mcp-client-demo

使用说明

雪花+郎链MCP演示

使用演示 语言链/语言图 随着 模型上下文协议(MCP) 将AI代理连接到 Snowflake的完全托管MCP服务器此演示展示了一个代理工作流程,其中LangChain代理(在本例中由任何LLM-Gemini提供支持)通过Snowflake Cortex代理协调安全数据分析并触发下游业务操作。

概述

此演示使用以下工具实现了完整的代理工作流 LangGraph的代理框架:

  1. 目标接收:代理人收到业务目标(例如,“找到收入下降的根本原因”)
  2. 工具选择:LLM(Gemini/OpenAI等)分析原因并选择合适的雪花皮层代理工具
  3. 数据操作:LangChain代理调用雪花管理MCP服务器
  4. 观察:接收Snowflake安全分析的结构化结果
  5. 下游决策:LLM综合数据并确定下一步行动
  6. 业务动作:触发外部系统切换(模拟Salesforce/Jira警报)
  7. 最终合成:提供全面的自然语言报告

备注:虽然此演示使用Gemini,但您可以通过更改模型初始化轻松交换任何LLM(OpenAI GPT-4、Claude、Llama等)。

建筑

┌──────────────┐      ┌──────────────────────────────────┐      ┌─────────────────┐
│  LangChain   │◄────►│  Snowflake Managed MCP Server    │◄────►│   Cortex Agent  │
│   Agent      │      │  (OAuth/PAT Authentication)      │      │  + Analyst Tool │
│ (LLM-powered)│      │                                  │      │                 │
└──────────────┘      └──────────────────────────────────┘      └─────────────────┘
       │                                                                   │
       │                                                                   ▼
       │                                                         ┌──────────────────┐
       └────────────────────────────────────────────────────────►│  Revenue Data    │
                                                                 │  (Semantic View) │
                                                                 └──────────────────┘

先决条件

  • 雪花账户
    • 能够创建数据库、模式和MCP服务器
  • LLM API密钥 -此演示使用Gemini(获取API密钥),但您可以使用:
  • Python 3.8+

安装说明

1.克隆存储库

git clone https://github.com/sfc-gh-aperezgonzalez/mcp-client-demo.git
cd mcp-client-demo

2.设置雪花环境

执行 setup.sql Snowflake帐户中的脚本。这将:

  • 创建 MCP_DEMO 数据库和 SALES_DATA 模式
  • 创建一个 REVENUE_FACT 带有模拟销售数据的表格
  • 创建语义视图(REVENUE_SV)Cortex分析师
  • 创建Cortex代理(REVENUE_TROUBLESHOOTER_AGENT)用于深入的收入分析
  • 创建MCP服务器(SALES_INSIGHT_SERVER)将代理暴露为工具
-- Run the entire setup.sql file in a Snowflake worksheet
-- Or execute via Snowflake CLI:
snow sql -f setup.sql

3.生成雪花身份验证令牌

您需要一个程序化访问令牌(PAT)或OAuth令牌。对于PAT:

  1. 在Snowflake中,转到“用户和角色”,选择一个用户
  2. 导航到“程序化访问令牌”
  3. 生成新令牌
  4. 复制令牌值(它看起来像一个很长的JWT字符串)

有关更多详细信息,请参阅 Snowflake REST API身份验证.

4.配置演示

编辑 agent_test_mcp_gemini.py 并更新配置部分:

# --- USER CONFIGURATION ---
SNOWFLAKE_MCP_URL = "https://{your-account}.snowflakecomputing.com/api/v2/databases/MCP_DEMO/schemas/SALES_DATA/mcp-servers/SALES_INSIGHT_SERVER"
SNOWFLAKE_AUTH_TOKEN = "your_pat_token_here"

重要:替换 {your-account} 使用您的Snowflake帐户标识符。注:

5.设置Python环境

# Create virtual environment
python -m venv venv_mcp_gemini

# Activate virtual environment
# On macOS/Linux:
source venv_mcp_gemini/bin/activate
# On Windows:
# venv_mcp_gemini\Scripts\activate

# Install dependencies
pip install mcp langchain langchain-core langchain-google-genai langchain-mcp-adapters langgraph

6.设置环境变量

# Set your Gemini API key
export GEMINI_API_KEY="your_gemini_api_key_here"

运行演示

python agent_test_mcp_gemini.py

期望输出

🔗 Connecting to managed MCP Server at: https://your-account.snowflakecomputing.com/...
✅ Tools Discovered from Snowflake MCP: ['troubleshooter_agent']

🧠 Running Agent with Goal: Using the 'troubleshooter_agent' tool, analyze the data...

========================================
🚨 ALERT CREATED IN EXTERNAL SYSTEM (Simulated Salesforce/Jira API)
   Target Customer ID: CUST_A
   Action Summary: CUST_A revenue declined by 75%...
========================================

==================================
🔥 Final Orchestration Result from Gemini:
The revenue decline in the WEST region for Product_Line_X is primarily due to 
CUST_A's 75% revenue reduction and CUST_B's complete inactivity after August...
==================================

发生什么事了?

  1. 连接:代理使用PAT身份验证连接到Snowflake MCP服务器
  2. 工具发现:列出可用工具(您创建的Cortex代理)
  3. 分析:Gemini客服致电 troubleshooter_agent 通过MCP工具
  4. 雪花加工:Cortex Agent使用Cortex Analyst查询语义视图并分析收入模式
  5. 结果:代理收到将CUST_A和CUST_B标识为问题区域的发现
  6. 行动:代理触发外部警报(模拟),以便销售团队跟进
  7. 合成:Gemini提供结合所有见解的自然语言摘要

项目结构

mcp-client-demo/
├── README.md                   # This file
├── setup.sql                   # Snowflake database and MCP server setup
├── agent_test_mcp_gemini.py   # Main demo script
├── .gitignore                 # Git ignore file
└── venv_mcp_gemini/           # Python virtual environment (not tracked)

关键技术

安全最佳实践

  • ⚠️ 从不提交代币:保持 SNOWFLAKE_AUTH_TOKEN 和LLM API密钥超出版本控制
  • 🔒 使用OAuth进行生产部署。使用硬编码令牌可能会导致令牌泄漏。
  • 🛡️ 对MCP服务器和工具访问应用最小权限RBAC
  • 🔑 定期旋转令牌
  • 📋 看 MCP安全建议

故障排除

SSL证书错误

certificate verify failed: Hostname mismatch

解决方案:确保您的主机名使用连字符,而不是下划线(例如。, aperez-aws1 不 aperez_aws1)

认证失败

PAT_INVALID error

解决方案:

  • 验证您的PAT令牌是否正确且未过期
  • 确保用户具有访问MCP服务器的适当权限

Gemini API利率限制

429 Resource exhausted

解决方案:脚本将自动重试。如果持续存在,请在两次运行之间等待几秒钟。

定制

交换LLM

此演示使用Gemini,但您可以轻松使用任何其他LLM。只需在中更改模型初始化 agent_test_mcp_gemini.py:

对于OpenAI:

from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model="gpt-4", 
    temperature=0,
    openai_api_key=os.getenv("OPENAI_API_KEY")
)

对于拟人克劳德:

from langchain_anthropic import ChatAnthropic

model = ChatAnthropic(
    model="claude-3-5-sonnet-20241022",
    temperature=0,
    anthropic_api_key=os.getenv("ANTHROPIC_API_KEY")
)

对于Azure OpenAI:

from langchain_openai import AzureChatOpenAI

model = AzureChatOpenAI(
    azure_deployment="your-deployment-name",
    api_version="2024-02-15-preview",
    temperature=0
)

更改分析提示

修改 analysis_prompt 变量in agent_test_mcp_gemini.py:

analysis_prompt = (
    "Your custom business question here..."
)

添加更多模拟数据

编辑 setup.sql 并向中添加更多INSERT语句 REVENUE_FACT:

INSERT INTO REVENUE_FACT (CUSTOMER_ID, REGION, PRODUCT_LINE, SALES_REP_ID, REVENUE_USD, SALE_DATE) 
VALUES ('CUST_NEW', 'NORTH', 'Product_Line_Z', 'ABC', 30000.00, '2025-12-01');

创建其他工具

在中向MCP服务器添加更多工具 setup.sql:

CREATE OR REPLACE MCP SERVER SALES_INSIGHT_SERVER
  FROM SPECIFICATION $$
    tools:
      - name: "troubleshooter_agent"
        type: "CORTEX_AGENT_RUN"
        identifier: "MCP_DEMO.SALES_DATA.REVENUE_TROUBLESHOOTER_AGENT"
        description: "Revenue analysis agent"
      - name: "your_new_tool"
        type: "SYSTEM_EXECUTE_SQL"  # or other type
        description: "Your tool description"
  $$;

了解更多

许可证

本项目按原样提供,用于演示目的。

贡献

欢迎问题和拉取请求!请随时提供改进或其他示例。

联系

如有疑问或反馈,请在此存储库上打开一个问题。