无论你想学什么技术,先知道它“是什么”,再亲手“搭一个最小示例”跑起来,是最快消除陌生感的方法。

欢迎来到《Langchain开发agent》系列第一课!这一课,我们先来搞懂 LangChain 是什么,然后用最少的代码,亲手搭一个能调用工具的 Agent,并以此展开说明它到底为 Agent 开发提供了哪些基础能力。

目录

一、LangChain 是什么?为什么要学它?

二、环境准备(5分钟)

三、让你的第一行 Agent 代码跑起来

四、亲手写一个带多工具的智能体

五、通过上面的例子,看 LangChain 提供了哪些基础功能

1. 统一模型接口

2. 工具抽象与标准化封装

3. Agent 执行循环

4. 消息管理(你目前还没用到的能力,但非常重要)

六、LangChain 的生态全景:你未来的学习地图

七、一些必须知道的注意事项

⚠️ 版本选择

⚠️ 工具描述的清晰度

⚠️ 模型必须支持“工具调用”

⚠️ 执行环境的安全性

八、课后实践(给想深挖的你)

小结


一、LangChain 是什么?为什么要学它?

LangChain 是一个用于构建 大语言模型驱动应用 的开源框架(支持 Python / JavaScript)。它并不自己开发语言模型,而是提供一套标准化、模块化的工具和接口,帮助你把大模型的能力与外部世界连接起来,从而实现比单纯聊天问答复杂得多的智能应用。

一个Agent 架构师 的核心任务是:设计能够感知、规划、记忆、行动、协作的智能体系统。LangChain 就是做这件事最核心的框架之一,它让你不必每次都从零开始造轮子。

LangChain 的本质,是把大语言模型从“只会聊天的文本生成器”变成一个“能调用工具、能记住对话、能规划任务的智能中枢”

从架构上看,LangChain 大致包含六类核心模块:

  • LLMs / Chat Models:为各种大模型(OpenAI、DeepSeek、本地 Ollama 等)提供统一的调用接口,换模型就像换插件。

  • Prompts:动态构建和管理给模型的提示词,支持模板化和少量示例学习。

  • Chains:把多个 LLM 调用或多个组件串联成一个连贯的处理流程——这也是它名字中“Chain”的由来。

  • Data Connection / Retrievers:负责加载、转换、存储和检索外部数据,是实现 RAG(检索增强生成)的基石。

  • Agents / Tools:用 LLM 做决策中枢,自主判断何时调用什么工具(如搜索引擎、计算器、API),这是 Agent 架构 的核心能力模块。

  • Memory:在多轮对话或多次调用之间持久化状态,让 Agent 能“记住”之前说过的内容。

2025 年 10 月,LangChain 发布了 1.0 版本,最大的变化是把原先各自为政的 Chain 和 Agent 统一整合到了基于 LangGraph 的执行模型上,支持流程图式编排、并行执行和条件判断。后面我们有专门的一课来讲 LangGraph。

二、环境准备(5分钟)

先安装必要的依赖:

# 创建虚拟环境(推荐)
python -m venv langchain_env
# 激活虚拟环境(Windows)
langchain_env\Scripts\activate
# 激活虚拟环境(Mac / Linux)
source langchain_env/bin/activate

# 安装核心依赖
pip install langchain langchain-openai python-dotenv

如果你没有 OpenAI API Key,可以使用国内的 DeepSeek 或其他兼容 OpenAI 接口的服务,只需替换 base_url 即可。下面代码中会展示这种方式。

三、让你的第一行 Agent 代码跑起来

我们从一个最经典的场景开始——让 Agent 调用天气查询工具

LLM 的训练数据有“截止时间”。比如 GPT-4 的知识停留在 2023 年,它不知道今天北京的天气,更无法实时帮你查航班价格或发送邮件。如果不给它工具,它只能给你一个“抱歉,我无法获取实时天气”的回复,或者凭空编造一个明显不靠谱的答案。工具调用就是 Agent 突破知识边界的关键能力

# weather_agent.py
import os
from dotenv import load_dotenv
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI

# 加载环境变量(API Key)
load_dotenv()

