File size: 7,123 Bytes
68fa985
534f3d0
68fa985
 
 
 
 
242e6a1
86f689a
68fa985
534f3d0
581b6d4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
---
title: Go Chatgpt Api
emoji: 💩
colorFrom: green
colorTo: indigo
sdk: docker
pinned: false
app_port: 5000
---

# go-chatgpt-api-plus
作为刚学go的一个练手项目,自用

- 将chatgpt前端进行逆向,实现绕过cloudflare
- 对官方api进行代理
- 实现前端接口转标准api(通过access_token实现标准api传入访问)

端口列表
```
/backend-api/* (前端逆向接口)
/backend-api/conversation/ws (前端WS逆向为原数据流格式)
/api/* (前端逆向接口)
/public-api/* (前端逆向接口)
/v1/* (官方api代理)
/r/v1/chat/completions (前端接口转标准api,支持流式)
/r/v1/chat/completions/ws (前端WS转标准api,支持流式)
/r/ws/v1/chat/completions (功能相同,提供兼容)
/r/v1/images/generations (前端接口转标准api,不支持流式,只支持gpt-4的账户)
/getsession (实现__Secure-next-auth.session-token刷新session,返回session,或输入username与password输出session)
/token (获取ArkoseToken)
```
目前ws逆向仅支持3.5,4有些问题,看ip纯度,纯度高就能输出
```
/r/v1/chat/completions method:["GET", "POST", "OPTIONS"]
input:
{
  "model": "gpt-3.5-turbo-16k",
  "messages": [
    {
      "role": "user",
      "content": "what can you do"
    }
  ]
}
output:
{
    "id": "chatcmpl-m3mYrjKTZuoNARfQerON95UJlA9XSWBi",
    "object": "chat.completion",
    "created": 1701011706,
    "model": "gpt-3.5-turbo-16k",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "I can do a wide range of tasks and provide information on various topics. Here are some of the things I can do:\n\n1. Answer Questions: I can provide information on a wide range of topics, including science, history, technology, mathematics, and more.\n\n2. Generate Text: I can generate text for various purposes, such as writing essays, creating stories, composing emails, and more.\n\n3. Language Translation: I can translate text from one language to another.\n\n4. Math Assistance: I can help with mathematical calculations, equations, and explanations.\n\n5. Programming Help: I can assist with coding and programming-related questions and problems.\n\n6. Writing Assistance: I can help with grammar and writing suggestions, including editing and proofreading.\n\n7. General Knowledge: I can provide general knowledge and facts on a wide variety of subjects.\n\n8. Recommendations: I can offer recommendations for books, movies, music, travel destinations, and more.\n\n9. Conversation and Chat: I can engage in casual conversation and chat on a variety of topics.\n\n10. Learning and Education: I can assist with learning and provide explanations on academic subjects.\n\n11. Problem Solving: I can help you brainstorm ideas, solve problems, and make decisions.\n\n12. Trivia and Quizzes: I can create and participate in trivia quizzes and answer trivia questions.\n\nPlease keep in mind that I do not have access to real-time information beyond my last knowledge update in January 2022, so some information may be outdated, and I cannot provide current news or events. If you have a specific task or question in mind, feel free to ask, and I'll do my best to assist you!"
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 0,
        "completion_tokens": 0,
        "total_tokens": 0
    }
}
```
```
/r/v1/images/generations method:["GET", "POST", "OPTIONS"]
input:
{
  "model": "dall-e-3",
  "prompt": "A cute baby sea otter",
  "n": 1,
  "size": "1024x1024"
}
output:
{
  "created": 1701014049,
  "data": [
    {
      "revised_prompt": "A cute baby sea otter, looking fluffy and adorable, with big, curious eyes, floating on its back in a calm blue ocean. The otter is holding a small shell in its tiny paws, and its fur is wet, giving it a shiny appearance under the sun. The background features a serene seascape with gentle waves and a clear sky.",
      "url": "https://files.oaiusercontent.com/file-fqEmsHBijHGkBKo0CnYIAfCJ?se=2023-11-26T16%3A54%3A09Z&sp=r&sv=2021-08-06&sr=b&rscc=max-age%3D31536000%2C%20immutable&rscd=attachment%3B%20filename%3Daa87dac2-8142-419d-9fe1-afa90c0a376e.webp&sig=xjwmZhzC3fZSF7V6TJ5hTWkmxBOMiVQKs0v/wTJRvAM%3D"
    }
  ]
}
```
```
/getsession methods:["POST"]
input:
{
	"refreshCookie":""
}
or
{
	"username":"",
  "password":""
}
output:
{
    "user": {
        "id": "",
        "name": "",
        "email": "",
        "image": "",
        "picture": "",
        "idp": "auth0",
        "iat": 1701014297,
        "mfa": false,
        "groups": [],
        "intercom_hash": ""
    },
    "expires": "2024-02-24T15:58:17.821Z",
    "accessToken": "",
    "authProvider": "auth0",
    "models": [
        {
            "slug": "text-davinci-002-render-sha",
            "max_tokens": 8191,
            "title": "Default (GPT-3.5)",
            "description": "Our fastest model, great for most everyday tasks.",
            "tags": [
                "gpt3.5"
            ],
            "capabilities": {},
            "product_features": {}
        }
    ],
    "refreshCookie": ""
}
```
```
/token/:id methods:["GET"]
eg: /token/0A1D34FC-659D-4E23-B17B-694DCFCF6A6C
output:
{
    "token": ""
}
```

## 代码部署
### 配置文件
- 在harPool目录中加入har文件,实现登录验证与gpt4对话验证([获取har教程](./getHar.md))
- 复制一份.env.temp,并修改名称为.env,修改配置项后保存
``` python
proxy = "http://127.0.0.1:10809"   #代理地址 (选填)
port = 5000                        #程序运行端口
host = '127.0.0.1'                 #可访问ip,0.0.0.0允许所有ip
verify = false                     #是否对访问进行验证
auth_key = ""                      #若开启访问验证,则需要在Header中添加AuthKey字段,且值为auth_key的值才能访问 (选填)
arkose_must = false                #是否强行gpt3.5进行验证
OpenAI_HOST = "chat.openai.com"    #openai网页api接口地址 (选填)
openai_api_host = "api.openai.com" #openai官方api接口 (选填)
proxy_pool_url=""                  #ipidea代理池链接 (选填)
#示例http://api.proxy.ipidea.io/getProxyIp?num=10&return_type=json&lb=1&sb=0&flow=1&regions=us&protocol=http,根据访问频次设置num值
log_level = "debug"                #日志等级

redis_address = "127.0.0.1:6379"   #redis地址(若不开启代理池可选填)
redis_passwd = ""                  #redis密码
redis_db = 0                       #选择的redis数据库
```
其中proxy_pool_url使用的是[ipidea](https://share.ipidea.net/8hPKah)的代理池,注册送100M流量,无限ip,一个月,测试足够
使用代理池后需要填写redis信息,redis版本需要7以上
### 运行

`go build && ./WarpGPT`

## Docker部署
首先克隆代码
```shell
git clone https://github.com/oliverkirk-sudo/WarpGPT.git
cd WarpGPT
```
正确配置.env文件,在harPool中放入har文件
(其中host应该为0.0.0.0)
```shell
docker build -t warpgpt .
docker run -d -p 5000:5000 warpgpt
```

## License
Apache-2.0