消息历史
Message History 组件同时提供聊天历史读取与消息存储能力。 它既可以把消息存取到 SkillFlaw 存储,也可以接入专用聊天记忆数据库,例如 Mem0 或 Redis。
Agent 组件默认自带聊天记忆,并使用 SkillFlaw 存储。 对于大多数场景,这个内建能力已经足够。
以下情况更适合使用 Message History 组件:
- 你要给语言模型组件(而不是 Agent)提供聊天记忆的存储与读取能力。
- 你希望在聊天上下文之外读取历史消息,例如在情绪分析流程中读取并分析近期记忆。
- 你希望把记忆写入一个独立于 SkillFlaw 存储之外的专用数据库。
更多说明请参阅存储聊天记忆。
在流程中使用 Message History
Message History 有两种模式,具体取决于你想在流程的哪个阶段使用它:
- Retrieve 模式:从 SkillFlaw 数据库或外部记忆中读取聊天记录
- Store 模式:把聊天消息存入 SkillFlaw 数据库或外部记忆
如果你既要读取又要写入聊天记忆,就需要在同一个流程中放置多个 Message History 组件。
- 使用 SkillFlaw 存储
- 使用外部聊天记忆
以下步骤演示如何构建一个使用 SkillFlaw 内置数据库存储聊天记忆的对话流程:
-
创建或编辑一个需要使用聊天记忆的流程。
-
在流程开头添加一个 Message History 组件,并将其设置为 Retrieve 模式。
-
可选:在 Message History 的组件头部菜单中点击 Controls,启用记忆排序、过滤和数量限制等参数。
-
添加一个 Prompt Template 组件,在 Template 中加入
{memory}变量,并把 Message History 的输出连接到 memory 输入。Prompt Template 组件用于向 LLM 提供额外指令与上下文,它与 Chat Input 传入的聊天消息是分离的。 模板中可以包含任意文本与变量,例如:
_10You are a helpful assistant that answers questions._10_10Use markdown to format your answer, properly embedding images and urls._10_10History:_10_10{memory}模板中的变量(
{variable})会动态为 Prompt Template 增加输入字段,使流程可以从其他组件、SkillFlaw 全局变量或运行时输入中获 得这些值。 更多说明请参阅在 Prompt 中定义变量。在这个示例中,
{memory}会被读取出来的聊天记忆填充,再传给 Language Model 或 Agent 组件,为 LLM 提供额外上下文。 -
将 Prompt Template 的输出连接到 Language Model 组件的 System Message 输入。
此示例使用 Language Model 流程组件作为主聊天驱动,但你也可以改用其他语言模型组件或 Agent 组件。
-
添加一个 Chat Input 组件,并把它连接到 Language Model 组件的 Input 字段。
-
将 Language Model 的输出连接到 Chat Output 组件。
-
在流程末尾再添加一个 Message History 组件,并将其设置为 Store 模式。
你可以按需继续配置该组件的其他参数,但要注意:这里的第二个 Message History 负责的是“写入”聊天记忆,而不是读取。
-
将 Chat Output 的输出连接到 Message History 组件的 Message 输入。
这样一来,每次 LLM 的响应从 Language Model 传给 Chat Output 后,都会再由最后这个 Message History 写入聊天记忆。
如果你希望把聊天记忆存入专用外部数据库,则需要把 Message History 组件与某个特定提供商的聊天记忆组件一起使用。
以下步骤演示如何把聊天记忆存入并读取自 Redis Chat Memory 组件。 其他可选方案还包括 Mem0 Chat Memory 组件 和 Cassandra Chat Memory 组件。
-
创建或编辑一个需要使用聊天记忆的流程。
-
在流程开头加入一个 Message History 组件和一个 Redis Chat Memory 组件:
-
配置 Redis Chat Memory,让它连接到你的 Redis 数据库。更多说明请参阅 Redis 官方文档。
-
将 Message History 设置为 Retrieve 模式。
-
在 Message History 的组件头部菜单中点击 Controls,启用 External Memory,然后点击 Close。
你也可以在 Controls 中顺便启用记忆排序、过滤和数量限制等参数。
-
将 Redis Chat Memory 的输出连接到 Message History 的 External Memory 输入。
-
-
添加一个 Prompt Template 组件,在 Template 中加入
{memory}变量,并把 Message History 的输出连接到 memory 输入。Prompt Template 组件用于向 LLM 提供额外指令与上下文,它与 Chat Input 的聊天消息是分开的。 模板中可以包含任意文本与变量,例如:
_10You are a helpful assistant that answers questions._10_10Use markdown to format your answer, properly embedding images and urls._10_10History:_10_10{memory}模板中的变量(
{variable})会动态为 Prompt Template 组件新增字段,使流程可以从其他组件、SkillFlaw 全局变量或运行时输入中获得这些值。 更多说明请参阅在 Prompt 中定义变量。在这个示例里,
{memory}会被取回的聊天记忆填充,并传给 Language Model 或 Agent 组件,作为额外上下文。 -
将 Prompt Template 的输出连接到 Language Model 组件的 System Message 输入。
这个示例使用 Language Model 流程组件作为主聊天驱动,但你同样可以换成其他语言模型组件或 Agent 组件。
-
添加一个 Chat Input 组件,并把它连接到 Language Model 的 Input 输入。
-
将 Language Model 的输出连接到 Chat Output 组件。
-
在流程末尾再添加一组 Message History 与 Redis Chat Memory 组件:
-
配置 Redis Chat Memory 连接到 Redis 数据库。
-
将 Message History 设置为 Store 模式。
-
在 Message History 的组件头部菜单中点击 Controls,启用 External Memory,然后点击 Close。
你可以继续根据需要配置其他参数,但要注意:这里的组件职责是写入聊天记忆。
-
将 Redis Chat Memory 连接到 Message History 的 External Memory 输入。
-
-
将 Chat Output 的输出连接到 Message History 的 Message 输入。
这样,每次 LLM 响应从 Language Model 到 Chat Output 后,都会再通过最后这组 Message History 与 Redis Chat Memory 写入外部聊天记忆。

