基於OpenIM 實現聊天機器人功能

2024年2月6日 22点热度 0人点赞

簡要描述

使用 OpenIM 中的 Webhook 機制實現聊天機器人功能。發送文本消息或圖片消息給聊天機器人後,機器人會返回相同的消息。開發者可以替換此邏輯,在LangChain框架上調用LLM接口(包括gpt3.5或其他開源本地模型),以實現智能客服功能。

1. 修改配置文件

參照下面的模板修改 open-im-server 中的 config/config.yaml 配置。

提示:

url 為回調 URL。

afterSendSingleMsg.enable 設置為 true 時,啟用該回調。

2. 創建聊天機器人賬號

  1. 登錄管理後臺,參考 此文檔。
  2. 在用戶管理中創建聊天機器人賬號,並記錄該賬號的 userID
  3. 為方便體驗,可以將此 userID 設置為默認好友。

3. 編寫 afterSendSingleMsg接口

參考以下示例代碼。

提示:

將例子中的 robotics 替換為第 2 步中獲取的 userID

func (m *ChatApi) CallbackExample(c *gin.Context) {
    // 1. Handling callbacks after sending a single chat message
    msgInfo, err := handlingCallbackAfterSendMsg(c)
    if err != nil {
        apiresp.GinError(c, err)
        return
    }
    // 2. If the user receiving the message is a customer service bot, return the message.
    // 2.1 UserID of the robot account
    robotics := "robotics"
    // 2.2 ChatRobot account validation and determining if messages are text and images
    if msgInfo.SendID == robotics || msgInfo.RecvID != robotics {
        return
    }
    if msgInfo.ContentType != constant.Picture && msgInfo.ContentType != constant.Text {
        return
    }
    // 2.3 Get administrator token
    adminToken, err := getAdminToken(c)
    if err != nil {
        apiresp.GinError(c, err)
        return
    }
    // 2.4 Get RobotAccount info
    robUser, err := getRobotAccountInfo(c, adminToken.AdminToken, robotics)
    if err != nil {
        apiresp.GinError(c, err)
        return
    }
    // 2.5 Constructing the contents of the message field or invoking an LLM to implement AI-driven question answering.
    mapStruct, err := contextToMap(c, msgInfo)
    if err != nil {
        apiresp.GinError(c, err)
        return
    }
    // 2.6 Send Message
    err = sendMessage(c, adminToken.ImToken, robotics, msgInfo, robUser, mapStruct)
    if err != nil {
        apiresp.GinError(c, err)
        return
    }
}

詳細代碼參考 鏈接

4. 效果展示

5.關於OpenIM

OpenIM 是一款開源、可自托管的即時通訊解決方案,旨在實現應用內通信技術。它作為 Twilio、SendBird、GetStream、CometChat 和 PubNub 等平臺的替代品而存在。該解決方案在 GitHub 上獲得了超過 13,000 star的認可,突顯了其安全性和可靠性。OpenIM 支持多種部署方法,包括 Docker、源代碼和 Kubernetes。OpenIM 完全使用 Golang 開發,具有跨平臺和高性能的特點。它作為聊天框架運行,支持通過 Webhook 集成各種機器人,並允許調用到一系列開源模型。

欲了解更多信息或進行貢獻,開發者文檔可在 https://docs.openim.io/ 查看,GitHub 倉庫位於
https://github.com/OpenIMSDK。