使用说明
BLS MCP服务器
模型上下文协议(MCP)服务器,用于通过人工智能驱动的RAG(检索增强生成)管道访问和分析劳工统计局的数据。使LLM能够通过上下文分析查询、解释和预测BLS经济指标。
🎯 概述
无服务器MCP实现,对来自bls.gov的劳工统计局时间序列数据(失业、就业、劳动力)进行索引,并通过语义内核编排和Azure AI搜索向量存储提供智能分析。
✨ 特性
- ✅ RAG管道:三层检索→ 增强→ 代
- ✅ 预测分析:基于历史趋势的预测
- ✅ 语义搜索:带有向量嵌入的Azure AI搜索
- ✅ 自动更新:新BLS数据的月度定时器触发
- ✅ MSI身份验证:无API密钥,仅限托管标识
- ✅ RBAC安全:最低权限访问控制
- ✅ 全覆盖:美国所有州、华盛顿特区、波多黎各
🏗️ 建筑
User Query
↓
Azure Function App (Python 3.11)
↓
Semantic Kernel
↓
RAG Pipeline
├─→ Azure AI Search (metadata) ──→ Find series
├─→ Azure AI Search (data) ─────→ Get values
└─→ Azure OpenAI ──────────────→ Generate answer
↓
Response (with predictions & trends)
组件:
- 托管:Azure功能(消费计划Y1)
- 认证:托管标识(MSI)-无API密钥
- AI编排:语义内核
- 向量存储:Azure AI搜索(基本层)
- LLM:Azure OpenAI(Foundry,GPT-4o)
- 数据源:劳工统计局API
- IAC公司:具有RBAC角色分配的二头肌
🚀 快速开始
先决条件
# Azure CLI
az --version
# Azure Functions Core Tools
func --version
# Python 3.11+
python3 --version
部署(2个步骤)
1.部署基础设施和代码
./deploy.sh
2.初始化数据
python scripts/initialize_data.py --start-year 2020
就是这样! 🎉
测试
# Get function URL from deployment output
FUNC_URL="<your-function-url>"
# Query unemployment data
curl -X POST "$FUNC_URL/api/query" \
-H "Content-Type: application/json" \
-d '{"query": "What is California unemployment rate?"}'
# Predictive query
curl -X POST "$FUNC_URL/api/query" \
-H "Content-Type: application/json" \
-d '{"query": "Will California unemployment increase next month?"}'
📚 文档
- QUICKSTART.md -2分钟部署指南
- 部署.md -全面的部署文档
- MSI_MIGRATION.md -MSI身份验证详细信息和故障排除
- 建筑.md -系统架构深度挖掘
- RAG_IMPLEMENTATION.md -RAG管道详图
- 部署中心_CHECKLIST.md -部署前验证
🔐 安全
- ✅ 没有API密钥:仅限托管身份(MSI)
- ✅ 基于角色的访问控制:功能应用程序→ Azure AI搜索(最低权限)
- ✅ Entra ID认证:禁用搜索时启用的LocalAuth
- ✅ TLS 1.2+:对所有服务强制执行
- ✅ 审计日志:完整的Entra ID审计跟踪
分配了RBAC角色
| 角色 | 目的 |
|---|---|
| 搜索索引数据贡献者 | 读/写搜索索引 |
| 搜索服务贡献者 | 管理搜索服务 |
🛠️ 技术栈
运行时和托管:
- Python 3.11
- Azure功能(消费计划)
- 无服务器执行
AI/ML:
- 语义内核(LLM编排)
- Azure OpenAI(Foundry,GPT-4o)
- Azure AI搜索(矢量存储)
基础设施:
- 二头肌(IaC)
- 用户分配的管理身份(3x)
- RBAC角色分配
数据:
- BLS.gov API(公开数据)
- 时间序列:2020年至今
- 通过定时器触发每月更新
📊 成本估算
| 服务 | 级别 | 每月成本 |
|---|---|---|
| Azure功能 | Y1消耗 | ~0-10美元 |
| Azure人工智能搜索 | 基础 | 约75美元 |
| Azure OpenAI | 按需付费 | 可变 |
| 存储 | 标准LRS | ~1美元 |
| 总计 | ~$76-100 |
📁 项目结构
bls-mcp/
├── deploy.sh # Automated deployment script
├── azure.yaml # Azure Developer CLI config
├── src/
│ ├── function_app.py # Function app entry point
│ ├── requirements.txt # Python dependencies
│ ├── core/
│ │ ├── kernel.py # Semantic Kernel setup
│ │ ├── rag/ # RAG pipeline
│ │ │ ├── retrieval/ # Azure AI Search queries
│ │ │ ├── augmented/ # Context formatting
│ │ │ ├── generation/ # System prompts
│ │ │ └── data/ # Vector store manager
│ │ ├── tools/ # Kernel functions
│ │ │ └── bls_data_tool.py # RAG integration
│ │ └── configs/
│ │ └── bls_series.json # Series metadata
│ └── infra/ # Bicep IaC
│ ├── main.bicep # Orchestrator
│ ├── main.bicepparam # Parameters
│ ├── rbac/ # RBAC role assignments
│ ├── identity/ # Managed identities
│ ├── app/ # Function App
│ ├── azureSearch/ # Azure AI Search
│ └── foundry/ # Azure OpenAI
├── scripts/
│ └── initialize_data.py # Bulk data loader
└── docs/
├── QUICKSTART.md
├── DEPLOYMENT.md
├── MSI_MIGRATION.md
├── ARCHITECTURE.md
└── RAG_IMPLEMENTATION.md
🔧 本地开发
设置
# Clone repository
git clone <repo-url>
cd bls-mcp
# Create virtual environment
python3 -m venv blsvenv
source blsvenv/bin/activate
# Install dependencies
pip install -r src/requirements.txt
配置
# Authenticate with Azure (for MSI)
az login
# Set search endpoint
export AZURE_SEARCH_ENDPOINT="https://your-search.search.windows.net"
在本地运行
cd src
func start
🧪 测试
RAG管道测试
python test_rag.py
测试向量存储
python src/core/rag/data/vector_store_manager.py
测试内核集成
from src.core.kernel import get_kernel
kernel = await get_kernel()
result = await kernel.invoke("What is California unemployment?")
print(result)
📈 支持的查询
事实的
- “加州的失业率是多少?”
- “显示德克萨斯州的就业数据”
- “比较佛罗里达州和纽约州的失业率”
预测性
- “下个月加州失业率会上升吗?”
- “根据这一趋势,德克萨斯州的就业情况如何?”
- “佛罗里达州的失业是季节性的吗?”
分析的
- “哪个州的失业率最高?”
- “显示内华达州的劳动力趋势”
- “亚利桑那州的就业模式是什么?”
🔄 数据更新
自动:定时器触发器每月运行一次(每月1日)
@app.schedule(schedule="0 0 0 1 * *", ...)
async def monthly_update(timer: func.TimerRequest):
# Fetches latest BLS data
# Updates Azure AI Search indexes
手册:运行初始化脚本
python scripts/initialize_data.py --start-year 2020
🐛 故障排除
认证失败
# Verify MSI
az functionapp identity show -g <rg> -n <func>
# Check RBAC
az role assignment list --assignee <msi-principal-id>
索引未找到
# Initialize data
python scripts/initialize_data.py --start-year 2020
导入错误
# Install dependencies
pip install -r src/requirements.txt
看 MSI_MIGRATION.md 进行全面的故障排除。
🤝 贡献
- 分叉存储库
- 创建特征分支(
git checkout -b feature/amazing) - 提交更改(
git commit -m 'Add amazing feature') - 推送到分支(
git push origin feature/amazing) - 打开拉取请求
📝 许可证
MIT许可证-有关详细信息,请参阅许可证文件
🔗 链接
准备好部署了吗? → QUICKSTART.md 🚀 │ │ └── kernel.py#语义内核配置 │ └── infra/#基础设施定义 │ ├── main.bicep#主部署模板 │ ├── app/#功能应用模块 │ └── identity/#托管身份模块