大家好,我是公子駿,最近體驗了火爆全網的 ChartGPT,深刻體會了其強大的能力,這讓我們程式猿對AI的未來突然有了廣大的暢想空間,
我也在網上看到不少大牛通過 ChartGPT 來獲取收益,就尋思著能否自己接入 ChartGPT 的 API 來做些什么事情,
然后到網上找了不少 Java 接入 ChatGPT 的文章案例,成功實作了接入,而本文就是我整理了這些案例后,使用 Forest 框架重寫了一遍接入方法,
一、前期作業
-
注冊 OpenAI 的賬號
-
獲取 OpenAI 的 API KEY
如何完成這兩步網上的資料很多,我這里就不再贅述了,
需要注意的是,API KEY 在創建好之后一定要保存好,否則退出創建頁面后就可能找不到了,
二. 添加依賴
除了基本的 SpringBoot 依賴外,還需添加以下 Maven 依賴
<!-- Forest 的 SpringBoot 啟動包 --> <dependency> <groupId>com.dtflys.forest</groupId> <artifactId>forest-spring-boot-starter</artifactId> <version>1.5.30</version> </dependency> <!-- Fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>
三. 配置
在application.yml檔案中添加下列配置
forest: connect-timeout: 60000 # HTTP請求連接超時時間 read-timeout: 60000 # HTTP請求讀取超時時間 variables: # 自定義變數: apiKey: YOUR_API_KEY # 你的 OpenAI 的 API KEY model: text-davinci-003 # ChartGPT 的模型 maxTokens: 50 # 最大 Token 數 temperature: 0.5 # 該值越大每次回傳的結果越隨機,即相似度越小
四. 定義 ChartGPT 的接入介面
創建一個interface類,名字就叫 ChartGPT (名字可以隨意起)
public interface ChartGPT { // 只要輸入一個引數: 提示詞 // 該方法就會發送 HTTP 請求到 OpenAI 的介面服務 // 并將回應結果以字串形式回傳回來 @Post( url = "https://api.openai.com/v1/engines/${model}/completions", contentType = "application/json", headers = "Authorization: Bearer ${apiKey}", data = "{\"prompt\": \"${prompt}\", \"max_tokens\": ${maxTokens}, \"temperature\": ${temperature}}" ) String send(@Var("prompt") String prompt); }
五. 呼叫介面
在需要呼叫的地方注入ChartGPT介面實體,并可呼叫獲取 ChartGPT 的結果
@Resource private ChartGPT chartGPT; public void run() { String response = chartGPT.send("你好"); System.out.println(response); }
執行程式后,會在控制臺上列印出 ChartGPT 的回應結果
{"id":"cmpl-6ze62yNNtH5ZHNkaPjWUZORoEtojK","object":"text_completion","created":1680150158,"model":"text-davinci-003","choices":[{"text":"\n\n你好!","index":0,"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":4,"completion_tokens":9,"total_tokens":13}}
到這一步已經算初步成功了!
但你發現我們接受到的是一個JSON字串,并不能直接處理它,需要進一步的加工,
六. 改進
我們添加兩個資料類
在 ChartGPT 回傳的 JSON 字串后,Forest 框架會自動將其反序列化成這些資料類
添加的第一個資料類 GPTResponse: 用于接受 ChartGPT 回應結果最外層 JSON 結構的資料類
@Data public class GPTResponse { private String id; private String object; private String created; private String model; private List<GPTChoice> choices; }
添加的二個資料類 GPTChoice: 用于接受 ChartGPT 回應結果 JSON 結構里層中文本內容部分的資料類
@Data public class GPTChoice { private String text; private Integer index; }
改一下介面的回傳型別
public interface ChartGPT { // Forest 會自動將回應結果反序列化成 GPTResponse 型別并回傳出來 @Post( url = "https://api.openai.com/v1/engines/${model}/completions", contentType = "application/json", headers = "Authorization: Bearer ${apiKey}", data = "{\"prompt\": \"${prompt}\", \"max_tokens\": ${maxTokens}, \"temperature\": ${temperature}}" ) GPTResponse send(@Var("prompt") String prompt); }
改一下呼叫部分的代碼
GPTResponse response = chartGPT.send("你好");
System.out.println(response.getChoices().get(0).getText());
執行一下,然后會在控制臺上看到類似的輸出內容
你好!很高興見到你!
示例代碼
如果以上步驟都完成了,祝賀你!你是一名優秀的程式猿~
完不成也沒關系,我在開源倉庫里也提供了示例工程代碼,方便大家參考
https://gitee.com/dromara/forest/tree/master/forest-examples/example-chartgpt
或者關注公眾號 程式猿公子駿,回復訊息 chartgpt,即可獲得示例工程原始碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548694.html
標籤:Java
