关于chatgpt:当我把ChatGPT拉进群聊里我的朋友都玩疯了

2次阅读

共计 5854 个字符,预计需要花费 15 分钟才能阅读完成。

前言

近期 ChatGPT 能够说是太火了,问答、写论文、写诗、写代码,只有输出准确的 prompt,他的体现总是让人惊喜。本着打不过就退出的准则。要是把 ChatGPT 拉入群聊中,会是怎么一番场景?说做就做,花了 1 个早晨捣鼓了一个小 Demo【ChatGPT 群聊助手】,凭借它的“聪明才智”,应该能够搞定我的网友、女朋友、老妈的发问 …

舒适提醒:如果你从没体验过 ChatGPT,给大家筹备了一个老手体验 Demo, 免注册! 免登陆! 免代理!!!!!!, 拉到文末能够疾速查看噢。

应用成果

成果可看下图

利用前景

虽 Demo 仅在小范畴的群聊中测试,但 ChatGPT 语义了解和交互能力的确弱小,不仅能分割对话的上下文,还能及时纠正代码 bug。不经让人想到,若能将 ChatGPT 利用于聊天机器人软件,实现答复问题、提供服务、甚至解决问题的工作,帮忙人们解决重复性或大量的人工工作,代替传统聊天机器人利用于客服、电商、教育和金融等行业。

绝对于传统聊天机器人,ChatGPT 可依据用户的要求和个性,及时调整答复的策略以便更精确的答复问题,有更人性化的体验。当初被宽泛应用的智能客服还不够智能,ChatGPT 所具备的能力,正是客服畛域所须要的。

1 筹备工作

在国内无奈注册 ChatGPT 账户,因而须要筹备如下:

能接管短信的国外手机号: 只需花几块钱,应用国外虚构号码在线接管短信。能够去一些第三方平台如:http://sms-activate.org/cn。

国外 IP: 能够通过一些 VPN 来实现,如通过 VPN 应用美国节点 IP。

这里须要留神的是,sms-activate.org 选取手机号码国家的时候,倡议抉择印度,如果抉择印度尼西亚,会在 openAI 报如下谬误:

You’ve made too many phone verification requests. Please try again later or contact us through our help center at help.openai.com

以上是必须的前提工作,有了以上筹备工作后,就能够去 https://chat.openai.com/auth/login 注册账号了。

2 实现思路

2.1 技术现状

chatGPT提供了基于 Web 版的交互界面,不便于编程式调用。于是,咱们能够通过模仿浏览器去登录,而后把交互过程封装成 API 接口。

2.2 实现过程

ChatGPT作为一个机器人角色退出群聊,须要在 PC 端转发 ChatGPT 问答。因而,咱们能够在 PC 电脑上实现 ChatGPT 接口的封装,并退出群聊。而后通过即构 IM(群聊)将数据实时传输,实现群聊外面与 ChatGPT 聊天。

3 PC 端封装代码实现

3.1 封装 chatGPT 调用

咱们应用 chatgpt-api 库来封装调用 chatGPT,因而先要装置好依赖库:

npm install chatgpt

装置好 chtgpt 库后,应用起来就非常简单了:

var ChatGPT, ConversationId, ParentMessageId;
var API_KEY = ;// 这里填写 KEY
(async () => {const { ChatGPTAPI} = await import('chatgpt');
    ChatGPT = new ChatGPTAPI({apiKey: API_KEY})
})();
// 向 ChatGPT 收回发问
function chat(text, cb) {console.log("正在向 ChatGPT 发送发问:",text)
    ChatGPT.sendMessage(text, {
        conversationId: ConversationId,
        parentMessageId: ParentMessageId
    }).then(function (res) {
            ConversationId = res.conversationId
            ParentMessageId = res.id
            cb && cb(true, res.text)
            console.log(res)
        }
    ).catch(function (err) {cb && cb(false, err);
    });
}

