Bug描述
我将聊天记录注入到提示上下文中,聊天记录与Astra DB聊天记录作为外部内存连接。我的聊天顺序是(带时间戳):
1722414538.8927608 hello, what is my name?
1722414543.1207514 I'm not sure what your name is! How would you like me to address you?
1722414553.4024212 my name is phil
通过LangSmith捕获的提示是:
Continue the following conversation:
AI: I'm not sure what your name is! How would you like me to address you?
User: my name is phil
User: hello, what is my name
这显然不是正确的顺序。它在数据库中的顺序是( select * from ...
):
1722414543.1207514 I'm not sure what your name is! How would you like me to address you?
1722414553.4024212 my name is phil
1722414538.8927608 hello, what is my name?
排序是按令牌进行的(因为表格是通过 _id
分区的,没有聚簇,每条消息都在自己的分区中)。
重现步骤
- 通过API调用安装链接流程,使用LangSmith或其他捕获提示的方法
- 使用至少两个用户消息和相同的session_id运行链接流程
- 检查数据库表
default_keyspace.memories
中的顺序。如果select * from
显示了正确的顺序,则截断表并重新运行流程。最终,数据库中的顺序将不再与对话顺序匹配 - 查看提示文本:您会发现它在数据库顺序,而不是时间顺序。
预期行为
提示应按时间顺序排列。
谁可以帮忙?
- 无响应*
操作系统
Langflow Docker容器
Langflow版本
1.0.14
Python版本
3.12
截图
- 无响应*
1条答案
按热度按时间xkrw2x1b1#
要确保在使用Astra DB的Langflow中的Chat Memory时,提示是按时间而不是数据库顺序排序的,你需要修改检索逻辑以按时间戳对消息进行排序。这可以通过调整查询或在检索后对消息进行排序来实现。
在提供的代码中,
AstraDBChatMessageHistory
类用于管理聊天消息。当从数据库检索消息时,你需要确保它们按时间戳排序。以下是如何修改检索逻辑以按时间排序的示例:在这个例子中,
get_sorted_messages
方法检索消息并按它们的timestamp
属性进行排序。你需要确保每个消息都有一个准确反映其创建时间的timestamp
属性。此外,在Langflow中,你可以直接在
MemoryComponent
类中通过设置order
属性来配置消息的顺序。以下是来自MemoryComponent
类的示例配置:通过将
order
属性设置为"Ascending"或"Descending",你可以控制检索和显示消息的顺序。MemoryComponent
类中的retrieve_messages
方法使用此order
属性获取所需顺序的消息。在Langflow配置中,可以看到
Memory
节点有一个可以设置为"Ascending"或"Descending"的order
属性。该属性用于确定在提示中检索和显示消息的顺序:通过在Langflow UI中配置
order
属性,你可以确保在检索和提示中使用的消息是按时间排序的。此外,
src/backend/base/langflow/memory.py
中的get_messages
函数提供了一种按指定字段(默认为“timestamp”)检索消息的方法。你可以使用此函数确保消息按其时间戳排序:此函数从监视服务检索消息并按指定字段(默认为“timestamp”)对它们进行排序。通过将
order
参数设置为"ASC"或"DESC",你可以控制消息的顺序。