Skip to content

Commit a74acf3

Browse files
committed
上传代码
1 parent bf8614c commit a74acf3

File tree

11 files changed

+1049
-0
lines changed

11 files changed

+1049
-0
lines changed

ChatGptTools/AppCore/__init__.py

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
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秒, 已暂停回复")
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# -*- coding: utf-8 -*-
2+
#@文件/File : __init__.py
3+
#@时间/Time : 2022/12/21 04:56:49
4+
#@作者/Author : 大灰狼
5+
6+
7+
8+
from AppCore.packages_app_link import socket as call_socket
9+
from AppCore.packages_app_link import re_search as call_re_search
10+
from AppCore.packages_app_link import re_findall as call_re_findall
11+
from AppCore.packages_app_link import requests_get as call_requests_get
12+
from AppCore.packages_app_link import socks_SOCKS5 as call_socks_SOCKS5
13+
from AppCore.packages_app_link import socks_set_default_proxy as call_socks_set_default_proxy
14+
from AppCore.packages_app_link import socks_socksocket as call_socks_socksocket
15+
from AppCore.packages_app_link import json_load as call_json_load
16+
17+
from AppCore.packages_app_link import PrivateSetPath as call_PrivateSetPath
18+
19+
20+
class PrivateGetExRate:
21+
def __init__(self):
22+
# 获取配置文件路径
23+
self.var_GetJsonPath = call_PrivateSetPath().method_SetJsonPath('OpenAI-Config.json')
24+
25+
def method_GetExRate(self, var_GetTokens:int):
26+
# 读取配置文件,读键'ChatGPT_proxy'的值, 再拆成ip和端口
27+
with open(self.var_GetJsonPath, 'r') as var_Temp:
28+
# 读取配置文件
29+
var_Data = call_json_load(var_Temp)
30+
# 读取键ChatGPT_proxy的值
31+
var_DataIPort = var_Data['ChatGPT']['ChatGPT_proxy']
32+
# 用正则拆分ip和端口 "socks5://127.0.0.1:10808"
33+
var_GetIPort = call_re_findall('([\\d.]+):([\\d]+)', var_DataIPort)[0]
34+
# 设置代理
35+
call_socks_set_default_proxy(call_socks_SOCKS5, var_GetIPort[0], int(var_GetIPort[1]))
36+
call_socket.socket = call_socks_socksocket
37+
38+
# 设置爬取的url和header
39+
var_SetUrl = 'https://www.google.com/finance/quote/USD-CNY'
40+
var_SetHeaders = {
41+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36',
42+
}
43+
44+
# 获取内容
45+
var_GetHtmlText = call_requests_get(var_SetUrl, headers=var_SetHeaders).text
46+
# html_text = var_Res.text
47+
48+
# 根据关键字获得汇率
49+
var_Reult = call_re_search(r'class=\"YMlKec fxKbKc\">(.*?)<\/div>', var_GetHtmlText)
50+
51+
# 如果有内容, 输出获取的汇率, 1美元*汇率->人名币
52+
if var_Reult:
53+
var_GetExRate_USAToCNY = var_Reult.group(1)
54+
return self._method_CalculatePrice(var_GetExRate_USAToCNY, var_GetTokens)
55+
else:
56+
return False
57+
58+
def _method_CalculatePrice(self, var_GetExRate:str, var_GetTokens:int):
59+
"""
60+
- 根据汇率和上下文字符序列数, 计算成人名币价格
61+
- param: var_GetExRate>获取实时汇率, 如果未获取到实时汇率, 则会传入平均汇率6.6971
62+
- param: var_GetTokens>获取上下文字符序列数
63+
- return 上下文字符序列数消耗的人名币价格
64+
- 限1000个字符序列, 以此为基数
65+
- 每1000个字符序列消耗第四档位的价格:0.0002美元, 单价:0.0000002美元/个字符序列
66+
- 每1000个字符序列消耗第三档位的价格:0.0005美元, 单价:0.0000005美元/个字符序列
67+
- 每1000个字符序列消耗第二档位的价格:0.0020美元, 单价:0.000002美元/个字符序列
68+
- 每1000个字符序列消耗第一档位的价格:0.0200美元, 单价:0.00002美元/个字符序列
69+
- 目前程序固定第一档位
70+
"""
71+
# 设定档位的美元单价
72+
var_PricePoints_A = 0.00002
73+
var_PricePoints_B = 0.000002
74+
var_PricePoints_C = 0.0000005
75+
var_PricePoints_D = 0.0000002
76+
77+
# 每1000个字符序列消耗第一档位的价格:0.0200美元
78+
# 单价 0.00002美元/每个字符序列
79+
# 上下文字符序列数价格 = var_GetTokens * 0.00002
80+
# 计算上下文字符序列数消耗的美元价格, 根据实时汇率换算成人名币价格, 浮点数取小数点后六位
81+
var_Reult = (float(var_GetTokens) * var_PricePoints_A) * float(var_GetExRate)
82+
return round(var_Reult, 6)
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# -*- coding: utf-8 -*-
2+
#@文件/File : __init__.py
3+
#@时间/Time : 2022/12/17 08:05:49
4+
#@作者/Author : 大灰狼
5+
6+
7+
from AppCore.packages_app_link import os_path as call_os_path
8+
from AppCore.packages_app_link import pathlib_Path as call_pathlib_Path
9+
10+
11+
class PrivateSetPath:
12+
"""
13+
1. 文件路径: 'ChatGptTools/AppCore/function_app_core/function_set_path/__init__.py'
14+
"""
15+
def __init__(self):
16+
# 获取此脚本所在路径
17+
var_getAppPath = str(call_pathlib_Path(__file__).absolute().parent)
18+
# 根据获取的脚本路径, 返回至resource文件夹所在的目录
19+
self.var_getAppRoute = call_os_path.abspath(call_os_path.join(var_getAppPath, "../../.."))
20+
21+
def method_SetJsonPath(self, var_getJsonName):
22+
"""
23+
- 1. 功能: 设置Json文件的目录, 进行调用
24+
- 2. param: var_getJsonName>传入Json文件的文件名
25+
- 3. return: var_getJsonPath>返回Json文件的路径
26+
"""
27+
# 设置文件读取路径 / 整合路径
28+
var_setJsonFolder = "resource/file_json/"
29+
var_getJsonRoutePath = call_os_path.join(self.var_getAppRoute, var_setJsonFolder, var_getJsonName)
30+
var_getJsonRoutePath = var_getJsonRoutePath.replace('\\', '/')
31+
return var_getJsonRoutePath
32+
33+
def method_SetSvgPath(self, var_getSvgName):
34+
"""
35+
- 1. 功能: 设置Svg文件的目录, 进行调用
36+
- 2. param: var_getSvgName>传入Svg文件的文件名
37+
- 3. return: var_getSvgRoutePath>返回Svg文件的路径
38+
"""
39+
# 设置文件读取路径 / 整合路径
40+
var_setSvgFolder = "resource/file_svg/"
41+
var_getSVGRoutePath = call_os_path.join(self.var_getAppRoute, var_setSvgFolder, var_getSvgName)
42+
var_getSvgRoutePath = var_getSVGRoutePath.replace('\\', '/')
43+
return var_getSvgRoutePath
44+
45+
def method_SetGifPath(self, var_getGifName):
46+
"""
47+
- 1. 功能: 设置Gif文件的目录, 进行调用
48+
- 2. param: var_getGifName>传入Svg文件的文件名
49+
- 3. return: var_getGifRoutePath>返回Svg文件的路径
50+
"""
51+
# 设置文件读取路径 / 整合路径
52+
var_setGifFolder = "resource/file_gif/"
53+
var_getGifRoutePath = call_os_path.join(self.var_getAppRoute, var_setGifFolder, var_getGifName)
54+
var_getGifRoutePath = var_getGifRoutePath.replace('\\', '/')
55+
return var_getGifRoutePath
56+
57+
def method_SetLanguagePath(self, var_getLanguageName):
58+
"""
59+
- 1. 功能: 设置Language文件的目录, 进行调用
60+
- 2. param: var_getLanguageName>传入翻译文件的文件名
61+
- 3. return: var_getLanguageRoutePath>返回翻译文件的路径
62+
"""
63+
# 设置文件读取路径 / 整合路径
64+
var_setLanguageFolder = "resource/file_language/"
65+
var_getLanguageRoutePath = call_os_path.join(self.var_getAppRoute, var_setLanguageFolder, var_getLanguageName)
66+
var_getLanguageRoutePath = var_getLanguageRoutePath.replace('\\', '/')
67+
return var_getLanguageRoutePath
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from .app_ui_main import Ui_MainWindow

0 commit comments

Comments
 (0)