OpenAI-C ++ Library เป็นห้องสมุด ที่ได้รับการดูแลจากชุมชน ซึ่งให้การเข้าถึง OpenAI API ที่สะดวกจากแอปพลิเคชันที่เขียนในภาษา C ++
ไลบรารีมีขนาดเล็กที่มีไฟล์ส่วนหัวสองไฟล์ (เพียงไฟล์เดียวถ้าคุณใช้ Nlohmann JSON แล้ว)
ไม่มีข้อกำหนดพิเศษ คุณควรมีสิ่งเหล่านี้แล้ว:
ห้องสมุดควรใช้คำขอทั้งหมดในการอ้างอิง OpenAI หากมีการหายไป (เนื่องจากการอัปเดต) อย่าลังเลที่จะเปิดปัญหา
| การอ้างอิง API | วิธี | ไฟล์ตัวอย่าง |
|---|---|---|
| รุ่น API | รายการรุ่น✅ | 1 model.cpp |
| รุ่น API | ดึงรุ่น✅ | 1 model.cpp |
| ความสำเร็จของ API | สร้างความสำเร็จ✅ | 2-completion.cpp |
| การแก้ไข API | สร้างความสำเร็จ | 3-edit.cpp |
| ภาพ API | สร้างภาพ✅ | 4-image.cpp |
| ภาพ API | สร้างภาพแก้ไข✅ | 4-image.cpp |
| ภาพ API | สร้างความแปรปรวนของภาพ✅ | 4-image.cpp |
| API Embeddings | สร้าง embeddings ✅ | 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-moderation.cpp |
ห้องสมุดประกอบด้วยสองไฟล์: รวม/openai/openai.hpp และรวม/openai/nlohmann/json.hpp
เพียงคัดลอกโฟลเดอร์รวม/OpenAICPP ในโครงการของคุณและคุณสามารถใช้ #include "openai.hpp" ในรหัสของคุณ นั่นคือทั้งหมด
หมายเหตุ: OpenAI-CPP ใช้ nlohmann JSON ซึ่งมีอยู่ใน
include/json.hppอย่าลังเลที่จะใช้สำเนาของคุณเองเพื่อสร้างเวลาคอมไพล์ที่เร็วขึ้น
ห้องสมุดจะต้องกำหนดค่าด้วยคีย์ลับของบัญชีของคุณซึ่งมีอยู่ในเว็บไซต์ ขอแนะนำให้ตั้งค่าตัวแปรสภาพแวดล้อม 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] ในโครงการของคุณหากคุณต้องการเอาต์พุต verbose เช่นเมื่อเรียกใช้ตัวอย่างคุณสามารถกำหนด #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 คุณจะไม่กังวลกับสิ่งต่อไปนี้
ตามการติดตั้ง Curl บน Windows
Windows 10 มาพร้อมกับเครื่องมือ Curl ที่มาพร้อมกับระบบปฏิบัติการตั้งแต่เวอร์ชัน 1804
อย่างไรก็ตามคุณยังอาจมีปัญหาในการจัดการ libcurl ที่ cmake โยน Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR)
คุณสามารถลองทำตามวิธี 2 วิธีที่เสนอโดย Curl Install Curl บน Windows
อีกวิธีหนึ่งในการแก้ปัญหานี้คือการคว้ารุ่น Curl สำหรับ 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มิกซ์
งานนี้ได้รับแรงบันดาลใจจาก Slacking และ Curl Wrapper Code จาก CPR เป็นหลัก
โอลเรีย