LangChain 调用大模型:从入门到实战
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
前面我们分别用 ChatOpenAI、ChatTongyi、ChatOllama 等类来初始化不同厂商的模型。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_tokens、request_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 模型初始化常用核心参数
无论是使用 ChatOpenAI、ChatTongyi 还是 init_chat_model,初始化时都会用到一组通用核心参数。掌握它们能帮你更好地控制模型行为:
| 参数 | 作用 | 示例值 |
|---|---|---|
model | 指定使用的模型名称 | "gpt-4o"、"qwen-plus" |
temperature | 控制输出随机性,值越低越确定 | 0.0 ~ 1.0 |
max_tokens | 限制单次生成的最大 token 数 | 200、500 |
top_p | 核采样参数,与 temperature 二选一 | 0.9 |
request_timeout | 请求超时时间(秒) | 30 |
max_retries | 失败自动重试次数 | 2 |
api_key | 显式指定 API Key(不推荐硬编码) | "sk-xxx" |
base_url | 自定义接口地址,用于代理或本地服务 | "http://localhost:11434" |
1. 控制生成质量
temperature 和 top_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 等高级特性了。
更多推荐
所有评论(0)