總結/朱季謙
本文分成兩部分,包括【國內伺服器上搭建chat GPT】和【後端Spring Boot整合chat GPT】。
無論是在【國內伺服器上搭建chat GPT】和【後端Spring Boot整合chat GPT】,兩個方式都需要魔法訪問,否則是無法正常使用的,即需要具備正常訪問谷歌或者 api.openai.com的能力。
至於什麼是魔法訪問,以及如何搭建魔法訪問,請自行研究哈。
下面就開始講解兩部分的教程。
一、國內伺服器上搭建chat GPT
首先,你需要準備以下東西:
1、一臺可以訪問公網的Linux雲伺服器,最低配置1核2G即可(當然,有錢可以任性,買最高配置)
2、chatGPT的金鑰
3、開源的仿chatGPT的Docker映象
1.1、準備一臺雲伺服器
可以是騰訊雲、阿里雲或者華為雲等,我分別在阿里雲和華為雲上都能正常搭建。
1.2、設定網路代理
在部署魔法訪問的伺服器上,需要在/etc/profile增加代理,確保透過金鑰方式的chatGPT介面呼叫能正常訪問:
export all_proxy=http://127.0.0.1:8889
export http_proxy=http://127.0.0.1:8889
export https_proxy=https://127.0.0.1:8889
export all_proxy=socks5://127.0.0.1:1080
這裡的8889和1080需要根據你的魔法訪問裡的config.json來相應設定。
配置完成後,執行source /etc/profile,檢驗一下curl https://api.openai.com/
可以訪問即沒問題。可以繼續往下走。
1.3、安裝Docker
可以按照我以前記錄的一篇關於搭建Docker的方式進行命令列按照CentOS7安裝Docker遇到的問題筆記
搭建完成後,因為Docker的對外訪問若需要走所在宿主的代理話,還需要設定以下操作——
建立一個~/.docker/目錄,然後在該目錄下新建一個config.json檔案,在該檔案裡新增以下命令——
{
"default":
{
"httpProxy": "http://127.0.0.1:8889",
"httpsProxy": "http://127.0.0.1:8889",
"noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
}
}
}
1.4、Docker映象
目前網上GitHub已經開源了許多優秀的仿寫chatGPT 頁面的應用,我們無需再額外造輪子,只需要挑選其中一款用來打包部署成Docker容器執行即可。
我使用的是chatgpt-mirror這個開源專案。
直接克隆專案到對應的Linux伺服器——
git clone https://github.com/yuezk/chatgpt-mirror.git
在基於該開源專案以Dockerfile形式打包前,需要執行以下被依賴到的映象——
docker pull node:18-alpine
docker pull node:18-slim
接下來,就可以執行以下操作來建立一個Docker映象了——
cd chatgpt-mirror
#--network host表示與宿主公用網路,即走代理,然後留意下最後有一個 .
docker build --network host -t chatgpt-mirror .
#正常執行成功後,透過該指令能看到一個新映象
docker images
具體情況如下:
然後需要在cd chatgpt-mirror環境裡新增一個檔案env,該檔案裡寫入chatGPT金鑰與宿主機器的代理:
OPENAI_API_KEY=你的chatGPT金鑰
HTTP_PROXY=http://127.0.0.1:8889
完成以上操作後,最後在該目錄chatgpt-mirror裡執行——
docker run -itd --net host -p 3000:3000 -v /app/config.json:/app/config/app.config --env-file env chatgpt-mirror
正常執行完成後,即可在瀏覽上輸入http://你的伺服器ip:3000,就能出來一個外表仿chatGPT但內在是呼叫真實chatGPT介面的應用。
重點是,如此一來,你的電腦、平臺、手機等終端都無需魔法訪問,就能直接使用chatGPT了,而且響應速度比直連官網快一倍左右速度,無比絲滑!而且,沒有像chatGPT官網直連那樣經常出現響應異常以及斷開的問題,協助效率大大增加。
以下就是訪問搭建在我自己伺服器上的chatGPT頁面,是不是跟真實的很像。
二、後端Spring Boot整合chat GPT
注意,該方式同樣需要魔法訪問。
首先,在maven依賴引入以下配置——
<dependency>
<groupId>com.theokanning.openai-gpt3-java</groupId>
<artifactId>service</artifactId>
<version>0.11.1</version>
</dependency>
編寫以下程式碼——
@GetMapping("/ai")
public void sendMsg() throws InterruptedException {
System.out.println("開始提問題~");
System.out.println("你是一個工作助手,情幫忙設計一份活動策劃書" );
//GPT_TOKEN即你的程式碼金鑰
OpenAiService service = new OpenAiService(GPT_TOKEN,Duration.ofSeconds(10000));
CompletionRequest completionRequest = CompletionRequest.builder()
//使用的模型
.model("text-davinci-003")
//輸入提示語
.prompt("設計一份活動策劃書")
//該值越大每次返回的結果越隨機,即相似度越小,可選引數,預設值為 1,取值 0-2
.temperature(0.5)
//返回結果最大分詞數
.maxTokens(2048)
//與temperature類似
.topP(1D)
.build();
service.createCompletion(completionRequest).getChoices().forEach(System.out::println);
Thread.sleep(6000);
}
CompletionRequest的屬性文件介紹在這裡——
https://platform.openai.com/docs/api-reference/completions/create
啟動,呼叫該介面,即可正常使用chat GPT整合到SpringBoot後端程式碼裡——
需要注意的是,若是部署在有魔法訪問的Linux雲服務,程式碼需要相應做一下調整,否則是無法訪問到chatGPT的,會出現以下異常提示:java.net.ConnectException:Failed to connect to api.openai.com/2a03:2880:f10c:283:face:b00c:0:25de:443]
故而,需要做以下調整:
public void send1Msg() throws InterruptedException {
System.out.println("開始提問題~");
System.out.println("你是一個工作助手,情幫忙設計一份活動策劃書" );
//需要額外設定一個能訪問chatGPT的魔法訪問代理
ObjectMapper mapper = defaultObjectMapper();
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8889));
OkHttpClient client = defaultClient(GPT_TOKEN,Duration.ofSeconds(10000))
.newBuilder()
.proxy(proxy)
.build();
Retrofit retrofit = defaultRetrofit(client, mapper);
OpenAiApi api = retrofit.create(OpenAiApi.class);
//將設定的代理傳給OpenAiService即可
OpenAiService service = new OpenAiService(api);
CompletionRequest completionRequest = CompletionRequest.builder()
.model("text-davinci-003")
.prompt("設計一份活動策劃書")
.temperature(0.5)
.maxTokens(2048)
.topP(1D)
.build();
service.createCompletion(completionRequest).getChoices().forEach(System.out::println);
Thread.sleep(6000);
}
部署在Linux雲服務上的聊天返回列印效果——
以上就是關於【國內伺服器上搭建chat GPT】和【後端Spring Boot整合chat GPT】教程,更多好玩的關於chat GPT相關的內容,可以關注我,因為我對這塊很感興趣,接下來會分享更多相關內容。有不懂的也可以後臺問我。