1+ # -*- coding: utf-8 -*-
2+ #@文件/File : AppCore.py
3+ #@时间/Time : 2022/12/15 02:55:51
4+ #@作者/Author : 大灰狼
5+ 6+
7+ # 加入线程threading功能, 加入pyside6界面, 把三个变量改成json本地读取并可以手动设置
8+ from .packages_app_link import json_load as call_json_load
9+
10+ from .packages_app_link import openai as call_openai
11+ from .packages_app_link import transformers_GPT2TokenizerFast as call_transformers_GPT2TokenizerFast
12+
13+ from .packages_app_link import PrivateSetPath as call_PrivateSetPath
14+ from .packages_app_link import PrivateGetExRate as call_PrivateGetExRate
15+
16+
17+ class PrivateAppCore :
18+ def __init__ (self ):
19+ # 调用PrivateSetPath()这个类, 实现获取某些文件的路径
20+ var_LinkPrivateSetPath = call_PrivateSetPath ()
21+ # 传递json文件名, 调取方法获取OpenAI-Config.json的文件路径
22+ var_GetJsonPath = var_LinkPrivateSetPath .method_SetJsonPath ('OpenAI-Config.json' )
23+ # 读文件内容
24+ with open (var_GetJsonPath , 'r' , encoding = 'utf-8' ) as var_Temp :
25+ var_TempJsonData = call_json_load (var_Temp )
26+ # 配置OpenAI-API的组织ID和API密钥和代理
27+ call_openai .organization = var_TempJsonData ['ChatGPT' ]['ChatGPT_organization' ]
28+ call_openai .api_key = var_TempJsonData ['ChatGPT' ]['ChatGPT_apikey' ]
29+ # 代理这块就不做开关处理了
30+ call_openai .proxy = var_TempJsonData ['ChatGPT' ]['ChatGPT_proxy' ]
31+ # 设定个空列表, 用于临时存储用户与ChatGPT每次对话产生的字符序列总数, 供method_GenerateResponse()使用
32+ self .var_SetTokensList = []
33+
34+ def method_CheckTokenizer (self , var_GetMessage :str , var_ChickStatus :bool ):
35+ """
36+ - 处理检查传入的字符数量
37+ - param: var_GetMessage>传入用户输入的文本
38+ - param: var_ChickStatus>True:会进入method_GenerateResponse, False:单纯的检查字符序列数量
39+ - return: 检查通过则进入 method_GenerateResponse , 不通过直接拒绝
40+ """
41+ var_Tokenizer = call_transformers_GPT2TokenizerFast .from_pretrained ("gpt2" )
42+ var_CheckLen = var_Tokenizer (var_GetMessage )['input_ids' ]
43+ # print('字符序列数: ',len(var_CheckLen))
44+ if var_ChickStatus == True :
45+ # print(var_GetMessage)
46+ if len (var_CheckLen ) > 1000 :
47+ # 限1000个字符序列
48+ return ['\u5b57 \u6570 \u8d85 \u9650 ' , len (var_CheckLen )]
49+ else :
50+ return self .method_GenerateResponse (var_GetMessage , len (var_CheckLen ))
51+ elif var_ChickStatus == False :
52+ # print('检查机器人回复:', var_GetMessage, var_ChickStatus)
53+ return len (var_CheckLen )
54+
55+ def method_GenerateResponse (self , var_GetMessage :str , var_GetTokens :int ):#[ChatGPT回答:今天是星期五。 - 提问者:今天周几]今天周几
56+ """
57+ - text-davinci-003 text-ada-001 code-davinci-002
58+ - 传入值, 获取ChatGPT返回的数据
59+ - param: var_GetMessage>传入由method_CheckTokenizer方法过来的文本
60+ - param: var_GetTokens>传入字符序列数量(用户发送的, ChatGPT回复的)
61+ - return: ChatGPT返回的数据, 字符序列数量(用户发送的+ChatGPT回复的)
62+ """
63+ # 用户提问的内容, 计算出字符序列后存入列表
64+ self .var_SetTokensList .append (var_GetTokens )
65+ completions = call_openai .Completion .create (
66+ engine = "text-davinci-003" ,# 选取的回答模型
67+ prompt = var_GetMessage ,# 传入的文本值
68+ # suffix='',# 默认为空, 日后研究
69+ max_tokens = 1024 ,# 不可超过engine参数中选取的模型,所限定的最大值
70+ # include_context=True,# 启用上下文关联
71+ temperature = 0.5 ,# 范围0~1 | 0最准确
72+ top_p = 1 ,# 采样答案的质量, 1为最高,即100%
73+ # instruction="Fix the spelling mistakes",
74+ n = 1 ,# 默认值1, 不是很清楚具体作用, 但文档描述会影响到token配合, 也就是会实际影响账户余额
75+ stream = False ,# 默认值False, 不是很清楚具体作用
76+ # logprobs='', # 默认空值
77+ echo = False ,
78+ # stop=[" Me:", " ChatGptAI:"],# 默认空值, 字符串或数组
79+ presence_penalty = 0 ,# 默认值0, 范围-2.0~2.0
80+ frequency_penalty = 0 ,# 默认值0, 范围-2.0~2.0
81+ # best_of=1,# 默认值1
82+ # logit_bias={"50256": -100}# 默认值空, 看不懂
83+ # user='DhlTest_1'# 寻思半天这玩意设了有什么用...
84+ )
85+ # 获取ChatGPT回复的内容, 这个内容是真正要拿去计算字符序列数的
86+ message = completions ["choices" ][0 ]["text" ]
87+ # 将ChatGPT回复的内容, 通过method_CheckTokenizer()检查字符序列数
88+ self .var_SetTokensList .append (self .method_CheckTokenizer (message , False ))
89+ # print(self.var_SetTokensList)
90+ # 求和列表元素
91+ var_GetListSum = sum (self .var_SetTokensList )
92+ # 清空掉列表
93+ self .var_SetTokensList = []
94+ # var_SetMemoryArchives = f"[ChatGPT回答:{message} - 提问者:{var_GetMessage}]"
95+ # 规整ChatGPT回复的内容, 去除一些多余的字符串
96+ var_NewMessage = message .replace ('\n ' , '' , 2 ).replace (',' , '' , 1 )
97+ # 传入上下文总字符序列数, 计算人名币价格
98+ var_GetResult = call_PrivateGetExRate ().method_GetExRate (var_GetListSum )
99+ return [var_NewMessage , var_GetResult ]
100+ # =============================================
101+ # start_sequence = "\nChatGptAI:"
102+ # restart_sequence = "\nMe: "
103+ # # 设置通过代理访问,并且以数据流形式返回
104+ # import requests
105+ # import socks,socket
106+ # socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 10808)
107+ # socket.socket = socks.socksocket
108+ # headers = {
109+ # 'Content-Type': 'application/json',
110+ # 'Authorization': 'Bearer {}'.format("sk-"),
111+ # 'OpenAI-Organization': 'org-'
112+ # }
113+ # response = requests.post('https://api.openai.com/v1/completions', headers=headers, json={
114+ # "model": "text-davinci-003",
115+ # "prompt": var_GetMessage,
116+ # "max_tokens": 1024,
117+ # "temperature": 0.5,
118+ # "presence_penalty": 0,
119+ # "frequency_penalty": 0,
120+ # "stream":True})
121+ # return response.text
122+ # =============================================
123+
124+ # #判断回复时间
125+ # if completions["response_time"] < 55:
126+ # return message
127+ # else:
128+ # print("回复时间限制在50秒, 已暂停回复")
0 commit comments