使用说明
与您的数据对话:使用MCP为Snowflake构建语义层
我们没有数据存储问题;我们有一个意义存储问题。
商业逻辑经常被困在BI工具中,创造了一个碎片化的世界,在这个世界里,AI代理可以猜测数据的含义。该项目通过引入 共享语义模型.
这是一个 主控程序 充当 语义层 对于Snowflake,确保“收入”等定义集中在一个地方——仪表板、脚本和人工智能代理都可以访问。
更多信息,请查看我的 medium.com 文章。
🧠 心理模型:译者
不要把这个软件看作是一个简单的“数据库连接器” 翻译员.
- 输入:模棱两可的人类语言(例如,“向我展示高价值用户”)。
- 词典(词汇表):定义“高价值”的含义(例如,贷款价值比>500美元)。
- 语法(数据模型):定义表之间的关系。
- 输出:精确的Snowflake SQL。
此MCP服务器位于在中间。它使用术语表提供的上下文构建查询,允许LLM智能地“对话”您的数据。
🚀 特性
- 语义理解:使用术语表定义“高价值客户”或“流失客户”等术语,确保LLM理解您的业务逻辑。
- LLM到SQL:将用户问题转换为SQL查询(当前模拟)。
- MCP集成:设计用于MCP客户端(如Claude Desktop或其他AI代理)。
✨ 成功案例
用户提出了一个问题:
2.模型执行查询和答案:
📂 项目结构
该项目被构建为一个独立的Python微服务:
- src/server.py:MCP服务器的入口点。暴露
ask_data工具。 - src/语义/:应用程序的“大脑”。
glossary.yaml:你的定义文件(“真相”)。model.py:Pydantic模型用于验证术语表。loader.py:加载和验证术语表的逻辑。
- src/llm/:
generator.py:转换自然语言+术语表的逻辑->SQL。
- src/database.py:雪花连接和原始执行逻辑。
🛠️ 入门指南
先决条件
- Python 3.10或更高版本
- 雪花账户
- 一个OpenAI API密钥
安装
-
克隆仓库:
git clone <repository-url> cd snowflake-mcp-server -
安装依赖项:
pip install -e . -
配置环境变量: 创建
.env文件,并填写您的Snowflake凭据和OpenAI API密钥。cp .env.example .env所需详细信息:
SNOWFLAKE_USER=myuser SNOWFLAKE_PASSWORD=mypassword SNOWFLAKE_ACCOUNT=myaccount SNOWFLAKE_ROLE=myrole SNOWFLAKE_WAREHOUSE=mywarehouse SNOWFLAKE_DATABASE=mydatabase SNOWFLAKE_SCHEMA=myschema OPENAI_API_KEY=sk-proj-...
运行服务器
您可以直接使用Python(FastMCP)运行服务器:
python src/server.py
或者配置您的MCP客户端以运行此命令。
与Claude Desktop一起使用
将以下内容添加到您的 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"snowflake-explorer": {
"command": "/ABSOLUTE/PATH/TO/snowflake-mcp-server/.venv/bin/python",
"args": [
"/ABSOLUTE/PATH/TO/snowflake-mcp-server/src/server.py"
],
"env": {
"OPENAI_API_KEY": "sk-proj-...",
"SNOWFLAKE_USER": "...",
"SNOWFLAKE_PASSWORD": "...",
"SNOWFLAKE_ACCOUNT": "..."
}
}
}
}
注意:一定要更换 /ABSOLUTE/PATH/TO 带有项目文件夹的实际路径。
📖 用法
定义术语表
语义层的核心在 src/semantic/glossary.yaml。这就是你教系统你的商业语言的地方。
示例 glossary.yaml:
tables:
- name: FACT_ORDERS
description: "All transactional records"
columns:
- name: AMOUNT
description: "Total transaction value in USD"
metrics:
- name: "High Value Customer"
definition: "A customer with total spend > $1000 in the last 365 days"
🚧 发展现状及下一步
下一个即时任务:
- 实施
SNOWFLAKE_AUTHENTICATOR=externalbrowser以实现更安全的本地开发(SSO)。
