Этот репозиторий содержит поддерживаемую сообществом библиотеку API OpenAI на языке Java — самый простой способ использовать GPT 3/4 в ваших приложениях.
Эта библиотека Java (библиотека, поддерживаемая сообществом) предоставляет удобный способ взаимодействия с API OpenAI для модерации и завершения чата. Библиотека инкапсулирует необходимые детали, упрощая интеграцию мощных моделей OpenAI в ваши Java-приложения. Этот проект не поддерживается OPENAI, это неофициальная библиотека.
Пожалуйста, посетите CONTRIBUTING.md.
Все «OPENAI_KEYS» должны быть прочитаны с помощью функции readKeys(), определенной здесь. Эта функция позволяет вам читать несколько ключей одновременно, а для многопоточной задачи рекомендуется использовать несколько ключей, чтобы избежать ограничения скорости. Чтобы запустить эту функцию, вам необходимо иметь файлkeys.txt в корневой папке вашего проекта (не стесняйтесь редактировать).
Чтобы использовать API завершения чата, выполните следующие действия:
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 );
Нажмите здесь, чтобы перейти к примеру кода.
Чтобы использовать API модерации, выполните следующие действия:
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 );
Нажмите здесь, чтобы перейти к примеру кода.
Vision API можно использовать следующим образом: не стесняйтесь добавлять N изображений в список изображений:
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
Нажмите здесь, чтобы перейти к примеру кода.
Чтобы использовать Vision API, выполните следующие действия:
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 );
Нажмите здесь, чтобы перейти к примеру кода.
Речевой API можно использовать следующим образом, не стесняйтесь настраивать:
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 );
Нажмите здесь, чтобы перейти к примеру кода.
API транскрипции можно использовать следующим образом, не стесняйтесь настраивать:
EasyTranscriptionRequest request = EasyTranscriptionRequest . builder ()
. filepath ( "/Users/namankhurpia/Desktop/audio.mp3" )
. model ( "whisper-1" )
. build ();
ResponseBody response = new EasyTranscriptionService (). EasyTranscription ( "OPENAI_KEY" , request );
Нажмите здесь, чтобы перейти к примеру кода.
API транскрипции можно использовать следующим образом, не стесняйтесь настраивать:
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 );
Нажмите здесь, чтобы перейти к примеру кода.
API генерации изображений можно использовать следующим образом, не стесняйтесь настраивать:
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 );
Нажмите здесь, чтобы перейти к примеру кода.
Чтобы использовать API завершения чата асинхронно, выполните следующие действия:
Инициализируйте объект EasyopenaiAsyncService
с помощью экземпляра AsyncDAOImpl
:
EasyopenaiAsyncService obj = new EasyopenaiAsyncService ( new AsyncDAOImpl ());
Создайте список объектов ChatMessage
для представления разговора:
ChatMessage message = new ChatMessage ();
message . setRole ( "user" );
message . setContent ( "what is the capital of Cambodia?" );
List < ChatMessage > messages = new ArrayList <>();
messages . add ( message );
Создайте объект ChatCompletionRequest
:
ChatCompletionRequest request = new ChatCompletionRequest ();
request . setModel ( "gpt-3.5-turbo" );
request . setMessages ( messages ); // old conversations as well
Выполните асинхронный вызов API:
ChatCompletionResponse res = obj . getAsyncChatCompletion ( OPENAI_KEY , request );
Нажмите здесь, чтобы перейти к примеру кода.
Чтобы использовать API модерации асинхронно, выполните следующие действия:
Создайте объект ModerationAPIRequest
:
ModerationAPIRequest request = new ModerationAPIRequest ();
request . setInput ( "kill me now" );
request . setModel ( "text-moderation-latest" );
Инициализируйте объект EasyopenaiAsyncService
с помощью экземпляра AsyncDAOImpl
:
EasyopenaiAsyncService obj = new EasyopenaiAsyncService ( new AsyncDAOImpl ());
Выполните асинхронный вызов API:
ModerationAPIResponse res = obj . getASyncModeration ( OPENAI_KEY , request );
Нажмите здесь, чтобы перейти к примеру кода.
Для многопоточности и одновременных вызовов с помощью Chat Completion API выполните следующие действия:
Создайте объект ChatCompletionRequestList
:
ChatCompletionRequestList list = new ChatCompletionRequestList ( new ArrayList < ChatCompletionRequest >());
Добавьте в список несколько объектов ChatCompletionRequest
:
// 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.)
Выполните мультиасинхронный вызов API:
EasyopenaiConcurrentService concurrentCalls = new EasyopenaiConcurrentService ();
ChatCompletionResponseList responseList = concurrentCalls . CallMultipleChatCompletionAPI ( OPENAI_KEY , list );
System . out . println ( responseList );
Нажмите здесь, чтобы перейти к примеру кода.
Для многопоточности и одновременных вызовов с помощью API модерации выполните следующие действия:
Создайте объект ModerationRequestList
:
ModerationRequestList requestList = new ModerationRequestList ( new ArrayList < ModerationAPIRequest >());
Добавьте в список несколько объектов ModerationAPIRequest
:
// 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.)
Выполните мультиасинхронный вызов API:
EasyopenaiConcurrentService concurrentCalls = new EasyopenaiConcurrentService ();
ModerationResponseList responseList = concurrentCalls . CallMultipleModerationAPI ( OPENAI_KEY , requestList );
System . out . println ( responseList );
Нажмите здесь, чтобы перейти к примеру кода.
Это позволяет вам совершать несколько вызовов завершения чата с помощью нескольких клавиш. Все вызовы API выполняются параллельно, но ответ активно собирается и отправляется обратно после завершения всех потоков.
Для реализации использовался класс CompletableFuture. Пожалуйста, обратитесь к файлу EasyopenaiConcurrentService.java, чтобы увидеть источник.
Пример использования-
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 );
}
Прежде чем использовать оболочку OpenAI API, убедитесь, что у вас установлены необходимые зависимости.
< 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'