️ إشعار: لم يعد هذا المشروع قد تم الحفاظ عليه وتم أرهشته اعتبارًا من 6 يونيو 2024. شكرًا لك على كل من ساهم ودعم هذا المشروع. على الرغم من أن المستودع سيظل متاحًا في حالته الحالية ، فلن يتم تقديم أي تحديثات أو دعم إضافي. لا تتردد في شوكة وتعديل الرمز حسب الحاجة.
️ قام Openai بإهمال جميع واجهات برمجة التطبيقات القائمة على المحرك. انظر نقاط النهاية المنهكة أدناه لمزيد من المعلومات.
مكتبات Java لاستخدام واجهات برمجة تطبيقات GPT من Openai. يدعم GPT-3 و ChatGPT و GPT-4.
يتضمن القطع الأثرية التالية:
api : طلب/استجابة pojos لواجهة برمجة التطبيقات 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 . سيحتاج عميلك إلى استخدام علبة الأفعى للعمل مع API Openai.
إذا كنت تستخدم Retrofit ، فيمكنك استيراد وحدة client واستخدام OpenAiapi.
سيتعين عليك إضافة رمز المصادقة الخاص بك كرأس (انظر مصادقة InternInterceptor) وتعيين مصنع المحول الخاص بك لاستخدام علبة الأفعى وتشمل فقط الحقول غير الفريدة.
إذا كنت تبحث عن حل أسرع ، فاستيف وحدة 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 );لاستخدام وكيل ، قم بتعديل عميل 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. أو مثالًا باستخدام وظائف ودفق: OpenAiapifunctionSwithStreamample.java
إذا كنت ترغب في إيقاف العملية مباشرة بعد دفق الاستجابات ، اتصل بـ OpenAiService.shutdownExecutor() .
هذا ليس ضروريًا للمكالمات غير المتجددة.
كل ما يتطلبه مشروع المثال هو رمز Openai API الخاص بك
export OPENAI_TOKEN= " sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "يمكنك تجربة كل قدرات هذا المشروع باستخدام:
./gradlew runExampleOneويمكنك أيضًا تجربة القدرة الجديدة على استخدام الوظائف:
./gradlew runExampleTwoأو وظائف مع تمكين وضع "دفق":
./gradlew runExampleThree نعم! يستخدم GPT-4 واجهة برمجة تطبيقات ChatCompletion ، ويمكنك رؤية أحدث خيارات النموذج هنا.
GPT-4 حاليًا في نسخة تجريبية محدودة (اعتبارًا من 4/1/23) ، لذا تأكد من إمكانية الوصول قبل محاولة استخدامه.
قطعاً! من السهل جدًا استخدام وظائفك الخاصة دون القلق بشأن القيام بالعمل القذر. كما ذكر أعلاه ، يمكنك الرجوع إلى OpenaiApifunctionSexample.java أو OpenAiapifunctionSwithStreamexample.java مشاريع على سبيل المثال.
تأكد من أن Openai متاح في بلدك.
تستخدم العديد من المشاريع OpenAiservice ، ومن أجل دعمها بشكل أفضل ، أبقيت الأمر بسيطًا للغاية.
يمكنك إنشاء مثيل OpenAiape الخاص بك لتخصيص الرؤوس ، والمهلات ، وعناوين URL الأساسية ، إلخ.
إذا كنت تريد ميزات مثل Retry Logic ومكالمات Async ، فسيتعين عليك إنشاء مثيل OpenAiApi والاتصال بها مباشرة بدلاً من استخدام OpenAiService
قام Openai بإهمال نقاط النهاية القائمة على المحرك لصالح نقاط النهاية القائمة على النماذج. على سبيل المثال ، بدلاً من استخدام v1/engines/{engine_id}/completions ، قم بالتبديل إلى v1/completions وحدد النموذج في CompletionRequest . يتضمن الرمز تعليمات الترقية لجميع نقاط النهاية التي تم إهمالها.
لن أزيل نقاط النهاية القديمة من هذه المكتبة حتى يقوم Openai بإغلاقها.
تم نشره تحت رخصة معهد ماساتشوستس للتكنولوجيا