# === 定义工具 ===
def get_weather(city: str) -> str:
    """获取指定城市的天气信息。输入参数为城市名称,返回天气描述。"""
    # 这里是模拟数据,你可以替换成真实的天气 API 调用
    weather_data = {
        "北京": "晴,24°C,湿度45%,空气质量良好",
        "上海": "多云转阴,26°C,可能有阵雨",
        "深圳": "雷阵雨,28°C,记得带伞",
        "杭州": "小雨,22°C,体感舒适",
    }
    return weather_data.get(city, f"抱歉,暂时没有 {city} 的天气数据")

# === 初始化模型 ===
# 使用 OpenAI(需在 .env 中配置 OPENAI_API_KEY)
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

# 如果想用国产大模型,把上面这行换成下面这几行(取消注释,并注释上面的 OpenAI 配置):
# llm = ChatOpenAI(
#     base_url="https://api.siliconflow.cn/v1",
#     api_key=os.getenv("SILICONFLOW_API_KEY"),
#     model="deepseek-ai/DeepSeek-V3.2-Exp",
#     temperature=0,
# )

# === 创建 Agent ===
agent = create_agent(
    model=llm,
    tools=[get_weather],           # 传入工具列表,这里只给了天气查询这一个工具
    system_prompt="你是一个智能天气助手,帮助用户查询天气信息。",
)

# === 运行 Agent ===
response = agent.invoke(
    {"messages": [{"role": "user", "content": "帮我查一下北京现在的天气怎么样"}]}
)

# 打印完整的响应
print(response)

执行这段代码,你会得到一个包含四个阶段的消息序列的响应:

  1. HumanMessage:用户提出问题“帮我查一下北京现在的天气怎么样”

  2. AIMessage(带 tool_call):模型决定调用 get_weather 工具,参数 {"city": "北京"}

  3. ToolMessage:工具执行并返回结果

  4. AIMessage:模型根据工具返回的结果,生成最终的自然语言回答

这时候,你已经成功构建了一个能够自主判断何时调用外部工具的 Agent。

四、亲手写一个带多工具的智能体

上面的 Agent 只挂了一个天气工具,看起来还很简单。实际业务中,一个 Agent 往往需要同时具备多种能力。我们加一个简单的计算器工具,让 Agent 能同时处理“天气查询”和“数学计算”两类任务。

# multi_tool_agent.py
import os
from dotenv import load_dotenv
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI

load_dotenv()

# === 工具 1:天气查询 ===
def get_weather(city: str) -> str:
    """获取指定城市的天气信息。输入参数为城市名称,返回天气描述。"""
    weather_data = {
        "北京": "晴,24°C,湿度45%,空气质量良好",
        "上海": "多云转阴,26°C,可能有阵雨",
        "深圳": "雷阵雨,28°C,记得带伞",
    }
    return weather_data.get(city, f"抱歉,暂时没有 {city} 的天气数据")

# === 工具 2:计算器 ===
def calculator(expression: str) -> float:
    """计算数学表达式的结果。输入应为合法的数学表达式(如 '3 + 5 * 2'),返回计算结果。"""
    try:
        # 注意:eval 在生产环境中需要谨慎使用,此处仅作演示
        return eval(expression)
    except Exception as e:
        return f"计算错误: {str(e)}"

# === 初始化模型 ===
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

# === 创建带有多工具的 Agent ===
agent = create_agent(
    model=llm,
    tools=[get_weather, calculator],   # 这里同时传入了两个工具
    system_prompt="""你是一个智能助手,可以查询天气和进行数学计算。
    对于天气查询,调用 get_weather 工具。
    对于数学计算,调用 calculator 工具。
    """,
)

# === 测试 1:查询天气 ===
print("=" * 40)
print("测试 1:查询天气")
weather_response = agent.invoke(
    {"messages": [{"role": "user", "content": "深圳今天天气怎么样?"}]}
)
print(weather_response)

# === 测试 2:数学计算 ===
print("\n" + "=" * 40)
print("测试 2:数学计算")
calc_response = agent.invoke(
    {"messages": [{"role": "user", "content": "帮我计算 (123 + 456) * 2 的结果"}]}
)
print(calc_response)

