AR ▾
احصل على مفتاح API

GetAiApiKeyقائمة مراجعة واجهة برمجة تطبيقات الذكاء الاصطناعي للإنتاج

كيفية تثبيت نموذج LLM في Python: محليًا أو عبر API

يمكنك تشغيل نموذج على جهازك الخاص، أو تثبيت حزمة Python صغيرة واحدة واستدعاء نموذج مستضاف عبر HTTP. تغطي هذه الصفحة الطريقتين، ثم تتناول مسار API خطوة بخطوة.

تم التحديث

رسم توضيحي لكابل يربط نص Python بمكعب نموذج سحابي متوهج، يوضح اتصال API

نقاط رئيسية

  1. تثبيت محلي يحتاج أوزان النموذج وذاكرة كافية؛ مسار API يحتاج فقط حزمة openai ومفتاحًا.
  2. عيّن عنوان URL الأساسي إلى https://api.getaiapikey.com/v1 والنموذج إلى uncensored.
  3. البث المتدفق، واستدعاء الدوال، ووضع JSON جميعها تعمل عبر عميل OpenAI القياسي.
  4. عالج خطأ HTTP 429 بإعادة محاولة قصيرة، واحتفظ بالمكالمات المتزامنة عند 8 أو أقل.

معنيان لتثبيت نموذج LLM

عندما يسأل الناس عن كيفية تثبيت llm في python، فإنهم يعنون عادةً أحد أمرين. الأول هو تشغيل نموذج محليًا: تنزيل الأوزان وتحميلها باستخدام مكتبة على وحدة المعالجة المركزية أو معالج الرسوميات الخاص بك. والثاني هو تثبيت مكتبة عميل بحيث يمكن لكود Python الخاص بك التحدث مع نموذج يعمل في مكان آخر. كلاهما صحيح، ويعتمد الاختيار الصحيح على عتادك وما تريد بناؤه.

مسار API أقصر بكثير. تقوم بتشغيل pip install openai، وتوجّه العميل نحو عنوان URL أساسي، وتستدعي النموذج. لا أوزان، ولا برامج تشغيل GPU، ولا تخطيط للذاكرة. يعطي باقي هذه الصفحة الخطوات والكود لذلك المسار، مع قسم قصير عن المسار المحلي لمقارنته.

التثبيت المحلي أو API المستضاف: كيفية الاختيار

السؤالالتثبيت المحليواجهة برمجة التطبيقات المستضافة
ما تقوم بتثبيتهمكتبة استنتاج بالإضافة إلى أوزان النموذجحزمة openai
الأجهزةالذاكرة ووحدة معالجة الرسومات عادةً بحجم يتناسب مع النموذجأي جهاز يمكنه إجراء اتصالات HTTPS
التكلفةأجهزتك والكهرباءلكل رمز، من رصيد مسبق الدفع
يعمل دون اتصالنعملا
الوقت حتى أول ردالتنزيل، الإعداد، الضبطبضع دقائق

يكون التشغيل المحلي منطقياً إذا كنت بحاجة إلى الاحتفاظ بكل شيء على جهاز واحد، أو العمل دون اتصال، أو تجربة الأوزان نفسها. مكتبات مثل bindings الخاصة بـ llama.cpp أو Hugging Face transformers هي نقاط البداية المعتادة؛ تحقق من وثائقها الخاصة بخصوص متطلبات الأجهزة، حيث تعتمد تلك على حجم النموذج الذي تختاره.

تكون واجهة برمجة التطبيقات منطقية إذا كنت تريد نتيجة عمل بسرعة، أو إذا لم يستطع جهازك المحمول استيعاب نموذج كبير، أو إذا كان تطبيقك يحتاج إلى خدمة العديد من المستخدمين. تدفع مقابل كل رمز بدلاً من شراء الأجهزة. بالنسبة لهذه الخدمة، السعر هو $0.15 لكل مليون رمز مدخل و$0.50 لكل مليون رمز مخرج، بدون اشتراك. تحتوي صفحة التسعير على التفاصيل.

الخطوة 1: إنشاء بيئة افتراضية وتثبيت الحزمة

استخدم بيئة افتراضية لضمان بقاء التثبيت نظيفاً. يعمل أي إصدار حديث من Python 3 مع حزمة openai.

python3 -m venv .venv
source .venv/bin/activate
pip install openai

بعد ذلك، تحتاج إلى مفتاح. سجّل في صفحة مفتاح API باستخدام Google أو عبر البريد الإلكتروني وكلمة المرور. يمكن للمستخدمين الجدد الحصول على $0.50 من رصيد تجريبي بنقرة واحدة، صالح لمدة 7 أيام وبدون بطاقة. احفظ المفتاح في متغير بيئة بدلاً من ملف المصدر الخاص بك:

export API_KEY="paste-your-key-here"

الخطوة 2: إجراء أول استدعاء

