當前位置: 妍妍網 > 碼農

想學Semantic Kernel,沒有OpenAI介面該怎麽辦?

2024-02-02碼農

各位開發小夥伴們,我是許澤宇,你是否曾夢想掌握 Semantic Kernel ,卻因為手頭沒有 OpenAI Azure OpenAI 的資源而感到沮喪?別擔心,今天我就來為你揭開如何在資源緊張的情況下,依舊能學習和使用 Semantic Kernel 的秘密!

首先,讓我們一起明確目標—— Semantic Kernel 是未來編程的寶貝,掌握它的你,就像站在巨人的肩上。但大家都知道,想要駕馭這個強大的工具,少不了那些強大的語言模型,比如LLM。問題來了,如果我們沒有辦法接觸到OpenAI提供的服務,是不是就意味著要與 Semantic Kernel 無緣?

放心,答案是「 絕對不 」!給我兩分鐘,告訴你一個大家可能忽視了的資源—— 星火大模型!

這是一顆隱藏在大陸深處的「明星」,完全可以成為你走入 Semantic Kernel 大門的鑰匙。而且好訊息是,個人使用者在國內有機會申請到免費的API額度!這不就為我們的學習之路鋪平了嗎

立即行動,抓住這次機會,點選以下連結,迅速進入申請界面:

https://xinghuo.xfyun.cn/sparkapi

星火大模型不僅僅提供了1.5版本,還有3.0、3.5的超新版本等你體驗!每個版本都提供了200W(即200萬)token的個人學習使用額度,這對於個人學習和實驗已經綽綽有余。

開啟上面的網站後,我們往下滑動,可以看到這裏有3個不同版本的模型,我們分別可以領取200W的token,最重要的是這個無需企業認證,個人也可以領取使用!!

領取完以後,我們登陸進系統可以看到,每個版本我們都擁有了 200W 的Token,總計 600W 的Token。這個非常棒!

好了,現在我們已經擁有了星火大模型,下面我們來看看我們該如何和Semantic Kernel進行對接。

由於Semantic Kernel原生只支持openai、azure openai 格式的介面,我們需要理由one-api進行將星火大模型的介面轉發為openai介面的協定格式。

https://github.com/songquanpeng/one-api

這是one-api的計畫開源地址

為了方便,我們可以直接使用sqlite的docker部署方式。

使用下面的命令則會開啟一個3000埠的服務

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埠的服務,然後可以看到oneapi已經跑起來了,然後我們需要進行星火大模型的配置。

首先點選渠道:

點選添加新渠道

然後在型別選擇訊飛星火認知

我們可以看到模型預設幫我們選取了SparkDesk

然後我們需要再下面的秘鑰處填寫秘鑰,這個秘鑰分別是

APPID|APISecret|APIKey

也就是我們頁面上的這3個值,用|分割後填寫到秘鑰裏即可。

然後我們需要建立一個令牌

設定一個令牌名稱,過期時間和額度。也可以設定無限額度。

然後我們的令牌配置好了,我們可以postman來測試一下看看

輸入伺服器的ip:3000/v1/chat/completions

然後我們請求試一試看看

可以看到我們的介面已經通了,然後我們需要來配置一下Semantic Kernel裏改怎麽接入,我們需要建立一個 OpenAIHttpClientHandler 的代理類

public classOpenAIHttpClientHandler : HttpClientHandler {protectedoverrideasync Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { UriBuilder uriBuilder;switch (request.RequestUri.LocalPath) {case"/v1/chat/completions": uriBuilder = new UriBuilder(request.RequestUri) {// 這裏是你要修改的 URL Scheme = "https://xxx.xxx.com/", Host = "xxx.xxx.com", Path = "v1/chat/completions", }; request.RequestUri = uriBuilder.Uri;break; }// 接著,呼叫基礎類別的 SendAsync 方法將你的修改後的請求發出去 HttpResponseMessage response = awaitbase.SendAsync(request, cancellationToken);return response; } }

var handler = new OpenAIHttpClientHandler();services.AddScoped<Kernel>((serviceProvider) =>{var kernel = Kernel.CreateBuilder() .AddOpenAIChatCompletion( modelId: OpenAIOptions.Model, apiKey: OpenAIOptions.Key, httpClient: new HttpClient(handler)) .Build(); RegisterPluginsWithKernel(kernel);return kernel;});

需要註意的是,當我們使用星火大模型時, mo delId需要傳 S parkDesk,另外 星火現在沒有提供Embedding模型,所以我們無法使用Memory Store相關的功能,只能使用基礎的Chat功能。如果我們需要用到Memory Store的功能,可以直接部署 M3E 這個向量模型,這個對資源的消耗相對較低。

另外我將Semantic Kernel相關的學習文件整理到了如下網站,在網站裏有非常多的範例,關註公眾號發送「SK」即可獲取這個非常全的學習資料。

歡迎大家收藏這個網站進行學習。

就這樣,讓我們在星火的指引下,擁抱Semantic Kernel,共同突破技術的新高峰。動手試試,你會發現新世界的大門已經為你敞開!別忘了,關註我,獲取更多技術幹貨和秘籍,一起在程式碼的海洋裏暢遊!