官网

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);
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