yptools 1.0.15 → 1.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/yptools/chatai/yp_chatai.rb +89 -20
- data/lib/yptools/help/yp_help.rb +2 -1
- data/lib/yptools.rb +5 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 05c1d548417627949ac94ebf616c8fa43f617effa7abe15c6696f0fd7a4ebc98
|
4
|
+
data.tar.gz: 77b047b1c9e4a24dbe2ca490884459a715a4f522d25b6ade0d117de59495745f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30bb630cb7d84c1e80dec1bf59f0c667b53f21ba96ee0284c92013af3421eed6bea1290ddccd6fd85cf3d9d0f9ac2ddf34a4a2ebba9c323b8a7e34a4dc2c8380
|
7
|
+
data.tar.gz: fa7e14ba1b2a495849921bb73b64d71446a0bed3b4c09a50bafa928c415e325f994c8ee1208810f04fb54b73f2fd0f53ef065dcbc06e679e5710dfe18ff301f3
|
@@ -1,49 +1,118 @@
|
|
1
1
|
require_relative '../log/yp_log'
|
2
2
|
require 'net/http'
|
3
3
|
require 'json'
|
4
|
+
require 'base64'
|
4
5
|
|
5
6
|
class YPChatAI
|
6
7
|
|
7
|
-
def self.
|
8
|
-
|
9
|
-
yp_log_msg "
|
10
|
-
|
8
|
+
def self.startChatAI
|
9
|
+
system('clear')
|
10
|
+
yp_log_msg "\n欢迎使用 YPTools & ChatGPT"
|
11
|
+
yp_log_msg "YPTools源码地址:https://github.com/HansenCCC/YPTools"
|
12
|
+
yp_log_msg "OpenAI地址:https://github.com/openai\n"
|
13
|
+
yp_log_success "ChatGPT"
|
14
|
+
yp_log_doing "输入 'q' 或者 'quit' 退出当前会话"
|
15
|
+
yp_log_msg '我是一个非常聪明的ChatGPT机器人。如果您问我一个根源于真理的问题,我会给您答案。'
|
16
|
+
yp_log_msg 'Q: 全球人类的平均寿命是多少?'
|
17
|
+
yp_log_msg 'A: 根据世界卫生组织公布的数据,2019年全球人类的平均寿命为71.4岁。'
|
11
18
|
|
19
|
+
yp_contents = Array.new
|
20
|
+
while true
|
21
|
+
Encoding.default_external = Encoding::UTF_8
|
22
|
+
Encoding.default_internal = Encoding::UTF_8
|
23
|
+
# 使用while循环
|
24
|
+
print "Q: "
|
25
|
+
yp_question = STDIN.gets.chomp
|
26
|
+
if (yp_question.upcase == 'Q' || yp_question.upcase == 'QUIT')
|
27
|
+
break
|
28
|
+
end
|
29
|
+
yp_contents.push({
|
30
|
+
'USER' => yp_question,
|
31
|
+
'AI' => ""
|
32
|
+
})
|
33
|
+
yp_answer = self.chatGPTWithQuestion(yp_contents)
|
34
|
+
print "A: " + yp_answer + "\n"
|
35
|
+
yp_item = yp_contents.pop
|
36
|
+
yp_item["AI"] = yp_answer
|
37
|
+
yp_contents.push(yp_item)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.chatGPTWithQuestion(content)
|
42
|
+
yp_chataiURL = 'https://api.openai.com/v1/completions'
|
43
|
+
# yp_chataiURL = 'https://api.openai.com/v1/engines/davinci-codex/completions'
|
12
44
|
# 开始发送网络请求
|
13
45
|
url = URI.parse(yp_chataiURL)
|
14
46
|
http = Net::HTTP.new(url.host, url.port)
|
15
47
|
http.use_ssl = true
|
48
|
+
# 简单了加了下密,免费的apikey,就不要扒去用了(我的代码是开源放到GitHub,加密的目的是ChatGPT会检测秘钥是否在网络泄露)
|
49
|
+
yp_token = "c2stTVRVMVZqeUdpNWxzYlU1TmNlU1pUM0JsYmtGSmNYam5iUk5ROENVYUd2QVR4WXpp"
|
50
|
+
# 将Base64字符串解码为原始二进制数据
|
51
|
+
decoded_data = Base64.decode64(yp_token).force_encoding("UTF-8")
|
16
52
|
# 设置请求头
|
17
53
|
headers = {
|
18
54
|
'Content-Type' => 'application/json',
|
19
|
-
'Authorization' => 'Bearer
|
55
|
+
'Authorization' => 'Bearer ' + decoded_data
|
20
56
|
}
|
57
|
+
# 设置ai根据上下文
|
58
|
+
question = ''
|
59
|
+
for key in content
|
60
|
+
user = key['USER']
|
61
|
+
ai = key['AI']
|
62
|
+
question += '\nUSER: ' + user + '\nAI: ' + ai
|
63
|
+
end
|
64
|
+
|
21
65
|
# 设置请body
|
22
66
|
data = {
|
67
|
+
# 'engine' => 'davinci',
|
23
68
|
'model' => 'text-davinci-003', # 然后GPT-3模型会根据您的输入文本自动生成文本补全或摘要。
|
24
|
-
'prompt' =>
|
69
|
+
'prompt' => question, # 问的问题
|
25
70
|
'max_tokens' => 999, # 设置回答最多多少个字符
|
26
|
-
'temperature' => 0.
|
71
|
+
'temperature' => 0.7, # 文本创意度,默认 1
|
72
|
+
"n": 1, #几个回答
|
73
|
+
"stop": "\n"
|
27
74
|
}
|
28
|
-
|
75
|
+
|
29
76
|
request = Net::HTTP::Post.new(url.path, headers)
|
30
77
|
request.body = data.to_json
|
31
|
-
response = http.request(request)
|
32
78
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
if !
|
38
|
-
|
39
|
-
|
79
|
+
begin
|
80
|
+
response = http.request(request)
|
81
|
+
# 处理响应数据
|
82
|
+
yp_message_response = JSON(response.body)
|
83
|
+
if !yp_message_response["error"]
|
84
|
+
created = yp_message_response["created"]
|
85
|
+
choices = yp_message_response["choices"]
|
86
|
+
if !choices.empty?
|
87
|
+
text = choices.first["text"]
|
88
|
+
text = text.gsub(/\n+/, "")
|
89
|
+
return text
|
90
|
+
else
|
91
|
+
yp_log_fail "请求失败," + yp_message_response
|
92
|
+
return ""
|
93
|
+
end
|
40
94
|
else
|
41
|
-
|
95
|
+
message = yp_message_response["error"]["message"]
|
96
|
+
yp_log_fail "请求失败,请稍后再试!!!\n" + message
|
97
|
+
return ""
|
42
98
|
end
|
43
|
-
|
44
|
-
|
45
|
-
yp_log_fail
|
99
|
+
rescue StandardError => e
|
100
|
+
# 处理异常
|
101
|
+
yp_log_fail "请求的次数太多了,请稍后再试!!!"
|
102
|
+
yp_log_fail "发生异常:#{e.message}"
|
46
103
|
end
|
47
104
|
end
|
48
105
|
|
106
|
+
def self.message(message)
|
107
|
+
yp_log_doing "你的问题:#{message}"
|
108
|
+
yp_log_msg "请求中,请等待..."
|
109
|
+
yp_contents = Array.new
|
110
|
+
yp_contents.push({
|
111
|
+
'USER' => message,
|
112
|
+
'AI' => ""
|
113
|
+
})
|
114
|
+
yp_answer = self.chatGPTWithQuestion(yp_contents)
|
115
|
+
yp_log_success "chatGPT:" + yp_answer.gsub(/\n+/, "\n")
|
116
|
+
end
|
117
|
+
|
49
118
|
end
|
data/lib/yptools/help/yp_help.rb
CHANGED
@@ -3,7 +3,8 @@ class YPHelp
|
|
3
3
|
def self.message
|
4
4
|
puts %q{
|
5
5
|
|
6
|
-
chatai: use [yptools chatai
|
6
|
+
chatai: use [yptools chatai] 创建会话列表与 chatgpt 聊天,会记录上下内容(科学上网)
|
7
|
+
[yptools chatai ...] 快速与 chatgpt 沟通,不会记录上下内容
|
7
8
|
|
8
9
|
autocre: use [yptools autocre ...] 自动化工具命令
|
9
10
|
use [yptools autocre -objc ...] 根据 json 自动创建 Objective-C 数据库操作文件 .h|.m 文件。(依赖三方库 FMDB )
|
data/lib/yptools.rb
CHANGED
@@ -23,8 +23,7 @@ class YPTools
|
|
23
23
|
name = argvs[1]
|
24
24
|
self.chatai name
|
25
25
|
else
|
26
|
-
|
27
|
-
self.help
|
26
|
+
self.startChat
|
28
27
|
end
|
29
28
|
when 'autocre'
|
30
29
|
if argvs.size > 1
|
@@ -141,6 +140,10 @@ class YPTools
|
|
141
140
|
def self.autoinit
|
142
141
|
YPAutoInit.createObjcInitJson
|
143
142
|
end
|
143
|
+
|
144
|
+
def self.startChat
|
145
|
+
YPChatAI.startChatAI()
|
146
|
+
end
|
144
147
|
|
145
148
|
end
|
146
149
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yptools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- chenghengsheng
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
11
|
+
date: 2023-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|