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
         
     |