在IM即时通讯系统中接入DeepSeek等AI大模型
笔记哥 /
04-10 /
5点赞 /
0评论 /
471阅读
随着DeepSeek的热潮,越来越多的企业也开始部署并训练自己的AI大模型,这样能使企业以前沉淀的专业知识和经验能更高效地被利用起来。有客户反馈了这样的需求场景:客户私有部署了自己的AI大模型以及私有化部署自己的内部即时通讯系统,他们希望可以在即时通讯的聊天界面中,直接和AI大模型对话,就像和同事对话一样,这将大大提升工作效率。所以,我们决定在 傲瑞通(OrayTalk) 中接入DeepSeek等AI大模型,来满足这一需求。
那么具体如何实现了?
## 1. 客户端UI实现
首先,傲瑞通客户端新增了与AI大模型对话的UI入口:

在我的好友中,有一个“AI智能体”,点击它,就可以和AI大模型进行对话了。
其次,傲瑞通客户端也提供了查询与AI对话的历史记录:

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

## 2. 数据库实现
数据库中增加AIChatRecord表,用于存储与AI的对话记录。
AIChatRecord 表的创建脚本如下所示:
```csharp
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是相当简单的,示例如下所示:
```csharp
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("");
// 设置授权头
_httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {_apiKey}");
}
// 发送聊天请求的异步方法
public async Task 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大模型的工作就完成了,有兴趣的朋友欢迎留言多多交流!
本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/2151
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利