الخدمة متوافقة مع OpenAI، لذا فإن التغييرات الوحيدة عن نص OpenAI القياسي هي عنوان URL الأساسي ومعرف النموذج. معرف النموذج هو uncensored.

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.getaiapikey.com/v1",
    api_key=os.environ["API_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "Explain what a context window is in two sentences."},
    ],
    temperature=0.7,
    max_tokens=200,
)

print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

إذا طبع هذا الرد وعدادين للرموز، فإن التثبيت مكتمل. للتحقق من أن مفتاحك يعمل ورؤية معرف النموذج، يمكنك أيضاً استدعاء GET /v1/models:

for m in client.models.list():
    print(m.id)

نفس الطلب من سطر الأوامر، بدون Python على الإطلاق، هو استدعاء curl واحد إلى https://api.getaiapikey.com/v1/chat/completions مع الرأس Authorization: Bearer متبوعاً بمفتاحك. يعرض دليل البدء السريع ذلك بالكامل.

الخطوة 3: بث الرموز عند وصولها

الانتظار حتى انتهاء رد طويل قبل طباعة أي شيء يبدو بطيئاً. اضبط stream=True ويرسل الخادم الرموز عبر أحداث الإرسال من الخادم. يمكنك طلب ملخص الاستخدام في الجزء الأخير باستخدام stream_options.

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Write a short scene set in a lighthouse."}],
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage.total_tokens, "tokens")

تفاصيل مهمة للإنتاج: يحتفظ الطلب المتدفق بفتحة التزامن الخاصة به حتى ينتهي البث. يسمح المفتاح الكامل بـ 8 طلبات متزامنة، لذا إذا كان تطبيقك يفتح العديد من تدفقات البث الطويلة، أغلقها عند قطع اتصال المستخدم.

الخطوة 4: وضع JSON واستدعاء الدوال

للإخراج المهيكل، اضبط response_format ليكون كائن JSON. أخبر النموذج أيضاً في الموجّه أن يجيب بصيغة JSON، لأن الإعداد يضمن صحة صيغة JSON ولكن ليس أسماء الحقول التي تريدها.

import json

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Reply only with JSON: {\"title\": string, \"tags\": [string]}"},
        {"role": "user", "content": "Give me a title and tags for a post about slow travel."},
    ],
    response_format={"type": "json_object"},
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])

يتبع استدعاء الدوال النمط القياسي. تصف دالة، قد يطلب النموذج استدعاءها، تقوم بتشغيلها بنفسك وترسل النتيجة مرة أخرى باستخدام role: "tool".

