跳到主要内容

消息历史

Message History 组件同时提供聊天历史读取与消息存储能力。 它既可以把消息存取到 SkillFlaw 存储,也可以接入专用聊天记忆数据库,例如 Mem0 或 Redis。

提示

Agent 组件默认自带聊天记忆,并使用 SkillFlaw 存储。 对于大多数场景,这个内建能力已经足够。

以下情况更适合使用 Message History 组件:

  • 你要给语言模型组件(而不是 Agent)提供聊天记忆的存储与读取能力。
  • 你希望在聊天上下文之外读取历史消息,例如在情绪分析流程中读取并分析近期记忆。
  • 你希望把记忆写入一个独立于 SkillFlaw 存储之外的专用数据库。

更多说明请参阅存储聊天记忆

在流程中使用 Message History

Message History 有两种模式,具体取决于你想在流程的哪个阶段使用它:

  • Retrieve 模式:从 SkillFlaw 数据库或外部记忆中读取聊天记录
  • Store 模式:把聊天消息存入 SkillFlaw 数据库或外部记忆

如果你既要读取又要写入聊天记忆,就需要在同一个流程中放置多个 Message History 组件。

以下步骤演示如何构建一个使用 SkillFlaw 内置数据库存储聊天记忆的对话流程:

  1. 创建或编辑一个需要使用聊天记忆的流程。

  2. 在流程开头添加一个 Message History 组件,并将其设置为 Retrieve 模式。

  3. 可选:在 Message History组件头部菜单中点击 Controls,启用记忆排序、过滤和数量限制等参数。

  4. 添加一个 Prompt Template 组件,在 Template 中加入 {memory} 变量,并把 Message History 的输出连接到 memory 输入。

    Prompt Template 组件用于向 LLM 提供额外指令与上下文,它与 Chat Input 传入的聊天消息是分离的。 模板中可以包含任意文本与变量,例如:


    _10
    You are a helpful assistant that answers questions.
    _10
    _10
    Use markdown to format your answer, properly embedding images and urls.
    _10
    _10
    History:
    _10
    _10
    {memory}

    模板中的变量({variable})会动态为 Prompt Template 增加输入字段,使流程可以从其他组件、SkillFlaw 全局变量或运行时输入中获得这些值。 更多说明请参阅在 Prompt 中定义变量

    在这个示例中,{memory} 会被读取出来的聊天记忆填充,再传给 Language ModelAgent 组件,为 LLM 提供额外上下文。

  5. Prompt Template 的输出连接到 Language Model 组件的 System Message 输入。

    此示例使用 Language Model 流程组件作为主聊天驱动,但你也可以改用其他语言模型组件或 Agent 组件。

  6. 添加一个 Chat Input 组件,并把它连接到 Language Model 组件的 Input 字段。

  7. Language Model 的输出连接到 Chat Output 组件。

  8. 在流程末尾再添加一个 Message History 组件,并将其设置为 Store 模式。

    你可以按需继续配置该组件的其他参数,但要注意:这里的第二个 Message History 负责的是“写入”聊天记忆,而不是读取。

  9. Chat Output 的输出连接到 Message History 组件的 Message 输入。

    这样一来,每次 LLM 的响应从 Language Model 传给 Chat Output 后,都会再由最后这个 Message History 写入聊天记忆。

Message History 参数

有些参数在可视化编辑器中默认处于隐藏状态。 你可以通过组件标题栏菜单中的 控件 来修改全部参数。

可用参数取决于组件当前处于 Retrieve 还是 Store 模式。

NameTypeDescription
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输入参数。按发送者类型过滤,可选 UserMachineMachine and User(默认)。
Session ID (session_id)String输入参数。要读取的聊天记忆对应的会话 ID。若省略或留空,则使用本次流程运行的当前会话 ID。

Message History 输出

读取出的记忆可以用两种格式返回:

  • Message:以 Message 对象返回记忆,并包含 messages_text 字段,内部保存取回的聊天文本。 这是最常见的输出形式,通常用于把历史记忆当作聊天消息传给后续组件。

  • DataFrame:以 DataFrame 形式返回消息数据。 当你希望以表格结构处理这些记忆,而不是把它们当作聊天消息继续传递时,这种格式更合适。

你可以在组件输出端口附近切换输出类型。