目录

前言

一、Model I/O 整体架构:三段式流水线

二、LangChain 三类模型:别再混淆 ChatModel / LLM / Embeddings

三、Models 层核心价值:统一接口,告别多 SDK 重复开发

1.原生 SDK 的致命痛点

2.LangChain 统一接口优势

四、在线模型基础实战:ChatOpenAI 标准用法

1.环境准备

2.最简调用示例

3.核心可调参数详解

4.Token 基础认知

五、动态多模型切换:init_chat_model 通用初始化

六、四种标准调用方式,覆盖全部业务场景

1.同步调用 invoke ()(日常开发首选)

2.异步调用 ainvoke ()(高并发 Web 服务)

3.流式调用 stream ()(聊天打字机效果)

4.批量调用 batch ()(离线批量处理)

七、标准化消息体系:区分系统 / 用户 / AI / 工具消息

八、多平台在线模型接入实战速查表

1.OpenAI 兼容接口(DeepSeek、硅基流动、CloseAI 代理)

2.非 OpenAI 原生格式(Claude、Gemini)

3.各平台接入速览

九、全文总结


前言

        做大模型应用开发,最头疼的莫过于多厂商 API 不统一:OpenAI、DeepSeek、Claude、本地 Ollama 各一套调用逻辑,切换模型就要重写大量代码,流式、批量、异步逻辑全部要适配,维护成本指数级上涨。
        LangChain 给出了标准化解决方案 ——Model I/O,作为框架与大模型交互的核心底座,统一封装「提示词格式化、模型调用、输出结构化解析」全流程,实现一次编码,全平台通用。本文结合实战代码,完整拆解 Model I/O 架构、模型分类、多厂商接入、各类调用方式与生产级高级特性。

一、Model I/O 整体架构:三段式流水线

Model I/O 定义了从用户提问到结构化结果输出的完整链路,分为三大核心环节:

  • Prompts 提示词模板(怎么问) 将用户原始输入、系统角色指令、历史对话统一封装为模型可识别的标准化消息,支持动态变量填充、多轮对话拼接。
  • Models 模型调用(问谁) 框架最核心抽象层,屏蔽 OpenAI、Claude、Gemini、本地 Ollama 等所有厂商接口差异,提供完全一致的调用方法。
  • Output Parsers 输出解析(怎么用答案) 将模型自由文本输出,自动转换为 JSON、Pydantic 对象等结构化数据,方便下游程序读取、存储、计算。

一句话流程:用户问题 → Prompt 格式化 → 统一接口调用模型 → 结构化输出结果。

二、LangChain 三类模型:别再混淆 ChatModel / LLM / Embeddings

LangChain 内置三种完全不同用途的模型类型,绝大多数业务开发只需要 Chat Models

模型类型 输入输出格式 代表类 定位与使用场景
Chat Models(对话模型) 消息列表 → AI 消息对象 ChatOpenAI、ChatAnthropic、ChatOllama 主流首选,现代大模型统一标准,支持多轮对话、工具调用、多模态,课程 / 项目全部使用该类型
LLMs(补全模型) 纯字符串 → 纯字符串 OpenAI (旧版) 已淘汰,早期 GPT3 文本补全接口,不支持角色消息格式,仅兼容旧项目
Embeddings(向量模型) 文本 → 浮点数字向量 OpenAIEmbeddings、HuggingFaceEmbeddings 不生成文字,用于 RAG 检索、语义相似度、文本聚类,独立于对话流程

重要结论:文中所有「模型调用」若无特殊说明,均指代 Chat Models。

三、Models 层核心价值:统一接口,告别多 SDK 重复开发

1.原生 SDK 的致命痛点

直接使用各厂商原生 SDK 开发,切换模型等于重构代码:

  • OpenAI:client.chat.completions.create(),结果取 .choices[0].message.content
  • Claude:client.messages.create(),结果取 .content[0].text
  • 流式、批量、重试、异步逻辑每家写法完全不同

对比场景:同时测试 GPT-4o-mini、DeepSeek、Claude,原生 SDK 需要三套 Client、三套取值逻辑、三套流式代码,维护成本极高。

2.LangChain 统一接口优势

