Openai-C ++ Library هي مكتبة يتم صيانتها المجتمعية والتي توفر وصولًا مناسبًا إلى API Openai من التطبيقات المكتوبة بلغة C ++.
المكتبة صغيرة مع ملفين رأس (واحد فقط إذا كنت تستخدم بالفعل Nlohmann JSON).
لا متطلبات خاصة. يجب أن يكون لديك بالفعل:
يجب على المكتبة تنفيذ جميع الطلبات على مراجع Openai. إذا كان هناك مفقود (بسبب التحديث) ، لا تتردد في فتح مشكلة.
| مرجع API | طريقة | مثال ملف |
|---|---|---|
| نماذج API | قائمة النماذج ✅ | 1-model.cpp |
| نماذج API | استرداد النموذج ✅ | 1-model.cpp |
| إكمال API | إنشاء الانتهاء ✅ | 2-completion.cpp |
| تحريرات API | إنشاء الانتهاء | 3-edit.cpp |
| صور API | إنشاء صورة ✅ | 4-emage.cpp |
| صور API | إنشاء صور تحرير ✅ | 4-emage.cpp |
| صور API | إنشاء تباين الصورة ✅ | 4-emage.cpp |
| التضمينات API | إنشاء تضمينات ✅ | 5-embedding.cpp |
| ملفات API | قائمة ملف ✅ | 6-file.cpp |
| ملفات API | تحميل ملف ✅ | 6-file.cpp |
| ملفات API | حذف الملف ✅ | 6-file.cpp |
| ملفات API | استرداد الملف ✅ | 6-file.cpp |
| ملفات API | استرداد محتوى الملف ✅ | 6-file.cpp |
| API النغمات الفاخرة | إنشاء ضبط جيد ✅ | 7-fine-tune.cpp |
| API النغمات الفاخرة | قائمة بدافع الدعامة ✅ | 7-fine-tune.cpp |
| API النغمات الفاخرة | استرجاع النقطة الفاخرة ✅ | 7-fine-tune.cpp |
| API النغمات الفاخرة | إلغاء ضبط الأداء ✅ | 7-fine-tune.cpp |
| API النغمات الفاخرة | قائمة أحداث ضبطها ✅ | 7-fine-tune.cpp |
| API النغمات الفاخرة | حذف نموذج النقطة الدقيقة ✅ | 7-fine-tune.cpp |
| دردشة API | إنشاء الانتهاء من الدردشة ✅ | 10-Chat.cpp |
| API Audio | إنشاء النسخ ✅ | 11-Audio.cpp |
| API Audio | إنشاء ترجمة ✅ | 11-Audio.cpp |
| API الاعتدال | إنشاء الاعتدال ✅ | 12 تعديل |
تتكون المكتبة من ملفين: تضمين/Openai/Openai.hpp وتشمل/Openai/Nlohmann/Json.hpp.
ما عليك سوى نسخ مجلد Include/OpenAicpp في مشروعك ويمكنك استخدام #include "openai.hpp" في الكود الخاص بك. هذا كل شيء.
ملاحظة: يستخدم Openai-CPP Nlohmann JSON الذي يتوفر في
include/json.hpp. لا تتردد في استخدام نسختك الخاصة لبناء وقت الترجمة بشكل أسرع.
تحتاج المكتبة إلى تكوين مفتاح Secret الخاص بحسابك المتوفرة على الموقع الإلكتروني. يوصى بتعيين متغير بيئة OPENAI_API_KEY قبل استخدام المكتبة (أو يمكنك أيضًا تعيين مفتاح API مباشرة في الكود):
export OPENAI_API_KEY= ' sk-... 'الرمز التالي متاح في أمثلة/00-showcase.cpp.
# include " openai.hpp "
# include < iostream >
int main () {
openai::start (); // Will use the api key provided by `OPENAI_API_KEY` environment variable
// openai::start("your_API_key", "optional_organization"); // Or you can handle it yourself
auto completion = openai::completion (). create ( R"( {
"model": "text-davinci-003",
"prompt": "Say this is a test",
"max_tokens": 7,
"temperature": 0
} )" _json); // Using user-defined (raw) string literals
std::cout << " Response is: n " << completion. dump ( 2 ) << ' n ' ;
auto image = openai::image (). create ({
{ " prompt " , " A cute koala playing the violin " },
{ " n " , 1 },
{ " size " , " 512x512 " }
}); // Using initializer lists
std::cout << " Image URL is: " << image[ " data " ][ 0 ][ " url " ] << ' n ' ;
}يشبه الإخراج المستلم:
>> request: https://api.openai.com/v1/completions { " max_tokens " :7, " model " : " text-davinci-003 " , " prompt " : " Say this is a test " , " temperature " :0}
Response is:
{
" choices " : [
{
" finish_reason " : " length " ,
" index " : 0,
" logprobs " : null,
" text " : " nnThis is indeed a test "
}
],
" created " : 1674121840,
" id " : " cmpl-6aLr6jPhtxpLyu9rNsJFKDHU3SHpe " ,
" model " : " text-davinci-003 " ,
" object " : " text_completion " ,
" usage " : {
" completion_tokens " : 7,
" prompt_tokens " : 5,
" total_tokens " : 12
}
}
>> request: https://api.openai.com/v1/images/generations { " n " :1, " prompt " : " A cute koala playing the violin " , " size " : " 512x512 " }
Image URL is: " https://oaidalleapiprodscus.blob.core.windows.net/private/org-WaIMDdGHNwJiXAmjegDHE6AM/user-bCrYDjR21ly46316ZbdgqvKf/img-sysAePXF2c8yu28AIoZLLmEG.png?st=2023-01-19T20%3A35%3A19Z&se=2023-01-19T22%3A35%3A19Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-01-19T18%3A10%3A41Z&ske=2023-01-20T18%3A10%3A41Z&sks=b&skv=2021-08-06&sig=nWkcGTTCsWigHHocYP%2BsyiV5FJL6izpAe3OVvX1GLuI%3D " 
منذ Openai::Json هو typedef إلى Nlohmann :: JSON ، تحصل على جميع الميزات التي توفرها الأخيرة (التحويلات ، STL مثل الوصول ، ...).
mkdir build && cd build
cmake .. && make
examples/[whatever] في مشروعك ، إذا كنت ترغب في الحصول على إخراج مطوّلة مثل تشغيل الأمثلة ، فيمكنك تحديد #define OPENAI_VERBOSE_OUTPUT .
افتراضيًا ، سيلقي Openai-CPP استثناء خطأ في وقت التشغيل إذا لم ينجح طلب Curl. أنت حر في التعامل مع هذه الاستثناءات بالطريقة التي تريدها. يمكنك منع استثناءات الرمي عن طريق ضبط setThrowException(false) (انظر مثال في أمثلة/09-instances.cpp). إذا قمت بذلك ، فسيتم عرض تحذير بدلاً من ذلك.
يمكنك استخدام طرق openai::post() أو openai::get() للتحكم بالكامل في ما ترسله (على سبيل المثال ، يمكن أن تكون مفيدة عند توفر طريقة جديدة من Openai API ولا توفرها OpenAI-CPP حتى الآن).
فيما يلي نهجان للحفاظ على جلسة Openai-CPP في برنامجك حتى تتمكن من استخدامها في أي وقت وفي أي مكان.
هذا هو السلوك الافتراضي. يوفر Openai-CPP وظائف مريحة مجانية: openai::start(const std::string& token) و openai::instance() . تهيئة وتكوين مثيل Openai-CPP مع:
auto & openai = openai::start(); عندما تكون في نطاق آخر وفقدت مرجع openai ، يمكنك الاستيلاء عليها مرة أخرى مع:
auto & openai = openai::instance();قد لا تكون هذه هي الطريقة الموصى بها ، ولكن نظرًا لأننا نريد عمومًا التعامل مع مثيل Openai واحد فقط (رمز واحد) ، فإن هذا النهج مناسب للغاية.
هناك طريقة أخرى تتمثل في تمرير مثيل Openai بالرجوع إليه ، وتخزينه ، والاتصال بالطرق المناسبة عند الحاجة.
void bar (openai::OpenAI& openai) {
openai. completion . create ({
{ " model " , " text-davinci-003 " },
{ " prompt " , " Say bar() function called " }
});
}
int main () {
openai::OpenAI openai_instance{ " your_api_key " };
bar (openai_instance);
}يمكنك استخدام std :: reference_wrapper كما هو موضح في أمثلة/09-instances.cpp.
هذه الاستراتيجية مفيدة إذا كان عليك إدارة العديد من مثيلات Openai-CPP بمفاتيح سرية مختلفة.
ملاحظة: إذا كنت تستخدم WSL ، فأنت لست مهتمًا بما يلي.
وفقا لتثبيت حليقة على Windows ،
يأتي Windows 10 مع أداة حليقة مجمعة مع نظام التشغيل منذ الإصدار 1804
ومع ذلك ، قد لا تواجه صعوبات في التعامل مع libcurl حيث Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) .
يمكنك محاولة متابعة واحدة من الطريقتين المقترحان بواسطة حليقة التثبيت على Windows.
هناك طريقة أخرى لحل ذلك وهي الحصول على إصدار Curl for Windows هنا ، ونسخ محتوى include في المجلدات المناسبة المتوفرة المرئية في المسار الخاص بك (على سبيل المثال إذا كان في تثبيت GIT الخاص بك [...]/Git/mingw64/include/ ). تحتاج أيضًا إلى الحصول على ملفات curl.lib وملفات libcurl.dll من هنا ونسخها في المجلدات المناسبة (على سبيل المثال إذا في تثبيت GIT الخاص بك [...]/Git/mingw64/lib/ ).
mkdir build && cd build
cmake .. -DCMAKE_GENERATOR_PLATFORM=x64
cmake --build .
cmake --build . --target 00-showcase # For a specific targetأو إذا كنت تفضل استخدام GNU GCC على Windows
cmake -G " MSYS Makefiles " -D CMAKE_CXX_COMPILER=g++ ..
makeمعهد ماساتشوستس للتكنولوجيا
لقد استلهم هذا العمل بشكل أساسي من التراكب ورمز غلاف الضفيرة من CPR.
أولريا