留神到,在第二行须要填写API_KEY,登录 OpenAI 后,关上链接 https://platform.openai.com/account/api-keys 即可获取,如下图所示

3.2 收发群聊音讯

对于即构 IM,如果大家感兴趣能够进入官网 https://doc-zh.zego.im 理解更多。总所周知,在即时聊天和实时音视频方面,即构 IM 是集体开发者或者中小型企业首选。因为咱们只关注一对一私聊或者群聊,因而,在官网提供的 SDK 的根底上,咱们做了二次封装。具体的封装代码请看附件,这里只贴出封装后的应用代码:

const Zego = require('./zego/Zego.js');

var zim;
function onError(err) {console.log("on error", err);
} 
// 发送音讯
function sendZegoMsg(isToGroup, text, toID){Zego.sendMsg(zim, isToGroup, text, toID, function (succ, err) {if (!succ) {console.log("回复即构音讯发送失败:", msg, err);
        }
    }) 
}
// 收到音讯回调
function onRcvZegoMsg(isFromGroup, msg, fromUID) {var rcvText = msg.message ;}
function main() {
    let zegoChatGPTUID = "chatgpt"
    zim = Zego.initZego(onError, onRcvZegoMsg, zegoChatGPTUID);

}
main();

在收到音讯时,判断是否有 @chatgpt 关键字,如果有的话提取音讯内容,而后去调用 chatGPT 封装好的接口期待 ChatGPT 回复,并将回复的内容往聊天群里发送。

4 手机端退出群聊与 ChatGPT 聊天

有了 PC 端实现后,接下来在手机端只需通过即构 IM SDK 向群外面 @chatgpt 发送发问音讯即可,当然了,也能够在一对一私聊的时候 @chatgpt 而后调用 chatGPT 接口。这些都是能够依据理论需要定制开发,篇幅起因,这里咱们只将群聊。

同样的,咱们只关注收发音讯,因而对即构官网提供的 SDK 做了二次封装。如果想理解更多细节能够返回官网文档浏览。

对登录 ZIM、创立 Token 等代码这里不详细描述,感兴趣读者能够查看代码附件,代码很简略容易看懂。

首先封装 Msg 对象,示意音讯实体类:

public class Msg {
    public String msg;
    public long time;
    public String toUID;
    public String fromUID;
    public MsgType type;

    public enum MsgType {
        P2P,
        GROUP
    }
}

发送音讯二次封装,同一群聊和一对一聊天接口:

public static void sendMsg(ZIM zim, Msg msg, ZIMMessageSentCallback cb) {
    // 发送“单聊”通信的信息

    ZIMTextMessage zimMessage = new ZIMTextMessage();
    zimMessage.message = msg.msg;

    ZIMMessageSendConfig config = new ZIMMessageSendConfig();
    // 音讯优先级,取值为 低:1 默认, 中:2, 高:3
    config.priority = ZIMMessagePriority.LOW;
    // 设置音讯的离线推送配置
    ZIMPushConfig pushConfig = new ZIMPushConfig();
    pushConfig.title = "离线推送的题目";
    pushConfig.content = "离线推送的内容";
    pushConfig.extendedData = "离线推送的扩大信息";
    config.pushConfig = pushConfig;
    if (msg.type == Msg.MsgType.P2P)
        zim.sendPeerMessage(zimMessage, msg.toUID, config, cb);
    else
        zim.sendGroupMessage(zimMessage, msg.toUID, config, cb);
}

二次封装接管音讯,对立通过 onRcvMsg 函数接管音讯。

