From 1b8d864b394dfe821365b8bff47e678bc9d58f56 Mon Sep 17 00:00:00 2001 From: linghaihui <75124771@qq.com> Date: Sun, 2 Apr 2023 12:13:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Echatgpt=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bingchat/app.json | 2 +- bingchat/components/chatbox/index.js | 66 ++--------- bingchat/components/chatbox/index.wxml | 52 +++++---- bingchat/components/popup/popup.wxss | 2 +- bingchat/image/chatgpt.png | Bin 0 -> 11044 bytes bingchat/image/chatgpt_share.png | Bin 0 -> 5217 bytes bingchat/pages/index/index.js | 150 +++++++++++++++++++++++-- bingchat/pages/index/index.wxml | 4 +- new-bing/app.py | 92 +++++++++++++++ new-bing/env.example | 1 + new-bing/requirements.txt | 1 + 11 files changed, 269 insertions(+), 101 deletions(-) create mode 100644 bingchat/image/chatgpt.png create mode 100644 bingchat/image/chatgpt_share.png diff --git a/bingchat/app.json b/bingchat/app.json index 5236657..60057ae 100644 --- a/bingchat/app.json +++ b/bingchat/app.json @@ -8,7 +8,7 @@ "window": { "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#ffffff", - "navigationBarTitleText": "New Bing Bot 🤖", + "navigationBarTitleText": "New Bing 🤖", "navigationBarTextStyle": "black" }, "sitemapLocation": "sitemap.json", diff --git a/bingchat/components/chatbox/index.js b/bingchat/components/chatbox/index.js index b699ce3..cff7fd2 100644 --- a/bingchat/components/chatbox/index.js +++ b/bingchat/components/chatbox/index.js @@ -14,7 +14,12 @@ Component({ addGlobalClass: true, multipleSlots: true, }, - properties: {}, + properties: { + chatType: { + type: String, + value: "bing" + } + }, pageLifetimes: { show: function () { this.initMessageHistory() @@ -146,63 +151,6 @@ Component({ "cancelReceive", {}, {} ) }, - deleteAllChat: function () { - var that = this - wx.showModal({ - content: "是否删除全部聊天?", - complete: (res) => { - if (res.confirm) { - that.setData({ - chatList: [], - }) - wx.setStorage({ - key: "chatList", - data: [], - }) - } - }, - }) - }, - longPress: function (e) { - var that = this - wx.showActionSheet({ - itemList: ["删除全部聊天记录", "切换聊天接口方式", that.data.closeShareOnCopy ? "打开复制后分享" : "关闭复制后分享"], - success(res) { - if (res.tapIndex == 0) { - that.deleteAllChat() - } else if (res.tapIndex == 1) { - that.triggerEvent( - "switchRequestMethod", {}, {} - ) - } else if (res.tapIndex == 2) { - if (that.data.closeShareOnCopy) { - that.setData({ - closeShareOnCopy: false, - }) - wx.showToast({ - title: "已打开复制后分享", - icon: "none" - }) - wx.removeStorage({ - key: "closeShareOnCopy", - }) - } else { - that.setData({ - closeShareOnCopy: true, - }) - wx.showToast({ - title: "已关闭复制后分享", - icon: "none" - }) - wx.setStorage({ - key: "closeShareOnCopy", - data: 1, - }) - } - } - } - }) - }, showOriginContent: function (e) { var index = e.currentTarget.dataset.index var data = this.data.chatList[index] @@ -218,7 +166,7 @@ Component({ onPopButtonClick: function (e) { if (e.detail.t !== "confirm") { wx.removeStorage({ - key: 'shareContent', + key: "shareContent", }) } this.setData({ diff --git a/bingchat/components/chatbox/index.wxml b/bingchat/components/chatbox/index.wxml index f79fb85..430b5a7 100644 --- a/bingchat/components/chatbox/index.wxml +++ b/bingchat/components/chatbox/index.wxml @@ -1,34 +1,32 @@ - - 输入问题开始和New Bing聊天吧~ - - - - - - {{item.dt}} - {{item.num_in_conversation}} - - - - {{item.originContent}} - - - - {{suggest}} +输入问题开始和{{chatType == "bing" ? "New Bing" : "ChatGPT"}}聊天吧~ + + + + + + {{item.dt}} + {{item.num_in_conversation}} + + + + {{item.originContent}} - - - - {{item.dt}} - {{item.originContent}} + + {{suggest}} - - - - - + + + {{item.dt}} + {{item.originContent}} + + + + + + + \ No newline at end of file diff --git a/bingchat/components/popup/popup.wxss b/bingchat/components/popup/popup.wxss index a656bb4..137b9e3 100644 --- a/bingchat/components/popup/popup.wxss +++ b/bingchat/components/popup/popup.wxss @@ -9,7 +9,7 @@ padding: 20rpx 30rpx 20rpx 30rpx; box-sizing: border-box; z-index: 10000; - border: 1rpx dashed; + border: 1px dashed; } .bt { diff --git a/bingchat/image/chatgpt.png b/bingchat/image/chatgpt.png new file mode 100644 index 0000000000000000000000000000000000000000..7cefa94293dea9dba16e926de2fe4c3931e962ec GIT binary patch literal 11044 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 !% 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 b006*U;XMS5^sN1K00000NkvXXu0mjfeFgPU literal 0 HcmV?d00001 diff --git a/bingchat/pages/index/index.js b/bingchat/pages/index/index.js index 5a58db0..3cb3870 100644 --- a/bingchat/pages/index/index.js +++ b/bingchat/pages/index/index.js @@ -24,6 +24,16 @@ function inputPop() { // 自增对话 var autoIncrConversation = 0 +// 默认采用new bing +var chatType = "bing" +try { + if (wx.getStorageSync("usechatgpt")) { + chatType = "chatgpt" + } +} catch (e) { + chatType = "bing" +} + Date.prototype.format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月份 @@ -74,6 +84,7 @@ Page({ useWebsocket: useWebsocket, showSearchPop: false, searchPopMessage: "", + chatType: chatType, }, inputFocus(e) { if (inputPop()) { @@ -120,10 +131,19 @@ Page({ var options = this.getOptions() if (options && options["q"]) { var q = decodeURIComponent(options["q"]) + var chatType = this.data.chatType + if (options["chatType"]) { + chatType = options["chatType"] + // 聊天方式不同,关闭websocket + if (chatType != this.data.chatType) { + this.onCancelReceive() + } + } this.setData({ searchPopMessage: "即将搜索“" + q + "”", showSearchPop: true, q: q, + chatType: chatType, }) } const cht = app.globalData.cht @@ -132,6 +152,19 @@ Page({ scrollId: "item" + (cht.data.chatList.length - 2), }) } + // 切换title + this.switchTitle() + }, + switchTitle: function () { + if (this.data.chatType == "bing") { + wx.setNavigationBarTitle({ + title: "New Bing 🤖️", + }) + } else { + wx.setNavigationBarTitle({ + title: "ChatGPT 🤖️", + }) + } }, onLoad() {}, processData: function (data, suggests, content) { @@ -139,7 +172,7 @@ Page({ if (robContent == "Success") { robContent = data["data"]["text"] suggests.push(...data["data"]["suggests"]) - if (robContent.indexOf("New topic") != -1) { + if (robContent.indexOf("New topic") != -1 && this.data.chatType == "bing") { robContent += "\n发送“重新对话!”开始新的对话" suggests.push("重新对话!") suggests.push(content) @@ -157,7 +190,9 @@ Page({ suggests.push(content) } else { robContent = "抱歉😭,发生错误:" + msg - suggests.push("重新对话!") + if (this.data.chatType == "bing") { + suggests.push("重新对话!") + } suggests.push(content) } } @@ -177,8 +212,9 @@ Page({ sendHttpRequest: function (content) { var that = this const cht = app.globalData.cht + var api = that.data.chatType == "bing" ? "/chat" : "/openai_chat" app.getSid(sid => { - doRequest("/chat", "POST", { + doRequest(api, "POST", { q: content, sid: sid_prefix + sid, }).then(res => { @@ -226,7 +262,7 @@ Page({ content: "", lastContent: content, }) - if (content == "重新对话!") { + if (content == "重新对话!" && that.data.chatType == "bing") { that.resetConversation(() => { that.pushStorageMessage(cht, "现在我们可以开始新的对话😊", "rob", [], false) }) @@ -244,9 +280,10 @@ Page({ if (pop) { cht.data.chatList.pop() } + var rAvatar = this.data.chatType == "bing" ? robAvatar : "../../image/chatgpt.png" cht.data.chatList.push({ type: role, - avatarUrl: role == "rob" ? robAvatar : personAvatar, + avatarUrl: role == "rob" ? rAvatar : personAvatar, dt: getNow(), originContent: this.processContent(content), suggests: suggests, @@ -281,7 +318,7 @@ Page({ this.submitContent(content) }, onShareAppMessage() { - var title = "New Bing Bot 🤖" + var title = this.data.chatType == "bing" ? "New Bing 🤖" : "ChatGPT 🤖️" var content = this.data.content.trim() if (content.length > 0) { title = content @@ -299,8 +336,8 @@ Page({ } return { title: title, - path: "/pages/index/index?q=" + encodeURIComponent(content), - imageUrl: "../../image/newBing.png" + path: "/pages/index/index?q=" + encodeURIComponent(content) + "&chatType=" + this.data.chatType, + imageUrl: this.data.chatType == "bing" ? "../../image/newBing.png" : "../../image/chatgpt_share.png" } }, onSuggestSubmit: function (e) { @@ -318,8 +355,9 @@ Page({ } var that = this const cht = app.globalData.cht + var apiPath = that.data.chatType == "bing" ? "/chat" : "/ws_openai_chat" const socket = wx.connectSocket({ - url: SERVER_WSS_HOST + "/chat", + url: SERVER_WSS_HOST + apiPath, fail: function () { wx.showToast({ title: "打开websocket失败", @@ -380,7 +418,11 @@ Page({ var robContent = "" var num_in_conversation = -1 if (!data["final"]) { - robContent = data["data"] + " ..." + if (data["data"]["data"]) { + robContent = data["data"]["data"]["text"] + " ..." + } else { + robContent = data["data"] + " ..." + } cht.setData({ receiveData: true }) @@ -485,5 +527,91 @@ Page({ } }) } - } + }, + deleteAllChat: function () { + const cht = app.globalData.cht + wx.showModal({ + content: "是否删除全部聊天?", + complete: (res) => { + if (res.confirm) { + cht.setData({ + chatList: [], + }) + wx.setStorage({ + key: "chatList", + data: [], + }) + } + }, + }) + }, + longPress: function (e) { + var that = this + const cht = app.globalData.cht + wx.showActionSheet({ + itemList: ["删除全部聊天记录", "切换聊天接口方式", that.data.chatType == "bing" ? "切换成ChatGPT" : "切换成New Bing", cht.data.closeShareOnCopy ? "打开复制后分享" : "关闭复制后分享"], + success(res) { + if (res.tapIndex == 0) { + that.deleteAllChat() + } else if (res.tapIndex == 1) { + that.switchRequestMethod() + } else if (res.tapIndex == 3) { + if (cht.data.closeShareOnCopy) { + cht.setData({ + closeShareOnCopy: false, + }) + wx.showToast({ + title: "已打开复制后分享", + icon: "none" + }) + wx.removeStorage({ + key: "closeShareOnCopy", + }) + } else { + cht.setData({ + closeShareOnCopy: true, + }) + wx.showToast({ + title: "已关闭复制后分享", + icon: "none" + }) + wx.setStorage({ + key: "closeShareOnCopy", + data: 1, + }) + } + } else if (res.tapIndex == 2) { + if (that.data.chatType == "chatgpt") { + wx.removeStorage({ + key: "usechatgpt", + }) + that.setData({ + chatType: "bing", + }) + wx.showToast({ + title: "已切换成New Bing", + icon: "none" + }) + } else { + wx.setStorage({ + key: "usechatgpt", + data: 1, + }) + that.setData({ + chatType: "chatgpt", + }) + wx.showToast({ + title: "已切换成ChatGPT", + icon: "none" + }) + } + } + // 关闭websocket + that.onCancelReceive() + setTimeout(() => { + that.switchTitle() + }, 100) + } + }) + }, }) diff --git a/bingchat/pages/index/index.wxml b/bingchat/pages/index/index.wxml index c25cb77..a155cb4 100644 --- a/bingchat/pages/index/index.wxml +++ b/bingchat/pages/index/index.wxml @@ -1,5 +1,5 @@ - - + + 发送 diff --git a/new-bing/app.py b/new-bing/app.py index 76ef726..9ea921c 100644 --- a/new-bing/app.py +++ b/new-bing/app.py @@ -4,8 +4,10 @@ import json as raw_json import os import re import threading +from collections import defaultdict from datetime import datetime, timedelta +import openai import requests from sanic import Sanic from sanic.log import logger @@ -38,6 +40,9 @@ app.config.RESPONSE_TIMEOUT = 900 app.config.WEBSOCKET_PING_INTERVAL = 15 app.config.WEBSOCKET_PING_TIMEOUT = 30 +# openai conversation +OPENAI_CONVERSATION = defaultdict(lambda: []) + def reset_cookie(): if not LOCK.acquire(blocking=False): @@ -191,5 +196,92 @@ async def openid(request): return json({'data': requests.get(url).json()}) +# #########################################以下是openid接口################################## + + +@app.websocket('/ws_openai_chat') +async def ws_openai_chat(_, ws): + while True: + try: + data = raw_json.loads(await ws.recv()) + logger.info('Websocket receive data: %s', data) + sid = data['sid'] + q = data['q'] + # 保存30个对话 + history_conversation = OPENAI_CONVERSATION[sid][-30:] + history_conversation.append({ + 'role': 'user', + 'content': q, + }) + response = openai.ChatCompletion.create( + model='gpt-3.5-turbo', + messages=history_conversation, + temperature=1.2, + stream=True, + ) + chunks = [] + for chunk in response: + chunk_message = chunk['choices'][0]['delta'] + if chunk_message: + if 'content' in chunk_message: + chunks.append(chunk_message['content']) + await ws.send( + raw_json.dumps({ + 'final': False, + 'data': make_response_data('Success', ''.join(chunks), [], '') + }) + ) + else: + OPENAI_CONVERSATION[sid].append({ + 'role': 'assistant', + 'content': ''.join(chunks) + }) + await ws.send( + raw_json.dumps({ + 'final': True, + 'data': make_response_data('Success', ''.join(chunks), [], '') + }) + ) + except Exception as e: + logger.error(e) + await ws.send(raw_json.dumps({ + 'final': True, + 'data': make_response_data('Error', str(e), [], str(e)) + })) + + +@app.post('/openai_chat') +async def openai_chat(request): + try: + sid = request.json.get('sid') + q = request.json.get('q') + history_conversation = OPENAI_CONVERSATION[sid][-30:] + history_conversation.append({ + 'role': 'user', + 'content': q, + }) + response = openai.ChatCompletion.create( + model='gpt-3.5-turbo', + messages=history_conversation, + temperature=1.2, + stream=True, + ) + chunks = [] + for chunk in response: + chunk_message = chunk['choices'][0]['delta'] + if chunk_message: + if 'content' in chunk_message: + chunks.append(chunk_message['content']) + else: + OPENAI_CONVERSATION[sid].append({ + 'role': 'assistant', + 'content': ''.join(chunks) + }) + return json(make_response_data('Success', ''.join(chunks), [], '')) + except Exception as e: + logger.error(e) + return json(make_response_data('Error', str(e), [], str(e))) + + if __name__ == '__main__': app.run(host='0.0.0.0', port=8000) diff --git a/new-bing/env.example b/new-bing/env.example index bc30727..ad8df90 100644 --- a/new-bing/env.example +++ b/new-bing/env.example @@ -5,3 +5,4 @@ COOKIE_FILE1=/sanic/cookies/cookie1.json # 备用cookie1, 没有可以删掉 COOKIE_FILE2=/sanic/cookies/cookie2.json # 备用cookie2, 没有可以删掉 COOKIE_FILES=["/sanic/cookies/cookie.json", "/sanic/cookies/cookie1.json", "/sanic/cookies/cookie2.json"] #cookie列表,配置了此环境变量,会优先使用此变量,直接忽略上面的3个环境变量 https_proxy=http://127.0.0.1:1080 # 目前中国大陆的IP会返回404,所以最好能加个代理 +OPENAI_API_KEY= diff --git a/new-bing/requirements.txt b/new-bing/requirements.txt index 8ca718d..0fe308c 100644 --- a/new-bing/requirements.txt +++ b/new-bing/requirements.txt @@ -3,3 +3,4 @@ requests==2.28.2 asyncio==3.4.3 websockets==10.4 httpx==0.23.3 +openai==0.27.2