Semantic Kernel + 通义千问:借助 one-api 调用阿里云灵积 DashScope api

one-api 相当于是一个兼容 OpenAI api 的 api 网关(针对 api 的反向代理),借助 one-api 可以通过已有的 OpenAI 客户端调用非 OpenAI 大模型的 api,比如通义千问。

DashScope 是阿里云提供的模型服务灵积的英文名称,这里通过调用 DashScope api 使用通义千问 qwen-max 大模型。

以容器方式部署 one-api

docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api

部署之后,通过浏览器访问对应服务器地址的 3000 端口就可以登录控制台(默认用户名是 root,密码是 123456)。

首先需要创建渠道(channel),这里创建类型为“阿里通义千问”渠道,默认填充的模型中就包含 qwen-max 模型,在“密钥”输入框输入阿里云灵积控制台“API-KEY管理”中创建的 api key

然后在 one-api 控制台创建 令牌(token),这里创建的 token 就是在 Semantic Kernel 中使用的 OpenAI 的 apiKey

最后用 C# 写个简单的控制台程序,通过 OpenAIChatCompletionService 与通义千问大模型进行对话

using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

var builder = Kernel.CreateBuilder();
builder.Services.AddOpenAIChatCompletion("qwen-max", "sk-one-api-token");
builder.Services.ConfigureHttpClientDefaults(b =>
    b.ConfigurePrimaryHttpMessageHandler(() => new OneApiRedirectingHandler()));

var kernel = builder.Build();

var prompt = @"<message role=""user"">博客园是什么网站</message>";
var answer = await kernel.InvokePromptAsync(prompt);
Console.WriteLine(answer);

class OneApiRedirectingHandler() : DelegatingHandler(new HttpClientHandler())
{
    protected override Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request, CancellationToken cancellationToken)
    {
        request.RequestUri = new UriBuilder(request.RequestUri!) { Scheme = "http", Host = "one-api", Port = 3000 }.Uri;
        return base.SendAsync(request, cancellationToken);
    }
}

运行程序,通义千问给出下面的回答:

博客园是一个面向软件开发者的中文技术社区网站,创建于2004年。该网站主要提供博客空间、在线阅读和发布文章、分享开发技术信息、交流编程经验等功能服务。博客园汇集了众多的软件开发者和技术爱好者,内容覆盖程序设计、系统架构、数据库、人工智能、网络安全等多个领域,是IT从业人员学习、分享和成长的重要平台之一。
posted @ 2024-02-16 12:07  dudu  阅读(518)  评论(0编辑  收藏  举报