mirror of
https://github.com/RockChinQ/QChatGPT.git
synced 2024-11-16 11:42:44 +08:00
feat: 基本架构
This commit is contained in:
parent
4ed13bcdf2
commit
4303487d32
|
@ -1,6 +1,5 @@
|
|||
mirai_http_api_config = {
|
||||
"host": "",
|
||||
"port": 8080,
|
||||
"verifyKey": "",
|
||||
"qq": 0
|
||||
}
|
||||
|
@ -18,5 +17,10 @@ openai_config = {
|
|||
}
|
||||
|
||||
completion_api_params = {
|
||||
|
||||
"model": "text-davinci-003",
|
||||
"temperature": 0.9,
|
||||
"max_tokens": 1024,
|
||||
"top_p": 1,
|
||||
"frequency_penalty": 0.4,
|
||||
"presence_penalty": 0.3,
|
||||
}
|
2
main.py
2
main.py
|
@ -12,7 +12,7 @@ def main():
|
|||
assert os.path.exists('config.py')
|
||||
import config
|
||||
|
||||
print(config.mirai_http_api_config)
|
||||
# print(config.mirai_http_api_config)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
0
pkg/__init__.py
Normal file
0
pkg/__init__.py
Normal file
0
pkg/database/__init__.py
Normal file
0
pkg/database/__init__.py
Normal file
35
pkg/database/manager.py
Normal file
35
pkg/database/manager.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
import pymysql
|
||||
|
||||
inst = None
|
||||
|
||||
|
||||
class DatabaseManager:
|
||||
host = ''
|
||||
port = 0
|
||||
user = ''
|
||||
password = ''
|
||||
database = ''
|
||||
conn = None
|
||||
cursor = None
|
||||
|
||||
def __init__(self, host: str, port: int, user: str, password: str, database: str):
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.user = user
|
||||
self.password = password
|
||||
self.database = database
|
||||
|
||||
self.reconnect()
|
||||
|
||||
global inst
|
||||
inst = self
|
||||
|
||||
def reconnect(self):
|
||||
self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password,
|
||||
database=self.database)
|
||||
self.cursor = self.conn.cursor()
|
||||
|
||||
|
||||
def get_inst() -> DatabaseManager:
|
||||
global inst
|
||||
return inst
|
0
pkg/openai/__init__.py
Normal file
0
pkg/openai/__init__.py
Normal file
30
pkg/openai/manager.py
Normal file
30
pkg/openai/manager.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
import openai
|
||||
|
||||
inst = None
|
||||
|
||||
|
||||
class OpenAIInteract:
|
||||
api_key = ''
|
||||
api_params = {}
|
||||
|
||||
def __init__(self, api_key: str, api_params: dict):
|
||||
self.api_key = api_key
|
||||
self.api_params = api_params
|
||||
|
||||
openai.api_key = self.api_key
|
||||
|
||||
global inst
|
||||
inst = self
|
||||
|
||||
def request_completion(self, prompt, stop):
|
||||
response = openai.Completion.create(
|
||||
prompt=prompt,
|
||||
stop=stop,
|
||||
**self.api_params
|
||||
)
|
||||
return response
|
||||
|
||||
|
||||
def get_inst() -> OpenAIInteract:
|
||||
global inst
|
||||
return inst
|
52
pkg/openai/session.py
Normal file
52
pkg/openai/session.py
Normal file
|
@ -0,0 +1,52 @@
|
|||
import time
|
||||
|
||||
import pkg.openai.manager
|
||||
|
||||
|
||||
session = {}
|
||||
|
||||
|
||||
# 通用的OpenAI API交互session
|
||||
class Session:
|
||||
name = ''
|
||||
|
||||
prompt = ''
|
||||
|
||||
user_name = 'You'
|
||||
bot_name = 'Bot'
|
||||
|
||||
create_timestamp = 0
|
||||
|
||||
last_interact_timestamp = 0
|
||||
|
||||
def __init__(self, name: str):
|
||||
self.name = name
|
||||
self.create_timestamp = int(time.time())
|
||||
|
||||
global session
|
||||
session[name] = self
|
||||
|
||||
# 请求回复
|
||||
# 这个函数是阻塞的
|
||||
def append(self, text: str) -> str:
|
||||
self.prompt += self.user_name + ':' + text + '\n'+self.bot_name+':'
|
||||
self.last_interact_timestamp = int(time.time())
|
||||
|
||||
# 向API请求补全
|
||||
response = pkg.openai.manager.get_inst().request_completion(self.prompt, self.user_name+':')
|
||||
|
||||
# 处理回复
|
||||
res_test = response["choices"][0]["text"]
|
||||
res_ans = res_test
|
||||
|
||||
# 去除开头可能的提示
|
||||
res_ans_spt = res_test.split("\n\n")
|
||||
if len(res_ans_spt) > 1:
|
||||
del (res_ans_spt[0])
|
||||
res_ans = '\n\n'.join(res_ans_spt)
|
||||
|
||||
self.prompt += "\n" + self.bot_name + ":{}".format(res_ans)
|
||||
return res_ans
|
||||
|
||||
def persistence(self):
|
||||
pass
|
0
pkg/qqbot/__init__.py
Normal file
0
pkg/qqbot/__init__.py
Normal file
0
pkg/qqbot/manager.py
Normal file
0
pkg/qqbot/manager.py
Normal file
0
tests/__init__.py
Normal file
0
tests/__init__.py
Normal file
Loading…
Reference in New Issue
Block a user