在IM即时通讯系统中接入DeepSeek等AI大模型
随着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时,该值才有效。
2. 服务端对接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大模型的工作就完成了,有兴趣的朋友欢迎留言多多交流!
在IM即时通讯系统中接入DeepSeek等AI大模型的更多相关文章
- 即时通信系统中实现全局系统通知,并与Web后台集成【附C#开源即时通讯系统(支持广域网)——QQ高仿版IM最新源码】
像QQ这样的即时通信软件,时不时就会从桌面的右下角弹出一个小窗口,或是显示一个广告.或是一个新闻.或是一个公告等.在这里,我们将其统称为“全局系统通知”.很多使用C#开源即时通讯系统——GGTalk的 ...
- 即时通信系统中实现聊天消息加密,让通信更安全【低调赠送:C#开源即时通讯系统(支持广域网)——GGTalk4.5 最新源码】
在即时通讯系统(IM)中,加密重要的通信消息,是一个常见的需求.尤其在一些政府部门的即时通信软件中(如税务系统),对即时聊天消息进行加密是非常重要的一个功能,因为谈话中可能会涉及到机密的数据.我在最新 ...
- 即时通讯系统为什么选择GaussDB(for Redis)?
摘要:如果你需要一款稳定可靠的高性能企业级KV数据库,不妨试试GaussDB(for Redis). 每当网络上爆出热点新闻,混迹于各个社交媒体的小伙伴们全都开启了讨论模式.一条消息的产生是如何在群聊 ...
- 视酷即时通讯系统应用源码 V1.0
视酷即时通讯系统(原创),成熟稳定,拥有和微信一样强大的功能不再是梦,节省几个月研发时间迅速融合进项目中: 1.首家支持聊天室群聊 2.支持和微信一样的语音聊天,可以显示时长.未读状态,自动轮播未读语 ...
- 为自己搭建一个分布式 IM(即时通讯) 系统
前言 大家新年快乐! 新的一年第一篇技术文章希望开个好头,所以元旦三天我也没怎么闲着,希望给大家带来一篇比较感兴趣的干货内容. 老读者应该还记得我在去年国庆节前分享过一篇<设计一个百万级的消息推 ...
- GGTalk ——C#开源即时通讯系统
http://www.cnblogs.com/justnow/ GGTalk ——C#开源即时通讯系统 下载中心 GGTalk(简称GG)是可在广域网部署运行的QQ高仿版,2013.8.7发布GG ...
- 可在广域网部署运行的即时通讯系统 -- GGTalk总览(附源码下载)
(最新版本:V6.2,2019.01.03 .Xamarin移动端版本已经推出,包括 Android 和 iOS) GGTalk开源即时通讯系统(简称GG)是QQ的高仿版,同时支持局域网和广域网, ...
- GGTalk即时通讯系统(支持广域网)终于有移动端了!(技术原理、实现、源码)
首先要感谢大家一直以来对于GGTalk即时通讯系统的关注和支持!GGTalk即时通讯系统的不断完善与大家的支持分不开! 从2013年最初的GG1.0开放源码以来,到后来陆续增加了网盘功能.远程协助功能 ...
- GGTalk——C#开源即时通讯系统源码介绍系列(一)
坦白讲,我们公司其实没啥技术实力,之所以还能不断接到各种项目,全凭我们老板神通广大!要知道他每次的饭局上可都是些什么人物! 但是项目接下一大把,就凭咱哥儿几个的水平,想要独立自主.保质保量保期地一个个 ...
- easy-im:一款基于netty的即时通讯系统
介绍 easy-im是面向开发者的一款轻量级.开箱即用的即时通讯系统,帮助开发者快速搭建消息推送等功能. 基于easy-im,你可以快速实现以下功能: + 聊天软件 + IoT消息推送 基本用法 项目 ...
随机推荐
- Event Store-其它存储
背景 ENode是一个CQRS+Event Sourcing架构的开发框架,Event Sourcing需要持久化事件,事件可以持久化在DB,但是DB由于面向的是CRUD场景,是针对数据会不断修改或删 ...
- Chrony:让你的服务器时间精准到微秒级的神器!
在现代计算机系统中,时间同步是至关重要的.无论是分布式系统.数据库集群,还是日志记录,时间不一致都可能导致严重的问题.而 Chrony,作为一款高性能的时间同步工具,正在成为越来越多系统管理员的首选. ...
- C++:随机数生成
C++中生成随机数:需要用到的函数,一个是rand(),该函数只返回一个伪随机数.生成随机数之前必须先调用srand()函数. 生成随机数 #include iostream; #include ct ...
- paddle安装中 libssl-1_1-x64.dll 的版本问题
paddle安装过程中出现的一些问题: 在学习tensorflow过程中,了解到paddlepaddle,本着技多不压身的原则也了解了一下,但是在安装的时候碰到了一些问题.特地记录一下. 一.&quo ...
- VMware的快照原理
本文分享自天翼云开发者社区<VMware的快照原理>,作者:m****n VMware的快照是基于数据块的快照.快照也是以一个文件方式存在的,缺省位置和虚拟机在同一目录下,它是一个Delt ...
- 玩转云端 | AccessOne实用窍门之三步搞定门户网站防护与加速
随着互联网的飞速发展,网站建设已成为企事业单位推广.提供服务的重要途径之一.在数字技术快速迭代的当下,如何在保障网站安全的前提下提供高效服务,是企事业单位需要着重考虑的内容. 网站安全防护是网站建设后 ...
- SqlServer中使用游标遍历数据集合
具体代码如下所示: /***************************************** 实例:打印输出数据表BUS_Test中的Name和Age字段的值 ************** ...
- 本地AI搭建
搭建本地博客AI 目录 搭建本地博客AI 环境 下载ollama 选择模型 选择embedding模型 查看性能测试 选择合适的嵌入模型(Embedder) 估算内存 选择模型 量化类型介绍 Q5_0 ...
- 使用crewai创建属于你自己的AI团队
crewai介绍 CrewAI 是一个用于协调自主 AI 代理的前沿框架. CrewAI 允许你创建 AI 团队,其中每个代理都有特定的角色.工具和目标,协同工作以完成复杂任务. 把它想象成组建你的梦 ...
- SMOTE算法解决样本不平衡
首先,看下Smote算法之前,我们先看下当正负样本不均衡的时候,我们通常用的方法: 抽样 常规的包含过抽样.欠抽样.组合抽样 过抽样:将样本较少的一类sample补齐 欠抽样:将样本较多的一类samp ...