利用阿里通义千问和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
下载后的源码如下:
其中源码中openai_api.py,就是基于FastAPI模仿OpenAI接口的源码。
3、安装大模型依赖库
进入源码目录,执行以下命令,安装通义千问的依赖库。
pip install -r requirements.txt
4、安装fastapi相关依赖
执行以下命令,安装依赖库。
pip install fastapi uvicorn openai pydantic sse_starlette
5、启动FastAPI
执行以下命令,启动项目。
python3 openai_api.py
安装成功后,我们在浏览器输入:**http://127.0.0.1:8000**,就可以查看API文档。
02 集成Semantic Kernel
1、创建一个控制台项目
2、安装依赖
从NuGet安装依赖库:Microsoft.SemanticKernel。
3、添加通义千问扩展
为SemanticKernel添加通义千问扩展方法,代码如下:
using Azure.AI.OpenAI;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.TextGeneration;
namespace Chat2KnowL.Console
{
public static class QwenServiceCollectionExtensions
{
/// <summary>
/// 添加通义千问聊天服务
/// </summary>
/// <param name="builder"></param>
/// <param name="modelId"></param>
/// <param name="apiKey"></param>
/// <param name="url"></param>
/// <param name="orgId"></param>
/// <param name="serviceId"></param>
/// <returns></returns>
public static IKernelBuilder AddQwenChatCompletion(this IKernelBuilder builder, string modelId, string apiKey, string url, string? orgId = null, string? serviceId = null)
{
string modelId2 = modelId;
string apiKey2 = apiKey;
string orgId2 = orgId;
Func<IServiceProvider, object, OpenAIChatCompletionService> implementationFactory = (IServiceProvider serviceProvider, object? _) => new OpenAIChatCompletionService(modelId, new OpenAIClient(new Uri(url), new Azure.AzureKeyCredential(apiKey)), serviceProvider.GetService<ILoggerFactory>());
builder.Services.AddKeyedSingleton((object?)serviceId, (Func<IServiceProvider, object?, IChatCompletionService>)implementationFactory);
builder.Services.AddKeyedSingleton((object?)serviceId, (Func<IServiceProvider, object?, ITextGenerationService>)implementationFactory);
return builder;
}
}
}
4、SemanticKernel集成通义千问
SemanticKernel与通义千问集成,实现简单的知识助手!
using Chat2KnowL.Console;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
var builder = Kernel.CreateBuilder();
//通义千问
builder.AddQwenChatCompletion(
"Qwen", "none", "http://127.0.0.1:8000/v1"
);
var kernel = builder.Build();
//等待用户输入
Console.Write("用户:");
var input = Console.ReadLine();
//循环对话
while (input != "quit")
{
var prompt = @$"<message role=""user"">{input}</message>";
var summarize = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings { MaxTokens = 100, Temperature = 0.5 });
Console.Write("知识助理:");
var result = kernel.InvokeStreamingAsync(summarize);
await foreach (var item in result)
{
Console.Write(item.ToString());
}
Console.WriteLine();
Console.WriteLine();
Console.Write("用户:");
input = Console.ReadLine();
}
注意:
A、我们接口是模拟OpenAI的,所以我们修改符合OpenAI的接口地址;
B、开启支持流请求。
修改openai_api.py中的接口:create_chat_completion,修改内容见红色框。
另外如果是通义千问是部署在服务器的,需要外部电脑访问的,还需要把**–server-name参数的值改为0.0.0.0**,或者在启动项目的时候指定。
5、测试效果
03 最后
以上代码我已经放在Github,开源项目地址:
https://github.com/bianchenglequ/chat2KnowL
也欢迎大家点点收藏!
该项目简介:知识文档问答工具,用大模型与文档对话,提供Al分析、阅读、问答工具,助你快速了解文档内容。
大家有什么问题,欢迎给我留言!
- End -
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!