跳到主要内容

消息历史

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

Message History 输出​

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

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

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

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