🚀 基于 LangGraph + MCP 的 AI Agent 实战:从 0 搭建一个天气查询工具系统(2026最新版)

📌 一、项目背景

在传统的 LangChain Agent 开发中,我们通常会把工具(Tool)直接写在代码里,例如:

  • 天气查询函数
  • 搜索函数
  • 文件操作函数

这种方式虽然简单,但存在明显问题:

  • ❌ 工具无法复用
  • ❌ Agent 与工具强耦合
  • ❌ 不适合多 Agent 系统
  • ❌ 难以工程化扩展

为了解决这些问题,本项目使用:

🔥 MCP(Model Context Protocol) + LangGraph + DeepSeek LLM

构建一个可扩展的工具服务化 AI Agent 系统


🧠 二、系统架构设计

整体架构如下:

用户
  ↓
LangGraph Agent(大脑)
  ↓
MCP Client(工具调度器)
  ↓
MCP Server(天气工具服务)
  ↓
OpenWeather API(真实数据源)

🧩 核心思想

组件 作用
MCP Server 提供工具能力(天气查询)
MCP Client 发现并调用工具
LangGraph Agent 负责推理与决策
LLM(DeepSeek) 负责语言理解与生成

⚙️ 三、环境准备

1️⃣ 安装依赖

pip install langchain langgraph langchain-mcp-adapters loguru httpx python-dotenv

2️⃣ 配置环境变量(.env)

DEEPSEEK_API_KEY=你的key
OPENWEATHER_API_KEY=你的key

3️⃣ MCP 配置文件(mcp.json)

{
  "mcpServers": {
    "weather": {
      "url": "http://127.0.0.1:8000/sse",
      "transport": "sse"
    }
  }
}

🌩️ 四、MCP Server(工具服务端)

📌 代码:weather_server.py

import json
import os
import httpx
from dotenv import load_dotenv
from loguru import logger
from mcp.server.fastmcp import FastMCP

load_dotenv()

# 创建 MCP Server
mcp = FastMCP("WeatherServerSSE", host="0.0.0.0", port=8000)


@mcp.tool()
def get_weather(city: str) -> str:
    """
    查询指定城市天气
    """
    url = "https://api.openweathermap.org/data/2.5/weather"

    params = {
        "q": city,
        "appid": os.getenv("OPENWEATHER_API_KEY"),
        "units": "metric",
        "lang": "zh_cn"
    }

    resp = httpx.get(url, params=params, timeout=10)
    data = resp.json()

    logger.info(f"{city} 天气查询成功")

    return json.dumps(data, ensure_ascii=False)


if __name__ == "__main__":
    logger.info("🚀 MCP Weather Server 启动中...")
    mcp.run(transport="sse")

📌 作用

👉 将“天气查询能力”封装成可远程调用的工具服务


🔗 五、MCP Client + LangGraph Agent

📌 代码:client.py

import asyncio
import json
import os
from dotenv import load_dotenv
from loguru import logger

from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
from langchain.chat_models import init_chat_model

load_dotenv(override=True)


def load_servers(file_path="mcp.json"):
    with open(file_path, "r", encoding="utf-8") as f:
        return json.load(f)["mcpServers"]


async def main():

    # 1️⃣ 加载 MCP Server
    servers = load_servers()

    # 2️⃣ 创建 MCP Client
    client = MultiServerMCPClient(servers)

    # 3️⃣ 获取 tools
    tools = await client.get_tools()
    logger.info(f"🧩 Tools: {[t.name for t in tools]}")

    # 4️⃣ 初始化 LLM(DeepSeek)
    llm = init_chat_model(
        "deepseek-chat",
        model_provider="deepseek",
        api_key=os.getenv("DEEPSEEK_API_KEY")
    )

    # 5️⃣ 创建 Agent
    agent = create_react_agent(llm, tools)

    logger.info("🤖 MCP Agent 已启动")

    # 6️⃣ 交互循环
    while True:
        query = input("\n用户: ").strip()
        if query.lower() == "quit":
            break

        result = await agent.ainvoke({
            "messages": [("user", query)]
        })

        print("\nAI:", result["messages"][-1].content)


if __name__ == "__main__":
    asyncio.run(main())

📌 作用

👉 这是整个系统的“大脑 + 工具调度中心”


🔁 六、运行流程解析

一次完整请求流程如下:

用户输入问题
   ↓
LangGraph Agent(理解问题)
   ↓
判断需要调用工具
   ↓
MCP Client 获取 get_weather
   ↓
调用 MCP Server
   ↓
请求 OpenWeather API
   ↓
返回天气数据
   ↓
LLM总结输出结果

🔥 七、关键技术点总结

1️⃣ MCP(核心升级点)

相比传统 tool:

方式 特点
本地 tool 耦合强
MCP tool 服务化、可复用

2️⃣ LangGraph Agent

替代传统:

  • AgentExecutor ❌
  • ReAct 手动循环 ❌

使用:

  • create_react_agent ✅

3️⃣ Async 全链路

必须统一:

  • MCP tools → async
  • Agent → ainvoke
  • pipeline → async


🧠 八、总结

本项目完成了一个完整的:

🚀 基于 MCP + LangGraph 的工具化 AI Agent 系统

实现了:

  • 工具服务化(MCP Server)
  • 工具自动发现(MCP Client)
  • AI推理调度(LangGraph)
  • 多工具协同调用

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