private void onRcvMsg(ArrayList<ZIMMessage> messageList) {if (lsArr == null) return;
    for (ZIMMessage zimMessage : messageList) {if (zimMessage instanceof ZIMTextMessage) {ZIMTextMessage zimTextMessage = (ZIMTextMessage) zimMessage;
            if (zimMessage.getTimestamp() < this.startTime)
                continue;
            String fromUID = zimTextMessage.getSenderUserID();
            ZIMConversationType ztype = zimTextMessage.getConversationType();
            String toUID = zimTextMessage.getConversationID();
            Msg.MsgType type = Msg.MsgType.P2P;
            if (ztype == ZIMConversationType.PEER) type = Msg.MsgType.P2P;
            else if (ztype == ZIMConversationType.GROUP) type = Msg.MsgType.GROUP;
            String data = zimTextMessage.message;
            Msg msg = new Msg(type, data, zimMessage.getTimestamp(), fromUID, toUID);
            for (MsgCenterListener l : lsArr) l.onRcvMsg(msg);
        }
    }
}
private ZIMEventHandler handler = new ZIMEventHandler() {

    @Override
    public void onReceivePeerMessage(ZIM zim, ArrayList<ZIMMessage> messageList, String fromUserID) {onRcvMsg(messageList);
    }



    @Override
    public void onReceiveGroupMessage(ZIM zim, ArrayList<ZIMMessage> messageList, String fromGroupID) {onRcvMsg(messageList);
    }

    @Override
    public void onTokenWillExpire(ZIM zim, int second) {onRenewToken();
    }
};

须要留神的是,因为咱们目前场景只需关注文本音讯,因而没有图片、文件之类的音讯做过多思考。如果有相似需要的读者能够依据官网文档进一步封装。

另外,为了简化,防止每次用户被动拉 chatgpt 进入一个新群,咱们先约好一个超大群 ID:group_chatgpt。每次新用户登录就退出这个大群就好。如果有更加细粒度管制需要,能够依据不同用户来创立不同群,而后向 chatgpt 机器人发送群 ID,在 PC 端开发对应的主动退出对应群性能就好。

对于加群逻辑,也做了二次封装:

public void joinGroup(String groupId) {zim.joinGroup(groupId, new ZIMGroupJoinedCallback() {
        @Override
        public void onGroupJoined(ZIMGroupFullInfo groupInfo, ZIMError errorInfo) {for (MsgCenterListener l : lsArr)
                l.onJoinGroup(groupId);
        }
});

至此,整个流程开发实现,纵情享受 ChatGPT 吧。

5 开发者福利

除 ChatGPT 之外,Demo 中应用的开发者工具 ZIM SDK 也是晋升工作效率的利器,ZIM SDK 提供了全面的 IM 能力,满足文本、图片、语音等多种音讯类型,在线人数无下限,反对亿量级音讯并发。同时反对平安审核机制,确保音讯平安合规。

ZIM SDK 提供了疾速集成、接口丰盛、成熟的即时通讯解决方案。满足多种业务场景通信需要,实用于打造大型直播、语聊房、客服零碎等场景。即构即时通讯产品 IM 开春钜惠低至 1 折,限时折扣专业版 1200 元 https://www.zego.im/activity/zegoland,也可搭配元宇宙和直播间其余产品组合应用。感兴趣的开发者可到即构官网去注册体验 https://doc-zh.zego.im/article/11591

6 残缺代码

  • PC 端:[https://github.com/RTCWang/ChatGPT-ZIM/tree/main/ChatGPT%26ZIM/chatgpt_%E6%9C%BA%E5%99%A8%E4%BA%BA
    activity/zegoland](https://github.com/RTCWang/ChatGPT-ZIM/tree/main/ChatGPT&ZIM/chatgpt_%E6%9C%BA%E5%99%A8%E4%BA%BA%20activity/zegoland?source=sf&article61),也可搭配元宇宙和直播间其余产品组合应用。感兴趣的开发者可到即构官网去注册体验 https://doc-zh.zego.im/article/11591

6 残缺代码

  • PC 端:https://github.com/RTCWang/ChatGPT-ZIM/tree/main/ChatGPT%26ZIM/chatgpt_%E6%9C%BA%E5%99%A8%E4%BA%BA
  • android:https://github.com/RTCWang/ChatGPT-ZIM/tree/main/ChatGPT%26ZIM/ChatGPT_android
正文完
 0