1. 引言

大语言模型(LLM)正在重塑应用开发的方式,而 LangChain 作为最流行的 LLM 应用开发框架之一,为开发者提供了统一、简洁的接口来调用各类大模型。无论你是想快速接入 OpenAI、通义千问、文心一言,还是本地部署的开源模型,LangChain 都能帮你用一套代码搞定。

本文将带你从零开始,掌握 LangChain 调用大模型的核心方法,包括基础调用、对话模型、流式输出、多模型切换等实战技巧。

2. 环境准备

在开始之前,请确保你的开发环境满足以下要求:

  • Python 3.8 及以上版本
  • 安装 LangChain 核心库
pip install langchain langchain-openai

如果你使用的是 OpenAI 模型,还需要安装:

pip install openai

2.1 配置 API Key

调用大模型需要 API Key。推荐使用环境变量管理密钥,避免硬编码到代码中:

export OPENAI_API_KEY="sk-你的密钥"

3. 基础调用:LLM 模型

LangChain 中最基础的模型接口是 LLM,它接收字符串输入并返回字符串输出。以 OpenAI 为例:

from langchain_openai import OpenAI

# 初始化模型
llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0.7)

# 直接调用
response = llm.invoke("用一句话介绍 LangChain")
print(response)

3.1 批量调用

LangChain 支持一次传入多个提示词:

responses = llm.batch([
    "什么是大语言模型?",
    "LangChain 有哪些核心组件?"
])
for r in responses:
    print(r)

4. 对话模型:Chat Models

对话模型(Chat Models)是当前最常用的模型类型,它接收消息列表并返回消息对象,更适合构建聊天机器人等交互式应用。

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage

# 初始化对话模型
chat = ChatOpenAI(model="gpt-4o", temperature=0.7)

# 构造消息
messages = [
    SystemMessage(content="你是一位资深的 Python 技术专家。"),
    HumanMessage(content="请解释一下 Python 的装饰器是什么?")
]

# 调用模型
response = chat.invoke(messages)
print(response.content)

4.1 多轮对话

对话模型天然支持多轮对话,只需将历史消息一并传入:

from langchain_core.messages import AIMessage

messages = [
    SystemMessage(content="你是一位乐于助人的助手。"),
    HumanMessage(content="1 + 1 等于几?"),
    AIMessage(content="1 + 1 等于 2。"),
    HumanMessage(content="那 2 + 2 呢?")
]

response = chat.invoke(messages)
print(response.content)  # 输出:2 + 2 等于 4。

5. 流式输出

对于长文本生成场景,流式输出能显著提升用户体验。LangChain 通过 stream 方法实现:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

chat = ChatOpenAI(model="gpt-4o", temperature=0.7)

messages = [HumanMessage(content="写一篇 200 字的短文,介绍人工智能的发展历程。")]

# 流式输出
for chunk in chat.stream(messages):
    print(chunk.content, end="", flush=True)

6. 统一初始化:init_chat_model

前面我们分别用 ChatOpenAIChatTongyiChatOllama 等类来初始化不同厂商的模型。LangChain 还提供了一个更简洁的统一入口——init_chat_model,它可以根据模型名称自动识别厂商并完成初始化,让代码更加通用。

6.1 基本用法

from langchain.chat_models import init_chat_model

# 根据模型名自动识别厂商
chat = init_chat_model("gpt-4o", model_provider="openai", temperature=0.7)

response = chat.invoke("你好,介绍一下你自己。")
print(response.content)

6.2 自动识别模型厂商

init_chat_model 支持通过模型名称自动推断厂商,无需显式指定 model_provider

from langchain.chat_models import init_chat_model

# 自动识别 OpenAI 模型
chat = init_chat_model("gpt-4o", temperature=0.7)

# 自动识别通义千问模型
chat_qwen = init_chat_model("qwen-plus", temperature=0.7)

# 自动识别 Ollama 本地模型
chat_ollama = init_chat_model("llama3", temperature=0.7)

6.3 统一切换模型

init_chat_model 最大的优势在于:切换模型时只需修改模型名称,业务代码完全不用改动:

from langchain.chat_models import init_chat_model

def create_chat(model: str):
    """根据模型名创建对话模型,支持跨厂商切换"""
    return init_chat_model(model, temperature=0.7)

# 切换不同厂商的模型
chat1 = create_chat("gpt-4o")        # OpenAI
chat2 = create_chat("qwen-plus")     # 通义千问
chat3 = create_chat("llama3")        # Ollama 本地模型

for chat in [chat1, chat2, chat3]:
    print(chat.invoke("你好!").content)

6.4 指定参数与配置

init_chat_model 同样支持传入各类模型参数,如 max_tokensrequest_timeout 等:

from langchain.chat_models import init_chat_model

