ข้อสังเกต: โครงการนี้ไม่ได้รับการดูแลอีกต่อไปและได้รับการเก็บถาวร ณ วันที่ 6 มิถุนายน 2024 ขอบคุณทุกคนที่มีส่วนร่วมและสนับสนุนโครงการนี้ ในขณะที่ที่เก็บจะยังคงอยู่ในสถานะปัจจุบัน แต่จะไม่มีการอัปเดตหรือการสนับสนุนเพิ่มเติม โปรดอย่าลังเลที่จะแยกและแก้ไขรหัสตามต้องการ
OpenAI ได้เลิกใช้ API ที่ใช้เครื่องยนต์ทั้งหมด ดูจุดสิ้นสุดที่ไม่ได้รับการคัดเลือกด้านล่างสำหรับข้อมูลเพิ่มเติม
Java Libraries สำหรับการใช้ GPT API ของ OpenAI รองรับ GPT-3, CHATGPT และ GPT-4
รวมสิ่งประดิษฐ์ต่อไปนี้:
api : คำขอ/การตอบสนอง pojos สำหรับ GPT APIclient : ไคลเอนต์ติดตั้งเพิ่มเติมพื้นฐานสำหรับจุดสิ้นสุดของ 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 ลูกค้าของคุณจะต้องใช้เคสงูเพื่อทำงานกับ OpenAI API
หากคุณใช้ชุดเพิ่มเติมคุณสามารถนำเข้าโมดูล client และใช้ OpenAiapi
คุณจะต้องเพิ่มโทเค็นการรับรองความถูกต้องของคุณเป็นส่วนหัว (ดู AuthenticationInterceptor) และตั้งค่าโรงงานแปลงของคุณให้ใช้เคสงูและรวมเฉพาะฟิลด์ที่ไม่ใช่ NULL
หากคุณกำลังมองหาโซลูชันที่เร็วที่สุดให้นำเข้าโมดูล 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 ให้สร้างไคลเอนต์ติดตั้งเพิ่มเติมของคุณเองและส่งผ่านไปยังตัวสร้าง ตัวอย่างเช่นทำสิ่งต่อไปนี้เพื่อเพิ่มการบันทึกคำขอ (หลังจากเพิ่มการพึ่งพาการบันทึกการบันทึก):
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 พร้อมกับคลาสที่กำหนดเองของคุณที่จะให้บริการเพื่อกำหนดพารามิเตอร์ที่มีอยู่ นอกจากนี้คุณยังสามารถประมวลผลฟังก์ชั่นได้อย่างง่ายดายด้วยความช่วยเหลือของผู้ดำเนินการที่เรียกว่า 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() เป็น jsonNode เพื่อความเรียบง่ายและควรจะสามารถช่วยคุณได้
สำหรับรูปลักษณ์เชิงลึกเพิ่มเติมโปรดดูตัวอย่างการสนทนาที่ใช้ฟังก์ชั่นใน: openaiapifunctionsexample.java หรือสำหรับตัวอย่างที่ใช้ฟังก์ชั่นและสตรีม: openaiapifunctionswithstreamexample.java
หากคุณต้องการปิดกระบวนการของคุณทันทีหลังจากสตรีมการตอบกลับให้โทร OpenAiService.shutdownExecutor()
นี่ไม่จำเป็นสำหรับการโทรแบบไม่สตรีม
โครงการตัวอย่างทั้งหมดที่ต้องการคือโทเค็น OpenAI API ของคุณ
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 พื้นฐาน ฯลฯ
หากคุณต้องการฟีเจอร์เช่นการลองใหม่และการโทรแบบ async คุณจะต้องทำอินสแตนซ์ OpenAiApi และเรียกมันโดยตรงแทนที่จะใช้ OpenAiService
OpenAI ได้เลิกใช้จุดสิ้นสุดของเครื่องยนต์เพื่อสนับสนุนจุดสิ้นสุดของแบบจำลอง ตัวอย่างเช่นแทนที่จะใช้ v1/engines/{engine_id}/completions ให้สลับไปที่ v1/completions และระบุรุ่นในการ CompletionRequest รหัสรวมถึงคำแนะนำในการอัพเกรดสำหรับจุดสิ้นสุดที่เลิกใช้ทั้งหมด
ฉันจะไม่ลบจุดสิ้นสุดเก่าออกจากห้องสมุดนี้จนกว่า Openai จะปิดลง
เผยแพร่ภายใต้ใบอนุญาต MIT