Este repositorio contiene la biblioteca mantenida por la comunidad para la API de OpenAI en Java, la forma más sencilla de utilizar GPT 3/4 en sus aplicaciones.
Esta biblioteca Java (biblioteca mantenida por la comunidad) proporciona una manera conveniente de interactuar con la API de OpenAI tanto para la moderación como para la finalización del chat. La biblioteca encapsula los detalles necesarios, lo que facilita la integración de los potentes modelos de OpenAI en sus aplicaciones Java. OPENAI no mantiene este proyecto, es una biblioteca no oficial.
Consulte CONTRIBUTING.md
Todos los "OPENAI_KEYS" deben leerse a través de la función readKeys() definida aquí. Esta función le permite leer varias claves al mismo tiempo y, para tareas multiproceso, se recomienda utilizar varias claves para evitar la limitación de velocidad. Para ejecutar esta función, necesita tener llaves.txt en la carpeta raíz de su proyecto (siéntase libre de editarlo).
Para utilizar la API de finalización de chat, siga estos pasos:
Message message = Message . builder ()
. role ( "user" )
. content ( "what is the capital of Cambodia?" )
. build ();
List < Message > messages = new ArrayList <>();
messages . add ( message );
ChatCompletionRequest request = ChatCompletionRequest . builder ()
. model ( "gpt-3.5-turbo" )
. messages ( messages )
. build ();
ChatCompletionResponse response = new EasyopenaiService ( new DAOImpl ()). chatCompletion ( "OPENAI_KEY" , request );
Haga clic aquí para saltar al ejemplo de código.
Para utilizar la API de moderación, siga estos pasos:
ModerationAPIRequest request = ModerationAPIRequest . builder ()
. model ( "text-moderation-latest" )
. input ( "hello from the other side kill me now" )
. build ();
ModerationAPIResponse res = new EasyopenaiService ( new DAOImpl ()). getmoderation ( "OPENAI_KEY" , request );
Haga clic aquí para saltar al ejemplo de código.
Vision API se puede usar de esta manera, siéntase libre de agregar N número de imágenes en la lista de Imágenes.
VisionApiResponse responseobj = new EasyVisionService (). VisionAPI ( "OPENAI_KEY" , new EasyVisionRequest ()
. setModel ( "gpt-4-vision-preview" )
. setPrompt ( "What are the difference between these images?" )
. setImageUrls ( new ArrayList < String >() {{
add ( "https://images.pexels.com/photos/268533/pexels-photo-268533.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1" );
add ( "https://images.pexels.com/photos/36717/amazing-animal-beautiful-beautifull.jpg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1" );
}}));
. setMaxtokens ( 1000 ) //Optional - for more tokens, defaults to 300
Haga clic aquí para saltar al ejemplo de código.
Para utilizar la API de Vision, siga estos pasos:
EasyopenaiService obj = new EasyopenaiService ( new DAOImpl ());
VisionApiRequest request = new VisionApiRequest ();
ImageUrl url = new ImageUrl ();
url . setUrl ( "https://images.pexels.com/photos/18907092/pexels-photo-18907092/free-photo-of-a-photo-of-the-golden-gate-bridge-in-the-sky.jpeg" );
url . setDetail ( "low" );
Content content1 = new Content ();
content1 . setText ( "What’s in this image?" );
content1 . setType ( "text" );
Content content2 = new Content ();
content2 . setImageUrl ( url );
content2 . setType ( "image_url" );
ArrayList < Content > listofContent = new ArrayList <>();
listofContent . add ( content1 );
listofContent . add ( content2 );
MessageList messageList = new MessageList ();
messageList . setRole ( "user" );
messageList . setContent ( listofContent );
ArrayList < MessageList > listofMessage = new ArrayList <>();
listofMessage . add ( messageList );
request . setModel ( "gpt-4-vision-preview" );
request . setMaxTokens ( 300 );
request . setMessages ( listofMessage );
VisionApiResponse res = obj . visionAPI ( OPENAI_KEY , request );
System . out . println ( "Vision API Response is:" + res );
Haga clic aquí para saltar al ejemplo de código.
La API de voz se puede utilizar así, siéntete libre de modificarla.
SpeechRequest request = SpeechRequest . builder ()
. model ( "tts-1" )
. input ( "Easy OpenAI is best solution." )
. voice ( "alloy" )
. build ();
ResponseBody response = new EasyopenaiService ( new DAOImpl ()). createSpeech ( "OPENAI_KEY" , request );
Haga clic aquí para saltar al ejemplo de código.
La API de transcripción se puede utilizar así, siéntete libre de modificarla.
EasyTranscriptionRequest request = EasyTranscriptionRequest . builder ()
. filepath ( "/Users/namankhurpia/Desktop/audio.mp3" )
. model ( "whisper-1" )
. build ();
ResponseBody response = new EasyTranscriptionService (). EasyTranscription ( "OPENAI_KEY" , request );
Haga clic aquí para saltar al ejemplo de código.
La API de transcripción se puede utilizar así, siéntete libre de modificarla.
File audioFile = new File ( "/Users/namankhurpia/Desktop/audio.mp3" );
MultipartBody . Part filePart = MultipartBody . Part . createFormData (
"file" ,
audioFile . getName (),
RequestBody . create ( MediaType . parse ( "audio/*" ), audioFile )
);
RequestBody model = RequestBody . create ( MediaType . parse ( "text/plain" ), "whisper-1" );
RequestBody language = RequestBody . create ( MediaType . parse ( "text/plain" ), "" );
RequestBody prompt = RequestBody . create ( MediaType . parse ( "text/plain" ), "" );
RequestBody response_format = RequestBody . create ( MediaType . parse ( "text/plain" ), "" );
RequestBody temperature = RequestBody . create ( MediaType . parse ( "text/plain" ), "" );
ResponseBody response = new EasyopenaiService ( new DAOImpl ()). createTranscriptions ( "OPENAI_KEY" , filePart , model , language , prompt , response_format , temperature );
Haga clic aquí para saltar al ejemplo de código.
La API de generación de imágenes se puede utilizar así, siéntete libre de modificarla.
ImageRequest imageRequest = ImageRequest . builder ()
. prompt ( "Generate a cute dog playing with frizbee" )
. model ( "dall-e-2" )
. build ();
ImageResponse response = new EasyopenaiService ( new DAOImpl ()). createImage ( "OPENAI_KEY" , imageRequest );
Haga clic aquí para saltar al ejemplo de código.
Para utilizar la API de finalización de chat de forma asincrónica, siga estos pasos:
Inicialice el objeto EasyopenaiAsyncService
con una instancia de AsyncDAOImpl
:
EasyopenaiAsyncService obj = new EasyopenaiAsyncService ( new AsyncDAOImpl ());
Cree una lista de objetos ChatMessage
para representar la conversación:
ChatMessage message = new ChatMessage ();
message . setRole ( "user" );
message . setContent ( "what is the capital of Cambodia?" );
List < ChatMessage > messages = new ArrayList <>();
messages . add ( message );
Cree un objeto ChatCompletionRequest
:
ChatCompletionRequest request = new ChatCompletionRequest ();
request . setModel ( "gpt-3.5-turbo" );
request . setMessages ( messages ); // old conversations as well
Realice la llamada API asincrónica:
ChatCompletionResponse res = obj . getAsyncChatCompletion ( OPENAI_KEY , request );
Haga clic aquí para saltar al ejemplo de código.
Para utilizar la API de moderación de forma asincrónica, siga estos pasos:
Cree un objeto ModerationAPIRequest
:
ModerationAPIRequest request = new ModerationAPIRequest ();
request . setInput ( "kill me now" );
request . setModel ( "text-moderation-latest" );
Inicialice el objeto EasyopenaiAsyncService
con una instancia de AsyncDAOImpl
:
EasyopenaiAsyncService obj = new EasyopenaiAsyncService ( new AsyncDAOImpl ());
Realice la llamada API asincrónica:
ModerationAPIResponse res = obj . getASyncModeration ( OPENAI_KEY , request );
Haga clic aquí para saltar al ejemplo de código.
Para llamadas simultáneas y de subprocesos múltiples con Chat Completion API, siga estos pasos:
Cree un objeto ChatCompletionRequestList
:
ChatCompletionRequestList list = new ChatCompletionRequestList ( new ArrayList < ChatCompletionRequest >());
Agregue varios objetos ChatCompletionRequest
a la lista:
// Example request 1
ChatCompletionRequest requestchat = new ChatCompletionRequest ();
requestchat . setModel ( "gpt-3.5-turbo" );
ChatMessage message = new ChatMessage ();
message . setRole ( "user" );
message . setContent ( "what is the capital of India?" );
List < ChatMessage > messages = new ArrayList <>();
messages . add ( message );
requestchat . setMessages ( messages );
list . add ( requestchat );
// Add more requests as needed (requestchat2, requestchat3, requestchat4, etc.)
Realice la llamada API multiasíncrona:
EasyopenaiConcurrentService concurrentCalls = new EasyopenaiConcurrentService ();
ChatCompletionResponseList responseList = concurrentCalls . CallMultipleChatCompletionAPI ( OPENAI_KEY , list );
System . out . println ( responseList );
Haga clic aquí para saltar al ejemplo de código.
Para llamadas simultáneas y de subprocesos múltiples con la API de moderación, siga estos pasos:
Cree un objeto ModerationRequestList
:
ModerationRequestList requestList = new ModerationRequestList ( new ArrayList < ModerationAPIRequest >());
Agregue varios objetos ModerationAPIRequest
a la lista:
// Example request 1
ModerationAPIRequest request = new ModerationAPIRequest ();
request . setInput ( "kill me now" );
request . setModel ( "text-moderation-latest" );
requestList . add ( request );
// Add more requests as needed (request2, request3, request4, etc.)
Realice la llamada API multiasíncrona:
EasyopenaiConcurrentService concurrentCalls = new EasyopenaiConcurrentService ();
ModerationResponseList responseList = concurrentCalls . CallMultipleModerationAPI ( OPENAI_KEY , requestList );
System . out . println ( responseList );
Haga clic aquí para saltar al ejemplo de código.
Esto le permite realizar múltiples llamadas de finalización de chat con múltiples claves. Todas las llamadas a la API se ejecutan en paralelo, pero la respuesta se recopila activamente y se envía de vuelta cuando finalizan todos los subprocesos.
La clase CompletableFuture se ha utilizado para la implementación. Consulte el archivo EasyopenaiConcurrentService.java para ver el código fuente.
Ejemplo de uso
public static void CallMultipleChatCompletionAPI_multikey_Test ()
{
//this function read multiple keys from keys.txt file
ArrayList < String > keyList = readKeys ();
EasyopenaiConcurrentService concurrentCalls = new EasyopenaiConcurrentService ();
ChatCompletionRequestList list = new ChatCompletionRequestList ( new ArrayList < ChatCompletionRequest >());
//First thread for
ChatCompletionRequest requestchat = new ChatCompletionRequest ();
requestchat . setModel ( "gpt-3.5-turbo" );
Message message = new Message ();
message . setRole ( "user" );
message . setContent ( "what is the capital of India?" );
List < Message > messages = new ArrayList <>();
messages . add ( message );
requestchat . setMessages ( messages );
list . add ( requestchat );
ChatCompletionRequest requestchat2 = new ChatCompletionRequest ();
requestchat2 . setModel ( "gpt-3.5-turbo" );
Message message2 = new Message ();
message2 . setRole ( "user" );
message2 . setContent ( "what is the capital of combodia?" );
List < Message > messages2 = new ArrayList <>();
messages2 . add ( message2 );
requestchat2 . setMessages ( messages2 );
list . add ( requestchat2 );
ChatCompletionRequest requestchat3 = new ChatCompletionRequest ();
requestchat3 . setModel ( "gpt-3.5-turbo" );
Message message3 = new Message ();
message3 . setRole ( "user" );
message3 . setContent ( "what is the capital of new zealand?" );
List < Message > messages3 = new ArrayList <>();
messages3 . add ( message3 );
requestchat3 . setMessages ( messages3 );
list . add ( requestchat3 );
ChatCompletionRequest requestchat4 = new ChatCompletionRequest ();
requestchat4 . setModel ( "gpt-3.5-turbo" );
Message message4 = new Message ();
message4 . setRole ( "user" );
message4 . setContent ( "what is the capital of hawaii? and what is 2+2?" );
List < Message > messages4 = new ArrayList <>();
messages4 . add ( message4 );
requestchat4 . setMessages ( messages4 );
list . add ( requestchat4 );
ChatCompletionResponseList responseList = concurrentCalls . CallMultipleChatCompletionAPI ( keyList , list );
System . out . println ( "response is" + responseList );
}
Asegúrese de tener instaladas las dependencias requeridas antes de usar el contenedor de API OpenAI.
< dependency >
< groupId >io.github.namankhurpia</ groupId >
< artifactId >easyopenai</ artifactId >
< version >x.x.x</ version >
</ dependency >
implementation group: 'io.github.namankhurpia', name: 'easyopenai', version: 'x.x.x'
implementation 'io.github.namankhurpia:easyopenai:x.x.x'
implementation("io.github.namankhurpia:easyopenai:x.x.x")
libraryDependencies += "io.github.namankhurpia" % "easyopenai" % "x.x.x"
<dependency org="io.github.namankhurpia" name="easyopenai" rev="x.x.x"/>
@Grapes(
@Grab(group='io.github.namankhurpia', module='easyopenai', version='x.x.x')
)
[io.github.namankhurpia/easyopenai "x.x.x"]
'io.github.namankhurpia:easyopenai:jar:x.x.x'