# === 测试 3:混合任务 ===
print("\n" + "=" * 40)
print("测试 3:混合任务")
mixed_response = agent.invoke(
    {"messages": [{"role": "user", "content": "北京天气怎么样?还有,89 + 34 等于多少?"}]}
)
print(mixed_response)

在这个例子中,大模型会自主决策:先识别用户问的是天气还是数学问题,然后选择调用对应的工具。调用完工具后,它会根据工具返回的结果组织成自然语言的回答。你可以观察“测试 3”的输出——当用户同时问了两个问题时,模型会在一次思考过程中连续调用多个工具,然后统一回复。

五、通过上面的例子,看 LangChain 提供了哪些基础功能

现在我们把上面的代码拆开,看看 LangChain 在背后悄悄替你做了哪些事:

1. 统一模型接口

Agent 开发并不一定非要用 OpenAI 的模型。你可以用任何支持工具调用(function calling / tool calling)的大模型:DeepSeek、Claude、Llama、Qwen 等。LangChain 提供了一个 统一的 ChatOpenAI 接口,把不同厂商的模型调用方式封装成一致的格式。你只需要修改 model 参数和 base_url,代码的其他部分——包括 Agent 的逻辑和工具调用——完全不需要改动。这是 LangChain 最基础也是最实用的能力之一。

2. 工具抽象与标准化封装

create_agent 接收到 tools=[get_weather, calculator] 这个列表后,LangChain 会自动完成以下工作:

  • 提取 Python 函数的名称参数签名 和 docstring(注释),将它们转换成大模型能够理解和识别的 JSON Schema

  • 将这个 Schema 作为系统消息的一部分,悄悄地拼接发送给大模型

  • 当模型返回“我要调用 get_weather 工具,参数是 {"city": "深圳"}”这样的指令时,LangChain 自动找到对应的 Python 函数并执行它

换句话说,你只需要写普通的 Python 函数,LangChain 包揽了模型和函数之间的协议转换

3. Agent 执行循环

agent.invoke() 并不是简单地把用户问题扔给模型就结束了。LangChain 内部实现了一个 Agent 执行循环,大致流程如下:

  1. 用户输入 → 拼接成完整的消息结构(包含 system_prompt、工具定义、对话历史)

  2. 调用大模型,模型返回“决定调用某个工具 + 工具参数”

  3. 解析工具调用指令 → 自动执行对应的工具函数 → 获取工具返回结果

  4. 把工具执行结果加入消息链,再次调用大模型

  5. 模型根据工具返回结果生成最终回答

如果你观察上面的输出,会发现整个过程有 两轮 LLM 调用:第一轮模型说“我需要查天气”,第二轮模型说“天气查到了,这就是答案”。LangChain 把这套完整的“感知-决策-执行”闭环封装成了一个极其简单的 invoke 方法。

<1.0 与 ≥1.0 版本差异提示:在早期的 LangChain 中,构造 Agent 的代码会比较冗长,并且需要显式构造 Agent Executor。在 LangChain ≥1.0 中,create_agent 已经把这些复杂度全部封装了,它不仅可以直接运行,还在底层集成了 LangGraph,用图(Graph)结构来编排 Agent 的执行流程,支持更复杂的条件判断和分支控制。

4. 消息管理(你目前还没用到的能力,但非常重要)

LangChain 的 Memory 组件解决了 Agent 的“断片”问题。如果 Agent 没有记忆,你问完“今天天气怎么样”之后,再问“那明天呢”,它根本不知道“那”指的是什么。LangChain 内置了多种记忆策略:

  • ConversationBufferMemory:把完整对话历史一股脑塞给模型(简单,但会越聊越贵)

  • ConversationSummaryMemory:把历史对话压缩成摘要再传给模型(省钱,但会丢失细节)

  • VectorStoreRetrieverMemory:把长期记忆存进向量数据库,需要时智能检索(跨会话记忆)

这些能力我们在后面的课程中会专门做一节来实践。

