LangChain + MCP 零基础智能体开发实战教程:手把手带你少走 99% 的弯路
B站讲解最细最全的Langchain+MCP零基础智能体开发实战教程!适合0基础小白学习!直接少走99%的弯路!
一、为什么现在要学智能体开发
很多同学刚接触大模型时,第一反应都是惊叹:它能写文章、能翻译、能回答问题。但只要多用几天就会发现,纯聊天的大模型有几个明显短板:知识有截止日期,不知道今天发生了什么;不能主动联网查资料;更不能帮你操作电脑、查数据库、调接口。简单来说,它只会“说”,不会“做”。
智能体(Agent)就是为了补上这个能力而生的。所谓智能体,就是给大模型装上一双手,让它不仅能思考,还能调用工具、执行任务、观察结果、继续行动。比如你问它“帮我查一下下周北京的天气,再算一下 128 乘以 37”,一个合格的智能体会先调用天气查询工具,再调用计算工具,最后把两部分结果整合成一句完整回答。
而本教程的主角之一 MCP(Model Context Protocol,模型上下文协议),解决的是“怎样让智能体方便地接入各种工具”的老大难问题。过去每接一个外部工具,都要写一堆定制化的桥接代码;有了 MCP,工具接入就像给电脑插 USB 设备一样标准化。学会 LangChain + MCP 这套组合,你就拿到了进入智能体开发大门的钥匙。
本文将按照“概念扫盲 → 环境搭建 → 第一个智能体 → 编写 MCP 服务器 → LangChain 连接 MCP → 完整实战 → 排错与进阶”的顺序,带你从零开始,一步步跑通整个流程。
二、零基础必懂的三个核心概念
2.1 大模型(LLM)
大模型就是我们要驱动的“大脑”,比如 OpenAI 的 GPT、DeepSeek、通义千问等。你给大模型一段文字(提示词),它返回一段文字(回答)。它擅长理解、推理和生成,但它本身不能联网、不能读文件、不能执行命令。所有“动手”的事,都需要通过工具来完成。
2.2 智能体(Agent)
智能体可以理解为一个自动化的决策循环:
- 接收任务:用户提出一个问题或目标。
- 思考规划:大模型判断“要不要调用工具、调用哪个工具、传什么参数”。
- 执行动作:Agent 框架真正去调用对应的工具。
- 观察结果:把工具返回的结果重新交给大模型。
- 继续或收尾:如果信息还不够,继续调用;否则生成最终回答。
所以,智能体不是某个软件,而是一套“模型 + 工具 + 循环逻辑”组合起来的运行方式。LangChain 就是帮我们把这套循环逻辑搭起来的框架。
2.3 工具(Tool)与函数调用(Function Calling)
工具的本质就是一个普通函数。比如 add(a, b) 可以做加法,get_weather(city) 可以查天气。关键问题是:大模型怎么知道自己该调用 add 还是 get_weather?又怎么知道参数该怎么传?
这就靠“函数调用”。我们把所有工具的名称、用途、参数格式告诉大模型,大模型在需要时输出一段结构化的“调用指令”,例如:调用工具 add,参数 a=12, b=34。框架拿到指令后执行真正的函数,再把结果送回模型,由模型生成人类能看懂的最终答案。
理解这个闭环,后面写代码就会非常轻松。
三、MCP 是什么?为什么它是智能体的“USB 接口”
3.1 MCP 解决了什么问题
在没有 MCP 之前,开发者接入一个工具往往要针对每个平台、每个 API 单独编写适配代码。接入 10 个工具可能要写 10 套完全不同的胶水逻辑,费时费力,换一个 Agent 框架还要重写一遍。
MCP 把“模型如何调用工具”这件事标准化了。它定义了一套统一的协议,不管是数学计算工具、天气查询工具,还是 GitHub 操作工具,只要把它们包装成符合 MCP 规范的服务器,任何支持 MCP 的客户端(包括 LangChain)都能用统一方式加载和调用。
一句话总结:MCP 之于智能体,就像 USB 接口之于电脑外设。电脑不需要为每个鼠标、键盘、U 盘各做一个专用插口,统一用 USB 就行了。智能体接入工具也一样,统一走 MCP。
3.2 MCP 的核心角色
- MCP Host:宿主程序,也就是使用工具的智能体应用本身,例如我们后面要写的 LangChain Agent。
- MCP Client:运行在 Host 内部的客户端,负责与服务器建立连接、发现工具、发起调用。
- MCP Server:工具提供方,内部包含具体的工具函数,例如一个提供加法和乘法运算的服务器。
- Tool / Resource / Prompt:服务器对外提供的能力类型。Tool 是可以执行的动作;Resource 是可以读取的数据;Prompt 是可复用的提示模板。零基础阶段重点掌握 Tool 即可。
3.3 整体架构
下面的架构图展示了用户、智能体、大模型和 MCP 服务器之间的关系:
flowchart LR
U[用户] --> A[LangChain Agent]
A --> L[大模型 LLM]
A -->|MCP 协议| S1[MCP 服务器:数学运算]
A -->|MCP 协议| S2[MCP 服务器:天气查询]
S1 --> T1[add / multiply 工具]
S2 --> T2[get_weather 工具]
从图中可以看到,Agent 是调度中心,大模型负责思考和规划,真正干活的函数都由 MCP 服务器提供,三者分工明确。
四、环境准备:从零搭建开发环境
4.1 安装 Python
本教程代码使用 Python 编写。建议安装 Python 3.10 或更高版本。安装完成后,在终端(Windows 用户可打开 CMD 或 PowerShell)执行以下命令确认版本:
python --version
如果提示找不到命令,可以试试:
py --version
下文统一使用 python,如果你的电脑上只有 py,请自行替换。
4.2 准备大模型 API Key
智能体需要一个真实的大模型来“思考”。国内用户推荐使用 DeepSeek 或通义千问的 OpenAI 兼容接口,因为它们便宜、稳定,而且接入方式与 OpenAI 基本一致。
以 DeepSeek 为例:
- 访问 DeepSeek 开放平台并注册账号。
- 在“API Keys”页面创建一个 Key,形如
sk-xxxxxxxx。 - 保存好这个 Key,后面代码里会用到。
如果你使用其他模型,只需替换 model、api_key 和 base_url 三个参数即可,思路完全相同。
4.3 创建项目目录
新建一个空文件夹,例如 langchain-mcp-demo,后续所有代码都放在这个目录里。
mkdir langchain-mcp-demo
cd langchain-mcp-demo
4.4 安装依赖
在项目目录下执行以下命令,一次性安装核心依赖:
pip install langchain langchain-openai langchain-mcp-adapters mcp
各包的作用如下:
langchain:智能体开发框架。langchain-openai:用于接入 OpenAI 及兼容接口的大模型。langchain-mcp-adapters:LangChain 官方的 MCP 适配器。mcp:MCP 官方 Python SDK,用来编写 MCP 服务器。
五、第一个 LangChain 智能体:先不用 MCP 跑通全流程
在接触 MCP 之前,我们先写一个最简单、不接任何工具的语言模型调用示例,熟悉 LangChain 的基本用法。
新建文件 hello_agent.py,写入以下内容:
from langchain_openai import ChatOpenAI
from langchain.agents import create_agent
1. 创建大模型:以 DeepSeek 为例,可替换成任意 OpenAI 兼容模型
llm = ChatOpenAI(
model="deepseek-chat",
api_key="sk-你的APIKey",
base_url="https://api.deepseek.com/v1",
temperature=0,
)
2. 创建一个最简单的智能体:暂时不接任何工具
agent = create_agent(llm, tools=[])
3. 和智能体对话
response = agent.invoke({
"messages": [
{"role": "user", "content": "你好,请用一句话介绍什么是智能体?"}
]
})
4. 打印最后一条 AI 回复
print(response["messages"][-1].content)
运行命令:
python hello_agent.py
如果能正常输出一段介绍智能体的文字,说明你的环境已经打通。这里有几个关键点需要理解:
ChatOpenAI负责连接大模型,把api_key和base_url换成你自己的即可。create_agent(llm, tools=[])创建了一个智能体,目前工具列表为空,所以它只能回答问题,不能执行动作。messages是对话历史,格式为“角色 + 内容”。用户消息的role是user,模型回复的role会是assistant。
跑通这一步后,下一节我们给智能体装上真正的工具。
六、实战:编写自己的第一个 MCP 服务器
为了让智能体拥有“查天气”“算加减乘除”的能力,我们先写一个本地 MCP 服务器。这里使用 MCP 官方 SDK 中的 FastMCP 框架,它可以用最少的代码把普通函数暴露成工具。
新建文件 math_server.py,写入以下内容:
from mcp.server.fastmcp import FastMCP
创建 MCP 服务器,命名为 Math
mcp = FastMCP("Math")
@mcp.tool()
def add(a: int, b: int) -> int:
"""计算两个整数之和。"""
return a + b
@mcp.tool()
def multiply(a: int, b: int) -> int:
"""计算两个整数的乘积。"""
return a * b
@mcp.tool()
def get_weather(city: str) -> str:
"""查询某个城市的模拟天气。"""
weather_data = {
"北京": "晴,25度",
"上海": "多云,28度",
"深圳": "小雨,26度",
}
return weather_data.get(city, "暂时没有该城市的天气数据")
if name == "main":
# 以 stdio 传输方式启动 MCP 服务器
mcp.run()
代码说明:
FastMCP("Math")创建了一个 MCP 服务器实例。@mcp.tool()装饰器会把函数注册为服务器上的一个工具。- 函数的文档字符串(
"""计算两个整数之和。"""等)非常重要,它是给大模型看的“工具说明书”。说明书写得越清楚,模型调用越准确。 mcp.run()启动服务器,默认通过 stdio 与外部通信。
单独运行这个文件时,服务器会进入等待状态,不会直接打印结果,这是正常现象。真正调用它的是下一节的 LangChain 客户端。
七、实战:让 LangChain 通过 MCP 调用工具
现在我们把 LangChain 智能体和刚刚写好的 MCP 服务器连接起来,让模型自己决定何时调用工具。
新建文件 main.py,写入以下内容:
import asyncio
from langchain_openai import ChatOpenAI
from langchain.agents import create_agent
from langchain_mcp_adapters.client import MultiServerMCPClient
llm = ChatOpenAI(
model="deepseek-chat",
api_key="sk-你的APIKey",
base_url="https://api.deepseek.com/v1",
temperature=0,
)
async def main():
# 1. 通过 MCP 客户端连接本地的 math_server.py
async with MultiServerMCPClient({
"math": {
"command": "python",
"args": ["math_server.py"],
"transport": "stdio",
}
}) as client:
# 2. 把 MCP 服务器上的工具全部加载出来
tools = client.get_tools()
print("已加载工具:", [tool.name for tool in tools])
# 3. 创建带工具的智能体
agent = create_agent(llm, tools)
# 4. 让智能体自己判断并调用工具
question = "请帮我计算:12 加 34,再乘以 2,结果是多少?另外查一下北京的天气。"
response = await agent.ainvoke({
"messages": [{"role": "user", "content": question}]
})
5. 输出最终答案
print("AI 回答:", response["messages"][-1].content)
if name == "main":
asyncio.run(main())
运行命令:
python main.py
如果一切正常,终端会先打印出已加载的工具名称,例如 add、multiply、get_weather,随后模型会自动完成计算和天气查询,并给出最终答案。
这段代码背后的执行流程是这样的:
MultiServerMCPClient启动math_server.py,建立 MCP 连接。get_tools()把服务器上的add、multiply、get_weather转成 LangChain 可识别的工具对象。- 用户提出问题后,大模型判断需要先调用
add(12, 34),得到 46;再调用multiply(46, 2),得到 92;最后调用get_weather("北京")。 - 所有工具结果汇总回大模型,模型生成一句包含最终答案的自然语言回复。
整个过程你只写了工具函数和连接代码,调度、传参、整合答案全部由框架和模型自动完成。这就是 MCP 带来的效率提升。
八、完整案例:打造一个会算数、会查天气的 AI 小助手
把前面两节的代码合在一起,你就拥有了一个可以持续对话的小助手。为了让体验更好,我们再加一个循环,让用户可以连续提问,输入 exit 退出。
新建文件 assistant.py,写入以下内容:
import asyncio
from langchain_openai import ChatOpenAI
from langchain.agents import create_agent
from langchain_mcp_adapters.client import MultiServerMCPClient
llm = ChatOpenAI(
model="deepseek-chat",
api_key="sk-你的APIKey",
base_url="https://api.deepseek.com/v1",
temperature=0,
)
async def run_assistant(client):
# 加载 MCP 工具并创建智能体
tools = client.get_tools()
agent = create_agent(llm, tools)
# 维护对话历史,让模型记住上下文
messages = []
print("AI 小助手已上线,输入 exit 退出。")
while True:
question = input("你:")
if question.strip().lower() == "exit":
print("再见!")
break
messages.append({"role": "user", "content": question})
response = await agent.ainvoke({"messages": messages})
answer = response["messages"][-1].content
messages.append({"role": "assistant", "content": answer})
print("AI:", answer)
async def main():
async with MultiServerMCPClient({
"math": {
"command": "python",
"args": ["math_server.py"],
"transport": "stdio",
}
}) as client:
await run_assistant(client)
if name == "main":
asyncio.run(main())
运行后,你可以连续输入类似下面的问题:
- “3 乘以 7 等于多少?”
- “帮我查下上海的天气。”
- “把 100 先除以 4,再减去 5,结果是多少?”
- “北京和深圳今天哪个城市更适合出去玩?”
前三个问题会触发不同的工具调用,最后一个问题需要模型结合天气结果进行推理。到这一步,你已经完成了一个真正意义上的“工具增强型智能体”。
九、常见报错与排查思路
新手在跑这套代码时,最容易遇到下面几类问题,逐一对照排查即可:
- ModuleNotFoundError: No module named 'mcp':说明 MCP SDK 没装好,重新执行
pip install mcp。 - 401 或鉴权失败:API Key 写错、Key 失效,或者
base_url和model不匹配。检查平台控制台里的 Key 和模型名称。 - 连接超时:网络无法访问模型服务地址,确认 API 地址可达,必要时使用国内模型接口。
- MCP 服务器启动失败:检查
math_server.py是否在当前目录下,以及args里的文件名是否拼写正确。Windows 用户可以尝试把python改成py。 - 工具没有被调用:优先检查工具函数的文档字符串是否清晰。模型是靠描述来判断工具用途的,描述含糊会导致调用失败。
- Windows 下 asyncio 报错:确认异步入口写在
if __name__ == "__main__"里,并使用asyncio.run(main())启动。
十、进阶路线:接下来该学什么
跑通上面的项目后,你已经掌握了智能体开发最核心的链路。下一步可以沿着以下方向深入:
- 学习 LangGraph:当任务需要多步骤、多分支、循环和状态管理时,用 LangGraph 构建有状态的工作流会更清晰、更可控。
- 学习 MCP 的 Resource 和 Prompt:除了 Tool,MCP 还支持把文件内容当作资源读取,以及复用提示模板,适合复杂业务场景。
- 使用社区现成的 MCP 服务器:GitHub 已经有大量开箱即用的 MCP 服务器,比如文件系统、浏览器、数据库操作等,可以直接接入自己的智能体。
- 尝试 HTTP/SSE 传输:stdio 适合本地单个进程,上线部署时通常改用 HTTP 或 SSE,让 MCP 服务器独立运行、多客户端共享。
- 关注安全边界:智能体一旦拥有真实工具,就要注意权限控制、输入校验和人工确认机制,避免误操作造成损失。
总结
本文从完全零基础出发,带你完成了 LangChain + MCP 智能体开发的完整闭环:理解了大模型、智能体和工具的关系,弄懂了 MCP 为什么能统一工具接入,亲手编写了一个 MCP 服务器,并用 LangChain 让智能体自动调用工具完成任务。
学习智能体开发,最忌讳只看不练。建议你现在就打开编辑器,把 hello_agent.py、math_server.py、assistant.py 三个文件完整敲一遍,跑通后再尝试给 math_server.py 增加一个减法工具或者自己的自定义工具。走完这一步,你已经超过了大部分只看教程不写代码的人,真正开始走上智能体开发的正轨。
更多推荐

所有评论(0)