使用 Semantic Kernel 调用 Qwen-VL 多模态模型
一、引言
随着人工智能技术的不断发展,多模态模型逐渐成为研究的热点。Qwen-VL 是阿里云推出的大规模视觉语言模型,支持图像、文本等多种输入形式,并能够进行图像描述、视觉问答等多种任务。本文将介绍如何使用 Semantic Kernel(SK)调用 Qwen-VL 多模态模型,帮助开发者快速上手。
二、前提条件
- 安装 Semantic Kernel:请参考官方文档进行安装。
- 获取 Qwen-VL 模型:请确保已获取 Qwen-VL 模型的访问权限和 API Key。
- 准备开发环境:本文以 C# 为例,请确保已安装 Visual Studio 或其他 C# 开发环境。
三、实战
3.1 创建项目并引用 Semantic Kernel
首先,创建一个新的 C# 项目,并引用 Semantic Kernel 库。可以通过 NuGet 包管理器安装 Semantic Kernel。
dotnet add package Microsoft.SemanticKernel
3.2 配置模型参数
在项目中创建一个配置文件,用于存储模型的相关参数,如模型 ID、API Key 等。
public class ModelConfig
{
public string Model { get; set; }
public string EndpointKey { get; set; }
public string ApiKey { get; set; }
}
3.3 创建 Semantic Kernel 内核
使用配置文件中的参数,创建一个 Semantic Kernel 内核。
var modelConfig = new ModelConfig
{
Model = "Pro/Qwen/Qwen2.5-VL-7B-Instruct",
EndpointKey = "https://api.siliconflow.cn",
ApiKey = "your-api-key"
};
var builder = Kernel.CreateBuilder()
.AddOpenAIChatCompletion(modelConfig.Model, new Uri(modelConfig.EndpointKey), modelConfig.ApiKey);
Kernel kernel = builder.Build();
3.4 加载图像并创建聊天历史记录
从磁盘加载图像,并创建一个聊天历史记录,其中包含一条系统消息,指示 LLM 扮演所需的角色。
// 4. 从磁盘加载图像。
byte[] bytes = File.ReadAllBytes("C:\\Users\\73429\\Desktop\\SK调用多模态模型.png");
// 5. 创建一个聊天历史记录,其中包含一条系统消息,指示LLM扮演所需的角色。
var chatHistory = new ChatHistory("你的工作是描述图片。");
3.5 添加用户消息
向聊天历史记录中添加一条包含图像和关于图像的问题的用户消息。
// 6. 添加一条包含图像和关于图像的问题的用户消息。
chatHistory.AddUserMessage(
[
new TextContent("图片中描述了什么?"),
new ImageContent(bytes, "image/png"),
]);
3.6 调用模型并获取回复
使用 Semantic Kernel 内核调用 Qwen-VL 模型,并获取回复。
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
// 7. 调用LLM
var reply = await chatCompletionService.GetChatMessageContentAsync(chatHistory);
Console.WriteLine(reply.Content);
四、完整代码示例
以下是一个完整的代码示例,展示了如何使用 Semantic Kernel 调用 Qwen-VL 多模态模型。
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
// 1. 初始化配置
var modelConfig = new ModelConfig
{
Model = "Pro/Qwen/Qwen2.5-VL-7B-Instruct",
EndpointKey = "https://api.siliconflow.cn",
ApiKey = "your-api-key"
};
// 2. 创建一个OpenAI聊天完成的内核
var builder = Kernel.CreateBuilder()
.AddOpenAIChatCompletion(modelId,
new Uri(endpoint),
apiKey);
// 3.构建内核
Kernel kernel = builder.Build();
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
// 4. 从磁盘加载图像。
byte[] bytes = File.ReadAllBytes("C:\\Users\\73429\\Desktop\\SK调用多模态模型.png");
// 5. 创建一个聊天历史记录,其中包含一条系统消息,指示LLM扮演所需的角色。
var chatHistory = new ChatHistory("你的工作是描述图片。");
// 6. 添加一条包含图像和关于图像的问题的用户消息。
chatHistory.AddUserMessage(
[
new TextContent("图片中描述了什么?"),
new ImageContent(bytes, "image/png"),
]);
// 7. 调用LLM
var reply = await chatCompletionService.GetChatMessageContentAsync(chatHistory);
Console.WriteLine(reply.Content);
public class ModelConfig
{
public string Model { get; set; }
public string EndpointKey { get; set; }
public string ApiKey { get; set; }
}
运行结果如下,可以看到正确解析Qwen-VL正确解析出图片中的内容。
五、总结
本文介绍了如何使用 Semantic Kernel 调用 Qwen-VL 多模态模型。通过以上步骤,开发者可以快速上手,实现图像描述、视觉问答等多种任务。希望本文能帮助您更好地了解和使用 Qwen-VL 模型。