feat: 新增取消功能

This commit is contained in:
ccnetcore
2025-06-19 22:24:21 +08:00
parent 8040010b98
commit bc91a8cff2

View File

@@ -66,14 +66,15 @@ public class AiService : ApplicationService
/// 发送消息 /// 发送消息
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
public async Task PostSendAsync(SendMessageInput input) /// <param name="cancelToken"></param>
public async Task PostSendAsync(SendMessageInput input,CancellationToken cancelToken)
{ {
var httpContext = this.httpContextAccessor.HttpContext; var httpContext = this.httpContextAccessor.HttpContext;
var response = httpContext.Response; var response = httpContext.Response;
// 设置响应头,声明是 SSE 流 // 设置响应头,声明是 SSE 流
response.ContentType = "text/event-stream"; response.ContentType = "text/event-stream";
response.Headers.Add("Cache-Control", "no-cache"); response.Headers.Append("Cache-Control", "no-cache");
response.Headers.Add("Connection", "keep-alive"); response.Headers.Append("Connection", "keep-alive");
var chatCompletionService = this._skClient.Kernel.GetRequiredService<IChatCompletionService>(input.Model); var chatCompletionService = this._skClient.Kernel.GetRequiredService<IChatCompletionService>(input.Model);
@@ -97,7 +98,8 @@ public class AiService : ApplicationService
var results = chatCompletionService.GetStreamingChatMessageContentsAsync( var results = chatCompletionService.GetStreamingChatMessageContentsAsync(
chatHistory: history, chatHistory: history,
executionSettings: openSettings, executionSettings: openSettings,
kernel: _skClient.Kernel); kernel: _skClient.Kernel,
cancelToken);
await using var writer = new StreamWriter(response.Body, Encoding.UTF8, leaveOpen: true); await using var writer = new StreamWriter(response.Body, Encoding.UTF8, leaveOpen: true);
@@ -110,7 +112,7 @@ public class AiService : ApplicationService
}); });
await writer.WriteLineAsync($"data: {message}\n"); await writer.WriteLineAsync($"data: {message}\n");
await writer.FlushAsync(); // 确保立即推送数据 await writer.FlushAsync(cancelToken); // 确保立即推送数据
} }
} }