Message History 参数
有些参数在可视化编辑器中默认处于隐藏状态。 你可以通过组件标题栏菜单中的 控件 来修改全部参数。
可用参数取决于组件当前处于 Retrieve 还是 Store 模式。
- Retrieve 模式
- Store 模式
| Name | Type | Description |
|---|---|---|
Template (template) | String | 输入参数。用于格式化数据的模板。模板中可以包含 {text}、{sender} 以及消息数据中的其他键。 |
External Memory (memory) | External Memory | 输入参数。从外部记忆中读取消息;留空时使用 SkillFlaw 存储。 |
Number of Messages (n_messages) | Integer | 输入参数。要读取的消息数量。默认:100。 |
Order (order) | String | 输入参数。消息排序方式。默认:Ascending。 |
Sender Type (sender_type) | String | 输入参数。按发送者类型过滤,可选 User、Machine 或 Machine and User(默认)。 |
Session ID (session_id) | String | 输入参数。要读取的聊天记忆对应的会话 ID。若省略或留空,则使用本次流程运行的当前会话 ID。 |
| Name | Type | Description |
|---|---|---|
Template (template) | String | 输入参数。用于格式化数据的模板。模板中可以包含 {text}、{sender} 以及消息数据中的其他键。 |
Message (message) | String | 输入参数。要存储的消息,通常由 Chat Output 组件提供。 |
External Memory (memory) | External Memory | 输入参数。将消息写入外部记忆;留空时使用 SkillFlaw 存储。 |
Sender (sender) | String | 输入参数。按发送者类型选择要存储的消息,可选 User、Machine 或 Machine and User(默认)。 |
Sender Name (sender_name) | String | 输入参数。当消息缺少 sender 元数据时,用作兜底的发送者标签。 |
Session ID (session_id) | String | 输入参数。要写入的聊天记忆对应的会话 ID。若省略或留空,则使用当前流程运行的会话 ID。若你需要为不同用户或不同应用隔离聊天记忆,可显式传入自定义会话 ID。 |
Sender Type (sender_type) | String | 输入参数。按发送者类型过滤,可选 User、Machine 或 Machine and User(默认)。 |
Message History 输出
读取出的记忆可以用两种格式返回:
-
Message:以
Message对象返回记忆,并包含messages_text字段,内部保存取回的聊天文本。 这是最常见的输出形式,通常用于把历史记忆当作聊天消息传给后续组件。 -
DataFrame:以
DataFrame形式返回消息数据。 当你希望以表格结构处理这些记忆,而不是把它们当作聊天消息继续传递时,这种格式更合适。
你可以在组件输出端口附近切换输出类型。