AI项目博客
记录 AI 工程实践与大模型应用

Spring AI Alibaba 19|Memory 短期记忆 · 常见模式:删除消息

你可以从 Graph 状态中删除消息以管理消息历史。

这在你想要删除特定消息或清除整个消息历史时很有用。

要从 Graph 状态中删除消息,你可以在 Hook 中返回新的消息列表:

import com.alibaba.cloud.ai.graph.agent.hook.HookPosition;
import com.alibaba.cloud.ai.graph.agent.hook.HookPositions;
import com.alibaba.cloud.ai.graph.agent.hook.messages.MessagesModelHook;
import com.alibaba.cloud.ai.graph.agent.hook.messages.AgentCommand;
import com.alibaba.cloud.ai.graph.agent.hook.messages.UpdatePolicy;
import com.alibaba.cloud.ai.graph.RunnableConfig;
import org.springframework.ai.chat.messages.Message;
import java.util.List;

@HookPositions({HookPosition.AFTER_MODEL})
public class MessageDeletionHook extends MessagesModelHook {

  @Override
  public String getName() {
      return "message_deletion";
  }

  @Override
  public AgentCommand afterModel(List<Message> previousMessages, RunnableConfig config) {
      if (previousMessages.size() > 2) {
          // 删除最早的两条消息,只保留剩余的消息
          List<Message> remainingMessages = previousMessages.subList(2, previousMessages.size());
          return new AgentCommand(remainingMessages, UpdatePolicy.REPLACE);
      }

      return new AgentCommand(previousMessages);
  }
}

删除所有消息:

import com.alibaba.cloud.ai.graph.agent.hook.HookPosition;
import com.alibaba.cloud.ai.graph.agent.hook.HookPositions;
import com.alibaba.cloud.ai.graph.agent.hook.messages.MessagesModelHook;
import com.alibaba.cloud.ai.graph.agent.hook.messages.AgentCommand;
import com.alibaba.cloud.ai.graph.agent.hook.messages.UpdatePolicy;
import com.alibaba.cloud.ai.graph.RunnableConfig;
import org.springframework.ai.chat.messages.Message;
import java.util.ArrayList;
import java.util.List;

@HookPositions({HookPosition.AFTER_MODEL})
public class ClearAllMessagesHook extends MessagesModelHook {

  @Override
  public String getName() {
      return "clear_all_messages";
  }

  @Override
  public AgentCommand afterModel(List<Message> previousMessages, RunnableConfig config) {
      // 删除所有消息,返回空列表
      return new AgentCommand(new ArrayList<>(), UpdatePolicy.REPLACE);
  }
}

警告:删除消息时,确保生成的消息历史有效。检查你使用的 LLM 提供商的限制。例如:

  • 某些提供商期望消息历史以 user 消息开始
  • 大多数提供商要求带有工具调用的 assistant 消息后跟相应的 tool 结果消息
import com.alibaba.cloud.ai.graph.agent.hook.HookPosition;
import com.alibaba.cloud.ai.graph.agent.hook.HookPositions;
import com.alibaba.cloud.ai.graph.agent.hook.messages.MessagesModelHook;
import com.alibaba.cloud.ai.graph.agent.hook.messages.AgentCommand;
import com.alibaba.cloud.ai.graph.agent.hook.messages.UpdatePolicy;
import com.alibaba.cloud.ai.graph.RunnableConfig;
import org.springframework.ai.chat.messages.Message;
import java.util.List;

@HookPositions({HookPosition.AFTER_MODEL})
public class DeleteOldMessagesHook extends MessagesModelHook {

  @Override
  public String getName() {
      return "delete_old_messages";
  }

  @Override
  public AgentCommand afterModel(List<Message> previousMessages, RunnableConfig config) {
      if (previousMessages.size() > 2) {
          // 删除最早的两条消息,只保留剩余的消息
          List<Message> remainingMessages = previousMessages.subList(2, previousMessages.size());
          return new AgentCommand(remainingMessages, UpdatePolicy.REPLACE);
      }

      return new AgentCommand(previousMessages);
  }
}

ReactAgent agent = ReactAgent.builder()
  .name("my_agent")
  .model(chatModel)
  .systemPrompt("请简洁明了。")
  .hooks(new DeleteOldMessagesHook())
  .saver(new MemorySaver())
  .build();

RunnableConfig config = RunnableConfig.builder()
  .threadId("1")
  .build();

// 第一次调用
agent.call("你好!我是 bob", config);
// 输出:[('human', "你好!我是 bob"), ('assistant', '你好 Bob!很高兴见到你...')]

// 第二次调用
agent.call("我叫什么名字?", config);
// 输出:[('human', "我叫什么名字?"), ('assistant', '你的名字是 Bob...')]

本文整理自 Spring AI Alibaba 官方文档《Memory 短期记忆》:https://java2ai.com/docs/frameworks/agent-framework/tutorials/memory

赞(0)
未经允许不得转载:AI项目博客 » Spring AI Alibaba 19|Memory 短期记忆 · 常见模式:删除消息

评论 抢沙发

AI项目博客

专注 AI 工程化落地 —— 覆盖智能体、大模型、Java AI 与 Python 的学习笔记,以及 AI 平台的项目实战记录。

关于本站文章归档

登录

找回密码

注册