配x 注意:該項目已不再維護,並且已截至2024年6月6日。感謝所有貢獻和支持該項目的人。雖然存儲庫將保持其當前狀態,但不會提供進一步的更新或支持。請隨時根據需要修改代碼。
配x Openai棄用了所有基於發動機的API。有關更多信息,請參見下面棄用的端點。
Java庫使用OpenAi的GPT API。支持GPT-3,CHETGPT和GPT-4。
包括以下工件:
api :GPT API的請求/響應Pojos。client :GPT端點的基本改造客戶端,包括api模塊service :創建和調用客戶端的基本服務類。這是最簡單的入門方式。以及使用該服務的示例項目。
implementation 'com.theokanning.openai-gpt3-java:<api|client|service>:<version>'
< dependency >
< groupId >com.theokanning.openai-gpt3-java</ groupId >
< artifactId >{api|client|service}</ artifactId >
< version >version</ version >
</ dependency >如果您想製作自己的客戶端,只需從api模塊導入Pojos即可。您的客戶將需要使用Snake Case與OpenAI API一起使用。
如果您使用的是Raturofit,則可以導入client模塊並使用OpenAIAPI。
您必須將auth令牌添加為標頭(請參閱AuthenticationInterceptor),並將轉換器工廠設置為使用Snake Case,僅包括非零字段。
如果您正在尋找最快的解決方案,請導入service模塊並使用OpenAiservice。
配x 客戶模塊中的OpenAiservice已棄用,請切換到服務模塊中的新版本。
OpenAiService service = new OpenAiService ( "your_token" );
CompletionRequest completionRequest = CompletionRequest . builder ()
. prompt ( "Somebody once told me the world is gonna roll me" )
. model ( "babbage-002" ")
. echo ( true )
. build ();
service . createCompletion ( completionRequest ). getChoices (). forEach ( System . out :: println );如果您需要自定義OpenAiservice,請創建自己的改造客戶端並將其傳遞給構造函數。例如,請執行以下操作以添加請求記錄(添加日誌記錄gradle依賴項之後):
ObjectMapper mapper = defaultObjectMapper ();
OkHttpClient client = defaultClient ( token , timeout )
. newBuilder ()
. interceptor ( HttpLoggingInterceptor ())
. build ();
Retrofit retrofit = defaultRetrofit ( client , mapper );
OpenAiApi api = retrofit . create ( OpenAiApi . class );
OpenAiService service = new OpenAiService ( api );要使用代理,請修改OKHTTP客戶端,如下所示:
ObjectMapper mapper = defaultObjectMapper ();
Proxy proxy = new Proxy ( Proxy . Type . HTTP , new InetSocketAddress ( host , port ));
OkHttpClient client = defaultClient ( token , timeout )
. newBuilder ()
. proxy ( proxy )
. build ();
Retrofit retrofit = defaultRetrofit ( client , mapper );
OpenAiApi api = retrofit . create ( OpenAiApi . class );
OpenAiService service = new OpenAiService ( api );您可以創建您的功能,並使用ChatFunction類輕鬆地定義其執行者,以及將有助於定義其可用參數的任何自定義類。您還可以在遺囑執行人的幫助下輕鬆處理功能。
首先,我們聲明我們的函數參數:
public class Weather {
@ JsonPropertyDescription ( "City and state, for example: León, Guanajuato" )
public String location ;
@ JsonPropertyDescription ( "The temperature unit, can be 'celsius' or 'fahrenheit'" )
@ JsonProperty ( required = true )
public WeatherUnit unit ;
}
public enum WeatherUnit {
CELSIUS , FAHRENHEIT ;
}
public static class WeatherResponse {
public String location ;
public WeatherUnit unit ;
public int temperature ;
public String description ;
// constructor
}接下來,我們聲明該功能本身並將其與執行人相關聯,在此示例中,我們將偽造某些API的響應:
ChatFunction . builder ()
. name ( "get_weather" )
. description ( "Get the current weather of a location" )
. executor ( Weather . class , w -> new WeatherResponse ( w . location , w . unit , new Random (). nextInt ( 50 ), "sunny" ))
. build ()然後,我們將功能Executor對像從“服務”模塊中使用,以協助執行和轉換為準備對話的對象:
List < ChatFunction > functionList = // list with functions
FunctionExecutor functionExecutor = new FunctionExecutor ( functionList );
List < ChatMessage > messages = new ArrayList <>();
ChatMessage userMessage = new ChatMessage ( ChatMessageRole . USER . value (), "Tell me the weather in Barcelona." );
messages . add ( userMessage );
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest
. builder ()
. model ( "gpt-3.5-turbo-0613" )
. messages ( messages )
. functions ( functionExecutor . getFunctions ())
. functionCall ( new ChatCompletionRequestFunctionCall ( "auto" ))
. maxTokens ( 256 )
. build ();
ChatMessage responseMessage = service . createChatCompletion ( chatCompletionRequest ). getChoices (). get ( 0 ). getMessage ();
ChatFunctionCall functionCall = responseMessage . getFunctionCall (); // might be null, but in this case it is certainly a call to our 'get_weather' function.
ChatMessage functionResponseMessage = functionExecutor . executeAndConvertToMessageHandlingExceptions ( functionCall );
messages . add ( response );注意:
FunctionExecutor類是“服務”模塊的一部分。
您還可以創建自己的函數執行程序。 ChatFunctionCall.getArguments()的返回對像是簡單性的JSONNODE,應該能夠為您提供幫助。
有關更深入的外觀,請參閱以下函數在以下方面使用:OpenAiaIaiaPifunctionSame.java。或使用函數和流的示例:openaiaiaiaiaiapiftionswithstreamexample.java
如果要在流響應後立即關閉過程,請致電OpenAiService.shutdownExecutor() 。
這對於非流式通話不是必需的。
所有示例項目都需要的是您的OpenAi API令牌
export OPENAI_TOKEN= " sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "您可以使用以下方式嘗試此項目的所有功能
./gradlew runExampleOne您還可以嘗試使用功能的新功能:
./gradlew runExampleTwo或啟用了具有“流”模式的功能:
./gradlew runExampleThree是的! GPT-4使用ChatCompletion API,您可以在此處查看最新的模型選項。
GPT-4目前處於有限的Beta(截至23年4月1日)中,因此請確保在嘗試使用之前可以訪問。
絕對地!使用自己的功能非常容易,而不必擔心做骯髒的工作。如上所述,您可以參考openaiaiapifunctionsexample.java或Openaiaiaiaiaiaiaiaiaiapiftionswithstreamexample.java項目。
確保您所在的國家有OpenAI。
許多項目都使用OpenAiservice,為了最好地支持他們,我一直保持簡單。
您可以創建自己的OpenAIAPI實例來自定義標題,超時,基本網址等。
如果您需要諸如重試邏輯和異步調用之類的功能,則必須製作一個OpenAiApi實例並直接調用它而不是使用OpenAiService
OpenAI已棄用基於引擎的端點,支持基於模型的端點。例如,而不是使用v1/engines/{engine_id}/completions ,而是切換到v1/completions ,並在CompletionRequest中指定模型。該代碼包括所有棄用端點的升級說明。
直到Openai將其關閉之前,我不會從此庫中刪除舊端點。
根據MIT許可發布