序文
最近、ChatGPT が熱すぎると言えますが、質問と回答、論文の執筆、詩の執筆、コードの執筆など、正確なプロンプトを入力する限り、彼のパフォーマンスは常に驚くべきものです。勝てなかったら参加する原則に沿って。ChatGPT がグループ チャットに取り込まれたらどうなるでしょうか? あなたの言うとおりにして、一晩かけて小さなデモ [ChatGPT グループ チャット アシスタント] をいじってみました。その「知性」により、ネチズン、ガールフレンド、母親の質問を解決できるはずです...
リマインダー: ChatGPT を体験したことがない場合は、登録なし、ログインなし、プロキシなし!!! の初心者体験デモを用意しました。記事の最後ですぐに確認できます。
効果
効果は下の図で見ることができます
応用の見通し
デモは少人数のグループ チャットでのみテストされていますが、ChatGPT には強力な意味理解および対話機能があり、会話のコンテキストに接続できるだけでなく、コードのバグをタイムリーに修正することもできます。ChatGPT をチャット ロボット ソフトウェアに適用すれば、質問に答えたり、サービスを提供したり、さらには問題を解決したりするタスクを完了でき、反復的または大量の手作業の解決を支援し、顧客サービスやサービスで従来のチャット ロボットを置き換えることができるのではないかと人々は考えます。電子商取引、教育、金融業界。
従来のチャットボットと比較して、ChatGPT は、質問に正確に回答し、より人間味のあるエクスペリエンスを得るために、ユーザーの要件と特性に応じて回答戦略をタイムリーに調整できます。現在広く使用されているスマート カスタマー サービスでは十分ではありませんが、ChatGPT の機能はまさにカスタマー サービス分野が必要としているものです。
1 準備
中国ではChatGPTアカウントを登録できないため、以下の準備が必要です。
テキスト メッセージを受信できる外国の携帯電話番号:わずか数ドルで、外国の仮想番号を使用してオンラインでテキスト メッセージを受信できます。http://sms-activate.org/cnなどのサードパーティ プラットフォームにアクセスできます。
ここで注意すべき点は、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側でQ&Aを転送する必要があります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 グループチャットメッセージの送受信
Zego IM について、ご興味がございましたら、公式 Web サイトhttps://doc-zh.zego.imにアクセスして詳細をご覧ください。ご存知のとおり、インスタント チャットとリアルタイムの音声とビデオの点では、インスタント IMは個人の開発者や中小企業にとって最初の選択肢です。私たちは 1 対 1 のプライベート チャットまたはグループ チャットのみに焦点を当てているため、公式 SDK に基づいて 2 番目のパッケージを作成しました。特定のパッケージ コードについては添付ファイルを参照してください。ここにはパッケージ化された使用コードのみが掲載されています。
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 でチャットします
端末が実装された後、モバイル端末では、インスタント IM SDK をPC
介してグループ内の @chatgpt に質問メッセージを送信するだけです。もちろん、@chatgpt を呼び出してから、チャット中に chatGPT インターフェイスを呼び出すこともできます。 1 対 1 のプライベート チャット。これらは実際のニーズに応じてカスタマイズおよび開発できますが、スペースの都合上、ここではグループ チャットについてのみ説明します。
同様に、メッセージの送受信のみに焦点を当てているため、Jigouが提供する公式 SDK の 2 番目のパッケージを作成しました。さらに詳細を知りたい場合は、公式ドキュメントにアクセスして読むことができます。
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
}
}
メッセージ送信、同じグループ チャット、および 1 対 1 のチャット インターフェイスの二次カプセル化:
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 側で開発できます。
グループを追加するロジックとして、2 番目のパッケージも実行されます。
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 開発者の経験
デモで使用した開発者ツール ZIM SDK は、ChatGPT に加えて、テキスト、画像、音声などのさまざまなメッセージ タイプに対応する包括的な IM 機能を提供し、作業効率を向上させる強力なツールです。オンライン ユーザーの数と数億のメッセージをサポートするレベル メッセージの同時実行性。同時に、メッセージ セキュリティのコンプライアンスを確保するためのセキュリティ監査メカニズムもサポートしています。
ZIM SDK は、迅速な統合と豊富なインターフェイスを備えた成熟したインスタント メッセージング ソリューションを提供します。さまざまなビジネスシーンのコミュニケーションニーズに対応し、大規模なライブブロードキャスト、チャットルーム、カスタマーサービスシステムなどの構築に適しています。インスタント メッセージング製品 IM はhttps://www.zego.im/activity/zegolandという低価格で 1,200 元で、メタバースやライブ ブロードキャスト ルームで他の製品と組み合わせて使用することもできます。興味のある開発者は、Zego 公式 Web サイトにアクセスして登録し、https://doc-zh.zego.im/article/11591を体験してください。