You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Langchain切换ChatOpenAI后跟踪Token触发ValueError的原因及解决

问题描述

原本使用text-davinci-003对应的OpenAI类实现Token使用量跟踪功能正常,切换到gpt-3.5-turbo-16k对应的ChatOpenAI类后,触发错误:ValueError: Got unsupported message type: T。相关代码片段如下:

from langchain.chat_models import ChatOpenAI
from langchain.callbacks import get_openai_callback

os.environ['OPENAI_API_KEY'] = "OPENAI-API-KEY"

llm = ChatOpenAI(
  model_name='gpt-3.5-turbo-16k',
  temperature=0.0
)

with get_openai_callback() as cb:
    result = llm("Tell me a joke")
    print(cb)
错误原因

ChatOpenAI与OpenAI类的输入格式要求不同:

  • OpenAI类支持直接传入字符串作为提示语
  • ChatOpenAI类要求输入必须是聊天消息对象(如HumanMessage、SystemMessage等),不能直接传字符串。直接传入字符串会被解析为不符合规范的消息格式,从而触发类型错误。
解决方法

修改输入格式,使用LangChain提供的聊天消息类包装输入内容,示例代码如下:

from langchain.chat_models import ChatOpenAI
from langchain.callbacks import get_openai_callback
from langchain.schema import HumanMessage

os.environ['OPENAI_API_KEY'] = "OPENAI-API-KEY"

llm = ChatOpenAI(
  model_name='gpt-3.5-turbo-16k',
  temperature=0.0
)

with get_openai_callback() as cb:
    # 使用HumanMessage封装用户提问
    result = llm([HumanMessage(content="Tell me a joke")])
    print(cb)

如果需要实现多轮对话,可以组合多种类型的消息对象,示例如下:

from langchain.schema import SystemMessage, HumanMessage

# 组合系统提示与用户提问
result = llm([
    SystemMessage(content="你是一个擅长生成冷笑话的助手"),
    HumanMessage(content="Tell me a joke")
])

内容的提问来源于stack exchange,提问作者moayad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:42:46