langchain DOC: Tutorial - Build a Chatbot - Gemini error 400 Please ensure that multiturn requests alternate between user and model

tjjdgumg  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(55)

URL

https://python.langchain.com/v0.2/docs/tutorials/chatbot/

待办事项清单:

  • 为这个问题添加了一个非常描述性的标题。
  • 如果适用,我包含了一个指向我参考的文档页面的链接。

当前文档的问题:

https://python.langchain.com/v0.2/docs/tutorials/chatbot/ 中,按照教程“在Gemini中构建聊天机器人”进行操作时,在 https://python.langchain.com/v0.2/docs/tutorials/chatbot/#managing-conversation-history 的部分遇到了问题。

from langchain_core.runnables import RunnablePassthrough

def filter_messages(messages, k=10):
    return messages[-k:]

chain = (
    RunnablePassthrough.assign(messages=lambda x: filter_messages(x["messages"]))
    | prompt
    | model
)

messages = [
    HumanMessage(content="hi! I'm bob"),
    AIMessage(content="hi!"),
    HumanMessage(content="I like vanilla ice cream"),
    AIMessage(content="nice"),
    HumanMessage(content="whats 2 + 2"),
    AIMessage(content="4"),
    HumanMessage(content="thanks"),
    AIMessage(content="no problem!"),
    HumanMessage(content="having fun?"),
    AIMessage(content="yes!"),
]

response = chain.invoke(
    {
        "messages": messages + [HumanMessage(content="what's my name?")],
        "language": "English",
    }
)
response.content

它会抛出一个错误 Retrying langchain_google_vertexai.chat_models._completion_with_retry.<locals>._completion_with_retry_inner in 4.0 seconds as it raised InvalidArgument: 400 Please ensure that multiturn requests alternate between user and model..
这里的解决方案似乎是将 def filter_messages(messages, k=10) 更改为 def filter_messages(messages, k=9),原因在 #16288 中有描述。
Gemini 不支持从 AIMessage 开始的历史记录,将值从 10 更改为 9,确保第一个消息列表始终是 HumanMessage。

关于内容的想法或请求:

  • 无响应*
llycmphe

llycmphe1#

我已经通过更改filter_messages解决了这个问题:

def filter_messages(messages, k=10):
    while not isinstance(messages[-k], HumanMessage):
        k -=1
    return messages[-k:]

始终以HumanMessage开头。

相关问题