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