ショ和 通知:このプロジェクトは維持されなくなり、2024年6月6日の時点でアーカイブされています。このプロジェクトに貢献しサポートしてくれたすべての人に感謝します。リポジトリは現在の状態ではまだ利用可能になりますが、さらなる更新やサポートは提供されません。必要に応じて、お気軽にフォークしてコードを変更してください。
ショ和 Openaiは、すべてのエンジンベースのAPIを非難しました。詳細については、以下の非推奨エンドポイントを参照してください。
OpenAIのGPT APIを使用するためのJavaライブラリ。 GPT-3、CHATGPT、および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モジュールからPOJOをインポートするだけです。クライアントは、Snake Caseを使用してOpenai APIを使用する必要があります。
Retrofitを使用している場合は、 clientモジュールをインポートしてOpenAiapiを使用できます。
Auth Tokenをヘッダーとして追加し(AuthenticationInterceptorを参照)、Converter Factoryを設定してSnakeケースを使用し、非ヌルフィールドのみを含める必要があります。
最速のソリューションを探している場合は、 serviceモジュールをインポートし、OpenAiserviceを使用してください。
ショ和 クライアントモジュールの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をカスタマイズする必要がある場合は、独自のRetrofitクライアントを作成し、コンストラクターに渡します。たとえば、次のことを行い、リクエストロギングを追加します(ロギング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クラスを使用して、利用可能なパラメーターを定義するのに役立つカスタムクラスのいずれかを使用して、実行者を簡単に定義できます。また、functionexecutorと呼ばれるエグゼキューターの助けを借りて、機能を簡単に処理することもできます。
まず、関数パラメーターを宣言します。
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 ()次に、「サービス」モジュールからfunctionexecutorオブジェクトを使用して、実行の準備ができたオブジェクトへの変換を支援します。
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であり、それを支援できるはずです。
より詳細な外観については、機能を使用する会話の例を参照してください:openaiapifunctionsexample.java。または、機能とストリームを使用した例:openaiapifunctionswithstreamexample.java
応答をストリーミングした直後にプロセスをシャットダウンする場合は、 OpenAiService.shutdownExecutor()に電話してください。
これは、非ストリーミングコールには必要ありません。
プロジェクトが必要とするすべての例は、Openai APIトークンです
export OPENAI_TOKEN= " sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "次を使用して、このプロジェクトのすべての機能を試すことができます。
./gradlew runExampleOneまた、関数を使用する新しい機能を試すこともできます。
./gradlew runExampleTwoまたは「ストリーム」モードを有効にする機能:
./gradlew runExampleThreeはい! GPT-4はChatCompletion APIを使用しており、ここで最新のモデルオプションを見ることができます。
GPT-4は現在、限られたベータ版(4/1/23の時点で)です。そのため、使用する前にアクセスできることを確認してください。
絶対に!汚い仕事をすることを心配することなく、独自の機能を使用するのは非常に簡単です。上記のように、例として、openaiapifunctionsexample.javaまたはopenaiapifunctions withstreamexample.javaプロジェクトを参照できます。
あなたの国でOpenaiが利用可能であることを確認してください。
多くのプロジェクトはOpenaIserviceを使用しており、それらを最もサポートするために、私はそれを非常にシンプルに保ちました。
独自のOpenAiapiインスタンスを作成して、ヘッダー、タイムアウト、ベースURLなどをカスタマイズできます。
Retry LogicやAsync Callsなどの機能が必要な場合は、 OpenAiServiceを使用する代わりにOpenAiApiインスタンスを作成して直接呼び出す必要があります
Openaiは、モデルベースのエンドポイントを支持して、エンジンベースのエンドポイントを非推奨しています。たとえば、 v1/engines/{engine_id}/completionsを使用する代わりに、 v1/completionsに切り替えて、 CompletionRequestでモデルを指定します。コードには、すべての非推奨エンドポイントのアップグレード命令が含まれています。
Openaiがそれらをシャットダウンするまで、このライブラリから古いエンドポイントを削除しません。
MITライセンスの下で公開されています