diff --git a/Admin.NET/Admin.NET.Core/Ai/Interface/ISseChannelManager.cs b/Admin.NET/Admin.NET.Core/Ai/Interface/ISseChannelManager.cs
new file mode 100644
index 00000000..c89d4e6e
--- /dev/null
+++ b/Admin.NET/Admin.NET.Core/Ai/Interface/ISseChannelManager.cs
@@ -0,0 +1,26 @@
+// 1. 定义接口
+using System.Threading.Channels;
+namespace Admin.NET.Core.Ai.Interface;
+
+///
+/// SSE通道管理接口
+///
+public interface ISseChannelManager
+{
+ ///
+ /// 注册
+ ///
+ ChannelReader Register(long userId);
+ ///
+ /// 注销
+ ///
+ ///
+ void Unregister(long userId);
+ ///
+ /// 发送消息
+ ///
+ ///
+ ///
+ ///
+ Task SendMessageAsync(long userId, string message, CancellationToken cancellationToken = default);
+}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Core/Ai/Services/SSE/BaseSseChannelManager.cs b/Admin.NET/Admin.NET.Core/Ai/Services/SSE/BaseSseChannelManager.cs
new file mode 100644
index 00000000..5f8a8cfb
--- /dev/null
+++ b/Admin.NET/Admin.NET.Core/Ai/Services/SSE/BaseSseChannelManager.cs
@@ -0,0 +1,52 @@
+using System.Threading.Channels;
+
+namespace Admin.NET.Core.Ai.Services.SSE;
+
+///
+/// SSE通道管理
+///
+public class BaseSseChannelManager : ISseChannelManager
+{
+ private readonly ConcurrentDictionary> _userChannels = new();
+
+ ///
+ /// 注册
+ ///
+ ///
+ ///
+ public ChannelReader Register(long userId)
+ {
+ var channel = Channel.CreateBounded(new BoundedChannelOptions(100)
+ {
+ FullMode = BoundedChannelFullMode.Wait
+ });
+ _userChannels[userId] = channel;
+ return channel.Reader;
+ }
+
+ ///
+ /// 注销
+ ///
+ ///
+ public void Unregister(long userId)
+ {
+ if (_userChannels.TryRemove(userId, out var channel))
+ {
+ channel.Writer.TryComplete(); // 结束读端
+ }
+ }
+
+ ///
+ /// 发送消息
+ ///
+ ///
+ ///
+ ///
+ public async Task SendMessageAsync(long userId, string message, CancellationToken cancellationToken = default)
+ {
+ if (_userChannels.TryGetValue(userId, out var channel))
+ {
+ await channel.Writer.WriteAsync(message, cancellationToken);
+ }
+ }
+}
diff --git a/Admin.NET/Admin.NET.Core/Ai/Services/SSE/SseChannelManager.cs b/Admin.NET/Admin.NET.Core/Ai/Services/SSE/SseChannelManager.cs
index 60293d53..9d64a68c 100644
--- a/Admin.NET/Admin.NET.Core/Ai/Services/SSE/SseChannelManager.cs
+++ b/Admin.NET/Admin.NET.Core/Ai/Services/SSE/SseChannelManager.cs
@@ -3,49 +3,8 @@ using System.Threading.Channels;
namespace Admin.NET.Core.Ai.Services.SSE;
///
-/// SSE通道管理
+/// 聊天通道管理
///
-public class SseChannelManager: ISingleton
+public class SseChannelManager: BaseSseChannelManager,ISingleton
{
- private readonly ConcurrentDictionary> _userChannels = new();
-
- ///
- /// 注册
- ///
- ///
- ///
- public ChannelReader Register(long userId)
- {
- var channel = Channel.CreateBounded(new BoundedChannelOptions(100){
- FullMode = BoundedChannelFullMode.Wait
- });
- _userChannels[userId] = channel;
- return channel.Reader;
- }
-
- ///
- /// 注销
- ///
- ///
- public void Unregister(long userId)
- {
- if (_userChannels.TryRemove(userId, out var channel))
- {
- channel.Writer.TryComplete(); // 结束读端
- }
- }
-
- ///
- /// 发送消息
- ///
- ///
- ///
- ///
- public async Task SendMessageAsync(long userId, string message, CancellationToken cancellationToken = default)
- {
- if (_userChannels.TryGetValue(userId, out var channel))
- {
- await channel.Writer.WriteAsync(message,cancellationToken);
- }
- }
}
diff --git a/Admin.NET/Admin.NET.Core/Ai/Services/SSE/SseDeepThinkingChannelManager.cs b/Admin.NET/Admin.NET.Core/Ai/Services/SSE/SseDeepThinkingChannelManager.cs
index e4f71686..a12fef36 100644
--- a/Admin.NET/Admin.NET.Core/Ai/Services/SSE/SseDeepThinkingChannelManager.cs
+++ b/Admin.NET/Admin.NET.Core/Ai/Services/SSE/SseDeepThinkingChannelManager.cs
@@ -3,49 +3,8 @@ using System.Threading.Channels;
namespace Admin.NET.Core.Ai.Services.SSE;
///
-/// SSE通道管理
+/// 深度思考通道管理
///
-public class SseDeepThinkingChannelManager: ISingleton
+public class SseDeepThinkingChannelManager: BaseSseChannelManager,ISingleton
{
- private readonly ConcurrentDictionary> _userChannels = new();
-
- ///
- /// 注册
- ///
- ///
- ///
- public ChannelReader Register(long userId)
- {
- var channel = Channel.CreateBounded(new BoundedChannelOptions(100){
- FullMode = BoundedChannelFullMode.Wait
- });
- _userChannels[userId] = channel;
- return channel.Reader;
- }
-
- ///
- /// 注销
- ///
- ///
- public void Unregister(long userId)
- {
- if (_userChannels.TryRemove(userId, out var channel))
- {
- channel.Writer.TryComplete(); // 结束读端
- }
- }
-
- ///
- /// 发送消息
- ///
- ///
- ///
- ///
- public async Task SendMessageAsync(long userId, string message, CancellationToken cancellationToken = default)
- {
- if (_userChannels.TryGetValue(userId, out var channel))
- {
- await channel.Writer.WriteAsync(message,cancellationToken);
- }
- }
}