在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消息推送 基本用法 项目 ...
随机推荐
- Dotnet程序的内存与垃圾回收
都知道程序运行时的变量是放在内存里的,从我们学c++ 就知道有析构函数 malloc,还有学c#的时候天天 什么垃圾回收 GC 像背八股文样的 ,但是这个内存究竟能分配多少 没有人想过吧 ,不论做什 ...
- IDEA测试Flink程序
一.导入项目,添加jar包 右键项目=>open module setting 选择Flink1.9的lib目录下flink-dist_2.11-1.9.2.jar包(对应运行版本) 保存即可. ...
- 流程控制之if选择结构
if单选择结构 if (布尔表达式){ //如果布尔表达式为ture将执行的语句 } 实例: package com.yeyue.struct; import java.util.Sc ...
- Markdown语法基础教学
Markdown语法基础教学 简介 Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML.它的目标是实现"易读易写",并且 ...
- 使用browser-use进行数据爬取实战记录
前言 前面的文章介绍了browser-use的基本使用,今天带来的分享是使用browser-use进行一次数据爬取的实战(不过还是demo级别的). 使用到的三个玩法分别是使用自己的浏览器.定义输出结 ...
- 飞牛 fnos 使用docker部署NapCat-QQ对接autman教程
NapCatQQ介绍 无需图形环境,在Linux上表现出色,与现有Hook框架有本质区别,性能与内存占用优于基于Hook的框架. 配置简单,支持浏览器远程配置. NTQQ功能适配快速,持续跟进QQ最新 ...
- NolanPro 详细部署教程
自己想办法去弄授权,只提供部署教程 服务器搭建教程 1 诺兰群里找 @NolanNarkbot 点击start 2 群里发送 /check@NolanNarkbot 再找 @NolanNarkbot ...
- 算子 segment_contours_xld
算子segment_contours_xld 功能:将 XLD 轮廓分割为线段.圆弧或椭圆弧. 签名 segment_contours_xld(Contours : ContoursSplit : ...
- 性能对比实验折线图绘制代码(YOLO系列为例)
本文用于绘制性能折线图,适用于对比实验,发现很多博文都是收费,欺负哥们懒得学习,一气之下ai了一下再进行代码修改,免费供给大家学习参考,便于大家撰写论文数据时利于绘制图像. import pandas ...
- phpinclude-labs做题记录
Level 1 file协议 payload:?wrappers=/flag Level 2 data协议 去包含data协议中的内容其实相当于进行了一次远程包含,所以data协议的利用条件需要 ph ...