【LangChain 1.x】02、LangChain 1.x 快速上手

一、前言

2025年10月20日 LangChain v1.0 发布,标志着框架的成熟和标准化,为企业级AI应用提供了稳定基础。截止当前 LangChain 最新版本为 v1.2

本篇,先来做一个简单的快速上手案例:模型+系统提示词+模拟工具,完成 Python 环境搭建、项目初始化、模型秘钥配置、模型调用和响应分析,初步了解大模型

二、Python 环境准备

项目中使用的 Python 环境,一般会按项目构建独立的虚拟环境,推荐使用 anconda、miniconda、uv等管理工具,我们使用 miniconda

注:Anaconda、Miniconda、uv 等工具的详细使用说明会单拿出写,这里就不赘述了

LangChain 1.2 版本硬性要求 Python 版本为 3.10+ ,为保证版本兼容性与最新特性适配,使用 Python 3.13.11

当前使用设备为 macOS 系统,使用系统自带终端完成虚拟环境的创建与管理,完整实操命令如下:

1. 创建指定版本的 Python 虚拟环境

创建名为 langchain_v1.2 的虚拟环境,并绑定 Python 3.13.11 版本,隔离项目依赖,避免全局环境冲突:

bash 复制代码
# 创建python虚拟环境langchain_v1.2,指定python版本3.13.11
conda create --name langchain_v1.2 python=3.13.11

2. 查看本地所有Conda虚拟环境

执行命令校验环境是否创建成功,查看已存在的虚拟环境列表及路径:

bash 复制代码
# 查看conda可用python环境列表
conda env list

# 成功创建后终端输出结果:
langchain_v1.2 /Users/brave/miniconda3/envs/langchain_v1.2

3. 激活虚拟环境并验证版本

进入新建的专属开发环境,校验 Python 版本是否匹配预设版本:

bash 复制代码
# 激活环境、验证当前python环境版本
conda activate langchain_v1.2
python -V

激活成功后终端前缀会显示 (langchain_v1.2),版本校验输出结果:Python 3.13.11,代表环境搭建完成。

三、创建项目、安装依赖

完成虚拟环境搭建后,我们正式创建项目并安装 LangChain 1.x 开发所需的核心依赖,全程基于刚刚创建的 langchain_v1.2 专属虚拟环境运行。

1、创建 Python 项目

打开 PyCharm 开发工具,新建 Python 项目,项目名称命名为 LangChainProject ,项目创建时手动指定解释器为虚拟环境 langchain_v1.2,确保项目所有依赖、代码运行均隔离在专属环境中,无版本冲突问题。

2、安装必要依赖

打开项目终端,先确保处于目标虚拟环境,再执行批量依赖安装命令,本次使用清华镜像源加速下载,提升安装成功率与速度。

bash 复制代码
# 切换conda环境
conda activate langchain_v1.2

# 安装依赖
python -m pip install langchain==1.2.0 langchain-deepseek==1.0.1 dotenv==0.9.9 -i https://pypi.tuna.tsinghua.edu.cn/simple

依赖说明:

langchain==1.2.0:LangChain 1.x 核心框架包,提供框架基础编排、组件能力赖。

langchain-deepseek==1.0.1:DeepSeek模型适配依赖,适配 LangChain 1.x 新版本规范。

dotenv==0.9.9:环境变量加载工具,用于读取项目根目录.env 配置文件,实现模型密钥、接口地址等敏感信息的安全配置,规避硬编码风险。

四、创建模型环境配置

为了实现项目配置的多环境统一管理、敏感信息脱敏、代码解耦,通过配置文件+工具脚本的方式,统一封装大模型密钥、接口地址、模型实例,方便全局复用与后续迭代。

1、创建 .env 环境配置文件

在项目根目录下创建 .env 配置文件,用于存放大模型密钥、接口请求地址等核心配置,统一项目环境变量管理,避免密钥硬编码安全隐患。

文件写入内容如下:

ini 复制代码
# DeepSeek大模型配置
DEEPSEEK_API_KEY=sk-xxxx
DEEPSEEK_BASE_URL=https://api.deepseek.com

