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
相关产品推荐
相关产品推荐

