配x 注意:该项目已不再维护,并且已截至2024年6月6日。感谢所有贡献和支持该项目的人。虽然存储库将保持其当前状态,但不会提供进一步的更新或支持。请随时根据需要修改代码。
配x Openai弃用了所有基于发动机的API。有关更多信息,请参见下面弃用的端点。
Java库使用OpenAi的GPT API。支持GPT-3,CHETGPT和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模块导入Pojos即可。您的客户将需要使用Snake Case与OpenAI API一起使用。
如果您使用的是Raturofit,则可以导入client模块并使用OpenAIAPI。
您必须将auth令牌添加为标头(请参阅AuthenticationInterceptor),并将转换器工厂设置为使用Snake Case,仅包括非零字段。
如果您正在寻找最快的解决方案,请导入service模块并使用OpenAiservice。
配x 客户模块中的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 );要使用代理,请修改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类轻松地定义其执行者,以及将有助于定义其可用参数的任何自定义类。您还可以在遗嘱执行人的帮助下轻松处理功能。
首先,我们声明我们的函数参数:
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 ()然后,我们将功能Executor对象从“服务”模块中使用,以协助执行和转换为准备对话的对象:
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,应该能够为您提供帮助。
有关更深入的外观,请参阅以下函数在以下方面使用:OpenAiaIaiaPifunctionSame.java。或使用函数和流的示例:openaiaiaiaiaiapiftionswithstreamexample.java
如果要在流响应后立即关闭过程,请致电OpenAiService.shutdownExecutor() 。
这对于非流式通话不是必需的。
所有示例项目都需要的是您的OpenAi API令牌
export OPENAI_TOKEN= " sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "您可以使用以下方式尝试此项目的所有功能
./gradlew runExampleOne您还可以尝试使用功能的新功能:
./gradlew runExampleTwo或启用了具有“流”模式的功能:
./gradlew runExampleThree是的! GPT-4使用ChatCompletion API,您可以在此处查看最新的模型选项。
GPT-4目前处于有限的Beta(截至23年4月1日)中,因此请确保在尝试使用之前可以访问。
绝对地!使用自己的功能非常容易,而不必担心做肮脏的工作。如上所述,您可以参考openaiaiapifunctionsexample.java或Openaiaiaiaiaiaiaiaiaiapiftionswithstreamexample.java项目。
确保您所在的国家有OpenAI。
许多项目都使用OpenAiservice,为了最好地支持他们,我一直保持简单。
您可以创建自己的OpenAIAPI实例来自定义标题,超时,基本网址等。
如果您需要诸如重试逻辑和异步调用之类的功能,则必须制作一个OpenAiApi实例并直接调用它而不是使用OpenAiService
OpenAI已弃用基于引擎的端点,支持基于模型的端点。例如,而不是使用v1/engines/{engine_id}/completions ,而是切换到v1/completions ,并在CompletionRequest中指定模型。该代码包括所有弃用端点的升级说明。
直到Openai将其关闭之前,我不会从此库中删除旧端点。
根据MIT许可发布