optillm عبارة عن وكيل استدلال محسّن متوافق مع OpenAI API والذي ينفذ العديد من التقنيات الحديثة التي يمكنها تحسين دقة وأداء LLMs. ينصب التركيز الحالي على تنفيذ التقنيات التي تعمل على تحسين التفكير في الترميز والاستعلامات المنطقية والرياضية. من الممكن التغلب على النماذج الرائدة باستخدام هذه التقنيات عبر مهام متنوعة عن طريق إجراء عمليات حسابية إضافية في وقت الاستدلال.
pip install optillm
optillm
2024-10-22 07:45:05,612 - INFO - Loaded plugin: privacy
2024-10-22 07:45:06,293 - INFO - Loaded plugin: memory
2024-10-22 07:45:06,293 - INFO - Starting server with approach: auto
انسخ المستودع باستخدام git
واستخدم pip install
لإعداد التبعيات.
git clone https://github.com/codelion/optillm.git
cd optillm
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
قم بإعداد متغير البيئة OPENAI_API_KEY
(لـ OpenAI) أو متغيرات البيئة AZURE_OPENAI_API_KEY
و AZURE_API_VERSION
و AZURE_API_BASE
(لـ Azure OpenAI) أو متغيرات البيئة AZURE_API_VERSION
و AZURE_API_BASE
وتسجيل الدخول باستخدام az login
لـ Azure OpenAI مع الهوية المُدارة (انظر هنا).
يمكنك بعد ذلك تشغيل وكيل optillm كما يلي.
python optillm .py
2024-09-06 07:57:14,191 - INFO - Starting server with approach: auto
2024-09-06 07:57:14,191 - INFO - Server configuration: { ' approach ' : ' auto ' , ' mcts_simulations ' : 2, ' mcts_exploration ' : 0.2, ' mcts_depth ' : 1, ' best_of_n ' : 3, ' model ' : ' gpt-4o-mini ' , ' rstar_max_depth ' : 3, ' rstar_num_rollouts ' : 5, ' rstar_c ' : 1.4, ' base_url ' : ' ' }
* Serving Flask app ' optillm '
* Debug mode: off
2024-09-06 07:57:14,212 - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:8000
* Running on http://192.168.10.48:8000
2024-09-06 07:57:14,212 - INFO - Press CTRL+C to quit
بمجرد تشغيل الوكيل، يمكنك استخدامه كبديل لعميل OpenAI عن طريق تعيين base_url
كـ http://localhost:8000/v1
.
import os
from openai import OpenAI
OPENAI_KEY = os . environ . get ( "OPENAI_API_KEY" )
OPENAI_BASE_URL = "http://localhost:8000/v1"
client = OpenAI ( api_key = OPENAI_KEY , base_url = OPENAI_BASE_URL )
response = client . chat . completions . create (
model = "moa-gpt-4o" ,
messages = [
{
"role" : "user" ,
"content" : "Write a Python program to build an RL model to recite text from any position that the user provides, using only numpy."
}
],
temperature = 0.2
)
print ( response )
ينطبق الكود أعلاه على كل من OpenAI وAzure OpenAI، فقط تذكر ملء متغير البيئة OPENAI_API_KEY
بالمفتاح المناسب. هناك طرق متعددة للتحكم في تقنيات التحسين، ويتم تطبيقها بالترتيب التالي للتفضيلات:
{slug}-model-name
. على سبيل المثال، في الكود أعلاه نستخدم moa
أو خليط من العوامل كنهج التحسين. في سجلات الوكيل، ستشاهد ما يلي يوضح أنه تم استخدام moa
مع النموذج الأساسي مثل gpt-4o-mini
. 2024-09-06 08:35:32,597 - INFO - Using approach moa, with gpt-4o-mini
2024-09-06 08:35:35,358 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions " HTTP/1.1 200 OK "
2024-09-06 08:35:39,553 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions " HTTP/1.1 200 OK "
2024-09-06 08:35:44,795 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions " HTTP/1.1 200 OK "
2024-09-06 08:35:44,797 - INFO - 127.0.0.1 - - [06/Sep/2024 08:35:44] " POST /v1/chat/completions HTTP/1.1 " 200 -
optillm _approach
في extra_body
. response = client.chat.completions.create(
model= " gpt-4o-mini " ,
messages=[{ " role " : " user " , " content " : " " }],
temperature=0.2,
extra_body={ " optillm _approach " : " bon|moa|mcts " }
)
system
أو موجه user
، ضمن علامات < optillm _approach> </ optillm _approach>
. response = client.chat.completions.create(
model= " gpt-4o-mini " ,
messages=[{ " role " : " user " , " content " : " < optillm _approach>re2</ optillm _approach> How many r's are there in strawberry? " }],
temperature=0.2
)
نصيحة
يمكنك أيضًا الجمع بين تقنيات مختلفة إما باستخدام الرموز &
و |
. عند الاستخدام &
تتم معالجة التقنيات بالترتيب من اليسار إلى اليمين في مسار مع الاستجابة من المرحلة السابقة المستخدمة كطلب إلى المرحلة التالية. بينما مع |
نقوم بتشغيل جميع الطلبات بالتوازي وننشئ استجابات متعددة يتم إرجاعها كقائمة.
يرجى ملاحظة أن الاصطلاح الموضح أعلاه يعمل فقط عند بدء تشغيل خادم optillm مع ضبط أسلوب الاستدلال على auto
. وبخلاف ذلك، يجب تعيين سمة model
في طلب العميل باستخدام اسم النموذج فقط.
نحن الآن ندعم جميع موفري خدمات LLM (من خلال الالتفاف حول LiteLLM sdk). على سبيل المثال، يمكنك استخدام نموذج Gemini Flash مع moa
عن طريق تعيين تمرير مفتاح API في متغير البيئة os.environ['GEMINI_API_KEY']
ثم استدعاء النموذج moa-gemini/gemini-1.5-flash-002
. ستلاحظ في المخرجات أنه يتم استخدام LiteLLM لاستدعاء النموذج الأساسي.
9:43:21 - LiteLLM:INFO: utils.py:2952 -
LiteLLM completion () model= gemini-1.5-flash-002; provider = gemini
2024-09-29 19:43:21,011 - INFO -
LiteLLM completion () model= gemini-1.5-flash-002; provider = gemini
2024-09-29 19:43:21,481 - INFO - HTTP Request: POST https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-002:generateContent ? key=[redacted] " HTTP/1.1 200 OK "
19:43:21 - LiteLLM:INFO: utils.py:988 - Wrapper: Completed Call, calling success_handler
2024-09-29 19:43:21,483 - INFO - Wrapper: Completed Call, calling success_handler
19:43:21 - LiteLLM:INFO: utils.py:2952 -
LiteLLM completion () model= gemini-1.5-flash-002; provider = gemini
نصيحة
optillm هو وكيل شفاف وسيعمل مع أي LLM API أو مزود لديه نقطة نهاية إكمال الدردشة المتوافقة مع OpenAI API، وفي المقابل، يعرض optillm أيضًا نفس نقطة نهاية إكمال الدردشة المتوافقة مع OpenAI API. من المفترض أن يسمح لك هذا بدمجه في أي أدوات أو أطر عمل موجودة بسهولة. إذا لم يكن لدى LLM الذي تريد استخدامه نقطة نهاية متوافقة مع OpenAI API (مثل Google أو Anthropic)، فيمكنك استخدام خادم وكيل LiteLLM الذي يدعم معظم LLMs.
يوضح مخطط التسلسل التالي كيفية مرور الطلب والاستجابات عبر optillm .
في الرسم البياني:
A
عبارة عن أداة موجودة (مثل oobabooga)، أو إطار عمل (مثل patchwork) أو التعليمات البرمجية الخاصة بك حيث تريد استخدام النتائج من optillm . يمكنك استخدامه مباشرة باستخدام أي SDK لعميل OpenAI.B
هي خدمة optillm (التي تعمل مباشرة أو في حاوية عامل إرساء) والتي سترسل الطلبات إلى base_url
.C
هي أي خدمة توفر نقطة نهاية إكمال الدردشة المتوافقة مع OpenAI API. نحن ندعم تحميل أي نموذج HuggingFace أو LoRA مباشرة في optillm . لاستخدام خادم الاستدلال المدمج، قم بتعيين optillm _API_KEY
على أي قيمة (على سبيل المثال، export optillm _API_KEY=" optillm "
) ثم استخدم نفس الشيء في عميل OpenAI الخاص بك. يمكنك تمرير أي نموذج HuggingFace في مجال النموذج. إذا كان نموذجًا خاصًا، فتأكد من تعيين متغير البيئة HF_TOKEN
باستخدام مفتاح HuggingFace. نحن ندعم أيضًا إضافة أي عدد من LoRAs أعلى النموذج باستخدام الفاصل +
.
على سبيل المثال، يقوم التعليمة البرمجية التالية بتحميل النموذج الأساسي meta-llama/Llama-3.2-1B-Instruct
ثم يضيف اثنين من LoRAs في الأعلى - patched-codes/Llama-3.2-1B-FixVulns
و patched-codes/Llama-3.2-1B-FastApply
. يمكنك تحديد LoRA المطلوب استخدامه باستخدام معلمة active_adapter
في حقل extra_args
لعميل OpenAI SDK. افتراضيًا، سنقوم بتحميل آخر محول محدد.
OPENAI_BASE_URL = "http://localhost:8000/v1"
OPENAI_KEY = " optillm "
response = client . chat . completions . create (
model = "meta-llama/Llama-3.2-1B-Instruct+patched-codes/Llama-3.2-1B-FastApply+patched-codes/Llama-3.2-1B-FixVulns" ,
messages = messages ,
temperature = 0.2 ,
logprobs = True ,
top_logprobs = 3 ,
extra_body = { "active_adapter" : "patched-codes/Llama-3.2-1B-FastApply" },
)
يمكنك أيضًا استخدام تقنيات فك التشفير البديلة مثل cot_decoding
و entropy_decoding
مباشرة مع خادم الاستدلال المحلي.
response = client . chat . completions . create (
model = "meta-llama/Llama-3.2-1B-Instruct" ,
messages = messages ,
temperature = 0.2 ,
extra_body = {
"decoding" : "cot_decoding" , # or "entropy_decoding"
# CoT specific params
"k" : 10 ,
"aggregate_paths" : True ,
# OR Entropy specific params
"top_k" : 27 ,
"min_p" : 0.03 ,
}
)
OPENAI_API_KEY
إلى قيمة عنصر نائبexport OPENAI_API_KEY="sk-no-key"
./llama-server -c 4096 -m path_to_model
لبدء الخادم بالنموذج المحدد وطول سياق 4096 رمزًا مميزًاpython3 optillm .py --base_url base_url
لبدء الوكيلpython3 optillm .py --base_url http://localhost:8080/v1
تحذير
لاحظ أن Anthropic API وllama-server (و ollama) لا يدعم حاليًا أخذ عينات من استجابات متعددة من نموذج، مما يحد من الأساليب المتاحة لما يلي: cot_reflection
و leap
و plansearch
rstar
و rto
و self_consistency
و re2
و z3
. بالنسبة للنماذج الموجودة على HuggingFace، يمكنك استخدام خادم الاستدلال المحلي المدمج لأنه يدعم استجابات متعددة.
يقترب | سبيكة | وصف |
---|---|---|
سرير الأطفال مع الانعكاس | cot_reflection | ينفذ منطق تسلسل الأفكار من خلال أقسام <التفكير> و<الانعكاس> و<الإخراج> |
بحث الخطة | plansearch | ينفذ خوارزمية بحث على الخطط المرشحة لحل مشكلة ما باللغة الطبيعية |
أعد القراءة | re2 | ينفذ إعادة القراءة لتحسين الاستدلال عن طريق معالجة الاستعلامات مرتين |
الاتساق الذاتي | self_consistency | يطبق طريقة متقدمة للاتساق الذاتي |
Z3 حلالا | z3 | يستخدم مُبرهنة Z3 للاستدلال المنطقي |
خوارزمية R* | rstar | ينفذ خوارزمية R* لحل المشكلات |
خطوة | leap | يتعلم المبادئ الخاصة بالمهمة من خلال أمثلة قليلة |
تحسين الرحلة ذهابًا وإيابًا | rto | تحسين الاستجابات من خلال عملية ذهابًا وإيابًا |
أفضل من N أخذ العينات | bon | يولد استجابات متعددة ويختار أفضل واحد |
خليط من الوكلاء | moa | يجمع بين الردود من انتقادات متعددة |
بحث شجرة مونت كارلو | mcts | يستخدم MCTS لاتخاذ القرار في استجابات الدردشة |
لعبة الكهروضوئية | pvg | يطبق أسلوب لعبة إثبات التحقق في وقت الاستدلال |
فك تشفير CoT | غير متاح للوكيل | ينفذ فك تشفير سلسلة الأفكار لاستنباط المنطق دون مطالبة صريحة |
فك تشفير الانتروبيا | غير متاح للوكيل | ينفذ أخذ العينات التكيفية بناءً على عدم اليقين من الرموز المميزة أثناء الإنشاء |
البرنامج المساعد | سبيكة | وصف |
---|---|---|
جهاز التوجيه | router | يستخدم نموذج optillm -bert-uncased لتوجيه الطلبات إلى طرق مختلفة بناءً على مطالبة المستخدم |
سلسلة من التعليمات البرمجية | coc | ينفذ نهج سلسلة من التعليمات البرمجية الذي يجمع بين CoT وتنفيذ التعليمات البرمجية ومحاكاة التعليمات البرمجية المستندة إلى LLM |
ذاكرة | memory | تنفذ طبقة ذاكرة قصيرة المدى، وتمكنك من استخدام طول سياق غير محدود مع أي ماجستير في القانون |
خصوصية | privacy | إخفاء هوية بيانات تحديد الهوية الشخصية (PII) عند الطلب وإلغاء إخفاء هويتها وإعادتها إلى القيمة الأصلية ردًا على ذلك |
قراءة عناوين URL | readurls | يقرأ جميع عناوين URL الموجودة في الطلب، ويجلب المحتوى الموجود على عنوان URL ويضيفه إلى السياق |
تنفيذ التعليمات البرمجية | executecode | يتيح استخدام مترجم التعليمات البرمجية لتنفيذ كود بايثون في الطلبات والاستجابات التي تم إنشاؤها بواسطة LLM |
يدعم optillm وسائط سطر الأوامر المختلفة ومتغيرات البيئة للتكوين.
المعلمة | وصف | القيمة الافتراضية |
---|---|---|
--approach | طريقة الاستدلال للاستخدام | "auto" |
--simulations | عدد عمليات محاكاة MCTS | 2 |
--exploration | وزن الاستكشاف لـ MCTS | 0.2 |
--depth | عمق المحاكاة لـ MCTS | 1 |
--best-of-n | عدد العينات لنهج best_of_n | 3 |
--model | نموذج OpenAI للاستخدام | "gpt-4o-mini" |
--base-url | عنوان URL الأساسي لنقطة النهاية المتوافقة مع OpenAI | "" |
--rstar-max-depth | أقصى عمق لخوارزمية rStar | 3 |
--rstar-num-rollouts | عدد عمليات طرح خوارزمية rStar | 5 |
--rstar-c | ثابت الاستكشاف لخوارزمية rStar | 1.4 |
--n | عدد الردود النهائية التي سيتم إرجاعها | 1 |
--return-full-response | قم بإرجاع الاستجابة الكاملة بما في ذلك CoT مع العلامات | False |
--port | حدد المنفذ لتشغيل الوكيل | 8000 |
-- optillm -api-key | مفتاح API اختياري لمصادقة العميل optillm | "" |
عند استخدام Docker، يمكن تعيينها كمتغيرات بيئة مسبوقة بـ optillm _
.
يمكن إنشاء optillm وتشغيله اختياريًا باستخدام Docker وDockerfile المتوفر.
تأكد من تثبيت Docker وDocker Compose على نظامك.
قم إما بتحديث متغيرات البيئة في ملف docker-compose.yaml أو إنشاء ملف .env
في الدليل الجذر للمشروع وإضافة أي متغيرات بيئة تريد تعيينها. على سبيل المثال، لتعيين مفتاح OpenAI API، أضف السطر التالي إلى ملف .env
:
OPENAI_API_KEY=your_openai_api_key_here
قم بتشغيل الأمر التالي لبدء optillm :
docker compose up -d
سيؤدي هذا إلى إنشاء صورة Docker إذا لم تكن موجودة وبدء تشغيل خدمة optillm .
سيكون optillm متاحًا على http://localhost:8000
.
عند استخدام Docker، يمكنك تعيين هذه المعلمات كمتغيرات بيئة. على سبيل المثال، لتعيين النهج والنموذج، يمكنك استخدام:
optillm _APPROACH=mcts
optillm _MODEL=gpt-4
لتأمين وكيل optillm باستخدام مفتاح API، قم بتعيين متغير البيئة optillm _API_KEY
:
optillm _API_KEY=your_secret_api_key
عند تعيين مفتاح API، يجب على العملاء تضمينه في طلباتهم باستخدام رأس Authorization
:
Authorization: Bearer your_secret_api_key
نموذج | نتيجة |
---|---|
o1-ميني | 56.67 |
كوك-كلود-3-5-السوناتة-20241022 | 46.67 |
كوك-الجوزاء/الجوزاء-exp-1121 | 46.67 |
o1-معاينة | 40.00 |
الجوزاء-EX-1114 | 36.67 |
كلود-3-5-السوناتة-20241022 | 20.00 |
الجوزاء-1.5-برو-002 | 20.00 |
الجوزاء-1.5-فلاش-002 | 16.67 |
نموذج | دقة |
---|---|
readurls&memory-gpt-4o-mini | 61.29 |
gpt-4o-mini | 50.61 |
القراءات والذاكرة-Gemma2-9b | 30.1 |
جيما2-9ب | 5.1 |
جيما2-27ب | 30.8 |
الجوزاء فلاش 1.5 | 66.5 |
الجوزاء برو 1.5 | 72.9 |
نموذج | تمرير@1 | تمرير@5 | تمرير@10 |
---|---|---|---|
Plansearch-gpt-4o-mini | 44.03 | 59.31 | 63.5 |
gpt-4o-mini | 43.9 | 50.61 | 53.25 |
كلود 3.5 السوناتة | 51.3 | ||
gpt-4o-2024-05-13 | 45.2 | ||
gpt-4-turbo-2024-04-09 | 44.2 |
نظرًا لأن optillm عبارة عن بديل مباشر لـ OpenAI API، يمكنك دمجها بسهولة مع الأدوات والأطر الموجودة باستخدام عميل OpenAI. استخدمنا optillm with patchwork وهو إطار عمل مفتوح المصدر يعمل على أتمتة أعمال التطوير مثل مراجعات العلاقات العامة، وإصلاح الأخطاء، والتصحيح الأمني باستخدام مسارات عمل تسمى patchflows. لقد شهدنا مكاسب هائلة في الأداء عبر جميع تدفقات التصحيح المدعومة كما هو موضح أدناه عند استخدام نهج خليط الوكلاء (moa).