当前位置:   article > 正文

利用阿里通义千问和Semantic Kernel,10分钟搭建知识助手!

通译千问 私有化部署需要的硬件配置

前言

通义千问:是阿里推出的一个超大规模的语言模型,其中参数模型Qwen-72B已经宣布开源,同时还开源了18亿参数模型Qwen-1.8B和音频大模型Qwen-Audio,至此已经开源了18亿、70亿、140亿、720亿参数的4款大语言模型,以及视觉理解、音频理解两款多模态大模型。

Semantic Kernel:是微软推出的开源项目,旨在将大型语言模型与应用程序集成,方便开发者构建一个更加智能、更加高效的应用。更多介绍可以看我之前分享《微软官方出品:GPT大模型编排工具,支持C#、Python等多个语言版本》。

01

搭建通义千问

1、部署要求

python 3.8及以上版本 ;

pytorch 1.12及以上版本,推荐2.0及以上版本 ;

建议使用CUDA 11.4及以上(GPU用户需考虑此选项);

使用CPU推理,内存建议32G以上;

使用GPU推理,显存存建议24G以上;

建议使用Liunx服务器。

2、下载源码

git clone https://github.com/QwenLM/Qwen-VL

0d4287e197d6cf9e8c767cba5f529fb9.png

下载后的源码如下:

e1e4809d3032e0095e6ed3dffd92d203.png

其中源码中openai_api.py,就是基于FastAPI模仿OpenAI接口的源码。

3、安装大模型依赖库

进入源码目录,执行以下命令,安装通义千问的依赖库。

pip install -r requirements.txt

c24f2e135a0eafc776cbc05d24f2db34.png

4、安装fastapi相关依赖

执行以下命令,安装依赖库。

pip install fastapi uvicorn openai pydantic sse_starlette

4727157942d4907079ba2b7bfaa73d85.png

5、启动FastAPI

执行以下命令,启动项目。

python3 openai_api.py

3c9e9728d13e88e31c52318c6854eab5.png

安装成功后,我们在浏览器输入:http://127.0.0.1:8000,就可以查看API文档。

03ac1142e25715f5a527604952f9a0af.png

02

集成Semantic Kernel

1、创建一个控制台项目

aceb0c4f68036bd07dbbde9e9ada6c09.png

2、安装依赖

从NuGet安装依赖库:Microsoft.SemanticKernel。

58e392706281ac6260c31fd22856d810.png

3、添加通义千问扩展

为SemanticKernel添加通义千问扩展方法,代码如下:

  1. using Azure.AI.OpenAI;
  2. using Microsoft.Extensions.DependencyInjection;
  3. using Microsoft.Extensions.Logging;
  4. using Microsoft.SemanticKernel;
  5. using Microsoft.SemanticKernel.ChatCompletion;
  6. using Microsoft.SemanticKernel.Connectors.OpenAI;
  7. using Microsoft.SemanticKernel.TextGeneration;
  8. namespace Chat2KnowL.Console
  9. {
  10. public static class QwenServiceCollectionExtensions
  11. {
  12. /// <summary>
  13. /// 添加通义千问聊天服务
  14. /// </summary>
  15. /// <param name="builder"></param>
  16. /// <param name="modelId"></param>
  17. /// <param name="apiKey"></param>
  18. /// <param name="url"></param>
  19. /// <param name="orgId"></param>
  20. /// <param name="serviceId"></param>
  21. /// <returns></returns>
  22. public static IKernelBuilder AddQwenChatCompletion(this IKernelBuilder builder, string modelId, string apiKey, string url, string? orgId = null, string? serviceId = null)
  23. {
  24. string modelId2 = modelId;
  25. string apiKey2 = apiKey;
  26. string orgId2 = orgId;
  27. Func<IServiceProvider, object, OpenAIChatCompletionService> implementationFactory = (IServiceProvider serviceProvider, object? _) => new OpenAIChatCompletionService(modelId, new OpenAIClient(new Uri(url), new Azure.AzureKeyCredential(apiKey)), serviceProvider.GetService<ILoggerFactory>());
  28. builder.Services.AddKeyedSingleton((object?)serviceId, (Func<IServiceProvider, object?, IChatCompletionService>)implementationFactory);
  29. builder.Services.AddKeyedSingleton((object?)serviceId, (Func<IServiceProvider, object?, ITextGenerationService>)implementationFactory);
  30. return builder;
  31. }
  32. }
  33. }

4、SemanticKernel集成通义千问

SemanticKernel与通义千问集成,实现简单的知识助手!

  1. using Chat2KnowL.Console;
  2. using Microsoft.SemanticKernel;
  3. using Microsoft.SemanticKernel.Connectors.OpenAI;
  4. var builder = Kernel.CreateBuilder();
  5. //通义千问
  6. builder.AddQwenChatCompletion(
  7. "Qwen", "none", "http://127.0.0.1:8000/v1"
  8. );
  9. var kernel = builder.Build();
  10. //等待用户输入
  11. Console.Write("用户:");
  12. var input = Console.ReadLine();
  13. //循环对话
  14. while (input != "quit")
  15. {
  16. var prompt = @$"<message role=""user"">{input}</message>";
  17. var summarize = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings { MaxTokens = 100, Temperature = 0.5 });
  18. Console.Write("知识助理:");
  19. var result = kernel.InvokeStreamingAsync(summarize);
  20. await foreach (var item in result)
  21. {
  22. Console.Write(item.ToString());
  23. }
  24. Console.WriteLine();
  25. Console.WriteLine();
  26. Console.Write("用户:");
  27. input = Console.ReadLine();
  28. }

注意:

A、我们接口是模拟OpenAI的,所以我们修改符合OpenAI的接口地址;

B、开启支持流请求。

修改openai_api.py中的接口:create_chat_completion,修改内容见红色框。

48d43127ecbb5fb331902cab8c0abd4b.png

另外如果是通义千问是部署在服务器的,需要外部电脑访问的,还需要把--server-name参数的值改为0.0.0.0,或者在启动项目的时候指定。

392ffc1f8d2f2b82386b37ddb389ca18.png

5、测试效果

8d91ca8e148e6ca6233ae0e79e02ff01.png

03

最后

以上代码我已经放在Github,开源项目地址:

https://github.com/bianchenglequ/chat2KnowL

也欢迎大家点点收藏!

9bd00339299c1eb39536151d0f588236.png

该项目简介:知识文档问答工具,用大模型与文档对话,提供Al分析、阅读、问答工具,助你快速了解文档内容。

大家有什么问题,欢迎给我留言!

觉得好看 点个在看

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/406434
推荐阅读