Files
Yi.Admin/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiChat/Impl/AzureChatService.cs

41 lines
1.3 KiB
C#
Raw Normal View History

2025-06-21 01:41:05 +08:00
using System.Runtime.CompilerServices;
using Azure;
2025-06-21 01:08:14 +08:00
using Azure.AI.OpenAI;
using OpenAI.Chat;
2025-06-25 17:12:09 +08:00
using Yi.Framework.AiHub.Domain.Shared.Dtos;
2025-06-21 01:08:14 +08:00
namespace Yi.Framework.AiHub.Domain.AiChat.Impl;
public class AzureChatService : IChatService
{
2025-06-25 17:12:09 +08:00
public AzureChatService()
2025-06-21 01:08:14 +08:00
{
}
2025-06-25 17:12:09 +08:00
public async IAsyncEnumerable<string> CompleteChatAsync(AiModelDescribe aiModelDescribe, List<ChatMessage> messages,
2025-06-21 01:41:05 +08:00
[EnumeratorCancellation] CancellationToken cancellationToken)
2025-06-21 01:08:14 +08:00
{
2025-06-25 17:12:09 +08:00
var endpoint = new Uri(aiModelDescribe.Endpoint);
2025-06-21 01:08:14 +08:00
2025-06-25 17:12:09 +08:00
var deploymentName = aiModelDescribe.ModelId;
var apiKey = aiModelDescribe.ApiKey;
2025-06-21 01:08:14 +08:00
AzureOpenAIClient azureClient = new(
endpoint,
new AzureKeyCredential(apiKey));
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
2025-06-25 22:41:32 +08:00
var response = chatClient.CompleteChatStreamingAsync(messages, new ChatCompletionOptions()
{
MaxOutputTokenCount = 2048
}, cancellationToken: cancellationToken);
2025-06-21 01:08:14 +08:00
await foreach (StreamingChatCompletionUpdate update in response)
{
foreach (ChatMessageContentPart updatePart in update.ContentUpdate)
{
yield return updatePart.Text;
}
}
}
}