️ Примечание: этот проект больше не поддерживается и был архив по состоянию на 6 июня 2024 года. Спасибо всем, кто внес и поддержал этот проект. Хотя репозиторий останется доступным в его текущем состоянии, дальнейшие обновления или поддержки не будут предоставлены. Пожалуйста, не стесняйтесь разворачиваться и изменить код по мере необходимости.
️ OpenAI установил все API на основе двигателя. Смотрите устаревшие конечные точки ниже для получения дополнительной информации.
Библиотеки Java для использования API GPT Openai. Поддерживает GPT-3, CHATGPT и GPT-4.
Включает следующие артефакты:
api : запрос/ответ Pojos для API GPT.client : базовый модифицированный клиент для конечных точек GPT, включает модуль apiservice : базовый класс услуг, который создает и вызывает клиент. Это самый простой способ начать.а также пример проекта с использованием сервиса.
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 > Если вы хотите сделать своего собственного клиента, просто импортируйте Pojos из модуля api . Вашему клиенту нужно будет использовать корпус Snake для работы с API OpenAI.
Если вы используете модернизацию, вы можете импортировать client модуль и использовать OpenAiapi.
Вам придется добавить свой токен Auth в качестве заголовка (см. AuthenticationInterceptor) и установить свою фабрику преобразователя на использование корпуса 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, создайте свой собственный модерный клиент и передайте его конструктору. Например, сделайте следующее, чтобы добавить регистрацию запросов (после добавления зависимости для регистрации 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 );Чтобы использовать прокси, измените клиент OKTTP, как показано ниже:
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 );Вы можете создавать свои функции и легко определить их исполнителей, используя класс чатфункции, наряду с любым из ваших пользовательских классов, которые будут служить для определения их доступных параметров. Вы также можете обработать функции с легкостью с помощью исполнителя, называемого 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()
Для более подробного взгляда см. В разговорном примере, в котором используются функции в: OpenAiapifunctionSexample.java. Или для примера с использованием функций и потока: openAiapifunctionswithStreamExample.java
Если вы хотите отключить свой процесс сразу после потоковой передачи ответов, вызовите OpenAiService.shutdownExecutor() .
Это не необходимо для не потоковых вызовов.
Все, что требуется примером проекта, это ваш токен API OpenAI
export OPENAI_TOKEN= " sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "Вы можете попробовать все возможности этого проекта, используя:
./gradlew runExampleOneИ вы также можете попробовать новую возможность использования функций:
./gradlew runExampleTwoИли функции с включенным режимом «потока»:
./gradlew runExampleThree Да! GPT-4 использует API Chatcompletion, и вы можете увидеть последние параметры модели здесь.
GPT-4 в настоящее время находится в ограниченной бета-версии (по состоянию на 4/1/23), поэтому убедитесь, что у вас есть доступ, прежде чем пытаться его использовать.
Абсолютно! Это очень легко использовать ваши собственные функции, не беспокоясь о том, чтобы выполнять грязную работу. Как упомянуто выше, вы можете обратиться к OpenAiApifunctionSexample.java или OpenAiapifunctionswithStreamExample.java проектов для примера.
Убедитесь, что Openai доступен в вашей стране.
Многие проекты используют OpenAiservice, и для того, чтобы поддержать их лучше всего, я сохранил это очень простым.
Вы можете создать свой собственный экземпляр OpenAiapi для настройки заголовков, тайм -аутов, базовых URL -адресов и т. Д.
Если вам нужны такие функции, как логика RETRY и асинхронные вызовы, вам придется сделать экземпляр OpenAiApi и позвонить напрямую вместо использования OpenAiService
OpenAI установил конечные точки на основе двигателя в пользу конечных точек на основе моделей. Например, вместо использования v1/engines/{engine_id}/completions переключитесь на v1/completions и укажите модель в CompletionRequest . Код включает в себя инструкции по обновлению для всех устаревших конечных точек.
Я не буду удалять старые конечные точки из этой библиотеки, пока Openai не отключит их.
Опубликовано по лицензии MIT