调用后的返回信息

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 等原始结构

最常见的消息类型包括:SystemMessageHumanMessageAIMessageToolMessage

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 路线通常表达更完整
posted @ 2026-04-29 10:32  幻影之舞  阅读(31)  评论(0)    收藏  举报