Windows 平台上基于 MCP 构建"文心一言+彩云天气"服务实战
本文示例将带你在 Windows 操作系统下,使用 Python 和 MCP(Model Context Protocol)框架,结合百度"文心一言"大模型与彩云天气 API,快速搭建一个既能查询天气又能生成中文自然回复的智能服务。

一、为什么选用 MCP
- 统一上下文:MCP 提供标准化的上下文帧(Context Frame),让多轮会话、工具调用和模型生成之间做到清晰解耦。
- 可扩展工具:新增、替换外部服务(如天气、翻译、检索)时,无需改动 Agent 核心逻辑,仅注册新工具即可。
- 可观测与可测:上下文帧全量记录、可序列化到 Redis 或本地文件,方便调试与审计。
二、Windows 环境准备
-
安装 Python 3.10+。
-
打开 PowerShell 或 CMD,执行:
powershellpython -m venv .venv .\.venv\Scripts\activate pip install --upgrade pip
-
安装项目依赖:
powershellpip install mcp[cli] httpx python-dotenv
-
在项目根目录下新建
.env
文件,写入:iniWENXIN_API_KEY=你的文心一言 API Key WENXIN_SECRET_KEY=你的文心一言 Secret Key CY_TOKEN=你的彩云天气 Token
三、项目目录结构
weather-mcp-windows/
├─ .env
├─ .venv/
├─ weather.py
└─ requirements.txt
四、集成"文心一言"大模型
在 weather.py
文件顶部,导入模块并加载环境变量:
python
import os, json, asyncio
import httpx
from dotenv import load_dotenv
from mcp.server.fastmcp import FastMCP
load_dotenv()
WENXIN_API_KEY = os.getenv("WENXIN_API_KEY")
WENXIN_SECRET_KEY = os.getenv("WENXIN_SECRET_KEY")
实现获取访问令牌函数:
python
async def get_wenxin_token() -> str:
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {
"grant_type": "client_credentials",
"client_id": WENXIN_API_KEY,
"client_secret": WENXIN_SECRET_KEY
}
async with httpx.AsyncClient() as client:
resp = await client.post(url, params=params, timeout=10)
return resp.json().get("access_token", "")
封装调用文心一言接口:
python
async def call_wenxin(prompt: str) -> str:
token = await get_wenxin_token()
api = f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat?access_token={token}"
payload = {
"messages": [{"role":"user","content": prompt}],
"model": "ernie_bot_turbo"
}
async with httpx.AsyncClient() as client:
resp = await client.post(api, json=payload, timeout=15)
return resp.json()["result"][0]["content"]
五、接入彩云天气 API
python
CY_TOKEN = os.getenv("CY_TOKEN")
CY_API = "https://api.caiyunapp.com/v2.5"
async def get_caiyun_weather(lon: float, lat: float) -> dict:
url = f"{CY_API}/{CY_TOKEN}/{lon},{lat}/weather.json"
async with httpx.AsyncClient() as client:
r = await client.get(url, timeout=10)
return r.json()
六、定义 MCP 工具
python
mcp = FastMCP("weather_mcp_win")
@mcp.tool()
async def query_weather(lon: float, lat: float) -> str:
"""
调用彩云天气获取指定经纬度的当前天气
Args:
lon: 经度
lat: 纬度
"""
data = await get_caiyun_weather(lon, lat)
if data.get("status") != "ok":
return "天气服务调用失败"
now = data["result"]["realtime"]
return f"{now['skycon']},温度 {now['temperature']}°C," \
f"湿度 {int(now['humidity']*100)}%"
@mcp.tool()
async def describe_weather(natural_prompt: str) -> str:
"""
基于"文心一言"大模型,对天气情况生成优美文案
Args:
natural_prompt: 包含天气信息的简要描述
"""
prompt = f"请根据以下内容生成一段优美的中文天气描述:{natural_prompt}"
return await call_wenxin(prompt)
七、启动 MCP 服务(Windows)
在 weather.py
文件末尾,添加:
python
if __name__ == "__main__":
mcp.run(transport="http", host="127.0.0.1", port=8000)
启动服务:
powershell
python weather.py
浏览器访问 http://127.0.0.1:8000/docs
,可见自动生成的 OpenAPI 接口文档。
八、示例客户端调用
python
import requests, json
# 1. 获取当前天气
resp1 = requests.post(
"http://127.0.0.1:8000/query_weather",
json={"lon":116.397, "lat":39.907}
)
weather_brief = resp1.json()["result"]
# 2. 生成中文描述
resp2 = requests.post(
"http://127.0.0.1:8000/describe_weather",
json={"natural_prompt": weather_brief}
)
print("简要:", weather_brief)
print("文心一言生成:", resp2.json()["result"])
九、后续扩展思路
- 上下文持久化:引入 Redis 或 SQLite 存储历史 Context Frame。
- 增加多模型切换:注册腾讯混元、华为昇思等国内模型工具,按需路由调用。
- 实时推送:通过 WebSocket 或 Server-Sent Events 向前端推送天气更新。
- 本地化部署:使用 Windows 容器(Docker Desktop for Windows)自动化运维,结合 IIS 或 Nginx 反代。
- 面向企业:在企业内网搭建私有化 MCP 服务,使用自研知识库、流程引擎、OCR、文生图等多种工具。
让 MCP 成为你国产大模型与各种业务工具的"中枢神经",清晰管理上下文、快速接入新能力,拥抱结构化智能新时代!