在雲伺服器上搭建個人版chatGPT及後端Spring Boot整合chat GPT

朱季謙發表於2023-03-30

總結/朱季謙

本文分成兩部分,包括【國內伺服器上搭建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

具體情況如下:

image

然後需要在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頁面,是不是跟真實的很像。

image


二、後端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後端程式碼裡——
image

需要注意的是,若是部署在有魔法訪問的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雲服務上的聊天返回列印效果——

image

以上就是關於【國內伺服器上搭建chat GPT】和【後端Spring Boot整合chat GPT】教程,更多好玩的關於chat GPT相關的內容,可以關注我,因為我對這塊很感興趣,接下來會分享更多相關內容。有不懂的也可以後臺問我。

相關文章