2.模型接口
模型IO
一、核心概念:什么是 ModelIO
1. 定义
LangChain 只是胶水框架,本身不具备大模型能力,核心作用是统一对接各类厂商大模型。
ModelIO 就是模型交互三件套规范:
- 输入:Prompt 提示词(system/user/ai 消息)
- 处理:调用大模型推理
- 输出:标准化结构化返回(文本/JSON/流式分片等)
2. 两大核心模型类型
- ChatModel 对话模型:日常聊天问答,支持多轮角色消息(system/human/ai),工作中使用占比90%;
- Embedding 向量模型:文本向量化,用于向量数据库、RAG检索,本章暂不展开。
3. 通用底层协议:OpenAI 兼容协议
国内绝大多数大模型(通义千问、DeepSeek、智谱等)都兼容 OpenAI 接口规范,是通用标准(普通话);
各厂商也提供专属封装类(方言),适合企业独家采购场景,二选一使用。
4. 关键通用参数
| 参数 | 作用 | 取值范围 |
|---|---|---|
| api_key | 厂商密钥,环境变量读取,避免硬编码 | 厂商后台申请 |
| base_url | 模型接口地址,兼容模式必填 | 各厂商官方地址 |
| temperature | 生成随机性 | 0~2.0,越小越严谨,越大创造力越强 |
| max_tokens | 单次输出最大字数 | None=不限制 |
| timeout/max_retries | 超时、重试次数,保障稳定性 | 自定义数值 |
二、三类调用方案总览
LangChain 提供三套调用写法,按通用度排序:
init_chat_model:LangChain 新版通用标准写法(推荐,一套代码切换多模型)- 厂商专属 ChatXXX(ChatOpenAI/ChatDeepSeek/ChatTongyi):厂商专属封装,适合独家采购场景
- 原生 OpenAI SDK:不依赖 LangChain,纯原生调用,老旧项目使用
三、厂商代码
方案1:通用兼容写法 init_chat_model(首选)
统一入口,仅修改 model/model_provider/base_url/api_key 即可切换模型,多模型动态切换首选。
示例1:调用 DeepSeek
# ModelIO_Init_chat_model.py
# 1.导入依赖
import os
from langchain.chat_models import init_chat_model
# 2.实例化模型
model = init_chat_model(
model="deepseek-chat",
api_key=os.getenv("deepseek-api"),
base_url="https://api.deepseek.com"
)
# 3.调用模型
print(model.invoke("你是谁").content)
代码解析
init_chat_model:LangChain 统一初始化入口;os.getenv():从环境变量读取密钥,安全规范,禁止写死API Key;base_url:DeepSeek 官方兼容接口地址;model.invoke():同步调用,返回 AI Message 对象,.content取出文本结果。
示例2:带调参通用写法(temperature 控制随机性)
# ModelIO_Params.py
import os
from langchain.chat_models import init_chat_model
model = init_chat_model(
model="deepseek-chat",
model_provider="openai", # 底层遵循openai协议
api_key=os.getenv("deepseek-api"),
base_url="https://api.deepseek.com",
temperature=2.0 # 高温度,输出更有创意
)
# 循环生成3句短句
for x in range(3):
print(model.invoke("写一句关于春天的词,14字以内").content)
重点:temperature=2.0 想象力拉满;写严谨文案、代码生成建议设 0~0.3。
方案2:厂商专属封装类(企业独家场景专用)
每个厂商独立依赖包,仅对接单一模型,适合公司签订独家模型、不允许多模型混用场景。
2.1 ChatDeepSeek 纯DeepSeek专属调用
# ModelIO_DeepSeek.py
import os
from langchain_deepseek import ChatDeepSeek
# 初始化 deepseek
model = ChatDeepSeek(
model="deepseek-chat",
temperature=0, # 低温度,输出稳定统一
max_tokens=None,
timeout=None,
max_retries=2, # 请求失败自动重试2次
api_key=os.getenv("deepseek-api"),
)
# 同步调用
print(model.invoke("什么是LangChain?100字以内回答,简洁"))
特性:无需手动传 base_url,源码内置DeepSeek默认接口地址,简化编码。
2.2 ChatTongyi 阿里通义千问(两种导入方式)
方式A:OpenAI兼容模式(langchain-openai)
# ModelIO_ChatOpenAI.py 对接通义
from langchain_openai import ChatOpenAI
import os
chatLLM = ChatOpenAI(
api_key=os.getenv("aliQwen-api"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model="qwen-plus",
)
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你是谁?"}]
response = chatLLM.invoke(messages)
print(response.content)
原理:阿里云百炼提供OpenAI兼容接口,复用ChatOpenAI类,不用额外安装阿里专属包。
方式B:阿里原生 ChatTongyi(专属包,支持流式输出)
# ModelIO_Ollama.py / ModelIO_Qwen.py
# 安装依赖:pip install langchain-community dashscope
import os
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import HumanMessage
chatLLM = ChatTongyi(
model="qwen-plus",
api_key=os.getenv("aliQwen-api"),
streaming=True, # 开启流式输出
)
# 1.同步一次性返回
print(chatLLM.invoke("你是谁"))
print("*" * 60)
# 2.流式分片输出(打字机效果)
res = chatLLM.stream([HumanMessage(content="你好,你是谁")])
for r in res:
print("chat resp:", r.content)
关键知识点
streaming=True+.stream():流式输出,逐字返回内容,前端聊天框常用;HumanMessage:LangChain 标准消息对象,区分system/user/ai角色;- 依赖包:
langchain-community存放各厂商第三方集成类。
方案3:原生 OpenAI SDK(不依赖LangChain)
无框架依赖,纯原生请求,老旧项目、不想引入LangChain时使用:
# ModelIO_OpenAI.py
# 安装:pip install openai
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("deepseek-api"),
base_url="https://api.deepseek.com"
)
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello,你是谁"},
],
stream=False # 关闭流式,一次性返回
)
# 取值路径固定:choices[0].message.content
print(response.choices[0].message.content)
优缺点
- 优点:无第三方框架耦合,轻量;
- 缺点:多模型切换需要重复写大量初始化代码,缺少LangChain的提示词、RAG、工具链生态。
四、三种调用方式选型对比
| 写法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| init_chat_model | 通用项目、多模型动态切换 | 一套代码兼容所有厂商,简洁易维护 | 新版本LangChain才支持 |
| ChatXXX厂商专属类 | 企业独家采购,仅使用单一模型 | 内置厂商地址,参数适配更完善 | 切换模型需修改导入和实例代码 |
| 原生OpenAI SDK | 轻量化项目、无LangChain依赖 | 依赖少,底层可控 | 无LangChain上层工具生态,重复代码多 |
五、实操开发规范总结
- 密钥管理:统一使用
os.getenv()读取环境变量,禁止明文写API Key; - 多模型通用场景:优先使用
init_chat_model; - 企业独家模型场景:使用厂商专属类(ChatDeepSeek/ChatTongyi);
- 流式对话需求:开启
streaming=True,使用.stream()循环分片读取; - 调参技巧:代码生成/严谨问答
temperature=0;创意文案/写作temperature=1.5~2.0; - 依赖安装
- 通用OpenAI兼容:
pip install langchain-openai - DeepSeek专属:
pip install langchain-deepseek - 通义千问:
pip install langchain-community dashscope
- 通用OpenAI兼容:
- 返回值统一规则
所有LangChain调用返回AIMessage对象,通过.content获取文本内容;原生SDK需通过choices[0].message.content取值。

浙公网安备 33010602011771号