本文最后更新于 2025-07-21,文章内容可能已经过时。请谨慎检查,如果谬误,请评论联系

阅读

阿里云百炼
spring-ai alibaba example

测试代码

使用qwen-vl模型,做图片问答

public String chatWithVlModel(String chatId, String imageUrl, String prompt) throws MalformedURLException {  
    Message systemMessage = new SystemMessage(demoAiDefaultProperties.getSystemPrompt());  
    UserMessage userMessage = new UserMessage(prompt, List.of(new Media(MimeTypeUtils.IMAGE_PNG,  
            new URL(imageUrl))));  
    return chatClient.prompt(new Prompt(List.of(systemMessage,userMessage)))  
            .advisors(new MessageChatMemoryAdvisor(chatMemory))  
            .advisors(advisorSpec -> advisorSpec  
                    .param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)  
                    .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100)  
            )  
            .options(DashScopeChatOptions.builder()  
                    .withModel(DEFAULT_VL_MODEL_NAME)  
                    .withMultiModel(true)  
                    .build())  
            .call()  
            .content();  
}

代码功能概述

这段 Java 代码定义了一个名为 chatWithVlModel 的公共方法,其主要功能是与视觉语言模型(VL model)进行对话。该方法接收聊天 ID、图像 URL 和提示信息作为参数,然后构建系统消息和用户消息,最后使用 chatClient 向模型发送提示并获取回复内容。

代码解释

  1. 方法定义
public String chatWithVlModel(String chatId, String imageUrl, String prompt) throws MalformedURLException {
- 此方法接收三个参数:`chatId`(聊天的唯一标识符)、`imageUrl`(图像的 URL 地址)和 `prompt`(用户输入的提示信息)。
- 方法可能会抛出 `MalformedURLException` 异常,因为在处理 `imageUrl` 时可能会出现 URL 格式错误。
  1. 构建系统消息
Message systemMessage = new SystemMessage(demoAiDefaultProperties.getSystemPrompt());
- 创建一个 `SystemMessage` 对象,其内容由 `demoAiDefaultProperties.getSystemPrompt()` 方法获取。
  1. 构建用户消息
UserMessage userMessage = new UserMessage(prompt, List.of(new Media(MimeTypeUtils.IMAGE_PNG,  
        new URL(imageUrl))));
- 创建一个 `UserMessage` 对象,包含用户输入的提示信息和一张图像。
- 图像的 MIME 类型为 `image/png`,其 URL 由 `imageUrl` 提供。
  1. 向模型发送提示并获取回复
return chatClient.prompt(new Prompt(List.of(systemMessage,userMessage)))  
        .advisors(new MessageChatMemoryAdvisor(chatMemory))  
        .advisors(advisorSpec -> advisorSpec  
                .param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)  
                .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100)  
        )  
        .options(DashScopeChatOptions.builder()  
                .withModel(DEFAULT_VL_MODEL_NAME)  
                .withMultiModel(true)  
                .build())  
        .call()  
        .content();
- 使用 `chatClient` 向模型发送包含系统消息和用户消息的提示。
- 设置消息聊天内存顾问,用于管理聊天历史记录。
- 设置聊天选项,指定使用的模型名称和是否启用多模型支持。
- 调用 `call()` 方法发送请求并获取响应,最后返回响应的内容。

Mermaid 流程图

graph TD; A[开始] --> B[接收参数: chatId, imageUrl, prompt]; B --> C[构建系统消息]; C --> D[构建用户消息]; D --> E[向模型发送提示]; E --> F[设置消息聊天内存顾问]; F --> G[设置聊天选项]; G --> H[调用模型并获取响应]; H --> I[返回响应内容]; I --> J[结束];

测试内容和结果:

curl 'http://localhost:8080/api/default/chat/vl/jdbc/memory/vl-1?prompt=%E8%AF%A6%E7%BB%86%E6%8F%8F%E8%BF%B0%E8%BF%99%E4%B8%AA%E5%9B%BE%E7%89%87%E7%9A%84%E5%86%85%E5%AE%B9&imageUrl=https://file.xuanmiss.space/pigimg/202502211218344.png' \
  -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7' \
  -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -b 'XSRF-TOKEN=a7407775-ebd8-45e4-9422-06dd86227cc8; i18n_redirected=cn; _ga=GA1.1.1107789053.1737426032; _ga_SE93PK1T9Z=GS1.1.1737426032.1.1.1737426191.0.0.0' \
  -H 'DNT: 1' \
  -H 'Pragma: no-cache' \
  -H 'Sec-Fetch-Dest: document' \
  -H 'Sec-Fetch-Mode: navigate' \
  -H 'Sec-Fetch-Site: none' \
  -H 'Sec-Fetch-User: ?1' \
  -H 'Upgrade-Insecure-Requests: 1' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0' \
  -H 'sec-ch-ua: "Not(A:Brand";v="99", "Microsoft Edge";v="133", "Chromium";v="133"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"'
这张图片展示了一个系统架构图,描述了MCP(可能是某种协议)客户端与多个服务器之间的交互。具体来说:

1. **主机与MCP客户端**:左侧的矩形框表示一个带有MCP客户端的主机,这个客户端可以是Claude、IDEs或其他工具。

2. **MCP服务器A和本地数据源A**:从主机出发,有一条路径指向MCP服务器A,这条路径上标注了“MCP Protocol”,表示使用MCP协议进行通信。MCP服务器A连接到本地数据源A。

3. **MCP服务器B和本地数据源B**:同样地,还有一条路径指向MCP服务器B,这条路径也标注了“MCP Protocol”。MCP服务器B连接到本地数据源B。

4. **MCP服务器C和远程服务C**:第三条路径指向MCP服务器C,这条路径同样标注了“MCP Protocol”。MCP服务器C通过Web APIs连接到互联网上的远程服务C。

5. **你的电脑**:整个架构图被包含在一个更大的矩形框中,这个框标注为“Your Computer”,表示这些组件都在你的电脑上运行。

总结来说,这张图展示了MCP客户端如何通过MCP协议与多个服务器进行通信,并访问本地或远程的数据源。

总结

这段代码通过构建系统消息和用户消息,向视觉语言模型发送提示并获取回复内容。在处理过程中,使用了消息聊天内存顾问来管理聊天历史记录,并设置了聊天选项以指定使用的模型和是否启用多模型支持。