Skip to content

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_starton_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 让开发者可以:

  • 快速切换不同提供商的模型;
  • 轻松集成工具调用、结构化输出、流式响应等高级功能;
  • 构建从简单问答到复杂多步推理的智能应用。