我正在使用 LangChain 和 OpenAI 的
gpt-3.5-turbo
模型开发一个聊天机器人。当我使用 LLMChain
方法组合我的 ChatOpenAI
实例、ChatPromptTemplate
和 StrOutputParser
时,一切正常,并且正确生成响应。
但是,当我使用
|
运算符时,出现以下错误:
ValueError: Invalid input type <class 'dict'>. Must be a PromptValue, str, or list of BaseMessages.
这是我的代码的相关部分:
def chatbot(input_user_message):
# creating a prompt template
chat_prompt = ChatPromptTemplate.from_messages(
[
("system", "You are a helpful AI assistant."),
MessagesPlaceholder(variable_name="history_messages"),
("human", "{input_user_message}"),
]
)
# initializing OpenAI Chat model
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
trimmer = trim_messages(
max_tokens=100,
strategy="last",
token_counter=llm,
# Usually, we want to keep the SystemMessage
include_system=True,
# start_on="human" makes sure we produce a valid chat history
start_on="human",
)
def get_session_history(session_id):
if session_id not in st.session_state.store:
st.session_state.store[session_id] = ChatMessageHistory()
else:
st.session_state.store[session_id].messages = trimmer.invoke(st.session_state.store[session_id].messages)
return st.session_state.store[session_id]
# Initializing the output parser
output_parser = StrOutputParser()
# Creating an LLMChain with the prompt and memory
#conversation_chain = LLMChain(
# llm=llm,
# prompt=chat_prompt,
# output_parser=output_parser, # To parse the LLM's response into a string for display
# verbose=True, # Displays detailed logs for debugging
#)
conversation_chain = llm | chat_prompt | output_parser
model_with_memory = RunnableWithMessageHistory(
conversation_chain,
get_session_history,
input_messages_key="input_user_message",
history_messages_key="history_messages",
)
session_id = "1234"
# config = {"configurable": {"session_id": session_id}}
response = model_with_memory.invoke(
{"input_user_message": input_user_message},
{"configurable": {"session_id": session_id}},
)
print(response)
return response["text"]
为什么在这种情况下
|
运算符会失败,而 LLMChain
却可以正常工作? LangChain 中的 Runnable
对象的输入或链接过程是否有一些我可能遗漏的特定内容?
任何有关如何正确使用
|
运算符与 ChatOpenAI
和 ChatPromptTemplate
的指导将不胜感激。
我正在使用
python==3.12.7 langchain==0.3.9 openai==1.55.0 langchain-openai==0.2.10
解决了LangChain中使用
|
运算符链接组件时出现的错误,链接顺序不正确。
|
运算符按顺序处理输入。如果链以 LLM (llm | chat_prompt
) 开头,它会尝试将原始 dict
输入传递给 LLM,LLM 需要格式化提示(例如 PromptValue
)。这会导致错误。
解决方案:
确保组件以正确的顺序链接,例如应该以提示开始,然后是您的模型/llm 和其他参数等。
conversation_chain = chat_prompt | llm | output_parser