当前位置: 首页 > news >正文

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,执行:
    python -m venv .venv
    .\.venv\Scripts\activate
    pip install --upgrade pip
    
  3. 安装项目依赖:
    pip install mcp[cli] httpx python-dotenv
    
  4. 在项目根目录下新建 .env 文件,写入:
    WENXIN_API_KEY=你的文心一言 API Key
    WENXIN_SECRET_KEY=你的文心一言 Secret Key
    CY_TOKEN=你的彩云天气 Token
    

三、项目目录结构

weather-mcp-windows/
├─ .env
├─ .venv/
├─ weather.py
└─ requirements.txt

四、集成“文心一言”大模型

weather.py 文件顶部,导入模块并加载环境变量:

import os, json, asyncio
import httpx
from dotenv import load_dotenv
from mcp.server.fastmcp import FastMCPload_dotenv()
WENXIN_API_KEY = os.getenv("WENXIN_API_KEY")
WENXIN_SECRET_KEY = os.getenv("WENXIN_SECRET_KEY")

实现获取访问令牌函数:

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", "")

封装调用文心一言接口:

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

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 工具

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 文件末尾,添加:

if __name__ == "__main__":mcp.run(transport="http", host="127.0.0.1", port=8000)

启动服务:

python weather.py

浏览器访问 http://127.0.0.1:8000/docs,可见自动生成的 OpenAPI 接口文档。


八、示例客户端调用

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


文章转载自:

http://xnfOgXoX.qyxwy.cn
http://5MD8FiUC.qyxwy.cn
http://rT8yutzj.qyxwy.cn
http://oMhGHLXP.qyxwy.cn
http://EyuxosmM.qyxwy.cn
http://8Ae5lTyf.qyxwy.cn
http://OrlAfeT6.qyxwy.cn
http://P0QYCVQv.qyxwy.cn
http://SXVQCNhd.qyxwy.cn
http://b1C8Uxf3.qyxwy.cn
http://68V3bBlB.qyxwy.cn
http://AqeVSYbe.qyxwy.cn
http://xGUkyVsa.qyxwy.cn
http://oIQ73Y6i.qyxwy.cn
http://6Zr2olCo.qyxwy.cn
http://hWiEA2YY.qyxwy.cn
http://MplpTBxC.qyxwy.cn
http://bKb01tBE.qyxwy.cn
http://zQECSthf.qyxwy.cn
http://5bgJRY8d.qyxwy.cn
http://Ru9CkxUr.qyxwy.cn
http://MM6GiL7b.qyxwy.cn
http://A6GIjC5I.qyxwy.cn
http://WOyG8YdF.qyxwy.cn
http://toVyhC1K.qyxwy.cn
http://3XY0sFol.qyxwy.cn
http://LZlcQ4dT.qyxwy.cn
http://MFEBKxYn.qyxwy.cn
http://EciQA3Z9.qyxwy.cn
http://lL0M2sWY.qyxwy.cn
http://www.dtcms.com/a/382866.html

相关文章:

  • leetcode38(二叉树的最大深度)
  • PyTorch实战(7)——循环神经网络
  • 【LeetCode hot100|Week2】滑动窗口,子串
  • Web与Nginx网站服务(改)
  • Qt Designer与事件处理
  • 347. 前 K 个高频元素
  • Qt之快捷键、事件处理、自定义按键——完成记事本项目
  • 【微服务】SpringBoot 整合Kafka 项目实战操作详解
  • spring-kafka消费异常处理
  • 长城杯2025
  • Android BLE 蓝牙扫描完全指南:使用 RxAndroidBle框架
  • CKS-CN 考试知识点分享(3)---Dockerfile 安全最佳实践
  • 新一代控制理论框架:人机环境系统控制论
  • easyPoi实现动表头Excel的导入和导出
  • 【Zephyr电源与功耗专题】13_PMU电源驱动介绍
  • Coze源码分析-资源库-创建知识库-后端源码-应用/领域/数据访问
  • React Server Components (RSC) 与 App Router 简介:Next.js 的未来范式
  • 状态机SMACH相关教程介绍与应用案例分析——机器人操作进阶系列之一
  • Grafana与Prometheus实战
  • godot+c#操作godot-sqlite并加解密
  • Scikit-learn 机器学习:构建、训练与评估预测模型
  • React学习教程,从入门到精通,React 组件核心语法知识点详解(类组件体系)(19)
  • Java分布式编程:RMI机制
  • 5-12 WPS JS宏 Range数组规范性测试
  • MySQL 的安装、启动、连接(Windows、macOS 和 Linux)
  • (附源码)基于Spring Boot的宿舍管理系统设计
  • Mac下Python3安装
  • C++数组与字符串:从基础到实战技巧
  • 第13课:分布式Agent系统
  • Docker 容器化部署核心实战——Nginx 服务配置与正反向代理原理解析