当前位置:首页>java>【每日案例】一行代码切换大模型?LangChain LCEL 实战入门

【每日案例】一行代码切换大模型?LangChain LCEL 实战入门

  • 2026-10-21 13:28:56
【每日案例】一行代码切换大模型?LangChain LCEL 实战入门

【每日案例】一行代码切换大模型?LangChain LCEL 实战入门

大家在开发 AI 应用时,是不是经常头疼这几个问题:

  1. 想对比 DeepSeek 和 通义千问 的效果,代码要改两遍?
  2. 搞不明白什么是 Chain,只知道复制粘贴?
  3. 代码写得很乱,Prompt、LLM、解析器全都搅在一起?

今天我们用一个最简案例,只看核心逻辑,帮你理清 LangChain 的 LCEL 链式调用,并实现模型随心切换。

01 核心思路

我们要做三件事:

  • 封装模型
    :用一个函数搞定 DeepSeek 和 Qwen 的切换。
  • 定义 Prompt
    :把提示词做成模板。
  • 串联 Chain
    :用 LangChain 最新的 | 语法把流程串起来。

先看效果,再拆解代码。

02 代码实战

第一步:环境准备与模型封装

首先加载环境变量,定义一个 get_llm 函数。

这里有个关键技巧:虽然我们调用的是 DeepSeek 和 Qwen,但都用的是 ChatOpenAI 这个类。因为 LangChain 做了标准化,只要接口兼容 OpenAI 格式,就可以无缝切换。

环境准备与模型封装Python

import osfrom dotenv import load_dotenvfrom langchain_openai import ChatOpenAIload_dotenv()# 定义一个函数来方便切换模型defget_llm(model_name="deepseek"):if model_name == "deepseek":return ChatOpenAI(            model = "deepseek-chat",            api_key = os.getenv("DEEPSEEK_API_KEY"),            base_url="https://api.deepseek.com/v1",            temperature= 0.7        )elif model_name == "qwen":return ChatOpenAI(            model = "qwen3-max-preview",            api_key = os.getenv("DASHSCOPE_API_KEY"),            base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",            temperature= 0.7        )

💡划重点

不同厂商的核心区别在于 base_url 和 api_key,封装后,业务代码就不需要关心底层是谁了。

第二步:构建 Prompt 和 Chain

这里是 LangChain 的精华所在。

我们使用 ChatPromptTemplate 定义模板,然后使用 LCEL (LangChain Expression Language) 语法——也就是那个竖线 |,把组件像管道一样连起来。

构建 Prompt 和 ChainPython

from langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParser# 1. 定义模板prompt = ChatPromptTemplate([    ("system","你是一个{role}"),    ("user","{input}"),])# 2. 初始化模型(这里随意切换 "deepseek" 或 "qwen")llm = get_llm("qwen")# 3. 构建 Chain:提示词 | 模型 | 解析器chain = prompt | llm | StrOutputParser()

这个 | 符号的意思是:把左边的输出,作为右边的输入。

数据流向如下:

Prompt模板 → 填入变量 → 发给LLM → 解析成字符串

第三步:运行测试

最后,直接 invoke 调用,传入一个字典,字典的 key 要和 Prompt 模板里的 {role} 和 {input} 对应。

运行测试Python

print("--- 测试 Chain ---")response = chain.invoke({"role": "专业翻译","input":"LangChain is a framework for developing applications powered by large language models."})print("--- 输出结果 ---")print("翻译结果:", response)

运行结果

翻译结果: LangChain 是一个用于开发由大型语言模型驱动的应用程序的框架。

03 总结一下

今天的代码虽然短,但包含了三个最核心的 LangChain 概念:

  1. 统一接口
    :用 ChatOpenAI 兼容不同模型,方便切换和测试。
  2. Prompt 模板化
    :不要硬编码提示词,用 ChatPromptTemplate 管理动态变量。
  3. LCEL 链式调用
    :使用 | 符号串联逻辑,代码可读性极强,这也是目前 LangChain 推荐的主流写法。

动手试试

你可以试着把 get_llm("qwen") 改成 get_llm("deepseek"),看看结果有什么不同?

最新文章

随机文章