Windows 平台上基于 MCP 构建“文心一言+彩云天气”服务实战

Windows 平台上基于 MCP 构建"文心一言+彩云天气"服务实战

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


一、为什么选用 MCP

  • 统一上下文:MCP 提供标准化的上下文帧(Context Frame),让多轮会话、工具调用和模型生成之间做到清晰解耦。
  • 可扩展工具:新增、替换外部服务(如天气、翻译、检索)时,无需改动 Agent 核心逻辑,仅注册新工具即可。
  • 可观测与可测:上下文帧全量记录、可序列化到 Redis 或本地文件,方便调试与审计。

二、Windows 环境准备

  1. 安装 Python 3.10+。

  2. 打开 PowerShell 或 CMD,执行:

    powershell 复制代码
    python -m venv .venv
    .\.venv\Scripts\activate
    pip install --upgrade pip
  3. 安装项目依赖:

    powershell 复制代码
    pip install mcp[cli] httpx python-dotenv
  4. 在项目根目录下新建 .env 文件,写入:

    ini 复制代码
    WENXIN_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 成为你国产大模型与各种业务工具的"中枢神经",清晰管理上下文、快速接入新能力,拥抱结构化智能新时代!

相关推荐
我爱计算机视觉19 小时前
ICCV 2025 | VideoOrion: 将视频中的物体动态编码进大语言模型,理解视频涨点10%以上!
人工智能·语言模型·自然语言处理
做运维的阿瑞20 小时前
Windows 环境下安装 Node.js 和 Vue.js 框架完全指南
前端·javascript·vue.js·windows·node.js
WWZZ202521 小时前
ORB_SLAM2原理及代码解析:Tracking::CreateInitialMapMonocular() 函数
人工智能·opencv·算法·计算机视觉·机器人·slam·感知
WWZZ202521 小时前
ORB_SLAM2原理及代码解析:Tracking::MonocularInitialization() 函数
人工智能·opencv·算法·计算机视觉·机器人·感知·单目相机
eve杭21 小时前
解锁数据主权与极致性能:AI本地部署的全面指南
大数据·人工智能·5g·ai
数字时代全景窗1 天前
商业航天与数字经济(一):从4G、5G得与失,看6G时代商业航天如何成为新经济引擎?
大数据·人工智能·5g
F_D_Z1 天前
【一文理解】下采样与上采样区别
人工智能·深度学习·计算机视觉
CiLerLinux1 天前
第三十五章 ESP32S3 摄像头实验
图像处理·人工智能·计算机视觉
진영_1 天前
深度学习打卡第N8周:使用Word2vec实现文本分类
人工智能·深度学习·word2vec
飞哥数智坊1 天前
Linus 眼中,编程 AI 的真实价值如何?
人工智能·ai编程