无论切换哪家模型,仅修改一行初始化代码,业务调用逻辑完全不变:

# 1. OpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
# 2. DeepSeek(兼容OpenAI接口,仅改配置)
llm = ChatOpenAI(model="deepseek-chat", api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com/v1")
# 3. Claude(专用类,调用逻辑不变)
llm = ChatAnthropic(model="claude-sonnet-4-20250514")
# 统一调用方式,全程无需改动
res = llm.invoke("一句话解释量子计算")
print(res.content) # 统一取值 .content

全场景统一能力:

  • 同步 invoke()、异步 ainvoke()、流式 stream()、批量 batch() 方法通用
  • 结果统一 AIMessage 对象,.content 获取文本,.response_metadata 获取 Token 消耗
  • 内置重试、超时、回调监控、速率限制,无需手动封装

四、在线模型基础实战:ChatOpenAI 标准用法

1.环境准备

使用 .env 文件管理密钥,禁止硬编码密钥:

# .env 文件
OPENAI_API_KEY=sk-xxx
OPENAI_BASE_URL=https://api.openai.com/v1

依赖安装:

uv add langchain-openai python-dotenv

2.最简调用示例

from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
load_dotenv()

# 自动读取.env环境变量
llm = ChatOpenAI(model="gpt-4o-mini")
response = llm.invoke("介绍LangChain Model I/O")

# 返回AIMessage对象,不能直接打印
print(type(response))
print("回答文本:", response.content)
print("Token消耗元信息:", response.response_metadata)

3.核心可调参数详解

llm = ChatOpenAI(
    model="gpt-4o-mini",    # 必填,模型名称
    temperature=0.7,         # 随机性 0~1
    max_tokens=1000,        # 最大输出token
    timeout=60,             # 请求超时秒数
    max_retries=2           # 失败自动重试次数
)

temperature 场景选择指南

使用场景 推荐温度 原因
代码生成、数据提取、翻译 0 ~ 0.3 输出稳定、无随机偏差
通用问答、文本摘要、数据分析 0.3 ~ 0.7 平衡准确与流畅度
创意写作、起名、头脑风暴 0.7 ~ 1.0 高多样性、发散创意

4.Token 基础认知

Token 是大模型最小处理单元,不等于汉字 / 单词

  • 中文:1 Token ≈ 1~1.8 个汉字
  • 英文:1 Token ≈ 3~4 个字母 不同厂商分词器(OpenAI cl100k_base / Claude 自研分词)统计 Token 数量存在差异,计费规则为:总 Token = 输入提示词 Token + 输出回答 Token。

五、动态多模型切换:init_chat_model 通用初始化

如果项目需要运行时动态切换 OpenAI / Claude / Gemini,init_chat_model 无需导入多个厂商类,一个函数统一管理:

from langchain.chat_models import init_chat_model
import os
from dotenv import load_dotenv
load_dotenv()

# 初始化三家不同厂商模型
llm_gpt = init_chat_model("gpt-4o-mini", model_provider="openai")
llm_claude = init_chat_model("claude-sonnet-4-20250514", model_provider="anthropic")
llm_gemini = init_chat_model("gemini-3.1-flash-lite", model_provider="google_genai")

# 统一调用逻辑,批量对比输出
models = [("GPT", llm_gpt), ("Claude", llm_claude), ("Gemini", llm_gemini)]
for name, model in models:
    res = model.invoke("一句话介绍自己")
    print(f"{name}: {res.content}")

适用场景:模型 A/B 测试、用户前端自选模型、多租户系统区分模型。

六、四种标准调用方式,覆盖全部业务场景

1.同步调用 invoke ()(日常开发首选)

串行阻塞调用,适合简单问答、单次脚本任务:

llm = ChatOpenAI(model="gpt-4o-mini")
res = llm.invoke("什么是RAG检索增强生成")
print(res.content)

2.异步调用 ainvoke ()(高并发 Web 服务)

基于 Python async/await,并行处理多请求,大幅缩短总耗时:

import asyncio
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")
prompts = ["介绍北京", "介绍上海", "介绍广州"]

async def batch_async():
    # 批量并发派发请求
    tasks = [llm.ainvoke(p) for p in prompts]
    results = await asyncio.gather(*tasks)
    for r in results:
        print(r.content[:30])

asyncio.run(batch_async())

性能对比:5 个请求串行耗时约 9s,异步并行仅需 2s,请求越多提升越明显。

3.流式调用 stream ()(聊天打字机效果)

逐 Token 返回内容,提升前端交互体验:

llm = ChatOpenAI(model="gpt-4o-mini")
print("AI输出:")
full_msg = None
for chunk in llm.stream("写一首春日短诗"):
    full_msg = chunk if full_msg is None else full_msg + chunk
    print(chunk.content, end="", flush=True)

4.批量调用 batch ()(离线批量处理)

批量处理独立文本,自动调度并发:

questions = ["Python是什么", "JavaScript是什么", "Go语言是什么"]
responses = llm.batch(questions)
for q, a in zip(questions, responses):
    print(f"Q:{q}\nA:{a.content}\n")

七、标准化消息体系:区分系统 / 用户 / AI / 工具消息

LangChain 使用四类消息对象规范对话上下文,支撑多轮对话、Agent 工具调用:

消息类型 类名 作用
SystemMessage 系统消息 设定 AI 角色、规则、输出约束
HumanMessage 用户消息 用户提问、输入内容
AIMessage AI 消息 历史 AI 回复,构建对话上下文
ToolMessage 工具消息 外部工具执行返回结果

多轮对话完整示例:

from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")
# 完整对话上下文
dialog = [
    SystemMessage(content="你是专业Python编程助手,回答简洁"),
    HumanMessage(content="你好,我叫小明"),
    AIMessage(content="你好小明,有什么编程问题?"),
    HumanMessage(content="什么是Python装饰器?")
]
res = llm.invoke(dialog)
print(res.content)

三种消息传入方式:

  1. 直接传字符串:单轮简单问答
  2. 消息列表(最常用):多轮对话、系统角色设定
  3. 元组 / 字典:动态从数据库、配置加载对话模板

八、多平台在线模型接入实战速查表

1.OpenAI 兼容接口(DeepSeek、硅基流动、CloseAI 代理)

这类平台完全遵循 OpenAI Chat Completions API,直接使用ChatOpenAI,仅修改base_url与密钥:

# DeepSeek示例
llm = ChatOpenAI(
    model="deepseek-chat",
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url="https://api.deepseek.com/v1"
)

2.非 OpenAI 原生格式(Claude、Gemini)

使用厂商专用类或init_chat_model统一封装,调用逻辑不变。

3.各平台接入速览

平台 使用类 模型示例 环境变量
OpenAI/CloseAI 代理 ChatOpenAI gpt-4o-mini OPENAI_API_KEY、OPENAI_BASE_URL
DeepSeek ChatOpenAI deepseek-chat DEEPSEEK_API_KEY、DEEPSEEK_BASE_URL
硅基流动 ChatOpenAI Qwen/Qwen3-8B SILICONFLOW_API_KEY、SILICONFLOW_BASE_URL
Anthropic Claude ChatAnthropic claude-sonnet-4 ANTHROPIC_API_KEY
Google Gemini ChatGoogleGenerativeAI gemini-3.1-flash GOOGLE_API_KEY

九、全文总结

  1. Model I/O 三层流水线:Prompt 格式化 → Models 统一调用 → Output 结构化解析,是 LangChain 与大模型交互的核心骨架。
  2. Chat Models 是主流:摒弃过时 LLMs,Embeddings 仅用于 RAG 向量检索。
  3. 统一接口是核心优势:切换模型仅修改初始化代码,invoke/stream/ainvoke/batch全平台通用,大幅降低多模型项目维护成本。
  4. 接入方案全覆盖:兼容 OpenAI 接口厂商、Claude/Gemini 原生 API、本地 Ollama 开源模型。
  5. 生产能力完备:支持异步并发、流式交互、多模态、限流、Token 监控、提示词缓存,可直接落地线上 AI 应用。

Model I/O 是所有 LangChain 应用的基础,掌握模型调用层后,才能继续学习提示词工程、RAG 检索、Agent 智能体等进阶能力。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