一、開通OpenAI賬號 1.註冊OpenAI賬號 官網地址:https://openai.com/ 註意:提前準備好國外手機號,沒有的話用簡訊平臺購買手機號接收簡訊 2.購買國外手機號 地址:https://tiger-sms.com/ 我用支付寶充值了30多元(起充要30,加上手續費30多有點坑 ...
一、開通OpenAI賬號
1.註冊OpenAI賬號
官網地址:https://openai.com/
註意:提前準備好國外手機號,沒有的話用簡訊平臺購買手機號接收簡訊
2.購買國外手機號
我用支付寶充值了30多元(起充要30,加上手續費30多有點坑啊),買了一個印度尼西亞的號,美國的號用不了,提示虛擬手機號不允許註冊。
3.用買到的手機號註冊並獲取簡訊驗證碼
4.登錄OpenAI選擇第一個開始聊天
二、java集成OpenAI的api
1.設置token
登錄OpenAI選擇第三個進入
進入個人平臺頁面,右上角點擊後選擇View API keys
新增一個key,註意複製好key的內容(這就是token)
2. 項目中引入OpenAI的第三方工具包
由於官方只提供NodeJs和Python版本的工具包,java版的只能用第三方的開源包,可靠性安全性沒法保證,將就著用。
點擊openai-java進入這個開源網站
代碼寫的挺不錯的,可惜用的是gradle構建的,由於gradle本人幾乎不會用,就沒下載源碼了。好在提供了maven依賴。
在maven倉庫中可以查詢到最新的jar包,引入項目即可
<!-- https://mvnrepository.com/artifact/com.theokanning.openai-gpt3-java/service --> <dependency> <groupId>com.theokanning.openai-gpt3-java</groupId> <artifactId>service</artifactId> <version>0.12.0</version> </dependency>
3.拷貝例子代碼進行測試
由於缺少類等原因跑不起來,引入相關包
<!-- json數據解析工具包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.15.2</version> </dependency>
在國內無法直接調用OpenAI的介面,需要使用VPN代理訪問。完整的代碼測試代碼如下:
package org.example.chatgpt; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.databind.ObjectMapper; import com.theokanning.openai.OpenAiApi; import com.theokanning.openai.completion.CompletionChoice; import com.theokanning.openai.completion.CompletionRequest; import com.theokanning.openai.completion.chat.*; import com.theokanning.openai.image.CreateImageRequest; import com.theokanning.openai.service.OpenAiService; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import java.net.InetSocketAddress; import java.net.Proxy; import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.function.Consumer; import static com.theokanning.openai.service.OpenAiService.*; /** * 時間: 2023/6/5 17:07 */ public class Main { public static void main(String[] args) { String token = "sk-XXXXXXXXXXXX"; String proxyHost = "127.0.0.1"; int proxyPort = 7890; //構建HTTP代理 Proxy proxy = null; if (StrUtil.isNotBlank(proxyHost)) { proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort)); } //構建HTTP客戶端 OkHttpClient client = defaultClient(token, Duration.of(60, ChronoUnit.SECONDS)) .newBuilder() .proxy(proxy) .build(); ObjectMapper mapper = defaultObjectMapper(); Retrofit retrofit = defaultRetrofit(client, mapper); OpenAiApi api = retrofit.create(OpenAiApi.class); OpenAiService service = new OpenAiService(api, client.dispatcher().executorService()); //文本補全 System.out.println("\nCreating completion..."); CompletionRequest completionRequest = CompletionRequest.builder() .model("ada") .prompt("你叫什麼?") .echo(true) .user("testing") .n(3) .build(); service.createCompletion(completionRequest).getChoices().forEach(new Consumer<CompletionChoice>() { @Override public void accept(CompletionChoice completionChoice) { System.out.println(completionChoice.getText()); } }); //圖片生成 System.out.println("\nCreating Image..."); CreateImageRequest request = CreateImageRequest.builder() .prompt("小貓釣魚漫畫") .build(); System.out.println("\nImage is located at:"); System.out.println(service.createImage(request).getData().get(0).getUrl()); //對話 System.out.println("Creating chat completion..."); final List<ChatMessage> messages = new ArrayList<>(); final ChatMessage systemMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), "你叫什麼?"); messages.add(systemMessage); ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest .builder() .model("gpt-3.5-turbo") .messages(messages) .n(1) .maxTokens(500) .logitBias(new HashMap<>()) .build(); //完整對話 service.createChatCompletion(chatCompletionRequest) .getChoices().forEach(new Consumer<ChatCompletionChoice>() { @Override public void accept(ChatCompletionChoice chatCompletionChoice) { System.out.println(chatCompletionChoice.getMessage()); } }); //流式對話(逐Token返回) // service.streamChatCompletion(chatCompletionRequest) // .doOnError(Throwable::printStackTrace) // .blockingForEach(System.out::println); //立即釋放連接 service.shutdownExecutor(); } }
上述代碼測試了:文本補全、繪圖、聊天三個功能。
註意事項:
1.由於網路的原因,很多國外網站無法訪問,需要先開通VPN,訪問國外網站
2.國外手機號購買無法註冊,多換幾個號碼試試
3.代碼中需要設置HTTP代理,代理的地址就是VPN的本地地址