تقدم OpenAI واجهات متعددة للنماذج اللغوية والتضمينات والصوت والصور. هذا الدليل يغطي ما يحتاجه معظم المطورين لبناء ميزة دردشة أو بحث ذكي أو استخراج بيانات منظمة، مع الانتباه لما يهم الإنتاج.
1. الإعداد
pip install openai
export OPENAI_API_KEY="sk-..."
export OPENAI_MODEL="<model-id-from-docs>"2. أول طلب عبر Responses API
Responses API هي الواجهة الأحدث والموصى بها للمشاريع الجديدة، وتدمج النص والأدوات في واجهة واحدة.
import os
from openai import OpenAI
client = OpenAI() # يقرأ OPENAI_API_KEY
response = client.responses.create(
model=os.environ["OPENAI_MODEL"],
instructions="أنت مساعد دعم لشركة Mit AI. أجب بالعربية وباختصار.",
input="ما هي خدماتكم؟",
)
print(response.output_text)3. Chat Completions: الواجهة الكلاسيكية
ما زالت واسعة الاستخدام، وهي الصيغة التي تتبناها معظم الخوادم المتوافقة مع OpenAI (Ollama و vLLM وغيرها)، لذلك تبقى مفيدة إذا أردت التبديل بين المزوّدين بتغيير base_url فقط.
completion = client.chat.completions.create(
model=os.environ["OPENAI_MODEL"],
messages=[
{"role": "system", "content": "أنت مساعد Mit."},
{"role": "user", "content": "مرحباً"},
],
)
print(completion.choices[0].message.content)4. البث المباشر
stream = client.chat.completions.create(
model=os.environ["OPENAI_MODEL"],
messages=[{"role": "user", "content": "اشرح RAG ببساطة"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)5. مخرجات منظمة (JSON) بدون تخمين
عندما تحتاج بيانات يقرأها كودك (استخراج اسم ورقم وتاريخ من رسالة)، لا تعتمد على "اطلب من النموذج إرجاع JSON". استخدم المخرجات المنظمة المرتبطة بمخطط، وتحقق من النتيجة بمكتبة مثل Pydantic.
from pydantic import BaseModel
class Lead(BaseModel):
name: str
email: str | None
interest: str
completion = client.chat.completions.parse(
model=os.environ["OPENAI_MODEL"],
messages=[
{"role": "system", "content": "استخرج بيانات العميل المحتمل."},
{"role": "user", "content": "أنا سارة، مهتمة بروبوت دردشة لمتجري. sara@example.com"},
],
response_format=Lead,
)
lead = completion.choices[0].message.parsed6. استدعاء الدوال (Function Calling)
كما في Claude، تصف دوالك بمخطط JSON، فيقرر النموذج متى يطلب استدعاءها، وتنفذها أنت وتعيد النتيجة. المبدأ واحد عبر المزوّدين، وهو ما يسهّل بناء طبقة موحدة.
tools = [{
"type": "function",
"function": {
"name": "get_order_status",
"description": "حالة الطلب برقمه",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"],
},
},
}]
completion = client.chat.completions.create(
model=os.environ["OPENAI_MODEL"], messages=messages, tools=tools
)
calls = completion.choices[0].message.tool_calls or []7. التضمينات للبحث الدلالي و RAG
emb = client.embeddings.create(
model="text-embedding-3-small",
input=["كيف أحجز استشارة؟", "سياسة الاسترجاع"],
)
vectors = [item.embedding for item in emb.data]
# خزّنها في pgvector أو Qdrant أو Pinecone ثم ابحث بأقرب تشابهالتفاصيل المعمارية لهذا النمط في كيف تحسّن بحث موقعك بالذكاء الاصطناعي وفي صفحة Enterprise RAG.
8. التكلفة والموثوقية
- التسعير بالرموز (tokens): سجّل
usageلكل طلب وضع سقفاً شهرياً في لوحة التحكم. - حدود المعدل (429): أعد المحاولة بتأخير تصاعدي مع عشوائية (exponential backoff + jitter). الـ SDK الرسمي يعيد المحاولة تلقائياً لأخطاء معينة.
- المهلات: حدد
timeoutمعقولاً، وفكّر بالبث للردود الطويلة. - الخصوصية: لا ترسل بيانات شخصية غير ضرورية، وراجع سياسات الاحتفاظ بالبيانات في حسابك.
- الإشراف: إن كان تطبيقك مفتوحاً للعامة فاستخدم أدوات الإشراف على المحتوى ورقابة المدخلات.
أسئلة شائعة
ما الفرق بين Responses API و Chat Completions؟
Responses API هي الواجهة الأحدث التي توحّد النص والأدوات والحالة، وChat Completions هي الواجهة الكلاسيكية المدعومة على نطاق واسع في الخوادم المتوافقة مع OpenAI.
كيف أحمي مفتاح OpenAI API؟
خزّنه في متغيرات البيئة على الخادم فقط، ولا تضعه في كود الواجهة الأمامية، وحدّد سقف إنفاق، ودوّره دورياً.
تريد تطبيق ذلك في مشروعك؟
فريقنا يساعدك من التخطيط حتى التشغيل. احجز استشارة مجانية.