ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Haystack 实验组件 ChatMessageWriter 使用指南:基于 ChatMessageStore 的会话消息写入

Haystack 实验组件 ChatMessageWriter 使用指南:基于 ChatMessageStore 的会话消息写入 Haystack 实验组件 ChatMessageWriter 使用指南基于 ChatMessageStore 的会话消息写入【免费下载链接】haystackOpen-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.项目地址: https://gitcode.com/GitHub_Trending/ha/haystackChatMessageWriter 是 Haystack 实验性扩展包haystack_experimental中负责把ChatMessage列表持久化写入底层ChatMessageStore的组件适用于需要保存多轮对话历史、按会话隔离消息的多用户聊天与 Agent 应用。阅读本文后你将掌握该组件的构造方式、run()输入输出契约、chat_history_id会话命名空间机制、序列化行为以及它与InMemoryChatMessageStore协同工作的完整用法。一、组件定位为什么需要 ChatMessageWriter在构建多轮对话系统或工具型 Agent 时模型产出的ChatMessage消息对象需要被保存下来供后续轮次的上下文构建、会话恢复或审计分析使用。Haystack 将存储介质抽象为ChatMessageStore聊天消息存储而ChatMessageWriter则是连接消息生产方与存储介质的写入组件。从文档定义看它的职责非常单一且清晰Writes chat messages to an underlying ChatMessageStore.将聊天消息写入底层的 ChatMessageStore。该组件属于haystack_experimental.components.writers.chat_message_writer模块见 experimental_writers_api.md属于实验性 API。从仓库源码结构看haystack_experimental是独立于haystack/主包之外发布的实验性扩展包本文所描述的能力以 2.18 版本参考文档为基准。二、快速上手最小可运行示例文档给出了最直接的用法——手动构造消息、创建内存存储、实例化 writer 并执行一次写入from haystack.dataclasses import ChatMessage from haystack_experimental.components.writers import ChatMessageWriter from haystack_experimental.chat_message_stores.in_memory import InMemoryChatMessageStore messages [ ChatMessage.from_assistant(Hello, how can I help you?), ChatMessage.from_user(I have a question about Python.), ] message_store InMemoryChatMessageStore() writer ChatMessageWriter(message_store) writer.run(chat_history_iduser_456_session_123, messagesmessages)这段代码演示了三个关键步骤构造消息使用ChatMessage.from_assistant(...)与ChatMessage.from_user(...)工厂方法创建消息对象。这些工厂方法定义在 Haystack 主包的 chat_message.py 中该文件同时提供from_system、from_tool等构造方法消息内部以角色role与内容texts、tool_calls等属性组织。创建存储实例化InMemoryChatMessageStore作为底层存储。执行写入调用writer.run()传入会话标识chat_history_id与消息列表。运行结束后run()会返回一个包含messages_written键的字典其值为本次实际写入存储的消息数量可用于确认写入结果或接入下游逻辑。三、构造函数详解def __init__(chat_message_store: ChatMessageStore) - NoneChatMessageWriter的构造函数只接收一个必填参数参数类型说明chat_message_storeChatMessageStore消息将被写入的目标存储。writer 本身不管理存储的生命周期存储由调用方创建并传入这种组件持有一个存储实例的设计使得同一个 writer 可以绑定不同的存储实现内存、数据库等也便于在测试中替换为 mock 存储。四、run() 方法输入输出契约component.output_types(messages_writtenint) def run(chat_history_id: str, messages: list[ChatMessage]) - dict[str, int]run()是组件被管道或直接调用时的执行入口其签名被component.output_types(...)装饰器标注声明了输出槽位messages_written类型int。输入参数chat_history_id: str聊天会话或对话的唯一标识符。文档明确指出每个chat_history_id对应底层ChatMessageStore中一段独立的聊天历史。实际使用时可以用会话 ID 或对话 ID 来隔离不同会话的消息例如user_456_session_123这样的组合键。messages: list[ChatMessage]要写入存储的聊天消息列表。返回值messages_written: int写入ChatMessageStore的消息数量。由于返回的是字典而非裸整数该组件可以无缝接入 Haystack 管道通过输出槽位将数量传给其他组件。五、chat_history_id会话命名空间机制chat_history_id是整个写入流程中最核心的设计。参考 experimental_chatmessage_store_api.md 中对InMemoryChatMessageStore的说明Thechat_history_idparameter is used as a unique identifier for each conversation or chat session. It acts as a namespace that isolates messages from different sessions.也就是说chat_history_id充当命名空间同一个chat_history_id下的所有消息共享同一条会话历史不同chat_history_id之间的消息互不干扰写入时不会相互覆盖读取、删除操作同样需要携带该 ID保证读写按会话对齐。实际工程中它通常来自用户 ID 与会话 ID 的组合如user_456_session_123从而支持多租户、多会话并存的场景。六、底层存储InMemoryChatMessageStore 协同使用ChatMessageWriter与存储解耦而文档示例配套使用的是InMemoryChatMessageStore。该内存存储的构造函数如下def __init__(skip_system_messages: bool True, last_k: int | None 10) - None参数默认值说明skip_system_messagesTrue是否跳过不存储system 消息last_k10默认检索最近多少条消息未指定时为 10除了write_messages(chat_history_id, messages)写入并返回写入数量若messages不是ChatMessage列表则抛出ValueError该存储还提供以下配套方法retrieve_messages(chat_history_id, last_kNone)检索某会话的全部消息last_k为None时回退到构造函数中的默认值若显式传入小于 0 的值则抛出ValueError。count_messages(chat_history_id)统计某会话的消息数量。delete_messages(chat_history_id)删除某会话的全部消息。delete_all_messages()清空所有会话的消息。完整的写入—检索闭环示例from haystack.dataclasses import ChatMessage from haystack_experimental.chat_message_stores.in_memory import InMemoryChatMessageStore message_store InMemoryChatMessageStore() messages [ ChatMessage.from_assistant(Hello, how can I help you?), ChatMessage.from_user(Hi, I have a question about Python. What is a Protocol?), ] message_store.write_messages(chat_history_iduser_456_session_123, messagesmessages) retrieved_messages message_store.retrieve_messages(chat_history_iduser_456_session_123) print(retrieved_messages)在实际管道中写入方ChatMessageWriter与读取方store 的retrieve_messages通过同一个chat_history_id对齐即可实现写入本轮对话 → 检索历史 → 拼入下一轮 prompt的完整记忆闭环。七、序列化与反序列化to_dict / from_dict与其他 Haystack 组件一致ChatMessageWriter支持字典形式的序列化便于管道保存、传输与重启恢复。to_dictdef to_dict() - dict[str, Any]将组件序列化为字典返回包含序列化数据的字典。序列化结果会携带组件的类型标识以及底层 message store 的序列化信息。from_dictclassmethod def from_dict(cls, data: dict[str, Any]) - ChatMessageWriter从字典反序列化组件。文档特别声明了异常行为若序列化数据中没有正确指定 message store或其类型无法被导入将抛出DeserializationError。这提醒我们在手工构造序列化数据如编写管道 YAML/JSON 配置时必须确保 store 的类型字段完整且模块可导入。这也是 Haystack 序列化安全机制的一部分——反序列化阶段对类型与模块的校验与主包serialization_security.py中的安全策略一脉相承。八、应用场景与管道集成虽然ChatMessageWriter本身是写入组件但结合其输入输出契约可以在以下典型场景中发挥作用多轮对话持久化将每轮用户与助手消息写入 store为后续会话恢复提供依据。多会话隔离通过不同的chat_history_id支持多用户、多会话并行避免消息串扰。Agent 记忆管理与工具型 Agent 结合将 Agent 与工具的交互消息落库配合检索实现长期记忆。管道衔接由于run()声明了messages_written输出槽位可以直接接入 Haystack 管道将写入数量作为后续组件如监控、统计的输入。需要说明的是ChatMessageWriter与InMemoryChatMessageStore均属于实验性 APIhaystack_experimental包其接口在后续版本中可能存在调整。使用时应关注对应版本如 2.18的参考文档并为生产环境预留升级迁移空间。结语ChatMessageWriter是 Haystack 实验组件中消息落库的标准化入口通过chat_history_id实现会话级隔离通过ChatMessageStore抽象与具体存储解耦通过messages_written输出槽位保持管道兼容性。配合InMemoryChatMessageStore的写入/检索/删除 API即可快速构建具备多会话记忆能力的对话系统。进一步可阅读同目录下的 experimental_chatmessage_store_api.md 了解存储层完整接口或在 pipeline-components/writers 下查看其他 writer 组件的用法。【免费下载链接】haystackOpen-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.项目地址: https://gitcode.com/GitHub_Trending/ha/haystack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表