diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/HttpClientFactory.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/HttpClientFactory.cs index 7048c436..5c6ea86e 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/HttpClientFactory.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/HttpClientFactory.cs @@ -39,6 +39,12 @@ public static class HttpClientFactory private static readonly ConcurrentDictionary>> HttpClientPool = new(); + /// + /// 高并发下有问题 + /// + /// + /// + [Obsolete] public static HttpClient GetHttpClient(string key) { return HttpClientPool.GetOrAdd(key, k => new Lazy>(() => @@ -70,4 +76,4 @@ public static class HttpClientFactory return clients; })).Value[new Random().Next(0, PoolSize)]; } -} +} \ No newline at end of file diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorAzureDatabricks/Chats/AzureDatabricksChatCompletionsService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorAzureDatabricks/Chats/AzureDatabricksChatCompletionsService.cs index 6cd4fde1..f1382b38 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorAzureDatabricks/Chats/AzureDatabricksChatCompletionsService.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorAzureDatabricks/Chats/AzureDatabricksChatCompletionsService.cs @@ -10,7 +10,7 @@ using Yi.Framework.AiHub.Domain.Shared.Dtos.OpenAi; namespace Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorAzureDatabricks.Chats; -public class AzureDatabricksChatCompletionsService(ILogger logger) +public class AzureDatabricksChatCompletionsService(ILogger logger,IHttpClientFactory httpClientFactory) : IChatCompletionService { private string GetAddress(AiModelDescribe? options, string model) @@ -31,7 +31,7 @@ public class AzureDatabricksChatCompletionsService(ILogger logger) +public class AzureOpenAiChatCompletionCompletionsService(ILogger logger,IHttpClientFactory httpClientFactory) : IChatCompletionService { public async IAsyncEnumerable CompleteChatStreamAsync(AiModelDescribe options, @@ -21,7 +21,7 @@ public class AzureOpenAiChatCompletionCompletionsService(ILogger CreateImage(ImageCreateRequest imageCreate, AiModelDescribe? options = null, CancellationToken cancellationToken = default(CancellationToken)) @@ -98,7 +98,7 @@ public class AzureOpenAIServiceImageService : IImageService multipartContent.Add(new ByteArrayContent(imageEditCreateRequest.Image), "image", imageEditCreateRequest.ImageName); - return await HttpClientFactory.GetHttpClient(url).PostFileAndReadAsAsync( + return await httpClientFactory.CreateClient().PostFileAndReadAsAsync( url, multipartContent, cancellationToken); } diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorDeepSeek/Chats/DeepSeekChatCompletionsService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorDeepSeek/Chats/DeepSeekChatCompletionsService.cs index cac5805e..dde9b819 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorDeepSeek/Chats/DeepSeekChatCompletionsService.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorDeepSeek/Chats/DeepSeekChatCompletionsService.cs @@ -9,7 +9,7 @@ using Yi.Framework.AiHub.Domain.Shared.Dtos.OpenAi; namespace Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorDeepSeek.Chats; -public sealed class DeepSeekChatCompletionsService(ILogger logger) +public sealed class DeepSeekChatCompletionsService(ILogger logger,IHttpClientFactory httpClientFactory) : IChatCompletionService { public async IAsyncEnumerable CompleteChatStreamAsync(AiModelDescribe options, @@ -24,7 +24,7 @@ public sealed class DeepSeekChatCompletionsService(ILogger EmbeddingAsync( @@ -12,7 +12,7 @@ public sealed class SiliconFlowTextEmbeddingService AiModelDescribe? options = null, CancellationToken cancellationToken = default) { - var response = await HttpClientFactory.GetHttpClient(options.Endpoint).PostJsonAsync( + var response = await httpClientFactory.CreateClient().PostJsonAsync( options?.Endpoint.TrimEnd('/') + "/v1/embeddings", createEmbeddingModel, options!.ApiKey); diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/YiFrameworkAiHubDomainModule.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/YiFrameworkAiHubDomainModule.cs index b04c2d0f..30f155ba 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/YiFrameworkAiHubDomainModule.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/YiFrameworkAiHubDomainModule.cs @@ -83,6 +83,8 @@ namespace Yi.Framework.AiHub.Domain //配置服务号 Configure(configuration.GetSection("Fuwuhao")); + + services.AddHttpClient(); } public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context)