代码拉取完成,页面将自动刷新
This project is a Java library for GPT API, designed to make it easier
for Java developers to use GPT API.
This is a community maintained project (an unofficial library)
<dependency>
<groupId>io.github.whitemagic2014</groupId>
<artifactId>gpt-magic</artifactId>
<version>version</version>
</dependency>
implementation group: 'io.github.whitemagic2014', name: 'gpt-magic', version: 'version'
short
implementation 'io.github.whitemagic2014:gpt-magic:version'
You can set the global key and proxy server as follows:
System.setProperty("OPENAI_API_KEY",""); // no system default value
System.setProperty("OPENAI_API_ORG","");// no system default value
System.setProperty("OPENAI_API_SERVER",""); // default = https://api.openai.com
Alternatively, you can configure them independently for each request.
new CreateChatCompletionRequest()
.key("your api key")
.server("default is https://api.openai.com")
.organization("optional")
.addMessage(ChatMessage.userMessage("prompt"));
.send();
System.setProperty("OPENAI_API_KEY", "");
//System.setProperty("OPENAI_API_SERVER", "");// default is https://api.openai.com
CreateChatCompletionRequest demo = new CreateChatCompletionRequest()
.model(GptModel.gpt_3p5_turbo)
.addMessage(ChatMessage.systemMessage("system set"))
.addMessage(ChatMessage.userMessage("prompt"));
// send with stream model
String result1 = RequestUtil.streamRequest(demo);
// send without stream model
String result2 = demo2.sendForChoices().get(0).getMessage().getContent();
// ...
// See the code for more details
// Assistant simple demo
// https://platform.openai.com/docs/assistants/overview/agents
// Step 1: Create an Assistant
JSONObject json1 = new CreateAssistantRequest()
.name("Math Tutor")
.instructions("You are a personal math tutor. Write and run code to answer math questions.")
.model(GptModel.gpt_4_turbo)
.tools(Arrays.asList(new CodeInterpreterTool()))
.send();
System.out.println(json1);
String assistantId = "assistantId";
// Step 2: Create a Thread
JSONObject json2 = new CreateThreadRequest().send();
System.out.println(json2);
String threadId = "threadId";
// Step 3: Add a Message to a Thread
JSONObject json3 = new CreateMessageRequest()
.threadId(threadId)
.content("I need to solve the equation `3x + 11 = 14`. Can you help me?")
.send();
System.out.println(json3);
// Step 4: Run the Assistant
JSONObject json4 = new CreateRunRequest()
.assistantId(assistantId)
.threadId(threadId)
.instructions("Please address the user as WhiteMagic2014. The user has a premium account")
.send();
System.out.println(json4);
String runId = "runId";
// Step 5: Check the Run status
JSONObject json5 = new RetrieveRunRequest().threadId(threadId).runId(runId).send();
System.out.println(json5);
// Step 6: Display the Assistant's Response
JSONObject json6 = new ListMessagesRequest().threadId(threadId).send();
System.out.println(json6);
new CreateImageRequest()
.prompt("xxxxxx")
.model(GptModel.Dall_E_3)
.styleVivid()
.size1024x1024()
.formatUrl()
.sendForImages()
.stream()
.forEach(System.out::println);
System.out.println(new CreateSpeechRequest().filePath("/path/to/save/file")
.input("CreateSpeechRequest is available. It can trans text to speech.")
.voice(AudioVoiceType.shimmer)
.formatMp3()
.send());
// You can use base64 or URL to upload one or more images.
System.out.println(new CreateChatCompletionRequest()
.model(GptModel.gpt_4_vision_preview)
// 2 url pictures
.addMessage(ChatMessage.userMessageWithImageUrl("Which animal in these two pictures is stronger?",
Arrays.asList("https://pic1/url","https://pic2/url")))
.maxTokens(300)
.sendForChoices().get(0).getMessage().getContent());
System.out.println(new CreateChatCompletionRequest()
.model(GptModel.gpt_4_vision_preview)
// 1 base64 pictures
.addMessage(ChatMessage.userMessageWithImageFilePath("What does this picture describe",
Arrays.asList("/path/to/image/file.jpg")))
.maxTokens(300)
.sendForChoices().get(0).getMessage().getContent());
Explicitly setting in the request > Setting with System.setProperty > System default value.
System.setProperty("OPENAI_API_KEY",""); // no system default value
System.setProperty("OPENAI_API_ORG","");// no system default value
System.setProperty("OPENAI_API_SERVER",""); // default = https://api.openai.com
/**
* your custom function
* Get the current weather in a given location
*/
public JSONObject getCurrentWeather(String location, String unit) {
JSONObject fakeResult = new JSONObject();
fakeResult.put("location", location);
if ("celsius".equals(unit)) {
fakeResult.put("temperature", "22~31 C°");
} else if ("fahrenheit".equals(unit)) {
fakeResult.put("temperature", "71.6~87.8 F°");
}
fakeResult.put("forecast", Arrays.asList("sunny", "windy"));
fakeResult.put("unit", unit);
return fakeResult;
}
// A sample for function call
// first make a function object from your custom function method
ChatFunction function = JSONObject.parseObject("{\n" +
" \"name\":\"getCurrentWeather\",\n" +
" \"description\":\"Get the current weather in a given location\",\n" +
" \"parameters\":{\n" +
" \"type\":\"object\",\n" +
" \"required\":[\"location\",\"unit\"],\n" +
" \"properties\":{\n" +
" \"unit\":{\n" +
" \"default\":\"celsius\",\n" +
" \"type\":\"string\",\n" +
" \"enum\":[\"celsius\",\"fahrenheit\"]\n" +
" },\n" +
" \"location\":{\n" +
" \"description\":\"The city and state\",\n" +
" \"type\":\"string\"\n" +
" }\n" +
" }\n" +
" }\n" +
"}", ChatFunction.class);
// second send a CreateChatCompletionRequest with your Function
ChatMessage functionResult1 = new CreateChatCompletionRequest()
.key(key)
.addFunction(function)
.model(GptModel.gpt_3p5_turbo_0613)
.addMessage(ChatMessage.userMessage("What's the weather like in ShangHai today?"))
.functionCallAuto() //.functionCallName("getCurrentWeather")
.sendForChoices()
.get(0)
.getMessage();
// When using functionCallName or functionCallAuto to enable GPT to call a function,
// please note that the resulting output is temporary and not suitable for end users.
// To perform the desired action, you will need to call your custom function.
System.out.println("temp result:");
System.out.println(functionResult1);
// result eg:
// ChatMessage{role='assistant', content='null', name='null', function_call={"name":"getCurrentWeather","arguments":"{\n \"location\": \"Shanghai\"\n}"}}
// If your function returns any information, you should call GPT again to obtain the final result for end users.
String functionName = functionResult1.getFunction_call().getString("name");
String location = functionResult1.getFunction_call().getJSONObject("arguments").getString("location");
String unit = functionResult1.getFunction_call().getJSONObject("arguments").getString("unit");
JSONObject weatherInfo = getCurrentWeather(location, unit);
// finally
ChatMessage functionResult2 = new CreateChatCompletionRequest()
.key(key)
.addFunction(function)
.model(GptModel.gpt_3p5_turbo_0613)
.addMessage(ChatMessage.userMessage("What's the weather like in ShangHai today?"))
.addMessage(functionResult1)// gpt result
.addMessage(ChatMessage.functionMessage(functionName, weatherInfo.toString())) // send a function message with function_name and custom result
.sendForChoices()
.get(0)
.getMessage();
System.out.println("final result:");
System.out.println(functionResult2);
// result eg:
//ChatMessage{role='assistant', content='The weather in Shanghai today is sunny and windy, with a temperature ranging from 22 to 31 degrees Celsius.', name='null', function_call=null}
// Now there are two ways to add a message.
new CreateChatCompletionRequest().addMessage("user","hello");
new CreateChatCompletionRequest().addMessage(ChatMessage.userMessage("hello"));
ChatMessage.systemMessage("content");
ChatMessage.userMessage("content");
ChatMessage.assistantMessage("content");
List<ChatCompletionChoice> demo8 = new CreateChatCompletionRequest()
.server("https://Your.Proxy.Server/servername")
.key(key)
.addMessage("system", "You are a helpful assistant.")
.addMessage("user", "Who won the world series in 2020?")
.addMessage("assistant", "The Los Angeles Dodgers won the World Series in 2020.")
.addMessage("user", "Where was it played?")
.sendForChoices();
// CreateChatCompletionRequest with stream mode
// If you are providing a web service, you can offer HttpServletResponse.getOutputStream()
// so that you can provide your callers with OpenAI's streaming return, allowing them to easily achieve a typewriter effect similar to the OpenAI official page.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
new Thread(() -> {
new CreateChatCompletionRequest()
.key(key)
.addMessage("user", "Can you recommend some science fiction novels to me?")
.stream(true)
.outputStream(baos) // You need to set an OutputStream to receive the returned stream
.send();
}).start();
// a sample to use the streaming return
boolean flag = true;
while (flag) {
byte[] data = baos.toByteArray();
if (data.length > 0) {
String result = new String(data);
baos.reset();
String str = "[" + result.replace("data: [DONE]", "").replace("data:", ",") + "]";
JSONArray jsonArray;
try {
jsonArray = JSON.parseArray(str);
} catch (Exception e) {
System.out.println(str);
throw new RuntimeException(e);
}
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject choice = jsonArray.getJSONObject(i).getJSONArray("choices").getJSONObject(0);
if ("stop".equals(choice.getString("finish_reason"))) {
flag = false;
break;
}
JSONObject delta = choice.getJSONObject("delta");
if (delta.containsKey("content")) {
System.out.print(delta.getString("content"));
}
}
}
try {
// wait for a while
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
version before 1.3.1
new CreateCompletionRequest().model("text-davinci-003");
version after 1.3.1
new CreateCompletionRequest().model(GptModel.text_davinci_003);
This project is an open-sourced software licensed under the MIT license.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。