spring AI Alibaba Messages消息
spring AI Alibaba Messages消息
官网
https://java2ai.com/docs/frameworks/agent-framework/tutorials/messages
以下来自官网
Messages消息
Messages 是 Spring AI Alibaba 中模型交互的基本单元。它们代表模型的输入和输出,携带在与 LLM 交互时表示对话状态所需的内容和元数据。
Messages 是包含以下内容的对象:
Role(角色) - 标识消息类型(如 system、user、assistant)
Content(内容) - 表示消息的实际内容(如文本、图像、音频、文档等)
Metadata(元数据) - 可选字段,如响应信息、消息 ID 和 token 使用情况
Spring AI Alibaba 提供了一个标准的消息类型系统,可在所有模型提供商之间工作,确保无论调用哪个模型都具有一致的行为。
@Resource(name = "deepseek")
private ChatModel deepseekChatModel;
@GetMapping("/message/chat")
public ChatResponse chat() {
DashScopeChatOptions chatOptions = DashScopeChatOptions.builder()
.withMaxToken(100) // 限制token
.build();
SystemMessage systemMessage = new SystemMessage("你是一个AI助手,请回答问题。");
UserMessage userMessage = new UserMessage("讲讲如何高效学习");
Prompt prompt = new Prompt(List.of(systemMessage, userMessage), chatOptions);
ChatResponse call = deepseekChatModel.call(prompt);
return call;
}
response
{
"result": {
"output": {
"messageType": "ASSISTANT",
"metadata": {
"finishReason": "LENGTH",
"id": "fb2dd382-318f-4412-8577-c7b57ec8af2d",
"role": "ASSISTANT",
"messageType": "ASSISTANT",
"reasoningContent": ""
},
"toolCalls": [],
"media": [],
"text": "高效学习需要结合科学方法、合理规划和持续实践。以下是一套系统化的策略,帮助你提升学习效率:\n\n### 1. **明确目标与规划**\n - **SMART原则**:设定具体(Specific)、可衡量(Measurable)、可实现(Achievable)、相关(Relevant)和有时限(Time-bound)的目标。例如:\"本周掌握微积分中的微分法则,并完成5道练习题\"。\n - **任务分解**:将大目标拆"
},
"metadata": {
"finishReason": "LENGTH",
"contentFilters": [],
"empty": true
}
},
"metadata": {
"id": "fb2dd382-318f-4412-8577-c7b57ec8af2d",
"model": "",
"rateLimit": {
"requestsRemaining": 0,
"tokensLimit": 0,
"requestsReset": "PT0S",
"tokensReset": "PT0S",
"requestsLimit": 0,
"tokensRemaining": 0
},
"usage": {
"promptTokens": 15,
"completionTokens": 100,
"totalTokens": 115,
"nativeUsage": {
"output_tokens": 100,
"input_tokens": 15,
"total_tokens": 115
}
},
"promptMetadata": [],
"empty": true
},
"results": [
{
"output": {
"messageType": "ASSISTANT",
"metadata": {
"finishReason": "LENGTH",
"id": "fb2dd382-318f-4412-8577-c7b57ec8af2d",
"role": "ASSISTANT",
"messageType": "ASSISTANT",
"reasoningContent": ""
},
"toolCalls": [],
"media": [],
"text": "高效学习需要结合科学方法、合理规划和持续实践。以下是一套系统化的策略,帮助你提升学习效率:\n\n### 1. **明确目标与规划**\n - **SMART原则**:设定具体(Specific)、可衡量(Measurable)、可实现(Achievable)、相关(Relevant)和有时限(Time-bound)的目标。例如:\"本周掌握微积分中的微分法则,并完成5道练习题\"。\n - **任务分解**:将大目标拆"
},
"metadata": {
"finishReason": "LENGTH",
"contentFilters": [],
"empty": true
}
}
]
}
消息类型
System Message(系统消息) - 告诉模型如何行为并为交互提供上下文
User Message(用户消息) - 表示用户输入和与模型的交互
Assistant Message(助手消息) - 模型生成的响应,包括文本内容、工具调用和元数据
Tool Response Message(工具响应消息) - 表示工具调用的输出
System Message
SystemMessage 表示一组初始指令,用于引导模型的行为。你可以使用系统消息来设置语气、定义模型的角色并建立响应指南。
角色设定,如:你是一个有帮助的编程助手。
User Message
UserMessage 表示用户输入和交互。它们可以包含文本、图像、音频、文件和任何其他数量的多模态内容。
提问:如:如何优雅的校验接口参数?
消息元数据
UserMessage userMsg = UserMessage.builder()
.text("你好!")
.metadata(Map.of(
"user_id", "alice", // 可选:识别不同用户
"session_id", "sess_123" // 可选:会话标识符
))
.build();
多模态内容
多模态性指的是处理不同形式数据的能力,如文本、音频、图像和视频。Spring AI Alibaba 包含这些数据的标准类型,可以跨提供商使用。
聊天模型可以接受多模态数据作为输入并生成它作为输出。下面我们展示包含多模态数据的输入消息的简短示例。
// 从 URL 创建图像
UserMessage userMsg = UserMessage.builder()
.text("描述这张图片的内容。")
.media(Media.builder()
.mimeType(MimeTypeUtils.IMAGE_JPEG)
.data(new URL("https://example.com/image.jpg"))
.build())
.build();
Assistant Message
AssistantMessage 表示模型调用的输出。它们可以包括多模态数据、工具调用以及你稍后可以访问的提供商特定元数据。
上面返回json中有 “messageType”: “ASSISTANT”,
AssistantMessage 对象由模型调用返回,其中包含响应中的所有相关元数据。
在 ReactAgent 中使用
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);
更多推荐



所有评论(0)