️ PEMBERITAHUAN: Proyek ini tidak lagi dipertahankan dan telah diarsipkan pada 6 Juni 2024. Terima kasih kepada semua orang yang telah berkontribusi dan mendukung proyek ini. Sementara repositori akan tetap tersedia dalam keadaan saat ini, tidak ada pembaruan atau dukungan lebih lanjut yang akan diberikan. Jangan ragu untuk membayar dan memodifikasi kode sesuai kebutuhan.
️ Openai telah mencela semua API berbasis mesin. Lihat titik akhir yang sudah usang di bawah ini untuk info lebih lanjut.
Perpustakaan Java untuk menggunakan API GPT Openai. Mendukung GPT-3, ChatGPT, dan GPT-4.
Termasuk artefak berikut:
api : Permintaan/Respons Pojos untuk API GPT.client : Klien Retrofit Dasar untuk titik akhir GPT, termasuk modul apiservice : Kelas layanan dasar yang membuat dan memanggil klien. Ini adalah cara termudah untuk memulai.serta contoh proyek menggunakan Layanan.
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 > Jika Anda ingin membuat klien sendiri, cukup impor POJOS dari modul api . Klien Anda perlu menggunakan casing ular untuk bekerja dengan API OpenAI.
Jika Anda menggunakan Retrofit, Anda dapat mengimpor modul client dan menggunakan openaiapi.
Anda harus menambahkan token auth Anda sebagai header (lihat AuthenticationInterceptor) dan atur pabrik konverter Anda untuk menggunakan casing ular dan hanya menyertakan bidang non-nol.
Jika Anda mencari solusi tercepat, impor modul service dan gunakan OpenAiservice.
️ OpenAiservice dalam modul klien sudah usang, silakan beralih ke versi baru di modul layanan.
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 );Jika Anda perlu menyesuaikan OpenAiservice, buat klien retrofit Anda sendiri dan berikan ke konstruktor. Misalnya, lakukan hal berikut untuk menambahkan permintaan logging (setelah menambahkan ketergantungan lulusan logging):
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 );Untuk menggunakan proxy, ubah klien OkHTTP seperti yang ditunjukkan di bawah ini:
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 );Anda dapat membuat fungsi Anda dan mendefinisikan eksekutor mereka dengan mudah menggunakan kelas Chatfunction, bersama dengan kelas kustom Anda yang akan berfungsi untuk menentukan parameter yang tersedia. Anda juga dapat memproses fungsi dengan mudah, dengan bantuan pelaksana yang disebut FunctionExecutor.
Pertama kami mendeklarasikan parameter fungsi kami:
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
}Selanjutnya, kami mendeklarasikan fungsi itu sendiri dan mengaitkannya dengan pelaksana, dalam contoh ini kami akan memalsukan respons dari beberapa 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 ()Kemudian, kami menggunakan objek FunctionExecutor dari modul 'Layanan' untuk membantu dengan eksekusi dan transformasi menjadi objek yang siap untuk percakapan:
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 );Catatan: Kelas
FunctionExecutoradalah bagian dari modul 'Layanan'.
Anda juga dapat membuat pelaksana fungsi Anda sendiri. Objek pengembalian ChatFunctionCall.getArguments() adalah jSonnode untuk kesederhanaan dan harus dapat membantu Anda dengan itu.
Untuk tampilan yang lebih mendalam, lihat contoh percakapan yang menggunakan fungsi di: OpenAaiApifunctionSexample.java. Atau untuk contoh menggunakan fungsi dan aliran: openaiapifunctionsWithStreamexample.java
Jika Anda ingin mematikan proses Anda segera setelah streaming respons, hubungi OpenAiService.shutdownExecutor() .
Ini tidak diperlukan untuk panggilan non-streaming.
Semua contoh yang dibutuhkan proyek adalah token API openai Anda
export OPENAI_TOKEN= " sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "Anda dapat mencoba semua kemampuan proyek ini menggunakan:
./gradlew runExampleOneDan Anda juga dapat mencoba kemampuan baru menggunakan fungsi:
./gradlew runExampleTwoAtau berfungsi dengan mode 'stream' diaktifkan:
./gradlew runExampleThree Ya! GPT-4 menggunakan API chatcompletion, dan Anda dapat melihat opsi model terbaru di sini.
GPT-4 saat ini dalam beta terbatas (pada 4/1/23), jadi pastikan Anda memiliki akses sebelum mencoba menggunakannya.
Sangat! Sangat mudah untuk menggunakan fungsi Anda sendiri tanpa khawatir melakukan pekerjaan kotor. Seperti disebutkan di atas, Anda dapat merujuk ke OpenaiApifunctionSexample.java atau OpenaiapiFunctionsWithStreamexample.java proyek untuk contoh.
Pastikan Openai tersedia di negara Anda.
Banyak proyek menggunakan OpenAiservice, dan untuk mendukung mereka yang terbaik, saya membuatnya sangat sederhana.
Anda dapat membuat instance OpenAaiapi Anda sendiri untuk menyesuaikan header, batas waktu, URL dasar dll.
Jika Anda ingin fitur seperti REurry Logic dan Async Call, Anda harus membuat instance OpenAiApi dan memanggilnya secara langsung alih -alih menggunakan OpenAiService
OpenAI telah mencela titik akhir berbasis mesin yang mendukung titik akhir berbasis model. Misalnya, alih -alih menggunakan v1/engines/{engine_id}/completions , beralih ke v1/completions dan tentukan model di CompletionRequest . Kode ini mencakup instruksi peningkatan untuk semua titik akhir yang sudah usang.
Saya tidak akan menghapus titik akhir lama dari perpustakaan ini sampai OpenAi menutupnya.
Diterbitkan di bawah Lisensi MIT