嫁吱裨 发表于 2025-6-2 22:37:54

在IM即时通讯系统中接入DeepSeek等AI大模型

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

   首先,傲瑞通客户端新增了与AI大模型对话的UI入口:
        
        在我的好友中,有一个“AI智能体”,点击它,就可以和AI大模型进行对话了。
   其次,傲瑞通客户端也提供了查询与AI对话的历史记录:
        
   点击对话记录中的问题,会弹出新窗口显示问题的答案。
   
2. 数据库实现

   数据库中增加AIChatRecord表,用于存储与AI的对话记录。
         AIChatRecord 表的创建脚本如下所示:
CREATE TABLE .AIChatRecord(
    (50) NOT NULL,
    (50) NOT NULL,
    NOT NULL,
    (max) NOT NULL,
    (1000) NOT NULL,
    (max) NOT NULL,
    NOT NULL,
    (max) NOT NULL,
    NOT NULL,
CONSTRAINT PRIMARY KEY CLUSTERED
(
    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大模型的工作就完成了,有兴趣的朋友欢迎留言多多交流!
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 在IM即时通讯系统中接入DeepSeek等AI大模型