惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
Vercel News
Vercel News
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
量子位
Engineering at Meta
Engineering at Meta
B
Blog RSS Feed
博客园 - 【当耐特】
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
IT之家
IT之家
T
The Blog of Author Tim Ferriss
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
博客园 - 三生石上(FineUI控件)

博客园 - zhuweisky

视频会议是如何实现AI会议纪要功能的? .NET 程序在装有企业防水墙的电脑上运行报错:内存不足 uni-app 实现视频聊天、屏幕分享,支持Android、HarmonyOS、iOS 去中心化的内网聊天软件Lachat是如何实现的? 实现鸿蒙(HarmonyOS)视频聊天、屏幕分享 实现一个纯血鸿蒙版(HarmonyOS)的聊天Demo,并可与其它PC、手机端互通! TCP反向代理:将局域网内部的TCP/HTTP服务暴露在公网上 C#实现屏幕墙:同时监控多个电脑桌面(支持Windows、信创Linux、银河麒麟、统信UOS) C#实现语音预处理:降噪、静音检测、自动增益(附Demo源码) 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS) 如何实现在服务端录制视频会议? 开发视频会议系统:使用GPU解码渲染视频 如何实现纯网页语音视频聊天和桌面分享?(附源码,PC版+手机版) Avalonia 实现聊天消息渲染、图文混排(支持Windows、Linux、信创国产OS) 如何实现安卓屏幕分享及视频聊天?(源码) C#实现聊天消息渲染、图文混排(支持Windows、Linux) C++调用C#的动态库dll 如何实现共享屏幕标注功能? C#推流RTMP,摄像头、麦克风、桌面、声卡(附源码) 如何让C/S应用支持多端(PC、Android、iOS)同时登录? 数据报表开发技巧:自动为数据报表添加【小计】、【总计】行 使用Xamarin开发手机聊天程序 -- 基础篇(大量图文讲解 step by step,附源码下载)
在IM即时通讯系统中接入DeepSeek等AI大模型
zhuweisky · 2025-04-10 · via 博客园 - zhuweisky

   随着DeepSeek的热潮,越来越多的企业也开始部署并训练自己的AI大模型,这样能使企业以前沉淀的专业知识和经验能更高效地被利用起来。有客户反馈了这样的需求场景:客户私有部署了自己的AI大模型以及私有化部署自己的内部即时通讯系统,他们希望可以在即时通讯的聊天界面中,直接和AI大模型对话,就像和同事对话一样,这将大大提升工作效率。所以,我们决定在 傲瑞通(OrayTalk) 中接入DeepSeek等AI大模型,来满足这一需求。

   那么具体如何实现了?

1. 客户端UI实现

   首先,傲瑞通客户端新增了与AI大模型对话的UI入口:

        

        在我的好友中,有一个“AI智能体”,点击它,就可以和AI大模型进行对话了。

   其次,傲瑞通客户端也提供了查询与AI对话的历史记录:

        

   点击对话记录中的问题,会弹出新窗口显示问题的答案。

   

2. 数据库实现

   数据库中增加AIChatRecord表,用于存储与AI的对话记录。

         AIChatRecord 表的创建脚本如下所示:

CREATE TABLE [dbo].AIChatRecord(
    [GUID] [nvarchar](50) NOT NULL,
    [UserID] [nvarchar](50) NOT NULL,
    [ModelType] [int] NOT NULL,
    [Question] [nvarchar](max) NOT NULL,
    [Attachments] [nvarchar](1000) NOT NULL,
    [Answer] [nvarchar](max) NOT NULL,
    [ProcessResult] [int] NOT NULL,
    [ErrorMessage] [nvarchar](max) NOT NULL,
    [CreateTime] [datetime] NOT NULL,
 CONSTRAINT [PK_AIChatRecord] PRIMARY KEY CLUSTERED 
(
    [GUID] ASC
)

   AIChatRecord 表中几个关键字段的含义如下所示:

(1)ModelType:用于记录所采用的大模型类型,比如DeepSeek、通义千问、文心一言 等等。

(2)Question:记录所提问的问题。

(3)Attachments:表示该问题所涉及的附件的URL,如图片或文件的URL。

(4)ProcessResult:表示问题的处理结果。0表示成功,其它值表示不同类型的错误,如超时、API调用报错等。

(5)ErrorMessage:如果有报错,ErrorMessage字段记录了具体的错误信息。

(6)Answer:AI给出的问题的答案。只有当ProcessResult为0时,该值才有效。  

3. 服务端对接AI大模型

   傲瑞通服务端实现了与私有部署的大模型(如DeepSeek、通义千问等)的对接。

   使用C#调用DeepSeek 的API是相当简单的,示例如下所示:

class DeepSeekApiClient
{
    private readonly string _apiKey;
    private readonly HttpClient _httpClient;
    
    // 构造函数,传入你的API密钥
    public DeepSeekApiClient(string apiKey)
    {
        _apiKey = apiKey;
        _httpClient = new HttpClient();
        
        // 设置基础URL(根据DeepSeek API文档调整)
        _httpClient.BaseAddress = new Uri("https://api.deepseek.com/v1/");
        
        // 设置授权头
        _httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {_apiKey}");
    }
    
    // 发送聊天请求的异步方法
    public async Task<string> SendChatRequestAsync(string prompt)
    {
        try
        {
            // 构造请求体
            var requestBody = new
            {
                model = "deepseek-chat", // 根据API文档调整模型名称
                messages = new[]
                {
                    new
                    {
                        role = "user",
                        content = prompt
                    }
                },
                temperature = 0.7,
                max_tokens = 1000
            };
            
            // 序列化为JSON
            var json = JsonSerializer.Serialize(requestBody);
            var content = new StringContent(json, Encoding.UTF8, "application/json");
            
            // 发送POST请求
            var response = await _httpClient.PostAsync("chat/completions", content);
            
            // 确保请求成功
            response.EnsureSuccessStatusCode();
            
            // 读取并返回响应内容
            var responseContent = await response.Content.ReadAsStringAsync();
            return responseContent;
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error calling DeepSeek API: {ex.Message}");
            throw;
        }
    }
}

  服务端的主要业务逻辑如下:

(1)当服务端收到来自客户端的AI提问时,便在DB中插入一条记录,该记录的ProcessResult字段的值是“处理中”,然后将该问题通过上面的DeepSeekApiClient提交给AI大模型,并等待回复。

(2)当服务端收到了AI大模型的回复(或超时、或报错)后,再更新DB中对应的那条记录的ProcessResult、Answer等字段的值。接着,再将AI回复发送给客户端。

(3)特殊情况处理:比如,当在等待大模型回复期间,如果客户端掉线了的情况。

  到这里,在傲瑞通中集成DeepSeek等AI大模型的工作就完成了,有兴趣的朋友欢迎留言多多交流!