最近手裡沒有官方的OpenAI API Key了,只能在第三方代理平臺去購買API Key。
但是使用Semantic Kernel的時候發現AddOpenAIChatCompletion
不像AddAzureOpenAIChatCompletion
那樣可以選擇終結點
去看了下Semantic Kernel專案下的issues,這個問題被提及了好幾次,但是官方仍然沒有提供Endpoint。不過廣大的開發者們想出了應對方法,就是對引數裡的HttpClient進行更改。
有很多途徑可以把HttpClient請求裡的官方API域名改為第三方代理OpenAI域名,但是這裡只提及一個我試了可以用的:
- 確保已安裝包
Microsoft.Extensions.Http
- 先自定義一個 HTTP 訊息處理程式(DelegatingHandler),它用於處理 HTTP 請求並在傳送請求前對請求進行修改。
- 重寫其SendAsync方法,該方法在傳送 HTTP 請求時被呼叫,將請求的目標 URI 修改為了一個新的 URI。
class CustomRedirectingHandler() : DelegatingHandler(new HttpClientHandler())
{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
request.RequestUri = new UriBuilder(request.RequestUri!) { Host = "api.xxxxxx.com" }.Uri; //替換為第三方代理API的地址
return base.SendAsync(request, cancellationToken);
}
}
然後就可以在註冊服務時使用了
var builder = Kernel.CreateBuilder().
"gpt-3.5-turbo",
"your-api-Key");
builder.Services.ConfigureHttpClientDefaults(
b => b.ConfigurePrimaryHttpMessageHandler(
() => new CustomRedirectingHandler()));
這個時候你拿到的IChatCompletionService
就會將請求直接傳送到第三方代理OpenAI API