LangChain `LLMChain` 工作正常,但是当将 `|` 运算符与 `ChatOpenAI` 和 `ChatPromptTemplate` 一起使用时会抛出 `ValueError`

问题描述 投票:0回答:1

我正在使用 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

python chatbot openai-api langchain
1个回答
0
投票

解决了LangChain中使用

|
运算符链接组件时出现的错误,链接顺序不正确。

|
运算符按顺序处理输入。如果链以 LLM (
llm | chat_prompt
) 开头,它会尝试将原始
dict
输入传递给 LLM,LLM 需要格式化提示(例如
PromptValue
)。这会导致错误。

解决方案
确保组件以正确的顺序链接,例如应该以提示开始,然后是您的模型/llm 和其他参数等。

conversation_chain = chat_prompt | llm | output_parser
© www.soinside.com 2019 - 2024. All rights reserved.