Alexander Mirvis

كتاب وصفات OpenAI

ما وراء ChatGPT: أشياء سرية وقوية بشكل مدهش يمكنك بناؤها باستخدام OpenAI API

عندما يفكر معظم الناس في OpenAI API، يتخيلون مربع نص يكتب فيه شخص ما سؤالًا، ثم يرسل الذكاء الاصطناعي إجابة. هذا صحيح من الناحية التقنية، لكنه لا يُظهر إلا جزءًا ضئيلًا مما يستطيع API فعله فعليًا.

أستخدم OpenAI بطريقة مختلفة على AlexanderMirvis.com وBrooklynNotaryNinjas.com. فبدلًا من التعامل مع الذكاء الاصطناعي باعتباره روبوت محادثة منفصلًا يجلس في زاوية من زوايا الموقع، يمكنني جعله جزءًا من البرنامج الفعلي نفسه. يستطيع OpenAI فحص صفحات الويب قبل نشرها، وإنشاء البيانات الوصفية، وتحليل المستندات المرفوعة، والمساعدة في الأبحاث الطبية والقانونية، وتشغيل محادثات خدمة العملاء، وأتمتة الأعمال المتكررة، ومراقبة الخوادم، وتحليل سجلات الأمن السيبراني، ونسخ المكالمات الهاتفية، وإنشاء ردود منطوقة، والبحث في مجموعات المستندات الخاصة، والتواصل مع الأجزاء الأخرى من تطبيقاتي عبر وظائف مُتحكَّم فيها.

الحيلة الحقيقية هي فهم أن OpenAI API ليس مضطرًا لأن يكون التطبيق نفسه. يمكن أن يكون الذكاء الموجود داخل التطبيق.

قد يحتوي تطبيق PHP تقليدي على منطق مثل:

if ($documentType === 'affidavit') {
    // Do something
}

أما التطبيق المدعوم بالذكاء الاصطناعي فيمكنه الذهاب إلى أبعد من ذلك بكثير. يمكنني تزويد OpenAI بمستند مرفوع وطلب تحديد نوع المستند، واستخراج التواريخ المهمة، والتعرّف على الأشخاص المعنيين، وتلخيص ما حدث، وتحديد المعلومات الناقصة، وإرجاع كل شيء في صورة بيانات منظَّمة يمكن لـPHP معالجتها.

وهذا يحوّل OpenAI من مولّد نصوص إلى شيء أقرب بكثير إلى مكوّن برمجي ذكي.

إنشاء وظيفة OpenAI مركزية واحدة

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

يجب أن يظل مفتاح API دائمًا على الخادم. ولا ينبغي أبدًا وضعه داخل JavaScript يُرسل إلى متصفح الزائر.

<?php

function openaiResponse(array $payload): array
{
    $apiKey = getenv('OPENAI_API_KEY');

    if (!$apiKey) {
        throw new RuntimeException('OPENAI_API_KEY is not configured.');
    }

    $ch = curl_init('https://api.openai.com/v1/responses');

    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            'Authorization: Bearer ' . $apiKey,
            'Content-Type: application/json'
        ],
        CURLOPT_POSTFIELDS => json_encode($payload),
        CURLOPT_TIMEOUT => 120
    ]);

    $raw = curl_exec($ch);

    if ($raw === false) {
        throw new RuntimeException(curl_error($ch));
    }

    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    curl_close($ch);

    $data = json_decode($raw, true);

    if ($status >= 400) {
        throw new RuntimeException(
            $data['error']['message'] ?? 'OpenAI request failed.'
        );
    }

    return $data;
}

يمكن أن يبدو الطلب الأساسي على النحو التالي:

$response = openaiResponse([
    'model' => 'gpt-5',
    'input' => 'Explain what a New York notarial acknowledgment is.'
]);

echo $response['output'][0]['content'][0]['text'] ?? '';

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

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

استخدام OpenAI لإنشاء العناوين والبيانات الوصفية وتحليل كل صفحة

تُعدّ إحدى أكثر عمليات دمج OpenAI فائدةً على AlexanderMirvis.com هي التحليل التلقائي للمحتوى وتحسين محركات البحث (SEO). فبدلاً من كتابة وسم العنوان، والوصف التعريفي، وقائمة الكلمات المفتاحية، ووصف البحث يدويًا في كل مرة أنشر فيها شيئًا، يمكن لـ OpenAI فحص المقالة الفعلية واقتراحها تلقائيًا.

تتمثل الحيلة المهمة في أنني لا أريد بالضرورة أن يجيبني OpenAI بطريقة حوارية. أريد أن يتلقى نظام إدارة المحتوى لدي بيانات يمكنه تخزينها مباشرةً في قاعدة البيانات.

على سبيل المثال، قد أرغب في أن تبدو الاستجابة على النحو التالي:

{
    "title": "Suggested Page Title",
    "meta_description": "Suggested description",
    "keywords": [
        "keyword one",
        "keyword two"
    ],
    "seo_score": 84,
    "problems": [
        "Meta description is too vague"
    ],
    "recommendations": [
        "Add a stronger introductory paragraph"
    ]
}