feat: 支持非流式传输功能
This commit is contained in:
@@ -5,6 +5,23 @@ namespace Yi.Framework.AiHub.Domain.AiChat;
|
||||
|
||||
public interface IChatService
|
||||
{
|
||||
public IAsyncEnumerable<CompleteChatResponse> CompleteChatAsync(AiModelDescribe aiModelDescribe, List<ChatMessage> messages,
|
||||
/// <summary>
|
||||
/// 聊天完成-流式
|
||||
/// </summary>
|
||||
/// <param name="aiModelDescribe"></param>
|
||||
/// <param name="messages"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public IAsyncEnumerable<CompleteChatResponse> CompleteChatStreamAsync(AiModelDescribe aiModelDescribe, List<ChatMessage> messages,
|
||||
CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// 聊天完成-非流式
|
||||
/// </summary>
|
||||
/// <param name="aiModelDescribe"></param>
|
||||
/// <param name="messages"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public Task<CompleteChatResponse> CompleteChatAsync(AiModelDescribe aiModelDescribe, List<ChatMessage> messages,
|
||||
CancellationToken cancellationToken);
|
||||
}
|
||||
@@ -12,7 +12,7 @@ public class AzureChatService : IChatService
|
||||
{
|
||||
}
|
||||
|
||||
public async IAsyncEnumerable<CompleteChatResponse> CompleteChatAsync(AiModelDescribe aiModelDescribe,
|
||||
public async IAsyncEnumerable<CompleteChatResponse> CompleteChatStreamAsync(AiModelDescribe aiModelDescribe,
|
||||
List<ChatMessage> messages,
|
||||
[EnumeratorCancellation] CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -62,4 +62,41 @@ public class AzureChatService : IChatService
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<CompleteChatResponse> CompleteChatAsync(AiModelDescribe aiModelDescribe,
|
||||
List<ChatMessage> messages, CancellationToken cancellationToken)
|
||||
{
|
||||
var endpoint = new Uri(aiModelDescribe.Endpoint);
|
||||
|
||||
var deploymentName = aiModelDescribe.ModelId;
|
||||
var apiKey = aiModelDescribe.ApiKey;
|
||||
|
||||
AzureOpenAIClient azureClient = new(
|
||||
endpoint,
|
||||
new AzureKeyCredential(apiKey), new AzureOpenAIClientOptions()
|
||||
{
|
||||
NetworkTimeout = TimeSpan.FromSeconds(600),
|
||||
});
|
||||
|
||||
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
|
||||
|
||||
var response = await chatClient.CompleteChatAsync(messages, new ChatCompletionOptions()
|
||||
{
|
||||
// MaxOutputTokenCount = 2048
|
||||
}, cancellationToken: cancellationToken);
|
||||
|
||||
var output = new CompleteChatResponse
|
||||
{
|
||||
TokenUsage = new TokenUsage()
|
||||
{
|
||||
OutputTokenCount = response?.Value.Usage?.OutputTokenCount ?? 0,
|
||||
InputTokenCount = response?.Value.Usage?.InputTokenCount ?? 0,
|
||||
TotalTokenCount = response?.Value.Usage?.TotalTokenCount ?? 0
|
||||
},
|
||||
IsFinish = true,
|
||||
Content = response?.Value.Content.FirstOrDefault()?.Text
|
||||
};
|
||||
|
||||
return output;
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,7 @@ public class AzureRestChatService : IChatService
|
||||
{
|
||||
}
|
||||
|
||||
public async IAsyncEnumerable<CompleteChatResponse> CompleteChatAsync(AiModelDescribe aiModelDescribe,
|
||||
public async IAsyncEnumerable<CompleteChatResponse> CompleteChatStreamAsync(AiModelDescribe aiModelDescribe,
|
||||
List<ChatMessage> messages,
|
||||
[EnumeratorCancellation] CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -98,6 +98,11 @@ public class AzureRestChatService : IChatService
|
||||
}
|
||||
}
|
||||
|
||||
public Task<CompleteChatResponse> CompleteChatAsync(AiModelDescribe aiModelDescribe, List<ChatMessage> messages, CancellationToken cancellationToken)
|
||||
{
|
||||
throw new NotImplementedException("暂未实现");
|
||||
}
|
||||
|
||||
private JObject? MapToJObject(string line)
|
||||
{
|
||||
if (line == "data: [DONE]"||string.IsNullOrWhiteSpace(line) )
|
||||
|
||||
Reference in New Issue
Block a user