销售支持聊天机器人
一个基于多代理Snowflake MCP的应用程序,供销售团队从结构化Snowflake数据和非结构化公司PDF文档中获得即时见解。
概述
此应用程序为销售专业人员提供了一个自然语言界面来查询:
- 结构化数据:存储在Snowflake表中的收入、预订、机会、客户信息和财务指标
- 非结构化数据:以PDF文档形式存储的售前提案、SOW、估算、服务选项和GTM材料
建筑
┌─────────────────────────────────────────────────────────────────────────────┐
│ Streamlit Frontend │
│ (Hosted in Snowflake - SiS) │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ Agent 1: Orchestrator │
│ • Understands user intent │
│ • Applies input guardrails │
│ • Routes to appropriate agent │
│ • Formats final response │
│ • Applies output guardrails │
└─────────────────────────────────────────────────────────────────────────────┘
│ │
▼ ▼
┌──────────────────────────────────┐ ┌──────────────────────────────────────┐
│ Agent 2: SQL Data Agent │ │ Agent 3: Document Agent │
│ • Cortex Analyst integration │ │ • Cortex Search integration │
│ • Natural language to SQL │ │ • Semantic document search │
│ • Revenue/Customer analytics │ │ • Service offerings lookup │
│ • Pipeline & opportunity data │ │ • Proposal/SOW search │
└──────────────────────────────────┘ └──────────────────────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ Snowflake MCP Server (OAuth) │
│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │
│ │ CORTEX_ANALYST │ │ CORTEX_SEARCH │ │ SYSTEM_EXECUTE │ │
│ │ _MESSAGE │ │ _SERVICE_QUERY │ │ _SQL │ │
│ └───────────────────┘ └───────────────────┘ └───────────────────┘ │
│ ┌───────────────────┐ ┌───────────────────┐ │
│ │ CORTEX_AGENT_RUN │ │ GENERIC (UDFs) │ │
│ └───────────────────┘ └───────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ Snowflake Data Layer │
│ ┌─────────────────────────────┐ ┌─────────────────────────────────────┐ │
│ │ Structured Tables │ │ Document Storage │ │
│ │ • CUSTOMERS │ │ • DOCUMENTS │ │
│ │ • OPPORTUNITIES │ │ • DOCUMENT_CONTENT │ │
│ │ • REVENUE │ │ • SERVICE_OFFERINGS │ │
│ │ • BOOKINGS │ │ • SOLUTION_ACCELERATORS │ │
│ │ • EXPENSES │ │ • CASE_STUDIES │ │
│ └─────────────────────────────┘ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘特性
多代理系统
- 编排器代理:了解查询意图和路由到适当的专业代理
- SQL数据代理:使用Cortex Analyst处理结构化数据查询
- 文档代理:使用Cortex搜索处理文档搜索
护栏
- 输入护栏:查询验证、净化、阻止关键字、主题相关性
- 输出护栏:PII编辑、敏感数据过滤、响应格式化
- SQL护栏:查询验证、防止注入、复杂性限制
MCP工具集成
| 工具类型 | 描述 | 用例 |
|---|---|---|
CORTEX_SEARCH_SERVICE_QUERY | 语义文档搜索 | 查找提案、SOW、服务信息 |
CORTEX_ANALYST_MESSAGE | SQL的自然语言 | 收入、客户、机会查询 |
SYSTEM_EXECUTE_SQL | 直接执行SQL | 复杂的分析查询 |
CORTEX_AGENT_RUN | Cortex代理编排 | 多步骤分析 |
GENERIC | UDF和存储过程 | 自定义业务逻辑 |
项目结构
SnowflakeMCP/
├── app/
│ ├── __init__.py
│ ├── streamlit_app.py # Standard Streamlit app
│ └── snowflake_app.py # Streamlit in Snowflake (SiS) version
├── config/
│ ├── __init__.py
│ └── settings.py # Pydantic settings management
├── src/
│ ├── __init__.py
│ ├── agents/
│ │ ├── __init__.py
│ │ ├── base.py # Base agent class
│ │ ├── orchestrator.py # Agent 1: Orchestrator
│ │ ├── sql_agent.py # Agent 2: SQL Data Agent
│ │ └── document_agent.py # Agent 3: Document Agent
│ ├── guardrails/
│ │ ├── __init__.py
│ │ ├── input_guardrails.py # Input validation
│ │ ├── output_guardrails.py # Output filtering
│ │ └── sql_guardrails.py # SQL validation
│ ├── mcp/
│ │ ├── __init__.py
│ │ ├── client.py # Snowflake MCP client
│ │ └── tools.py # MCP tool definitions
│ └── utils/
│ ├── __init__.py
│ ├── logger.py # Structured logging
│ └── helpers.py # Utility functions
├── sql/
│ ├── 01_setup_database.sql # Database and role setup
│ ├── 02_create_tables.sql # Sales data tables
│ ├── 03_create_document_tables.sql # Document tables + Cortex Search
│ ├── 04_setup_mcp_server.sql # MCP server configuration
│ └── 05_insert_sample_data.sql # Sample data for testing
├── tests/
│ └── (test files)
├── .env.example # Environment template
├── requirements.txt # Python dependencies
└── README.md # This file安装
先决条件
- Python 3.10+
- 启用了Cortex功能的Snowflake帐户
- 访问Snowflake MCP服务器
设置步骤
- 克隆存储库
git clone
cd SnowflakeMCP- 创建虚拟环境
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- 安装依赖项
pip install -r requirements.txt- 配置环境
cp .env.example .env
# Edit .env with your Snowflake credentials- 设置雪花数据库
-- Run SQL scripts in order
-- sql/01_setup_database.sql
-- sql/02_create_tables.sql
-- sql/03_create_document_tables.sql
-- sql/04_setup_mcp_server.sql
-- sql/05_insert_sample_data.sql- 运行应用程序
streamlit run app/streamlit_app.py配置
环境变量
| 变量 | 描述 | 示例 |
|---|---|---|
SNOWFLAKE_ACCOUNT | Snowflake帐户标识符 | xy12345.us-east-1 |
SNOWFLAKE_USER | 用户名 | SALES_USER |
SNOWFLAKE_PASSWORD | 密码 | *** |
SNOWFLAKE_WAREHOUSE | 仓库名称 | SALES_ENABLEMENT_WH |
SNOWFLAKE_DATABASE | 数据库名称 | SALES_ENABLEMENT_DB |
SNOWFLAKE_OAUTH_CLIENT_ID | OAuth客户端ID | *** |
CORTEX_SEARCH_SERVICE | 搜索服务名称 | SALES_DOCUMENT_SEARCH_SERVICE |
ENABLE_INPUT_GUARDRAILS | 启用输入验证 | true |
ENABLE_OUTPUT_GUARDRAILS | 启用输出过滤 | true |
使用示例
测试查询
- 结构化数据查询
Show me the customer details who gave the most opportunities in the last 3 years→ SQL代理的路由→ 使用Cortex分析师→ 返回客户分析
Show me a last 5 year revenue growth trend by customer→ SQL代理的路由→ 生成同比增长趋势分析
- 文档搜索查询
What all are the service offerings from Jade's Data and AI Service Line?→ 文档代理的路径→ 搜索Cortex搜索→ 返回服务目录
What all are the GTM Solution accelerators Data and AI Service Line has?→ 文档代理的路径→ 返回加速器文档
部署到Snowflake
雪花中的流光(SiS)
- 在Snowflake中创建Streamlit应用程序
- 上传
app/snowflake_app.py作为主文件 - 配置应用程序设置
- 授予必要的权限
-- Create Streamlit app
CREATE STREAMLIT SALES_ENABLEMENT_DB.PUBLIC.SALES_CHATBOT
ROOT_LOCATION = '@SALES_ENABLEMENT_DB.PUBLIC.STREAMLIT_STAGE'
MAIN_FILE = 'snowflake_app.py'
QUERY_WAREHOUSE = 'SALES_ENABLEMENT_WH';
-- Grant access
GRANT USAGE ON STREAMLIT SALES_CHATBOT TO ROLE SALES_ANALYST_ROLE;安全注意事项
输入护栏
- 最大查询长度:2000个字符
- 被屏蔽的关键字:密码、秘密、凭证、api_key、令牌
- SQL注入预防
- 命令注入预防
- 主题相关性检查
输出护栏
- PII编辑(电子邮件、电话、SSN、信用卡)
- 敏感数据筛选(API密钥、密码、连接字符串)
- 专业语言执行
SQL护栏
- 被阻止的操作:DROP、TRUNCATE、ALTER、CREATE、DELETE、UPDATE
- 最大复杂性限制(连接、子查询、联合)
- 查询长度限制
- 敏感表访问监控
业务建议
- 数据质量:确保对源表进行定期数据质量检查
- 文档更新:在Cortex搜索中保持文档内容的最新状态
- 访问控制:对敏感数据使用基于角色的访问
- 监控:启用查询审核日志记录以实现合规性
- 反馈循环:收集用户反馈以改进查询路由
故障排除
常见问题
- MCP连接错误
- 验证OAuth凭据 - 检查网络连接 - 确认MCP服务器URL
- 查询超时
- 增加 SNOWFLAKE_MCP_TOOL_TIMEOUT - 优化仓库规模 - 简化复杂的查询
- 未找到结果
- 检查表中是否存在数据 - 验证Cortex搜索服务是否正在运行 - 查看查询关键字
贡献
- 分叉存储库
- 创建要素分支
- 通过测试进行更改
- 提交拉取请求
许可证
专有-仅供内部使用
支持
如有任何问题或疑问,请联系销售工程团队。
