跳到主要内容

模型与提供商配置

模型接口基础

LangChain的核心优势是提供统一的模型接口。无论使用哪个提供商,调用方式基本相同。

统一初始化接口

LangChain提供了一个统一的初始化函数:

from langchain.chat_models import init_chat_model

# 使用模型标识符字符串
model = init_chat_model("claude-sonnet-4")

模型标识符的格式:provider:model_name

主要LLM提供商

1. Anthropic Claude

Claude系列模型以其强大的推理能力和长上下文窗口著称。

可用模型:

  • claude-opus:最强大,推理深入
  • claude-sonnet-4:平衡能力和速度(推荐)
  • claude-haiku:快速轻量级

安装依赖:

pip install langchain-anthropic

全量配置:

from langchain_anthropic import ChatAnthropic

model = ChatAnthropic(
model="claude-sonnet-4",
temperature=0.7, # 输出创意度 (0-1)
max_tokens=2000, # 最大输出长度
timeout=30, # 超时时间(秒)
api_key="sk-ant-...", # 或设置ANTHROPIC_API_KEY环境变量
)

参数说明:

参数范围说明
temperature0-1值越小越确定,值越大越创意
max_tokens1-200K最大生成令牌数
top_p0-1核心采样参数,与temperature配合
top_k1+限制候选词数量

2. OpenAI GPT

OpenAI的GPT系列是业界最成熟的模型。

可用模型:

  • gpt-4-turbo:高能力推理
  • gpt-4:标准版本(推荐)
  • gpt-4-mini:轻量级
  • gpt-3.5-turbo:快速低成本

安装依赖:

pip install langchain-openai

完整配置:

from langchain_openai import ChatOpenAI

model = ChatOpenAI(
model="gpt-4",
temperature=0.7,
max_tokens=2000,
timeout=30,
api_key="sk-...", # 或OPENAI_API_KEY环境变量
base_url="https://api.openai.com/v1", # 支持自定义端点
)

成本对比:

模型输入成本输出成本适用场景
GPT-4 Turbo复杂推理
GPT-4通用任务
GPT-4 Mini简单任务
GPT-3.5最低最低快速原型

3. Google Gemini

Google的Gemini系列支持多模态能力。

可用模型:

  • gemini-pro:标准模型
  • gemini-pro-vision:包含视觉能力

安装依赖:

pip install langchain-google-genai

配置示例:

from langchain_google_genai import ChatGoogleGenerativeAI

model = ChatGoogleGenerativeAI(
model="gemini-pro",
temperature=0.7,
google_api_key="...", # 或GOOGLE_API_KEY环境变量
convert_system_message_to_human=True,
)

4. 其他提供商

Groq(超快推理):

from langchain_groq import ChatGroq

model = ChatGroq(
model="mixtral-8x7b-32768",
temperature=0.7,
api_key="...",
)

Ollama(本地运行):

from langchain_community.chat_models import ChatOllama

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

AWS Bedrock:

from langchain_community.chat_models import BedrockChat

model = BedrockChat(
model_id="anthropic.claude-v2",
region_name="us-east-1",
)

模型选择指南

按任务类型选择

任务类型                推荐模型              原因
═════════════════════════════════════════════════════
简单Q&A GPT-3.5/Haiku 快速低成本
通用代理 Claude-Sonnet-4 平衡能力
复杂推理 Claude-Opus 强大能力
实时响应 Groq Mixtral 极快速度
本地部署 Ollama/开源模型 离线运行
多模态任务 Gemini Pro Vision 图像处理

成本vs能力对比

动态模型选择

根据不同的条件动态选择模型:

from langchain.agents import create_agent
from langchain.agents.middleware import wrap_model_call

def select_model(request):
"""根据请求内容选择合适的模型"""
message = request.state.get("messages", [])[-1]

# 如果输入长且复杂,使用强大模型
if len(message.content) > 1000:
return ChatAnthropic(model="claude-opus")
# 简单查询使用快速模型
else:
return ChatOpenAI(model="gpt-3.5-turbo")

agent = create_agent(
model=ChatAnthropic(model="claude-sonnet-4"), # 默认模型
tools=[...],
middleware=[wrap_model_call(select_model)]
)

环境配置最佳实践

1. 使用环境变量

# .env 文件
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
GOOGLE_API_KEY=...

# 在代码中
from dotenv import load_dotenv
import os

load_dotenv()
api_key = os.getenv("ANTHROPIC_API_KEY")

2. 配置文件管理

# config.py
from pydantic import BaseSettings

class Settings(BaseSettings):
anthropic_api_key: str
openai_api_key: str
default_model: str = "anthropic:claude-sonnet-4"

class Config:
env_file = ".env"

settings = Settings()

# 创建模型
model = init_chat_model(settings.default_model)

3. 多租户支持

def get_model_for_user(user_id: str):
"""获取用户配置的模型"""
# 从数据库读取用户偏好
user_config = db.get_user_config(user_id)

return init_chat_model(
user_config.model,
api_key=decrypt(user_config.api_key) # 确保密钥安全
)

模型参数调优

温度(Temperature)

# 温度=0:确定性,输出一致
model = ChatAnthropic(temperature=0.0) # 用于:事实类问题、代码生成

# 温度=0.7:均衡(默认)
model = ChatAnthropic(temperature=0.7) # 用于:通用对话

# 温度=1.0:创意性,输出多样
model = ChatAnthropic(temperature=1.0) # 用于:创意写作、头脑风暴

最大令牌数(Max Tokens)

# 设置过小可能导致回答截断
model = ChatAnthropic(max_tokens=500) # 简洁回答

# 设置过大浪费成本
model = ChatAnthropic(max_tokens=4000) # 详细回答

Top-P采样

# 核心采样,与temperature配合使用
model = ChatAnthropic(
temperature=0.7,
top_p=0.9 # 保留概率最高的90%候选词
)

错误处理与重试

from langchain.chat_models import ChatAnthropic
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=1, min=2, max=10)
)
def call_model(model, messages):
return model.invoke(messages)

model = ChatAnthropic(model="claude-sonnet-4")
try:
result = call_model(model, [...])
except Exception as e:
print(f"模型调用失败: {e}")

性能优化

1. 连接复用

# ✗ 不好:每次都创建新连接
for i in range(10):
model = ChatAnthropic() # 每次创建新实例
result = model.invoke(...)

# ✓ 好:复用模型实例
model = ChatAnthropic()
for i in range(10):
result = model.invoke(...) # 复用同一实例

2. 批量处理

# 批量调用模型以提高吞吐量
from langchain_core.language_model import LLMResult

model = ChatAnthropic()
# 批量生成
results = model.batch(messages_list)

3. 缓存策略

from langchain.cache import RedisCache
from langchain.globals import set_llm_cache

# 设置缓存以避免重复调用
set_llm_cache(RedisCache())

model = ChatAnthropic()
result1 = model.invoke("What is 2+2?") # 网络调用
result2 = model.invoke("What is 2+2?") # 从缓存取

常见问题

Q: 如何监控模型的成本? A: 使用LangSmith或模型提供商的仪表板。参考可观测性与调试章节。

Q: 可以使用自定义模型端点吗? A: 可以,设置base_url参数指向自定义端点。

Q: 模型何时应该更换? A: 当当前模型的成本过高或能力不足时。使用动态选择或A/B测试来验证。