后续新增大模型、修改接口地址或更换密钥,均直接在该文件中修改,无需改动业务代码。

2、创建 env_utils.py 环境变量工具类

在项目根目录新建 env_utils.py 工具文件,通过 dotenv 工具统一加载并解析 .env 文件中的环境变量,全局提供可复用的配置参数,简化项目各处的配置调用逻辑。

完整代码如下:

python 复制代码
import os
from dotenv import load_dotenv

# override=True 确保本地.env文件配置优先覆盖系统环境变量
load_dotenv(override=True)

# 从环境变量读取DeepSeek模型配置
DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")
DEEPSEEK_BASE_URL = os.getenv("DEEPSEEK_BASE_URL")

3、创建 my_llm.py 模型实例文件

为统一管理项目内所有大模型实例,解耦模型初始化逻辑,在项目根目录新建 my_llm.py 文件,专门用于创建、封装各类大模型实例,本次优先初始化 DeepSeek 对话大模型。

完整代码如下:

python 复制代码
from langchain_deepseek import ChatDeepSeek
from env_utils import DEEPSEEK_API_KEY, DEEPSEEK_BASE_URL

# 初始化DeepSeek对话大模型实例
deepseek_llm = ChatDeepSeek(
    api_key=DEEPSEEK_API_KEY,
    api_base=DEEPSEEK_BASE_URL,
    model="deepseek-v4-flash",
)

后续项目中所有模型调用、链路编排、工具对话均统一复用该实例,保证模型参数统一、调用规范一致。

注意:deepseek-chat 与 deepseek-reasoner 两个模型名将于北京时间 2026/07/24 23:59 弃用。出于兼容考虑,二者分别对应 deepseek-v4-flash 的非思考与思考模式。

五、快速上手案例-Agent查询天气

创建quick_start.py,使用新版 LangChain 中的 create_agent 创建 Agent,该 Agent 可以调用查询天气工具 get_weather

1、案例代码

python 复制代码
from langchain.agents import create_agent
from langchain_core.tools import tool

from my_llm import deepseek_llm

@tool
def get_weather(location: str) -> str:
    """
    获取指定城市的天气信息
    """
    return f"{location} 天气晴朗!"

agent = create_agent(
    model=deepseek_llm,
    tools=[get_weather],
    system_prompt="你是一个天气助手,你可以帮助用户获取指定城市的天气信息。",
)

# 调用Agent
resp = agent.invoke({"messages": [{"role": "user", "content": "北京的天气"}]})
print(type(resp))
print(resp)

2、运行返回结果

执行代码后,程序会完整输出 Agent 整套链路消息记录,包含用户提问、模型工具调用决策、工具返回结果、模型最终回答,完整日志如下:

python 复制代码
<class 'dict'>