tools = [{
    "type": "function",
    "function": {
        "name": "get_time",
        "description": "Return the current time for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

messages = [{"role": "user", "content": "What time is it in Lisbon?"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)

msg = first.choices[0].message
if msg.tool_calls:
    call = msg.tool_calls[0]
    messages.append(msg)
    messages.append({
        "role": "tool",
        "tool_call_id": call.id,
        "content": json.dumps({"time": "14:05"}),
    })
    final = client.chat.completions.create(
        model="uncensored", messages=messages, tools=tools
    )
    print(final.choices[0].message.content)

اختبر استدعاءات الدوال على بضع موجّهات قبل الاعتماد عليها. يمكن لأي نموذج اختيار الدالة الخاطئة أو ملء الحجة بشكل سيء، لذا تحقق من صحة الحجج في كودك الخاص قبل تشغيل أي شيء له آثار جانبية.

الخطوة 5: التعامل مع الحدود والأخطاء

المفاتيح الكاملة تسمح بـ 8 طلبات متزامنة و300 طلب في الدقيقة. المفاتيح التجريبية تسمح بـ 2 و60. بعد تجاوز تلك الحدود، تحصل على HTTP 429. رمز الخطأ rate_limited يعني الكثير من الطلبات في الدقيقة، وconcurrency يعني الكثير في وقت واحد. في حالات الحمل الزائد المؤقت، تعيد واجهة برمجة التطبيقات أيضاً 429 مع الرأس Retry-After: 5.

يعيد عميل Python الخاص بـ OpenAI محاولة بعض الأخطاء تلقائيًا، لكن استخدام غلاف صريح يجعل السلوك واضحًا:

import time
from openai import RateLimitError

def ask(messages, tries=4):
    for attempt in range(tries):
        try:
            return client.chat.completions.create(model="uncensored", messages=messages)
        except RateLimitError:
            time.sleep(5 * (attempt + 1))
    raise RuntimeError("still rate limited after retries")

يحتوي كل استجابة على الرؤوس X-Request-Id، X-Balance-USD وحدود المعدل، والتي يمكنك تسجيلها. أضف معرف الطلب إذا تواصلت مع الدعم. الطلبات الفاشلة أو المرفوضة لا تُحسب، لذا فإن إعادة المحاولة لا تكلف شيئًا إضافيًا.

خطط أيضًا لحدود الحجم. نافذة السياق هي 100,000 رمز، وتجمع بين الموجّه والإكمال، والحد الأقصى لحجم جسم الطلب هو 8 MB. يجب تقصير سجلات الدردشة الطويلة أو تلخيصها قبل الوصول إلى هذه الأرقام.

عندما لا يعمل الاتصال

تأتي معظم مشاكل التشغيل الأولي من مجموعة صغيرة من الأخطاء. تحقق من هذه النقاط بالترتيب قبل أن تشك في أي شيء آخر.

  • عنوان URL الأساسي بدون مسار الإصدار. يجب أن تنتهي القيمة بـ /v1. يضيف العميل /chat/completions إليها، لذا فإن غياب /v1 يرسل الطلب إلى المسار الخاطئ.
  • مفتاح خاطئ أو مفقود. يُوضع المفتاح في رأس Authorization: Bearer، الذي يبنيه العميل من api_key. إذا كان متغير البيئة فارغاً، فإن العميل إما يرفع خطأ عند البدء أو يرسل مفتاحاً فارغاً. اطبع bool(os.environ.get("API_KEY")) للتحقق.
  • اسم نموذج من خدمة أخرى. معرف النموذج الوحيد هنا هو uncensored. الأسماء مثل تلك الموجودة في الدروس التعليمية الأخرى لن تتطابق.
  • عدم وجود رصيد. انظر إلى رأس X-Balance-USD. التجربة التي انتهت صلاحيتها بعد 7 أيام، أو الرصيد المستنفد، تحتاج إلى شحن من $20.
  • حزمة قديمة. إذا استخدمت مثالًا يحتوي على OpenAI( و Python تقول إنه لا يمكن استيراد هذا الاسم، فأنت تستخدم الحزمة السابقة للإصدار 1.0. قم بتشغيل pip install --upgrade openai.

لرؤية الاستجابة الخام بما في ذلك الرؤوس، استخدم غلاف الاستجابة الخام للعميل:

raw = client.chat.completions.with_raw_response.create(
    model="uncensored",
    messages=[{"role": "user", "content": "ping"}],
    max_tokens=5,
)
print(raw.headers.get("x-request-id"), raw.headers.get("x-balance-usd"))
completion = raw.parse()
print(completion.choices[0].message.content)

هذا يطبع معرف الطلب والرصيد المتبقي بجانب الإجابة، وهو فحص صحة سريع يمكنك تشغيله من مهمة مجدولة أو نص بدء التشغيل.

استخدامها من أدوات أخرى

نظرًا لأن نقطة النهاية تتبع تنسيق OpenAI، يمكن لمكتبات Python الأخرى استخدامها بنفس الإعدادين. الأطر التي تقبل عنوان URL أساسي مخصص لـ OpenAI تحتاج فقط إلى base_url و api_key. بالنسبة لـ Node.js، تأخذ الحزمة الرسمية openai نفس الحقول:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.getaiapikey.com/v1",
  apiKey: process.env.API_KEY,
});

const r = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Say hello in five words." }],
});
console.log(r.choices[0].message.content);

هذه خدمة نصية فقط: لا توليد صور أو صوت، ولا تضمينات ولا ضبط دقيق. إذا كان مشروعك يحتاج إلى ذلك، اربط هذه API بأداة أخرى لذلك الجزء. النموذج هو نموذج مفتوح الأوزان الذي يشغله مزود مستقل ومضبط للإجابة بدون رفض المحتوى للاستخدام القانوني للبالغين. المحتوى الجنسي الذي يتضمن قاصرين غير مسموح به أبداً.

أسئلة وأجوبة

هل أحتاج إلى وحدة معالجة رسومات لتشغيل نموذج لغوي كبير في بايثون بهذه الطريقة؟

لا. يعمل النموذج من جانب المزود. يحتاج جهازك فقط إلى Python واتصال بالإنترنت لاستدعاء نقطة النهاية.

أي حزمة أركّب؟

ركّب الحزمة الرسمية openai باستخدام pip. ثم اضبط Base URL على https://api.getaiapikey.com/v1 والنموذج إلى uncensored.

هل هناك طريقة مجانية لتجربته؟

يمكن للمستخدمين الجدد الحصول على رصيد تجريبي بقيمة $0.50 بنقرة واحدة بعد التسجيل. صالح لمدة 7 أيام، ولا يتطلب بطاقة، ومحدود بواحد لكل شخص.

كم يكلف الطلب؟

يُكلف الطلب الذي يحتوي على 2,000 رمز إدخال و500 رمز إخراج $0.00055، بناءً على أسعار $0.15 و$0.50 لكل مليون رمز. تدفع فقط مقابل الطلبات الناجحة.

هل يدعم البث المتدفق واستدعاء الدوال؟

نعم. يعمل البث المتدفق عبر SSE، واستدعاء الدوال، ووضع JSON جميعها عبر عميل OpenAI القياسي.

مفتاحك على بُعد استمارة واحدة

أنشئ حساباً، وانسخ المفتاح، ثم غيّر URL الأساسي. هذه هي الإعدادات الكاملة.