LangChain 核心:Model I/O 模型调用全解,一套代码跑通所有大模型
目录
二、LangChain 三类模型:别再混淆 ChatModel / LLM / Embeddings
三、Models 层核心价值:统一接口,告别多 SDK 重复开发
五、动态多模型切换:init_chat_model 通用初始化
七、标准化消息体系:区分系统 / 用户 / AI / 工具消息
1.OpenAI 兼容接口(DeepSeek、硅基流动、CloseAI 代理)
2.非 OpenAI 原生格式(Claude、Gemini)
前言
做大模型应用开发,最头疼的莫过于多厂商 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.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 |
九、全文总结
- Model I/O 三层流水线:Prompt 格式化 → Models 统一调用 → Output 结构化解析,是 LangChain 与大模型交互的核心骨架。
- Chat Models 是主流:摒弃过时 LLMs,Embeddings 仅用于 RAG 向量检索。
- 统一接口是核心优势:切换模型仅修改初始化代码,
invoke/stream/ainvoke/batch全平台通用,大幅降低多模型项目维护成本。- 接入方案全覆盖:兼容 OpenAI 接口厂商、Claude/Gemini 原生 API、本地 Ollama 开源模型。
- 生产能力完备:支持异步并发、流式交互、多模态、限流、Token 监控、提示词缓存,可直接落地线上 AI 应用。
Model I/O 是所有 LangChain 应用的基础,掌握模型调用层后,才能继续学习提示词工程、RAG 检索、Agent 智能体等进阶能力。
更多推荐



所有评论(0)