{
  'messages': [
    HumanMessage(
      content='北京的天气', 
      additional_kwargs={}, 
      response_metadata={}, 
      id='1abf6cae-913c-4a1b-a89a-04a87becb5ab'
    ), 

    AIMessage(
      content='我来帮你查询北京的天气信息。', 
      additional_kwargs={'refusal': None}, 
      response_metadata={'token_usage': {'completion_tokens': 51, 'prompt_tokens': 288, 'total_tokens': 339, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 256}, 'prompt_cache_hit_tokens': 256, 'prompt_cache_miss_tokens': 32}, 'model_provider': 'deepseek', 'model_name': 'deepseek-v4-flash', 'system_fingerprint': 'fp_8b330d02d0_prod0820_fp8_kvcache_20260402', 'id': '89b17908-086c-442f-8ac9-d083950173f9', 'finish_reason': 'tool_calls', 'logprobs': None}, 
      id='lc_run--019f3d63-f6de-7291-937d-33817ee924c4-0', 
      tool_calls=[{'name': 'get_weather', 'args': {'location': '北京'}, 'id': 'call_00_dKmhpF69HZKAULvGfCnU6185', 'type': 'tool_call'}], 
      invalid_tool_calls=[], 
      usage_metadata={'input_tokens': 288, 'output_tokens': 51, 'total_tokens': 339, 'input_token_details': {'cache_read': 256}, 'output_token_details': {}}
    ), 

    ToolMessage(
      content='北京 天气晴朗!', 
      name='get_weather', 
      id='51ffe9d9-56ff-4dcf-a468-191bf3aa027e', 
      tool_call_id='call_00_dKmhpF69HZKAULvGfCnU6185'
    ), 

    AIMessage(
      content='北京的天气情况如下:\n\n🌞 **北京天气:晴朗**\n\n天气不错,是个适合外出活动的好日子!如果你有出门的打算,记得做好防晒措施哦。还有其他城市需要查询吗?', 
      additional_kwargs={'refusal': None}, 
      response_metadata={'token_usage': {'completion_tokens': 41, 'prompt_tokens': 355, 'total_tokens': 396, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 256}, 'prompt_cache_hit_tokens': 256, 'prompt_cache_miss_tokens': 99}, 'model_provider': 'deepseek', 'model_name': 'deepseek-v4-flash', 'system_fingerprint': 'fp_8b330d02d0_prod0820_fp8_kvcache_20260402', 'id': 'c1c7e875-66ac-4712-9e7d-efb7a7587d2c', 'finish_reason': 'stop', 'logprobs': None}, 
      id='lc_run--019f3d63-faae-7071-b833-f7fb4aeff276-0', 
      tool_calls=[], 
      invalid_tool_calls=[], 
      usage_metadata={'input_tokens': 355, 'output_tokens': 41, 'total_tokens': 396, 'input_token_details': {'cache_read': 256}, 'output_token_details': {}})
  ]
}

调用agent.invoke返回类型为 dict

messages上下文中有4条,各自作用说明:

  1. HumanMessage:用户原始提问
  2. AIMessage:LLM 判断需要调用工具,输出工具调用指令,携带参数 {'location': '北京'}
  3. ToolMessage:执行自定义get_weather工具,返回工具原始结果 "北京 天气晴朗!"
  4. AIMessage:LLM 结合工具返回数据,整理成自然流畅的最终回答

Agent 具备完整工具调用闭环能力;单纯直接调用 LLM 只能输出工具调用格式,不会自动执行工具、也无法将工具结果整理输出。

六、总结

本篇,从头编写了 LangChain 1.x 快速上手案例,创建虚拟环境、项目搭建、依赖安装、模型配置封装,执行 Agent 调用工具,跑通了 LangChain 1.x 最简核心链路。

  • 通过 Miniconda 搭建了专属隔离的 Python 3.13.11 环境,适配 LangChain 1.2 版本运行要求;
  • 通过 .env + 工具类实现密钥与接口地址的安全解耦,规避了硬编码的安全风险;
  • 基于新版 create_agent 完成了自定义工具注册、智能决策、工具自动调用、结果润色的完整流程;

通过天气查询案例,明确了 大模型原生调用与 Agent 调用的核心差异:单纯模型只能生成工具调用格式,而 LangChain Agent 可以自主完成「意图识别→工具调用→结果汇总→应答输出」的全流程,这也是 LangChain 框架实现复杂智能应用的核心基础。

相关推荐
白白白飘2 小时前
【9】Langchain实战案例:构建一个聊天机器人
microsoft·langchain·机器人
白白白飘3 小时前
【8】补充与拓展:Langchain的联网搜索Agent,使用Tavily工具
服务器·网络·langchain
爱奥尼欧4 小时前
【LangChain】2.提示词工程
人工智能·microsoft·langchain
陳陈陳21 小时前
🤖 Agent开发完全指南:从LLM到智能体的蜕变之旅
langchain·llm·agent
倾颜1 天前
AI Mind 的多会话短期记忆容器:如何隔离多个聊天上下文
langchain·agent·next.js
倾颜1 天前
AI Mind 的单线程短期记忆设计:如何压缩、整理并控制当前会话上下文
前端·langchain·llm
小月土星1 天前
Agent 开发思考笔记:LLM + Memory + Tool + RAG + MCP + Skills
langchain·llm·agent
倾颜1 天前
Agent-as-Tool:从硬编码工作流到受控并行多Agent的一次实践
langchain·next.js
先吃饱再说1 天前
LangChain 到底帮你干了什么活?——Agent 开发框架完全解读
langchain·llm·agent