'list' object has no attribute '_merge_partial_and_user_variables'

2025年09月26日 13:37 响应: 1.98秒 状态: success

🚨 错误信息

Traceback (most recent call last): File "D:\新建文件夹\langchain-base\Chatbot.py", line 35, in <module> prompt = ChatPromptTemplate.format_messages( [ ...<2 lines>... ] ) File "D:\software\Python\Lib\site-packages\langchain_core\prompts\chat.py", line 1203, in format_messages kwargs = self._merge_partial_and_user_variables(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'list' object has no attribute '_merge_partial_and_user_variables'

🤖 AI解决方案

Traceback (most recent call last):
  File "D:\新建文件夹\langchain-base\Chatbot.py", line 35, in <module>
    prompt = ChatPromptTemplate.format_messages(
        [
    ...<2 lines>...
        ]
    )
  File "D:\software\Python\Lib\site-packages\langchain_core\prompts\chat.py", line 1203, in format_messages
    kwargs = self._merge_partial_and_user_variables(**kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'list' object has no attribute '_merge_partial_and_user_variables'

  • 错误翻译:
  •     AttributeError: 'list' object has no attribute '_merge_partial_and_user_variables'
        AttributeError: 'list' 对象没有属性 '_merge_partial_and_user_variables'
        

  • 原因分析:

  • ChatPromptTemplate.format_messages() 方法被错误地传递了一个列表作为参数,而它期望的是关键字参数。

  • 解决方案:

  • 应该使用 ChatPromptTemplate.from_messages() 来创建 ChatPromptTemplate 实例,并将消息列表作为参数传递。

        # 假设 prompt_template 是你的 ChatPromptTemplate 实例
        # 错误用法:
        # prompt = prompt_template.format_messages([...])
    
        # 正确用法:
        from langchain_core.prompts import ChatPromptTemplate, SystemMessage, HumanMessage
    
        chat_template = ChatPromptTemplate.from_messages([
            ("system", "You are a helpful assistant."),
            ("human", "{user_input}")
        ])
    
        # 然后使用 format_prompt 或 invoke 来格式化
        formatted_prompt = chat_template.invoke({"user_input": "你好"})
        

  • 预防措施:

1. 仔细查阅 Langchain 官方文档,确认 ChatPromptTemplate 的创建和使用方法。
2. 在调用方法前,检查传递的参数类型和结构是否符合预期。