大家好,我是公子駿。最近體驗了火爆全網(wǎng)的 ChartGPT,深刻體會了其強大的能力,這讓我們程序猿對AI的未來突然有了廣大的暢想空間。
我也在網(wǎng)上看到不少大牛通過 ChartGPT 來獲取收益,就尋思著能否自己接入 ChartGPT 的 API 來做些什么事情。
(資料圖)
然后到網(wǎng)上找了不少 Java 接入 ChatGPT 的文章案例,成功實現(xiàn)了接入,而本文就是我整理了這些案例后,使用 Forest 框架重寫了一遍接入方法。
一、前期工作注冊 OpenAI 的賬號
獲取 OpenAI 的 API KEY
如何完成這兩步網(wǎng)上的資料很多,我這里就不再贅述了。
需要注意的是,API KEY 在創(chuàng)建好之后一定要保存好,否則退出創(chuàng)建頁面后就可能找不到了。
二. 添加依賴除了基本的 SpringBoot 依賴外,還需添加以下 Maven 依賴
com.dtflys.forest forest-spring-boot-starter 1.5.30 com.alibaba fastjson 1.2.83
三. 配置
在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 數(shù) temperature: 0.5 # 該值越大每次返回的結果越隨機,即相似度越小
四. 定義 ChartGPT 的接入接口
創(chuàng)建一個interface
類,名字就叫 ChartGPT (名字可以隨意起)
public interface ChartGPT { // 只要輸入一個參數(shù): 提示詞 // 該方法就會發(fā)送 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);}
五. 調(diào)用接口
在需要調(diào)用的地方注入ChartGPT
接口實例,并可調(diào)用獲取 ChartGPT 的結果
@Resourceprivate ChartGPT chartGPT;public void run() { String response = chartGPT.send("你好"); System.out.println(response);}
執(zhí)行程序后,會在控制臺上打印出 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}}
到這一步已經(jīng)算初步成功了!
但你發(fā)現(xiàn)我們接受到的是一個JSON字符串,并不能直接處理它,需要進一步的加工。
六. 改進我們添加兩個數(shù)據(jù)類
在 ChartGPT 返回的 JSON 字符串后,F(xiàn)orest 框架會自動將其反序列化成這些數(shù)據(jù)類
添加的第一個數(shù)據(jù)類 GPTResponse: 用于接受 ChartGPT 響應結果最外層 JSON 結構的數(shù)據(jù)類
@Datapublic class GPTResponse { private String id; private String object; private String created; private String model; private Listchoices;}
添加的二個數(shù)據(jù)類 GPTChoice: 用于接受 ChartGPT 響應結果 JSON 結構里層中文本內(nèi)容部分的數(shù)據(jù)類
@Datapublic 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);}
改一下調(diào)用部分的代碼
GPTResponse response = chartGPT.send("你好");System.out.println(response.getChoices().get(0).getText());
執(zhí)行一下,然后會在控制臺上看到類似的輸出內(nèi)容
你好!很高興見到你!
示例代碼如果以上步驟都完成了,祝賀你!你是一名優(yōu)秀的程序猿~
完不成也沒關系,我在開源倉庫里也提供了示例工程代碼,方便大家參考
https://gitee.com/dromara/forest/tree/master/forest-examples/example-chartgpt
或者關注公眾號程序猿公子駿
,回復消息chartgpt
,即可獲得示例工程源碼
關鍵詞: