基于OpenIM 实现聊天机器人功能

举报
OpenIM 发表于 2024/01/28 17:28:23 2024/01/28
【摘要】 ### 简要描述使用 OpenIM 中的 Webhook 机制实现聊天机器人功能。发送文本消息或图片消息给聊天机器人后,机器人会返回相同的消息。开发者可以替换此逻辑,在LangChain框架上调用LLM接口(包括gpt3.5或其他开源本地模型),以实现智能客服功能。## 1. 修改配置文件参照下面的模板修改 open-im-server 中的 `config/config.yaml` 配置。...

### 简要描述

使用 OpenIM 中的 Webhook 机制实现聊天机器人功能。发送文本消息或图片消息给聊天机器人后,机器人会返回相同的消息。开发者可以替换此逻辑,在LangChain框架上调用LLM接口(包括gpt3.5或其他开源本地模型),以实现智能客服功能。

## 1. 修改配置文件

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

IMG_1068.png

> **提示**:
> - `url` 为回调 URL。
> - 当 `afterSendSingleMsg.enable` 设置为 `true` 时,启用该回调。

## 2. 创建聊天机器人账号

1. 登录管理后台,参考 [此文档](../../guides/gettingStarted/quickTestServer)。
2. 在用户管理中创建聊天机器人账号,并记录该账号的 **userID**。
3. 为方便体验,可以将此 **userID** 设置为默认好友。

## 3. 编写 **afterSendSingleMsg** 接口

参考以下示例代码。

> **提示**:
> 1. 将例子中的 **robotics** 替换为第 **2** 步中获取的 **userID**。

```Go
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
    }
}
```

详细代码参考 [链接](https://github.com/openimsdk/chat/blob/main/example/callback/callback.go)

## 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。

IMG_1067.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。