六、LangChain 的生态全景:未来的学习地图

现在我们对 LangChain 有了直观的认识,可以看看它在整个生态中的位置:

  • LangChain Core:今天我们用的 create_agentChatOpenAI、Tool 抽象,都属于核心层

  • LangGraph:专门做 有状态的图式工作流编排。如果 Agent 的逻辑不再是简单的“调用工具→返回结果”,而是需要循环、条件分支、状态持久化、多 Agent 协作,LangGraph 就是解决方案

  • LangSmith:LangChain 提供的调试和监控平台,可以查看 Agent 每一步的决策过程、追踪 token 消耗、调试工具调用失败的原因

  • LangServe:用一行命令把 Agent 部署成 REST API 服务

用一张图来总结它们的关系:

七、一些必须知道的注意事项

⚠️ 版本选择

LangChain 在 1.0 版本 前后发生了很大的 API 变化。网络上很多教程依然在使用 initialize_agentAgentExecutorLLMChain 这些旧 API,它们在新版本中已经不推荐使用,甚至被移到了 langchain-classic 包里。建议直接学习 ≥1.0 版本中推荐的 create_agent 和 LangGraph 方案。

⚠️ 工具描述的清晰度

上面代码中,我们用了 def get_weather(city: str) -> str: 加上 docstring。你写函数的注释(docstring)越清晰,大模型就越不会用错参数。如果 docstring 写得模糊,模型可能会把 "北京" 传给一个本该接收邮编的参数。

⚠️ 模型必须支持“工具调用”

不是所有模型都能做 Agent。只有那些在训练或微调阶段专门加入了 function calling / tool calling 能力的模型才行。gpt-4o-minigpt-4odeepseek-chatclaude-3-sonnet 等常见模型都支持。如果你看到模型报错 tool_calls 相关的内容,先检查一下模型是否支持工具调用。在硅基流动等平台上,模型的详情页通常会标注是否具备工具调用能力。

⚠️ 执行环境的安全性

上面的计算器用了 eval(),这在生产环境中是非常危险的——恶意用户可能通过构造表达式来执行系统命令。LangChain 提供了更安全的替代方案,比如 PythonREPLTool 会在独立的沙箱环境中执行代码。我们在后续课程中会专门讲到如何保障 Agent 的执行安全。

八、课后实践

课程结束之后,如果还想继续,推荐做这几个小练习:

  1. 增加更多工具:写一个 search_web(query) 工具(可以用 requests + 搜索引擎 API),创建一个带“搜索+天气+计算器”三合一的 Agent

  2. 换模型试一次:把模型从 gpt-4o-mini 换成本地运行的 Ollama(ollama run llama3),看看 Agent 的行为有什么变化

  3. 调试工具调用:把 create_agent 的参数中加上 debug=True(新版本可能是通过 langsmith 配置),观察模型每一步的思考过程

  4. GitHub 学习资料推荐:在 GitHub 上有一个非常系统的免费课程资料 LangChain Academyhttps://github.com/langchain-ai/langchain-academy),包含了从基础概念到高级 Agent 构建的完整教程。此外,还可以看 LangChain Official Cookbookhttps://github.com/langchain-ai/langchain/tree/master/cookbook),里面有大量官方示例代码,都是 1.0 版本的写法,非常适合配合这一课来动手练习。

小结

这一课,我们做了三件事:

  • 理解了 LangChain 是什么——它是连接大语言模型与现实世界的“中间层”框架,提供了模型接口、工具抽象、记忆管理、链式编排等核心能力

  • 用最少的代码跑通了第一个 Agent——它能调用工具、自主决策,总共不到 30 行 Python 代码

  • 看到了 LangChain 与 Agent 开发的关系——LangChain 的 create_agent 只是入口,背后还有 LangGraph(流程编排)、LangSmith(调试)、LangServe(部署)组成的完整生态

下一课我们会进入 Memory:深入理解记忆系统是什么、如何分层,然后用 LangChain 实际动手,从最简单的缓冲记忆到跨会话的持久化存储,最后通过一个完整的 Agent Demo 把所有东西串联起来。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