
SpringAI技术记录-多模态模型测试
本文最后更新于 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
向模型发送提示并获取回复内容。
代码解释
- 方法定义:
public String chatWithVlModel(String chatId, String imageUrl, String prompt) throws MalformedURLException {
- 此方法接收三个参数:`chatId`(聊天的唯一标识符)、`imageUrl`(图像的 URL 地址)和 `prompt`(用户输入的提示信息)。
- 方法可能会抛出 `MalformedURLException` 异常,因为在处理 `imageUrl` 时可能会出现 URL 格式错误。
- 构建系统消息:
Message systemMessage = new SystemMessage(demoAiDefaultProperties.getSystemPrompt());
- 创建一个 `SystemMessage` 对象,其内容由 `demoAiDefaultProperties.getSystemPrompt()` 方法获取。
- 构建用户消息:
UserMessage userMessage = new UserMessage(prompt, List.of(new Media(MimeTypeUtils.IMAGE_PNG,
new URL(imageUrl))));
- 创建一个 `UserMessage` 对象,包含用户输入的提示信息和一张图像。
- 图像的 MIME 类型为 `image/png`,其 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();
- 使用 `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协议与多个服务器进行通信,并访问本地或远程的数据源。
总结
这段代码通过构建系统消息和用户消息,向视觉语言模型发送提示并获取回复内容。在处理过程中,使用了消息聊天内存顾问来管理聊天历史记录,并设置了聊天选项以指定使用的模型和是否启用多模型支持。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 萧轩miss
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果