外观
LangChain 模型
模型
介绍
在 LangChain 中,模型(Models) 是整个框架的核心推理引擎,负责理解输入、生成响应,并驱动智能体(Agent)、链(Chain)和图(Graph)的行为。
- Model 是封装了大语言模型(LLM)或聊天模型(Chat Model)能力的可调用对象,提供统一接口来与不同提供商(如 OpenAI、Anthropic、Google、Ollama 等)的模型交互。
- 所有新项目应使用 Chat Models,因为它们支持工具调用、结构化输出、多模态等高级功能。
模型在 LangChain 架构中的角色
mermaid
graph LR
A[User Input] --> B(Agent / Chain / Graph)
B --> C{Model}
C -->|invoke/stream/batch| D[Tool Calls / Structured Output / Text]
D --> E[Final Response]
C -.->|bind_tools| F[Tools]
C -.->|with_structured_output| G[Pydantic Schema]统一接口
LangChain 支持主流大模型提供商(如 OpenAI、Anthropic、Google、AWS Bedrock、Azure 等),并统一了接口。模型通常具备以下能力:
| 能力 | 说明 |
|---|---|
| Tool Calling | 模型可请求调用外部工具(如数据库查询、API 调用),并将结果整合进回答。 |
| Structured Outputs | 强制模型按指定格式(如 Pydantic 模型、JSON Schema)输出,便于程序解析。 |
| Multimodal | 支持处理图像、音频等非文本输入(部分模型也支持生成多模态输出)。 |
| Reasoning | 执行多步逻辑推理,并可流式输出推理过程(如“思维链”)。 |
| Local Models | 支持本地运行模型(如通过 Ollama),适用于隐私敏感或离线场景。 |
无论底层是 GPT-4o、Claude 3.5、Llama 3.1 还是本地 Ollama 模型,LangChain 提供一致的调用方式:
python
from langchain.chat_models import init_chat_model
MODEL = "qwen-flash"
API_KEY = "sk-"
BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
# 创建模型实例
model = init_chat_model(
model=MODEL, model_provider="openai", api_key=API_KEY, base_url=BASE_URL
)
# 创建模型实例:也支持 provider:model_name 格式(如 "anthropic:claude-3-5-sonnet"、"ollama:llama3.1")
model = init_chat_model("openai:gpt-4o")模型独立调用
| 方法 | 用途 | 返回值 |
|---|---|---|
.invoke() | 同步单次调用 | AIMessage |
.stream() | 流式输出(逐 token) | Iterator[AIMessageChunk] |
.batch() | 并行批量处理 | List[AIMessage] |
上面所有方法均有异步版本:
.ainvoke(),.astream(),.abatch()
python
# 调用模型:同步单次调用
response = model.invoke("你是谁?")
print(response)
print(response.content)
# 调用模型:流式输出
for chunk in model.stream("你是谁?"):
print(chunk.text, end="", flush=True)
# 调用模型:并行批量处理
responses = model.batch(
[
"你是谁?",
"你叫什么名字?",
"你妈妈叫什么名字?",
]
)
for response in responses:
print(response)关键特性详解
Tool Calling(工具调用)
- 通过
bind_tools()绑定自定义工具。 - 模型可并行调用多个工具(默认开启)。
- 支持强制调用(
tool_choice="any")或禁用并行(parallel_tool_calls=False)。
Structured Outputs(结构化输出)
- 使用
with_structured_output(MyPydanticModel)约束输出格式。 - 支持嵌套结构、字段描述、自动验证。
- 可选返回原始消息(
include_raw=True)以获取 token 使用等元数据。
Streaming with Events
- 使用
astream_events()可监听语义事件(如on_chat_model_start、on_chat_model_stream),便于调试或 UI 集成。
配置与扩展
- 支持
RunnableConfig传入运行时配置(如tags,metadata,callbacks)。 - 支持 可配置模型(Configurable Models):运行时动态切换模型、温度、最大 token 数等。
python
configurable_model = init_chat_model(temperature=0)
configurable_model.invoke(
"你好",
config={"configurable": {"model": "claude-3-5-sonnet-latest"}}
)其他高级功能
- Prompt Caching:利用提供商缓存机制降低延迟与成本(如 OpenAI、Gemini)。
- Rate Limiting:通过
InMemoryRateLimiter控制请求频率。 - Base URL / Proxy:支持兼容 OpenAI API 的第三方服务(如 Together AI、vLLM)。
- Token Usage Tracking:通过回调(Callback)统计输入/输出 token 消耗。
小结
LangChain 中的 模型 不仅是语言生成器,更是智能系统的“大脑”。通过统一的接口抽象,LangChain 让开发者可以:
- 快速切换不同提供商的模型;
- 轻松集成工具调用、结构化输出、流式响应等高级功能;
- 构建从简单问答到复杂多步推理的智能应用。