feat: 优化ai聊天输出

This commit is contained in:
橙子
2024-07-22 23:59:21 +08:00
parent 0382d4f114
commit a074cdefa5
2 changed files with 30 additions and 6 deletions

View File

@@ -1,6 +1,8 @@
using System.Collections.Generic;
using System.Text;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using NUglify.Helpers;
using Volo.Abp.Application.Services;
using Yi.Framework.ChatHub.Domain.Managers;
using Yi.Framework.ChatHub.Domain.Shared.Dtos;
@@ -25,13 +27,34 @@ namespace Yi.Framework.ChatHub.Application.Services
public async Task ChatAsync([FromBody] List<AiChatContextDto> chatContext)
{
const int maxChar = 10;
var contextId = Guid.NewGuid();
Queue<string> stringQueue = new Queue<string>();
await foreach (var aiResult in _aiManager.ChatAsStreamAsync(chatContext))
{
await _userMessageManager.SendMessageAsync(MessageContext.CreateAi(aiResult, CurrentUser.Id!.Value, contextId));
stringQueue.Enqueue(aiResult);
if (stringQueue.Count >= maxChar)
{
StringBuilder currentStr=new StringBuilder();
while (stringQueue.Count > 0)
{
var str = stringQueue.Dequeue();
currentStr.Append(str);
}
await _userMessageManager.SendMessageAsync(MessageContext.CreateAi(currentStr.ToString(), CurrentUser.Id!.Value, contextId));
}
}
await _userMessageManager.SendMessageAsync(MessageContext.CreateAi(null, CurrentUser.Id!.Value, contextId));
StringBuilder currentEndStr = new StringBuilder();
while (stringQueue.Count > 0)
{
var str = stringQueue.Dequeue();
currentEndStr.Append(str);
}
await _userMessageManager.SendMessageAsync(MessageContext.CreateAi(currentEndStr.ToString(), CurrentUser.Id!.Value, contextId));
//await _userMessageManager.SendMessageAsync(MessageContext.CreateAi(null, CurrentUser.Id!.Value, contextId));
}
}
}