调用后的返回信息
response = model.invoke("写一句关于春天的诗,14 字以内")
print(type(model)) # 模型客户端对象
print(type(response)) # AIMessage
print(type(response.content)) # str
AIMessage 上常见字段
| 字段 / 属性 | 作用 | 通常怎么用 |
| content | 模型回复正文 | 最常用,绝大多数业务先读它 |
| response_metadata | 厂商返回的原始元数据 | 看模型名、finish_reason、token_usage 等 |
| usage_metadata | LangChain 统一整理后的用量信息 | 看 input/output/total tokens |
| tool_calls | 工具调用信息 | 做 Tools / Agent 时很关键 |
| additional_kwargs | 厂商扩展字段 | 按需使用 |
若 usage_metadata 为空,可优先查看 response_metadata 中的 token_usage 等原始结构
最常见的消息类型包括:SystemMessage、HumanMessage、AIMessage、ToolMessage
openai.OPENAI与ChatOpenAI的区别
| openai.OpenAI | langchain_openai.ChatOpenAI | |
| 所属生态 | OpenAI 官方 Python SDK | LangChain 生态 |
| 定位 | 更底层、直接发请求 | LangChain 中的聊天模型封装 |
| 返回结果 | 更贴近 OpenAI 原生响应结构 | 更贴近 AIMessage 等 LangChain 结构 |
| 适合场景 | 只想简单调 API | 想继续接 Prompt、Parser、LCEL、Agent |
不同调用写法
1. 使用ChatOpenAI
from langchain_openai import ChatOpenAI
import os
from dotenv import load_dotenv
load_dotenv(encoding="utf-8")
chat_llm = ChatOpenAI(
model="qwen-plus", # 可按需更换,模型列表见阿里云文档
api_key=os.getenv("aliQwen-api"), # 或 os.getenv("QWEN_API_KEY")
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你是谁?"},
]
# 返回值是 AIMessage;若你要看 token 用量、finish_reason、模型名等,可继续查看 response.response_metadata。
print(response.content)
2. 使用init_chat_model
import os
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
load_dotenv(encoding="utf-8")
model = init_chat_model(
model="deepseek-chat",
api_key=os.getenv("deepseek-api"),
base_url="https://api.deepseek.com",
)
# ========== 3. 调用并取正文(两种写法均可) ==========
# 写法一:单条用户输入字符串(最简)
# 仅传 str 时,框架会当作一条 user/human 消息,无法在此形式下单独写 system;要 system 请用写法二或消息对象。
print(model.invoke("你是谁?").content)
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你是谁?"},
]
response = model.invoke(messages)
print(response.content)
真实项目选型建议
第一层选择:先决定是不是要进入 LangChain 体系。
- 只是简单调用:原生 SDK 就够
- 要继续做 Prompt、Parser、LCEL、Agent:尽早进入 LangChain 模型对象
第二层选择:在 LangChain 里决定用 provider 类还是统一入口。
- 新项目优先考虑
init_chat_model - 维护旧项目或已有 provider 类代码时,直接用
ChatOpenAI/ChatDeepSeek/ChatTongyi也完全合理
第三层选择:决定走兼容接口还是原生 provider。
- 想统一风格、少记类名:兼容接口路线更简单
- 想贴近厂商原生能力:原生 provider 路线通常表达更完整

浙公网安备 33010602011771号