跳到主要内容

大模型接口

LangChain 提供统一的模型调用接口,支持 20+ 厂商的大模型。

3.1 LLM vs ChatModel

LangChain 区分两种模型类型:

类型说明适用场景
LLM传统文本→文本输出简单文本生成
ChatModel基于消息的对话模型聊天机器人、多轮对话

推荐:优先使用 ChatModel,它是 LangChain 1.0 的主流接口。

3.2 ChatOpenAI 快速入门

from langchain_openai import ChatOpenAI

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

# 调用
response = model.invoke("你好,请介绍一下自己")
print(response.content)

常用参数配置

model = ChatOpenAI(
model="gpt-4o", # 模型名称
temperature=0.7, # 随机性:0-2,越高越随机
max_tokens=1000, # 最大输出 token 数
timeout=30, # 超时时间(秒)
base_url="https://api.openai.com/v1", # 自定义 API 地址
api_key="sk-xxx" # API 密钥
)

3.3 init_chat_model 统一初始化

LangChain 1.0 提供 init_chat_model() 函数,一个接口适配 20+ 厂商模型。

from langchain.chat_models import init_chat_model

# 初始化 DeepSeek 模型
model = init_chat_model(
model="deepseek-chat",
model_provider="deepseek",
api_key="sk-xxx"
)

# 一行代码切换厂商,业务代码无需改动
# model = init_chat_model("gpt-4o", model_provider="openai")
# model = init_chat_model("claude-3-5-sonnet", model_provider="anthropic")

response = model.invoke("你好")
print(response.content)

主流厂商对应表

model_provider模型示例
openaigpt-4o, gpt-4o-minilangchain-openai
anthropicclaude-3-5-sonnetlangchain-anthropic
deepseekdeepseek-chatlangchain-deepseek
googlegemini-2.0-flashlangchain-google
ollamallama3, qwenlangchain-ollama

3.4 调用方式

# 同步调用
result = model.invoke("你的问题")

# 流式调用(实时看到输出)
for chunk in model.stream("你的问题"):
print(chunk.content, end="", flush=True)

# 批量调用(多条独立请求)
results = model.batch(["问题1", "问题2", "问题3"])

3.5 环境变量配置

推荐使用环境变量,避免代码中硬编码密钥:

export OPENAI_API_KEY="sk-xxx"
export DEEPSEEK_API_KEY="sk-xxx"
export ANTHROPIC_API_KEY="sk-ant-xxx"
# 环境变量配置后,无需传入 api_key
model = ChatOpenAI(model="gpt-4o-mini")
model = init_chat_model(model="deepseek-chat", model_provider="deepseek")

3.6 速率限制器 RateLimit

使用 langchain_core.rate_limiters 控制 API 调用频率,避免触发限流。

from langchain_core.rate_limiters import InMemoryRateLimiter

# 创建速率限制器:每秒最多 10 次调用
rate_limiter = InMemoryRateLimiter(
requests_per_second=10,
check_every_n_seconds=0.1,
max_bucket_size=10
)

# 绑定到模型
model = ChatOpenAI(
model="gpt-4o-mini",
rate_limiter=rate_limiter
)

3.7 重试机制 with_retry()

自动重试失败的请求,适合网络不稳定场景。

from langchain_openai import ChatOpenAI

# 基础重试(默认 3 次)
model = ChatOpenAI(model="gpt-4o-mini")
model = model.with_retry()

# 自定义重试次数
model = model.with_retry(max_retries=5)

# 触发重试的场景:
# - 网络超时
# - 503/502 错误
# - RateLimit 限流

3.8 嵌入模型 init_embeddings()

用于将文本转换为向量,常见于相似度搜索、RAG 应用。

from langchain_openai import OpenAIEmbeddings
from langchain.chat_models import init_embeddings

# 方式一:直接使用
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# 方式二:统一初始化
embeddings = init_embeddings(
model="text-embedding-3-small",
model_provider="openai"
)

# 将文本转为向量
text = "LangChain 是一个 AI 框架"
vector = embeddings.embed_query(text)

print(f"向量维度: {len(vector)}")

常用嵌入模型

模型向量维度
text-embedding-3-small1536langchain-openai
text-embedding-3-large3072langchain-openai
ember-v11024langchain-azure-openai
multilingual-e5-large1024langchain-huggingface

总结

场景推荐方式
快速测试ChatOpenAI 直接调用
多厂商切换init_chat_model
生产环境使用环境变量管理密钥
控制调用频率rate_limiter
网络不稳定.with_retry()
向量检索init_embeddings