劳动力数据分析服务器

BLS MCP服务器通过AI驱动的RAG(检索增强生成)管道访问和分析美国劳工统计局数据,使LLM能够查询、解释和预测经济指标。

  • by RakeemRanger
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 RakeemRanger/bls-mcp

使用说明

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?"}'

📚 文档

🔐 安全

  • ✅ 没有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 进行全面的故障排除。

🤝 贡献

  1. 分叉存储库
  2. 创建特征分支(git checkout -b feature/amazing)
  3. 提交更改(git commit -m 'Add amazing feature')
  4. 推送到分支(git push origin feature/amazing)
  5. 打开拉取请求

📝 许可证

MIT许可证-有关详细信息,请参阅许可证文件

🔗 链接


准备好部署了吗? → QUICKSTART.md 🚀 │ │ └── kernel.py#语义内核配置 │ └── infra/#基础设施定义 │ ├── main.bicep#主部署模板 │ ├── app/#功能应用模块 │ └── identity/#托管身份模块