Chat models 接受消息对象序列作为输入并返回 ChatResponse(包含 AssistantMessage)作为输出。交互通常是无状态的,因此简单的对话循环涉及使用不断增长的消息列表调用模型。
基础对话示例
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.prompt.Prompt;
import java.util.ArrayList;
import java.util.List;
ChatModel chatModel = // ... 初始化
List<Message> conversationHistory = new ArrayList<>();
// 第一轮对话
conversationHistory.add(new UserMessage("你好!"));
ChatResponse response1 = chatModel.call(new Prompt(conversationHistory));
conversationHistory.add(response1.getResult().getOutput());
// 第二轮对话
conversationHistory.add(new UserMessage("你能帮我学习 Java 吗?"));
ChatResponse response2 = chatModel.call(new Prompt(conversationHistory));
conversationHistory.add(response2.getResult().getOutput());
// 第三轮对话
conversationHistory.add(new UserMessage("从哪里开始?"));
ChatResponse response3 = chatModel.call(new Prompt(conversationHistory));
使用 Builder 模式
Spring AI Alibaba 的消息类提供了 builder 模式以便于构建:
// UserMessage with builder
UserMessage userMsg = UserMessage.builder()
.text("你好,我想学习 Spring AI Alibaba")
.metadata(Map.of("user_id", "user_123"))
.build();
// SystemMessage with builder
SystemMessage systemMsg = SystemMessage.builder()
.text("你是一个 Spring 框架专家")
.metadata(Map.of("version", "1.0"))
.build();
// AssistantMessage with builder
AssistantMessage assistantMsg = AssistantMessage.builder()
.content("我很乐意帮助你学习 Spring AI Alibaba!")
.build();
消息复制和修改
// 复制消息
UserMessage original = new UserMessage("原始消息");
UserMessage copy = original.copy();
// 使用 mutate 创建修改的副本
UserMessage modified = original.mutate()
.text("修改后的消息")
.metadata(Map.of("modified", true))
.build();
ReactAgent 自动管理消息历史,但你也可以直接使用消息:
import com.alibaba.cloud.ai.graph.agent.ReactAgent;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.messages.AssistantMessage;
ReactAgent agent = ReactAgent.builder()
.name("my_agent")
.model(chatModel)
.systemPrompt("你是一个有帮助的助手")
.build();
// 使用字符串
AssistantMessage response1 = agent.call("你好");
// 使用 UserMessage
UserMessage userMsg = new UserMessage("帮我写一首诗");
AssistantMessage response2 = agent.call(userMsg);
// 使用消息列表
List<Message> messages = List.of(
new UserMessage("我喜欢春天"),
new UserMessage("写一首关于春天的诗")
);
AssistantMessage response3 = agent.call(messages);
本文整理自 Spring AI Alibaba 官方文档《Messages 消息》:https://java2ai.com/docs/frameworks/agent-framework/tutorials/messages

AI项目博客