chat = init_chat_model(
    "gpt-4o",
    model_provider="openai",
    temperature=0.5,
    max_tokens=500,
    request_timeout=30,
    max_retries=2
)

提示init_chat_model 需要安装对应的集成包。例如使用 OpenAI 模型需安装 langchain-openai,使用通义千问需安装 langchain-community,使用 Ollama 同样需要 langchain-community

6.5 模型初始化常用核心参数

无论是使用 ChatOpenAIChatTongyi 还是 init_chat_model,初始化时都会用到一组通用核心参数。掌握它们能帮你更好地控制模型行为:

参数作用示例值
model指定使用的模型名称"gpt-4o""qwen-plus"
temperature控制输出随机性,值越低越确定0.0 ~ 1.0
max_tokens限制单次生成的最大 token 数200500
top_p核采样参数,与 temperature 二选一0.9
request_timeout请求超时时间(秒)30
max_retries失败自动重试次数2
api_key显式指定 API Key(不推荐硬编码)"sk-xxx"
base_url自定义接口地址,用于代理或本地服务"http://localhost:11434"
1. 控制生成质量

temperaturetop_p 是影响输出风格的两个关键参数:

from langchain_openai import ChatOpenAI

# 代码生成:低随机性,输出更稳定
chat_code = ChatOpenAI(model="gpt-4o", temperature=0.1)

# 文案创作:高随机性,输出更有创意
chat_copy = ChatOpenAI(model="gpt-4o", temperature=0.9)
2. 控制输出长度与成本

max_tokens 既能限制回复长度,也能避免因超长输出产生过高费用:

chat = ChatOpenAI(model="gpt-4o", max_tokens=300)
3. 配置网络与重试

生产环境中建议显式设置超时和重试,避免因网络抖动导致调用失败:

chat = ChatOpenAI(
    model="gpt-4o",
    request_timeout=30,   # 30 秒超时
    max_retries=3         # 失败重试 3 次
)
4. 自定义接口地址

使用代理或本地部署模型时,通过 base_url 指定服务地址:

from langchain_community.chat_models import ChatOllama

chat = ChatOllama(
    model="llama3",
    base_url="http://localhost:11434",
    temperature=0.7
)

建议api_key 优先通过环境变量注入,避免硬编码到代码中造成密钥泄露。

6. 多模型切换

LangChain 的一大优势是模型无关性。切换模型只需更换初始化类,业务代码几乎不用改动。

6.1 使用通义千问

from langchain_community.chat_models import ChatTongyi

chat = ChatTongyi(model="qwen-plus", temperature=0.7)

response = chat.invoke([HumanMessage(content="你好,介绍一下你自己。")])
print(response.content)

6.2 使用本地 Ollama 模型

from langchain_community.chat_models import ChatOllama

chat = ChatOllama(model="llama3", base_url="http://localhost:11434")

response = chat.invoke([HumanMessage(content="你好!")])
print(response.content)

7. 实战:构建一个简单的问答助手

下面我们综合运用所学知识,构建一个带记忆的问答助手:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage, AIMessage

class SimpleAssistant:
    def __init__(self, model="gpt-4o"):
        self.chat = ChatOpenAI(model=model, temperature=0.7)
        self.messages = [
            SystemMessage(content="你是一位知识渊博的助手,请用简洁准确的语言回答问题。")
        ]
    
    def ask(self, question: str) -> str:
        # 添加用户消息
        self.messages.append(HumanMessage(content=question))
        
        # 调用模型
        response = self.chat.invoke(self.messages)
        
        # 保存助手回复到历史
        self.messages.append(AIMessage(content=response.content))
        
        return response.content

# 使用示例
assistant = SimpleAssistant()
print(assistant.ask("什么是 LangChain?"))
print(assistant.ask("它有哪些核心组件?"))

8. 常见问题与调优建议

8.1 控制输出长度

通过 max_tokens 参数限制生成长度:

chat = ChatOpenAI(model="gpt-4o", max_tokens=200)

8.2 调整随机性

  • temperature:值越低输出越确定,适合代码生成;值越高越有创造性,适合文案创作。
  • top_p:核采样参数,与 temperature 二选一调整即可。

8.3 处理超时与重试

chat = ChatOpenAI(
    model="gpt-4o",
    request_timeout=30,  # 请求超时时间(秒)
    max_retries=2        # 失败重试次数
)

9. 总结

本文介绍了 LangChain 调用大模型的核心方法:

  • LLM 模型:适合简单的文本补全任务
  • Chat Models:适合多轮对话和交互式应用
  • 流式输出:提升长文本生成体验
  • 多模型切换:一套代码接入不同厂商模型

LangChain 的价值在于抽象与统一,让你专注于业务逻辑,而不必关心底层模型的具体差异。掌握了这些基础调用方法,你就可以在此基础上进一步探索提示词工程、RAG、Agent 等高级特性了。

更多推荐