Devextremeai هي مكتبة مع تنفيذ كامل وكامل لجميع واجهات برمجة التطبيقات Openai. هذه المكتبة متوافقة تمامًا مع المواصفات Openai وأيضًا تنفيذ استجابة خطأ Openai. من السهل جدًا استخدامها مع ASP.NET Core ولديها دعم كامل لحقن التبعية (مع سطر واحد من التعليمات البرمجية كنمط قياسي ASP.NET). كما أنه سهل الاستخدام في المكتبات دون حقن التبعية (انظر العينات أدناه).
يرجى ملاحظة أن هذه مكتبة Openapi غير رسمية (لم يتم إدراجها بواسطة شركة Openai).
| يبني | حالة | الإصدار الحالي |
|---|---|---|
| CI |
لاستخدام هذه المكتبة ، تحتاج إلى مفتاح Openai API (ومعرف التنظيم اختياريًا). للحصول على مفتاح API ، عليك تسجيل حسابك على Openai.com. بعد التسجيل ، انتقل إلى حساب Openai الخاص بك وابحث عن "عرض مفاتيح API" ، في هذه الصفحة يمكنك إنشاء apikey. من صفحة حسابك ، يمكنك العثور على صفحة الإعدادات حيث يتم وضع معرف مؤسستك.
يمكنك استخدام هذه المكتبة عبر Nuget Package Devextremeai
ملاحظة مهمة أن هذه المكتبة تدعم نقطة الأيقونات الصافية وحقن التبعية بحيث يمكنها قراءة Apkikey والتنظيم منها بدلاً من الترميز الصعب في التعليمات البرمجية المصدر. (من فضلك لا تعود إلى كود صعب ومعرف المؤسسة في رمز المصدر ولا تدفعها إلى GIT أو أي مستودع مصدر).
تلتزم هذه المكتبة تمامًا بمواصفات Openai ونموذج الكائن الخاص بها هي نفسها من Openai (مع خصائص dotnet). تنفذ هذه المكتبة أيضًا رموز خطأ Openai التي لم يتم توثيقها في مرجع واجهات برمجة التطبيقات Openai.
قم بتثبيت Nuget Package Devextremeai في program.cs أضف هذا باستخدام:
using DevExtremeAI . AspNet ; يتيح لك هذا باستخدام استخدام امتداد خدمة ASP.NET. مع Builder WebApplication الآن ، يمكنك استخدام طريقة AddDevExtremeAI() التي تسجل كل ما تحتاجه مع حقن التبعية.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI ( ) ; يبحث هذا الحمل الزائد AddDevExtremeAI() عن apikey في Appsettings.json أو Appsettings.development.json حتى تتمكن من تجنب ترميزها في التعليمات البرمجية المصدرية. أقترح عليك استخدام أسرار عمل github.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < DevExtremeAI . Settings . CurrentEnvironmentData > ( ) ;وبهذه الطريقة ، يتم قراءة مفتاح API ومعرف المنظمة من متغيرات البيئة المسماة Openai_organization و Openai_API_Key.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < MyEnvironmentReader > ( ) ; في المثال أعلاه ، يمكنك استخدام التحميل الزائد AddDevExtremeAI<TEnvironment> الذي يتطلب نوعًا كائنًا ينفذ واجهة DevExtremeAI.Settings.IAIEnvironment حتى تتمكن من قراءة معرف apikey أو المؤسسة من حيث تريد. (سيتم استخدام تنفيذ IAIEnvironment في طريقة Singleton).
أخيرًا ، يمكنك استخدام Overload AddDevExtremeAI(string apiKey, string? organization) وتمرير قيم apikey ومعرف المؤسسة التي تم قراءتها من حيث تريد (يرجى قراءةها من حيث تريد ولكن لا تشودس في أي رمز مصدر).
هذا كل شيء! من الآن يمكنك استخدام Openai في مشروع ASP.NET الخاص بك عبر حقن التبعية.
يمكنك الآن الإعلان عن مُنشئ وحدة التحكم والأصدقاء الخاص بك مع حجة DevExtremeAI.OpenAIClient.IOpenAIAPIClient مثل هذا:
private DevExtremeAI . OpenAIClient . IOpenAIAPIClient _openAIApiClient ;
public TestAIController ( DevExtremeAI . OpenAIClient . IOpenAIAPIClient openAIApiClient )
{
_openAIApiClient = openAIApiClient ;
}مثال على استخدام iopenaiapiclient في وحدة التحكم أو apicontroller يمكن أن يكون:
// GET api/<TestAIController>/5
[ HttpGet ( " {id} " ) ]
public async Task < string > Get ( int id )
{
var chat = new CreateChatCompletionRequest ( ) ;
chat . Model = " gpt-3.5-turbo-1106 " ;
string prompt = $" Is the number { id } even or odd? " ;
chat . AddMessage ( new ChatCompletionUserContentMessage ( ) { Content = prompt } ) ;
var response = await _openAIApiClient . CreateChatCompletionAsync ( chat ) ;
return $" { prompt } -> { response ? . OpenAIResponse ? . Choices [ 0 ] ? . Message ? . Content } " ;
}لاحظ أنه يمكنك العثور على الوثائق الكاملة لـ API و DTO في Intellisense ، أمثلة أدناه أو مرجع API الرسمي Openai لأن هي نفسها.
إذا كنت تستخدم ASP.NET Core أو بدون Hostbuilder أو حقن التبعية كما في تطبيق وحدة التحكم أو مكتبة DOTNET ، يمكنك استخدام أساليب المصنع.
في هذا السيناريو ، تحتاج إلى نفس الحزمة Nuget Package Devextremeai
بعد تثبيت هذه الحزمة ، يمكنك استخدام مكتبة Devextremeai.
في البرنامج. الإعلان هذا باستخدام:
using DevExtremeAI . OpenAIClient ; الآن يمكنك استخدام OpenAIClientFactory
داخل مكتبتك أو الطريقة الرئيسية لتطبيق وحدة التحكم ، يمكنك إنشاء instace من IOpenAIAPIClient كما في هذا المثال:
internal class Program
{
static async Task Main ( string [ ] args )
{
var openAIClient = OpenAIClientFactory . CreateInstance ( ) ; //create an instance o IOpenAIAPIClient
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRoleStringContentMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Hello! " ,
} ) ;
var response = await openAIClient . CreateChatCompletionAsync ( createCompletionRequest ) ;
Console . WriteLine ( response . OpenAIResponse . Choices [ 0 ] . Message . Content ) ;
}
} تستخدم طريقة المصنع ( CreateInstance ) في المثال أعلاه الحمل الزائد بدون وسيط ، هذا الحمل الزائد يبحث عن apikeyvalue والمؤسسة ind في appsettings.json أو appsettings.development.json. يجب أن تكون أسماء مفاتيح AppSettings Openai_API_Key و Openai_organization.
var openAIClient = OpenAIClientFactory . CreateInstance < CurrentEnvironmentData > ( ) ; //create an instance o IOpenAIAPIClient var openAIClient = OpenAIClientFactory . CreateInstance ( new CurrentEnvironmentData ( ) ) ; //create an instance o IOpenAIAPIClient وبهذه الطريقة ، يتم قراءة مفتاح API ومعرف المنظمة من متغيرات البيئة المسماة Openai_organization و Openai_API_Key.
var openAIClient = OpenAIClientFactory . CreateInstance < MyEnvironmentValueReader > ( ) ; //create an instance o IOpenAIAPIClient يمكنك استخدام الحمل الزائد الذي يتطلب مثيلًا لـ DevExtremeAI.Settings.IAIEnvironment الذي تم تنفيذه من قبل نفسك حتى تتمكن من قراءة قيمة Apkiky ومعرف التنظيم من حيث تريد.
كما يمكنك استخدام الحمل الزائد الذي reqire apikey قيمة ومعرف المؤسسة كوسائط (ولكن مناشدات لا ترحمها في التعليمات البرمجية المصدر).
ومع ذلك ، لا تقم بترميز apikey ومعرف المؤسسة في أي ملف (رمز المصدر أو ملفات التطبيقات) ، لا تضغط على مستودع المصدر the appsettings.development.json واستخدم أسرار عمل github.
كل طرق من DevExtremeAI.OpenAIClient.IOpenAIAPIClient هي نفسها من Openai ، حتى تتمكن من استخدام
مرجع API Openai الرسمي. تم وصف كائنات DTO أيضًا مع وثائق .NET قياسية حتى تتمكن من استخدام Intellisese. كل طرق من IOpenAIAPIClient موجودة في اختبارات تكامل XUNIT ، لذلك يمكنك النظر إليها هناك (دليل devextremeailibtest).
كل استجابة هي من DevExtremeAI.OpenAIDTO.ResponseDTO<T> النوع. يحتوي هذا النوع على ثلاث عقارات:
ErrorResponse الذي يحتوي على تفاصيل الخطأ التي تم إرجاعها بواسطة Openai API في حالة المشكلة.HasError هذا صحيح إذا حدث خطأ خلاف ذلك هو خطأ.OpenAIResponse الذي هو نفسه استجابة Openai.يدعم هذا الإصدار الشكوى Openai API وموديلات الكائن إلى GPT-4 و GPT-3.5-TURBO. في إصدار API Openai تم إهمال بعض API وتغير بعض نموذج الكائن. يمكنك رؤية نموذج الكائن المحدث في مخطط UML. بالنسبة إلى API الدردشة ، يمكنك الآن استخدام الكائنات التي ترث من الفصل الأساسي "ChatCompletionRolereQuestMessage".
الكائن chatCompletionRoleStringContentMessage هو للتوافق المتخلف فقط. باستخدام هذا الكائن ، يمكنك تعيين خاصية الدور مثل إصدار نموذج الكائن القديم.
على سبيل المثال الكود القديم مثل هذا:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRequestMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;يمكن التحديث بهذه الطريقة:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRoleStringContentMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;التغييرات هي:
يجب التحديث بالكامل إلى أحدث إصدار من الإصدار يجب أن يتم بهذه الطريقة:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionUserContentMessage ( )
{
Content = " Who are you? "
} ) ;التغييرات هي:
مغطاة جميع أنواع API Openai:
يمكنك العثور على أمثلة لكل API في مشروع وحدة الاختبار. إذا كنت تريد ، يمكنك المساهمة في توسيع ملف ReadMe مع أمثلة ؛)
حقوق الطبع والنشر (C) 2023 Andrea Piccioni
يتم منح الإذن بموجب هذا ، مجانًا ، لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة به ("البرنامج") ، للتعامل في البرنامج دون تقييد ، بما في ذلك على سبيل المثال لا الحصر حقوق استخدام الأشخاص ونسخها ودمجها ودمجها وتوزيعها وتوزيعها على ما يلي:
يجب إدراج إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو" ، دون أي ضمان من أي نوع ، صريح أو ضمني ، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق واللياقة لغرض معين وعدم الانفجار. لا يجوز بأي حال من الأحوال أن يكون المؤلفون أو حاملي حقوق الطبع والنشر مسؤولاً عن أي مطالبة أو أضرار أو مسؤولية أخرى ، سواء في إجراء عقد أو ضرر أو غير ذلك ، ناشئة عن أو خارج البرنامج أو الاستخدام أو غيرها من المعاملات في البرنامج.