ما وراء 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"
]
}
يمكنني أن أطلب من واجهة برمجة التطبيقات إخراجًا منظمًا بدلاً من نص نثري عشوائي.
$pageText = strip_tags($pageHtml);
$response = openaiResponse([
'model' => 'gpt-5',
'instructions' => '
أنت محرك تحليل تحسين محركات البحث لموقع AlexanderMirvis.com.
حلّل صفحة الويب المُقدَّمة.
لا تستخدم عناوين مضللة لجذب النقرات.
لا تختلق الحقائق.
يجب أن يصف العنوان المقالة بدقة.
افحص:
العناوين،
وضوح الموضوع،
نية البحث،
استخدام الكلمات المفتاحية،
بنية المقالة،
فرص الربط الداخلي،
سهولة القراءة،
جودة البيانات الوصفية
والأقسام التي تبدو مكررة.
',
'input' => $pageText,
'text' => [
'format' => [
'type' => 'json_schema',
'name' => 'seo_analysis',
'strict' => true,
'schema' => [
'type' => 'object',
'properties' => [
'title' => [
'type' => 'string'
],
'meta_description' => [
'type' => 'string'
],
'keywords' => [
'type' => 'array',
'items' => [
'type' => 'string'
]
],
'seo_score' => [
'type' => 'integer',
'minimum' => 0,
'maximum' => 100
],
'problems' => [
'type' => 'array',
'items' => [
'type' => 'string'
]
],
'recommendations' => [
'type' => 'array',
'items' => [
'type' => 'string'
]
]
],
'required' => [
'title',
'meta_description',
'keywords',
'seo_score',
'problems',
'recommendations'
],
'additionalProperties' => false
]
]
]
]);يمكن لنظام إدارة المحتوى الآن حفظ النتائج تلقائيًا بدلًا من أن يطلب مني نسخها ولصقها يدويًا.
$analysisJson =
$response['output'][0]['content'][0]['text'];
$seo = json_decode($analysisJson, true);
$stmt = $pdo->prepare("
UPDATE posts
SET
meta_title = ?,
meta_description = ?,
seo_score = ?
WHERE id = ?
");
$stmt->execute([
$seo['title'],
$seo['meta_description'],
$seo['seo_score'],
$postId
]);
يمكنني المضي أبعد بكثير من مجرد إنشاء عنوان. يستطيع OpenAI فحص العنوان، والعناوين الفرعية، ونص المتن، وأوصاف الصور، والجزء التعريفي من عنوان URL، والتصنيفات، والكلمات المفتاحية، والروابط الداخلية، وحتى التحقق مما إذا كانت المقالة تفي فعلًا بما يعد به عنوانها.
يمكن لنظام إدارة المحتوى لديّ عرض شيء مثل:
درجة تحسين محركات البحث: 82 / 100
نقاط القوة:
تشرح المقالة الموضوع الرئيسي بوضوح.
يظهر الموضوع الأساسي في وقت مبكر.
بنية العناوين منطقية.
المشكلات:
الوصف التعريفي عام جدًا.
لا يوجد رابط داخلي لمقالة ذات صلة.
يناقش عنوانان فرعيان مادة متطابقة تقريبًا.
العنوان المقترح:
كيف يعمل التوثيق عن بُعد عبر الإنترنت فعليًا في نيويورك
تحليل المقالات تلقائيًا قبل النشر
هناك حيلة مفيدة أخرى تتمثل في ربط OpenAI مباشرةً بسير عمل النشر. فبدلًا من تذكّر النقر على زر الذكاء الاصطناعي، يمكن لنظام إدارة المحتوى تحليل الصفحة تلقائيًا عندما تتغير حالتها من مسودة إلى منشورة.
if ($oldStatus === 'draft' && $newStatus === 'published') {
$seo = analyzePageWithOpenAI($post);
saveSeoAnalysis(
$post['id'],
$seo
);
if ($seo['seo_score'] < 60) {
createAdminWarning(
'تحتوي هذه المقالة على مشكلات كبيرة في تحسين محركات البحث.'
);
}
}
عند هذه النقطة، يصبح OpenAI جزءًا من مسار النشر بدلًا من أن يكون شيئًا منفصلًا عن نظام إدارة المحتوى.
استخدام OpenAI لإنشاء المحتوى
من المحتمل أن يكون إنشاء المحتوى الاستخدام الأكثر وضوحًا لـ OpenAI، لكنه أيضًا أحد أسهل الميزات التي يمكن تنفيذها بشكل سيئ. إن مطالبة الذكاء الاصطناعي ببساطة بكتابة «مقالة عن الأمن السيبراني» تنتج عادةً محتوى عامًا، لأن النموذج لم يتلقَّ تقريبًا أي توجيه تحريري.
تتمثل الطريقة الأفضل في تقديم مواصفات تحريرية توضّح الموقع الإلكتروني والجمهور والنبرة ومتطلبات التنسيق والقيود المتعلقة بالحقائق.
بالنسبة إلى AlexanderMirvis.com، يمكنني استخدام شيء من هذا القبيل:
$prompt = <<<PROMPT
Write a detailed article for AlexanderMirvis.com.
Topic:
{$topic}
Audience:
Technically curious readers who may not be software engineers.
Requirements:
Use normal paragraphs.
Explain technical concepts in plain English.
Include practical examples.
Avoid fake quotes.
Do not invent statistics.
Use headings where useful.
Include code only when it genuinely helps.
Do not make the article sound like marketing copy.
Return HTML suitable for insertion into a CMS article body.
Do not include html, head or body tags.
PROMPT;
$response = openaiResponse([
'model' => 'gpt-5',
'input' => $prompt
]);
أما بالنسبة إلى BrooklynNotaryNinjas.com، فيمكن أن تكون التعليمات مختلفة تمامًا.
$prompt = <<<PROMPT
Create a consumer information article for BrooklynNotaryNinjas.com.
Topic:
{$topic}
Explain the subject in simple language.
Do not give legal advice.
Distinguish a notary's role from an attorney's role.
Do not state that notarization proves the truth of a document.
Do not invent legal requirements.
When a requirement is uncertain, explicitly state that it
should be independently verified.
Use complete paragraphs.
PROMPT;
قد يكون النموذج هو نفسه، لكن التعليمات تحوّله إلى تطبيق مختلف تمامًا.
يمكنني أيضًا تزويد نظام إدارة المحتوى لدي بوظائف ذكاء اصطناعي فردية مثل إعادة الصياغة، والتوسيع، والاختصار، والتبسيط، وجعل النص تقنيًا، وإنشاء الأسئلة الشائعة، وإنشاء ملخص، وإنشاء محتوى لتحسين محركات البحث، والترجمة، وتحليل الحجج، وتحديد الادعاءات التي تحتاج إلى التحقق.
وهذا يحوّل OpenAI فعليًا إلى شريط أدوات تحريري ذكي.
تحميل المستندات لتحليلها بواسطة الذكاء الاصطناعي
يُعد تحليل المستندات المجال الذي تصبح فيه واجهة برمجة تطبيقات OpenAI مفيدة بشكل خاص. إذ يمكن لموقع إلكتروني أن يتيح لشخص ما تحميل ملف PDF أو مستند Word أو ملف آخر مدعوم، ثم يطلب من OpenAI تحليل محتواه الفعلي.
يمكن أن يكون هذا مفيدًا للسجلات الطبية، والمستندات القانونية، والعقود، والمذكرات القضائية، وتقارير الحوادث، والأبحاث، والإفادات المشفوعة باليمين، والنصوص المفرغة، والفواتير، وسجلات الأعمال، ومستندات التأمين، والوثائق التنظيمية، والعديد من أنواع الملفات الأخرى.
تتمثل الخطوة الأولى في تحميل الملف إلى OpenAI.
<?php
function uploadToOpenAI(string $path): array
{
$apiKey = getenv('OPENAI_API_KEY');
$ch = curl_init(
'https://api.openai.com/v1/files'
);
$post = [
'purpose' => 'user_data',
'file' => new CURLFile(
$path,
mime_content_type($path),
basename($path)
)
];
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey
],
CURLOPT_POSTFIELDS => $post
]);
$raw = curl_exec($ch);
if ($raw === false) {
throw new RuntimeException(
curl_error($ch)
);
}
curl_close($ch);
return json_decode($raw, true);
}
بعد التحميل:
$file = uploadToOpenAI(
$_FILES['document']['tmp_name']
);
$fileId = $file['id'];
يمكن بعد ذلك تزويد النموذج بالملف الذي تم تحميله.
$response = openaiResponse([
'model' => 'gpt-5',
'input' => [
[
'role' => 'user',
'content' => [
[
'type' => 'input_file',
'file_id' => $fileId
],
[
'type' => 'input_text',
'text' => '
حلّل هذا المستند.
حدّد:
1. نوع المستند.
2. التواريخ المهمة.
3. الأشخاص أو الكيانات المهمة.
4. النتائج الواقعية الرئيسية.
5. التناقضات الداخلية.
6. المعلومات المهمة المفقودة.
7. الأسئلة التي تستحق مزيدًا من التحقيق.
افصل بين الحقائق الواردة في
المستند وتفسيرك.
'
]
]
]
]
]);
يتجاوز هذا بكثير مجرد استخراج النص العادي. فالتطبيق لا يقرأ الكلمات من ملف PDF فحسب، بل يطلب من OpenAI فهم ما تعنيه تلك الكلمات في سياقها.
تحليل السجلات الطبية
تتمثل إحدى التطبيقات الواضحة في مراجعة السجلات الطبية. فقد يحتوي ملف طبي كبير على سجلات غرفة الطوارئ، وصور تشخيصية، وتقارير جراحية، وملاحظات العلاج الطبيعي، وفحوصات الأطباء، وسجلات الأدوية، وتوصيات المتابعة موزعة على مئات الصفحات أو حتى آلافها.
يمكنني توجيه OpenAI لتحويل تلك السجلات إلى خط زمني طبي مرتب ترتيبًا زمنيًا.
أنشئ خطًا زمنيًا طبيًا مرتبًا ترتيبًا زمنيًا.
لكل مقابلة، حدّد:
التاريخ
مقدّم الخدمة
الشكوى
التشخيص
النتائج الموضوعية
التصوير
الإجراء
الدواء
القيود
توصيات المتابعة
حدّد بشكل منفصل:
الحالات السابقة
الحالات الجديدة
التغييرات في التشخيص
الفجوات في العلاج
البيانات المتعارضة
التوصيات غير المحسومة
لا تُشخّص المريض.
ميّز بوضوح بين الحقائق الموثقة
والملاحظات التحليلية.
يمكن لهذا أن يحوّل مجموعة ضخمة من السجلات الطبية إلى شيء أسهل بكثير في المراجعة.
ينبغي ألا يحل الذكاء الاصطناعي محل الطبيب أو المحامي أو الخبير المؤهل، لكنه قد يكون مفيدًا للغاية في التنظيم، وإنشاء التسلسل الزمني، ومقارنة المستندات، وتحديد المسائل التي تستحق المراجعة البشرية.
البحث القانوني وتحليل القضايا
يمكن استخدام البنية نفسها للمستندات القانونية. فبدلًا من أن أطلب من OpenAI تلخيص مذكرة قانونية فحسب، يمكنني أن أطلب منه تنظيم القضية ضمن فئات محددة.
راجع هذه المواد بصفتك مساعدًا في البحث القانوني.
أنشئ:
الخلفية الواقعية
التاريخ الإجرائي
المسائل المطروحة
القانون المحتمل الصلة
الأدلة المؤيدة لكل موقف
الأدلة المناهضة لكل موقف
الأسئلة الواقعية غير المحسومة
موضوعات البحث المحتملة
لا تختلق قضايا أو استشهادات.
حدّد بوضوح أي مسألة تتطلب
بحثًا قانونيًا مستقلًا.
يوفر لي هذا نقطة انطلاق للبحث الفعلي، مع تقليل الوقت اللازم لتنظيم المستندات يدويًا.
إنشاء مستندات Word وتقارير PDF
أفضل عمومًا أن يتولى OpenAI إنشاء التحليل، بينما يتحكم تطبيقي الخاص في المستند النهائي. ويتيح لي ذلك التحكم في العلامة التجارية، والترويسات، وترقيم الصفحات، وإخلاءات المسؤولية، والطباعة، والتخطيط.
تبدو البنية على النحو التالي:
المستند المُحمّل
|
v
تحليل OpenAI
|
v
JSON مُنظَّم
|
v
PHP
|
v
مستند Word أو PDF
على سبيل المثال، يمكن لـ OpenAI إرجاع:
{
"title": "Medical Record Review",
"summary": "Summary goes here",
"timeline": [],
"findings": [],
"questions": []
}
يمكن لـ PHP بعد ذلك إنشاء مستند Word باستخدام PHPWord.
composer require phpoffice/phpword
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\IOFactory;
$phpWord = new PhpWord();
$section = $phpWord->addSection();
$section->addTitle(
'Medical Record Analysis',
1
);
$section->addText(
$analysis['summary']
);
$section->addTitle(
'Chronology',
2
);
foreach ($analysis['timeline'] as $entry) {
$section->addText(
$entry['date'] . ' - ' .
$entry['provider'],
['bold' => true]
);
$section->addText(
$entry['summary']
);
}
$section->addTitle(
'Important Findings',
2
);
foreach ($analysis['findings'] as $finding) {
$section->addListItem($finding);
}
$writer = IOFactory::createWriter(
$phpWord,
'Word2007'
);
$writer->save(
__DIR__ . '/reports/analysis.docx'
);
يمكن إنشاء ملف PDF باستخدام مكتبة مثل Dompdf.
composer require dompdf/dompdf
use Dompdf\Dompdf;
$html = '
<h1>Document Analysis</h1>
<p>' .
htmlspecialchars($analysis['summary']) .
'</p>
';
foreach ($analysis['findings'] as $finding) {
$html .=
'<p>' .
htmlspecialchars($finding) .
'</p>';
}
$pdf = new Dompdf();
$pdf->loadHtml($html);
$pdf->render();
file_put_contents(
__DIR__ . '/reports/analysis.pdf',
$pdf->output()
);
يفصل هذا بين الذكاء والعرض التقديمي. ينشئ OpenAI التحليل، بينما يقرر برنامجي الخاص الشكل الدقيق للمنتج النهائي.
تحويل المستندات الخاصة إلى قاعدة معرفية للذكاء الاصطناعي
إذا كان لدي مئات أو آلاف المستندات، فستكون إعادة إرفاق كل ملف بكل سؤال أمراً غير فعّال. بدلاً من ذلك، يمكن تخزين المستندات داخل نظام معرفة قابل للبحث واسترجاعها بناءً على معناها.
يُسمّى هذا عموماً التوليد المعزَّز بالاسترجاع، أو RAG.
بالنسبة إلى BrooklynNotaryNinjas.com، يمكن أن تتضمن مجموعة معرفة خاصة أوصاف الخدمات، وإجراءات الشركة، ومواد مرجعية لكاتب العدل، ومعلومات التصديق، والتعليمات الداخلية، والأسئلة الشائعة للعملاء، ووثائق الموقع الإلكتروني.
بعد ذلك، يستطيع روبوت الدردشة البحث في تلك السجلات عند الرد على أحد العملاء.
$response = openaiResponse([
'model' => 'gpt-5',
'tools' => [
[
'type' => 'file_search',
'vector_store_ids' => [
getenv(
'NOTARY_VECTOR_STORE_ID'
)
]
]
],
'input' =>
'What documents do I need for this service?'
]);
تختلف النتيجة اختلافاً جوهرياً عن روبوت الدردشة العام. يعرف روبوت الدردشة العام معلومات عامة. أما روبوت الدردشة التجاري المُنشأ بشكل صحيح، فيستطيع البحث عن معلومات تخصّ الشركة تحديداً.
روبوت الدردشة OpenAI على BrooklynNotaryNinjas.com
يصبح روبوت الدردشة أكثر فائدة بكثير عندما يتمكن من التواصل مع الموقع الإلكتروني الفعلي بدلاً من الاكتفاء بتوليد الإجابات.
يمكنني إتاحة وظائف مضبوطة بعناية من جهة الخادم، مثل:
- get_service_price
- get_business_hours
- lookup_session_status
- check_document_requirements
- create_support_ticket
- find_available_notary
يمكن للذكاء الاصطناعي تحديد الوقت الذي تكون فيه إحدى تلك الوظائف مطلوبة، بينما تنفّذ PHP العملية الفعلية.
$tools = [
[
'type' => 'function',
'name' => 'get_service_price',
'description' =>
'استرداد الأسعار الحالية من قاعدة بيانات الموقع.',
'strict' => true,
'parameters' => [
'type' => 'object',
'properties' => [
'service' => [
'type' => 'string'
]
],
'required' => [
'service'
],
'additionalProperties' => false
]
]
];
إذا سأل أحدهم:
كم تبلغ تكلفة الأبوستيل؟
فلن يحتاج النموذج إلى التخمين أو الاعتماد على معلومات تدريب قديمة. إذ يمكنه طلب السعر الفعلي من تطبيقي.
$stmt = $pdo->prepare(
'SELECT price
FROM services
WHERE slug = ?'
);
$stmt->execute([
'apostille'
]);
$price = $stmt->fetchColumn();
تظل قاعدة البيانات هي المرجع المعتمد. ويتولى OpenAI إدارة المحادثة.
تذكّر محادثة
يحتاج روبوت الدردشة المفيد أيضًا إلى السياق. فإذا بدأ شخص بالقول إنه يحتاج إلى أبوستيل، ثم قال إن الوثيقة ستُرسل إلى إسبانيا، فلا ينبغي أن يضطر إلى شرح كل شيء من جديد.
$response = openaiResponse([
'model' => 'gpt-5',
'previous_response_id' =>
$_SESSION['openai_response_id'] ?? null,
'input' => $userMessage
]);
$_SESSION['openai_response_id'] =
$response['id'];
يمكن للمحادثة حينها أن تسير بشكل طبيعي:
USER:
أحتاج إلى أبوستيل.
ASSISTANT:
ما الدولة التي ستتلقى الوثيقة؟
USER:
إسبانيا.
يفهم النموذج أن إسبانيا تشير إلى طلب الأبوستيل الوارد في الرسالة السابقة.
الأتمتة: جعل OpenAI يعمل دون النقر على زر
تصبح واجهة OpenAI API ذات قيمة خاصة عند ربطها بالأتمتة. فبدلاً من مطالبة النموذج يدوياً بتنفيذ المهمة نفسها مراراً، يمكن للخادم تشغيل المهمة تلقائياً.
على سبيل المثال، يمكن لمهمة cron في Linux تحليل المقالات المنشورة حديثاً كل ليلة.
0 3 * * * /usr/bin/php /home/site/scripts/ai-audit.php
يمكن لبرنامج PHP النصي تحديد أي شيء لم تتم مراجعته مسبقاً.
$posts = $pdo->query("
SELECT *
FROM posts
WHERE ai_reviewed = 0
AND status = 'published'
")->fetchAll();
foreach ($posts as $post) {
$analysis =
analyzePageWithOpenAI($post);
saveAnalysis(
$post['id'],
$analysis
);
markReviewed(
$post['id']
);
}
وهذا يمنح AlexanderMirvis.com مدققاً تحريرياً آلياً.
يمكن استخدام الفكرة نفسها على BrooklynNotaryNinjas.com لتحليل الأسئلة التي لم تتم الإجابة عنها، وتصنيف طلبات الدعم، وتلخيص المستندات، واكتشاف الأسئلة الشائعة المتكررة، واقتراح تحسينات لقاعدة المعرفة، وترجمة المحتوى المعتمد، وتلخيص محادثات العملاء.
يقرر الذكاء الاصطناعي ما هو مطلوب، وينفذه PHP
من أقوى أنماط التطبيقات السماح لـ OpenAI بتفسير ما يريده الشخص، بينما ينفذ البرنامج العادي العملية الفعلية.
USER
|
v
OPENAI
|
v
FUNCTION REQUEST
|
v
MY PHP CODE
|
v
DATABASE OR BUSINESS LOGIC
|
v
OPENAI
|
v
USER
تخيل أن شخصاً ما يخبر Brooklyn Notary Ninjas:
لدي مستند يحتاج إلى الإرسال إلى إسبانيا، وأحتاج إلى شخص غداً.
قد يحدد OpenAI أن التطبيق يحتاج إلى تحديد الخدمة، والتحقق من التوافر، واسترداد الأسعار، وشرح المتطلبات.
يمكن للذكاء الاصطناعي طلب تلك الوظائف، لكن لا ينبغي أن يحصل على وصول غير مقيّد إلى قاعدة البيانات.
قد أسمح بالوظيفة التالية:
check_availability
لكنني لن أمنح النموذج أبداً وظيفة مثل:
execute_arbitrary_sqlهذه هي النسخة المعتمدة على الذكاء الاصطناعي من مبدأ الأمان المعروف باسم أقلّ قدر من الامتيازات.
استخدام OpenAI للأمن السيبراني
من أكثر الطرق العملية التي أستخدم بها OpenAI الأمن السيبراني ومراقبة الخوادم. يُعدّ كلٌّ من AlexanderMirvis.com وBrooklynNotaryNinjas.com موقعين موجّهين للجمهور، ما يعني أن الخوادم تتعرض باستمرار للماسحات، وفحوصات الثغرات الآلية، وطلبات WordPress الزائفة، وهجمات بيانات الاعتماد، والروبوتات الخبيثة، ومحاولات العثور على ملفات الإعداد.
يكتشف أي شخص يدير خادم ويب عامًا بسرعة مدى ضجيج الإنترنت الحقيقي.
قد يحتوي سجل الخادم على:
185.234.219.32 "GET /wp-login.php" 404
185.234.219.32 "GET /wp-admin/" 404
185.234.219.32 "GET /.env" 403
185.234.219.32 "GET /.git/config" 403
185.234.219.32 "GET /phpmyadmin/" 404
يدرك المسؤول البشري فورًا أن هذا على الأرجح ليس شخصًا يتصفح الموقع بصورة عابرة. فهناك شيء ما يبحث بطريقة منهجية عن واجهات الإدارة الشائعة وملفات الإعداد السرية.
ما زلت أستخدم أدوات الأمان التقليدية مثل جدران الحماية، وFail2Ban، وتحديد معدل الطلبات، وقواعد أمان التطبيقات. لا يستبدل OpenAI هذه الأنظمة، بل يمكنني وضع OpenAI فوقها كطبقة تحليل.
تجيب أدوات الأمان التقليدية عن سؤال مثل:
هل تطابق هذا الطلب قاعدة أمان معروفة؟
يمكن أن يساعد OpenAI في الإجابة عن السؤال التالي:
ماذا يبدو أن هذا النمط الكامل من النشاط يمثّل؟
تحويل سجلات الخادم الخام إلى معلومات استخباراتية أمنية
بدلًا من قراءة آلاف الإدخالات يدويًا من سجلات Apache أو Nginx أو PHP أو SSH أو سجلات التطبيقات، يمكنني إرسال الأجزاء المشبوهة من تلك السجلات إلى OpenAI لإجراء تحليل دفاعي.
from pathlib import Path
logfile = Path(
"/var/log/nginx/access.log"
)
with logfile.open(
"r",
encoding="utf-8",
errors="ignore"
) as f:
lines = f.readlines()
recent = lines[-1000:]
log_text = "".join(recent)
بعد ذلك يمكنني أن أطلب من OpenAI فحص النشاط.
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
instructions="""
أنت تساعد في المراقبة الدفاعية
للأمن السيبراني.
حلّل سجل وصول HTTP المقدم.
حدّد النشاط الذي قد يشير إلى:
هجمات سرقة بيانات الاعتماد،
فحص الثغرات الأمنية،
الاستطلاع عن WordPress،
الاستطلاع عن ملفات البيئة،
الاستطلاع عن مستودعات Git،
محاولات حقن SQL،
اجتياز المسارات،
حقن الأوامر،
وكلاء مستخدمين مشبوهين،
الاستطلاع المفرط،
الكشط،
أو أنماط طلبات غير معتادة.
لا تفترض أن عنوان IP ضار
استنادًا إلى طلب واحد فاشل.
ميّز بين حركة المرور العادية والنشاط
الذي يستحق التحقيق.
قدّم توصيات دفاعية فقط.
""",
input=log_text
)
print(response.output_text)
بدلًا من قراءة ألف إدخال في السجل بنفسي، يمكنني تلقّي ملخص للحادثة يوضح أن أحد العناوين طلب صفحات إدارة WordPress، وملف بيئة، وملف إعدادات Git، وphpMyAdmin خلال بضع ثوانٍ.
والأهم من ذلك، يمكن للنموذج أن يخبرني ما إذا كانت السجلات المقدمة تُظهر مجرد محاولات وصول أم دليلًا على نجاح الوصول.
ربط السجلات المختلفة
نادرًا ما يمتلك الخادم سجلًا أمنيًا مفيدًا واحدًا فقط. قد أفحص سجلات خادم الويب، وأخطاء PHP، وسجلات التطبيق، وسجلات مصادقة SSH، وأحداث Fail2Ban، ونشاط جدار الحماية، وأخطاء قاعدة البيانات، ومحاولات تسجيل الدخول إلى نظام إدارة المحتوى.
يمكن أن يظهر الهجوم بشكل مختلف في كل نظام.
WEB LOG:
Repeated requests to /admin/login
APPLICATION LOG:
Twenty failed administrator logins
FAIL2BAN:
IP added to jail
AUTH LOG:
SSH authentication failures
from the same address
قد يؤدي النظر إلى كل مصدر على حدة إلى إخفاء النمط الأكبر. يمكن لـ OpenAI المساعدة في ربطها.
security_event = f"""
WEB SERVER LOG
---------------
{web_log}
APPLICATION LOG
---------------
{application_log}
SSH LOG
---------------
{ssh_log}
FAIL2BAN LOG
---------------
{fail2ban_log}
"""يمكن بعد ذلك تحليل الحدث المدمج.
response = client.responses.create(
model="gpt-5",
instructions="""
تصرّف كمحلل أمني دفاعي.
اربط الأحداث عبر سجلات الخادم هذه.
حدّد ما إذا كانت الأحداث تبدو مترابطة.
أخرج ما يلي:
الملخص التنفيذي
التسلسل الزمني
عناوين IP المصدر
الخدمات المستهدفة
الطلبات المشبوهة
الطلبات الناجحة
الطلبات الفاشلة
أسلوب الهجوم المحتمل
الأدلة الداعمة للتقييم
الأدلة المناقضة للتقييم
الإجراءات الدفاعية الموصى بها
لا تدّعِ حدوث اختراق ما لم
توفّر السجلات المقدمة أدلة على ذلك.
""",
input=security_event
)
هذا التمييز مهم للغاية. فطلب /.env لا يعني أن صاحبه حصل على الملف. وإذا أعاد الخادم استجابة HTTP 403، فمن المرجح أن يكون الضابط الأمني قد منع الوصول.
اكتشاف الاستطلاعات الخاصة بـ WordPress على موقع لا يستخدم WordPress
يستخدم AlexanderMirvis.com نظام إدارة محتوى مخصصًا، لكن أدوات الفحص الآلية لا تعرف ذلك. ستظل الروبوتات تطلب مسارات WordPress مثل /wp-login.php و/wp-admin/ و/xmlrpc.php و/wp-config.php.
وهذا ينشئ إشارة أمنية مفيدة. فإذا كان الموقع لا يستخدم WordPress، فلا يوجد لدى المستخدمين الشرعيين عمليًا أي سبب لطلب مسارات الإدارة تلك.
$suspiciousPaths = [
'/wp-login.php',
'/wp-admin',
'/wp-config.php',
'/xmlrpc.php',
'/.env',
'/.git',
'/phpmyadmin'
];
$requestUri =
$_SERVER['REQUEST_URI'];
foreach ($suspiciousPaths as $path) {
if (
stripos(
$requestUri,
$path
) !== false
) {
logSecurityEvent([
'ip' =>
$_SERVER['REMOTE_ADDR'],
'path' =>
$requestUri,
'user_agent' =>
$_SERVER[
'HTTP_USER_AGENT'
] ?? '',
'timestamp' =>
time()
]);
break;
}
}
إنشاء قاعدة بيانات لأحداث الأمان
بدلاً من حظر كل زائر يطلب شيئاً مريباً فوراً، يمكنني تسجيل الحدث وفحص السلوك بمرور الوقت.
CREATE TABLE security_events (
id BIGINT UNSIGNED
AUTO_INCREMENT
PRIMARY KEY,
ip_address VARCHAR(45)
NOT NULL,
event_type VARCHAR(100)
NOT NULL,
request_uri TEXT,
user_agent TEXT,
risk_score INT
DEFAULT 0,
ai_summary TEXT,
created_at DATETIME
NOT NULL
);
يمكن لـ OpenAI بعد ذلك فحص أحداث متعددة مرتبطة بالعنوان نفسه وتحديد ما إذا كان النشاط يبدو عرضياً أو غير معتاد أو متوافقاً مع الاستطلاع الآلي.
منح أحداث الأمان درجة مخاطر
بدلاً من إعادة فقرة، يمكن لمحلل الأمن السيبراني إعادة معلومات منظمة.
{
"risk_score": 82,
"classification": "automated_reconnaissance",
"confidence": 0.91,
"indicators": [
"استطلاع WordPress",
"استطلاع ملف البيئة",
"استطلاع إعدادات Git"
],
"recommended_action": "temporary_block"
}
يمكن توجيه النموذج تحديداً إلى التحلي بالتحفظ.
response = client.responses.create(
model="gpt-5",
instructions="""
حلّل نشاط الخادم هذا
لأغراض الأمن السيبراني الدفاعية.
قيّم مستوى الخطورة من 0 إلى 100.
كن متحفظًا.
يجب أن تحصل طلبية 404 واحدة عادةً
على درجة منخفضة.
يجب أن تؤدي الطلبات المتكررة للملفات السرية
المعروفة أو الواجهات الإدارية أو مسارات
الاستغلال إلى زيادة الدرجة.
يجب إيلاء اهتمام خاص
للاستجابات الناجحة من الموارد الحساسة.
""",
input=events,
text={
"format": {
"type": "json_schema",
"name": "security_analysis",
"strict": True,
"schema": {
"type": "object",
"properties": {
"risk_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"classification": {
"type": "string"
},
"confidence": {
"type": "number"
},
"indicators": {
"type": "array",
"items": {
"type": "string"
}
},
"recommended_action": {
"type": "string"
}
},
"required": [
"risk_score",
"classification",
"confidence",
"indicators",
"recommended_action"
],
"additionalProperties": False
}
}
}
)
يسمح هذا لـ OpenAI بتغذية لوحة معلومات أمنية فعلية بدلًا من مجرد إنتاج إجابة يتعين على شخص تفسيرها يدويًا.
OpenAI وFail2Ban
لا تزال Fail2Ban أداة ممتازة للاستجابة تلقائيًا للنشاطات الضارة المتكررة. ويمكن لـ OpenAI أن يكمّلها من خلال أداء مهمة مختلفة.
LOG EVENT
|
v
DETERMINISTIC RULES
|
v
OPENAI ANALYSIS
|
v
RISK SCORE
|
v
POLICY ENGINE
|
v
FAIL2BAN OR FIREWALL
يُعدّ محرّك السياسات مهمًا للغاية. قد يوصي OpenAI بحظر مؤقت، لكن تطبيقي هو الذي يحدد ما إذا كانت تلك التوصية تستوفي قواعد التنفيذ الفعلية.
if (
analysis["risk_score"] >= 90
and event_count >= 10
):
action = "temporary_block"
elif analysis["risk_score"] >= 60:
action = "watch"
else:
action = "log"
يوفّر النموذج التفسير. ويوفّر برنامجي التنفيذ.
إجراءات جدار الحماية الآلية الآمنة
إذا أتمتُّ إجراءات مؤقتة لجدار الحماية، فلا أسمح للنموذج بإنشاء أوامر shell عشوائية. بدلًا من ذلك، يستدعي التطبيق دالة أمان محددة مسبقًا.
import subprocess
import ipaddress
def block_ip(ip):
address =
ipaddress.ip_address(ip)
subprocess.run(
[
"/usr/local/sbin/security-block",
str(address)
],
check=True
)
لن أفعل أبدًا شيئًا من قبيل:
os.system(ai_generated_command)
إن السماح للنص الذي ينشئه النموذج بالتنفيذ مباشرةً بامتيازات المستخدم root سيؤدي إلى مشكلة أمنية واضحة.
التصميم الآمن هو:
OpenAI recommends:
temporary_block
Application translates that into:
a predefined and validated
firewall operation
اكتشاف هجمات بيانات اعتماد SSH
تُعدّ سجلات مصادقة SSH مصدرًا مفيدًا آخر للمعلومات.
Failed password for root from 203.0.113.91
Failed password for admin from 203.0.113.91
Invalid user oracle from 203.0.113.91
Invalid user postgres from 203.0.113.91
Invalid user ubuntu from 203.0.113.91يمكن لأداة أمنية تقليدية أن تعدّ المحاولات. ويمكن لـ OpenAI المساعدة في شرح النمط.
فعلى سبيل المثال، قد تحدد أن المصدر يحاول استخدام عدة أسماء مستخدمين إدارية شائعة، وأن التسلسل يتوافق مع تعداد أسماء مستخدمي SSH الآلي أو تخمين بيانات الاعتماد.
وينبغي لها أيضًا أن توضح بجلاء عندما لا يظهر أي توثيق ناجح في الأدلة المقدمة.
تحليل أخطاء PHP بحثًا عن مشكلات أمنية
لا تنشأ كل مشكلة أمنية عن مهاجم. فأحيانًا يكشف التطبيق نفسه معلومات لا ينبغي كشفها.
PHP Warning:
file_get_contents(
/home/user/private/config.php
):
Permission denied
PHP Fatal error:
Uncaught PDOException:
SQLSTATE[HY000] [1045]
Access denied for user...
يمكن لنظام OpenAI لتحليل السجلات تحديد المشكلات ذات الصلة بالأمان، مثل كشف مسارات نظام الملفات، وظهور تفاصيل قاعدة البيانات في السجلات، وتسجيل بيانات الاعتماد عن طريق الخطأ، وظهور تتبعات المكدس في بيئة الإنتاج، ومعالجة عمليات الرفع بطريقة غير آمنة، وتكرار حالات فشل التوثيق، ومشكلات الصلاحيات.
response = client.responses.create(
model="gpt-5",
instructions="""
Review these PHP production logs.
Look for security-relevant problems.
Identify:
filesystem path disclosure,
database information disclosure,
credentials accidentally logged,
stack traces,
unsafe upload handling,
authentication problems,
SQL errors,
permission failures,
and repeated application errors.
Prioritize findings by severity.
""",
input=php_log
)
اكتشاف محاولات فحص حقن SQL
تحتوي سجلات HTTP أحيانًا على عناوين URL مريبة تحاول التلاعب باستعلامات قاعدة البيانات.
/products.php?id=4%27%20OR%201=1--
أو:
/search?q=%27%20UNION%20SELECT
الجزء المهم ليس مجرد التعرف على أن الطلب يشبه حقن SQL. بل أريد من نظامي أن يحقق فيما حدث حول ذلك الطلب.
تشمل الأسئلة المفيدة ما إذا كان الطلب قد حُظر، وما إذا كانت PHP قد أنتجت خطأً في قاعدة البيانات، وما إذا كان حجم الاستجابة قد تغيّر بشكل غير متوقع، وما إذا كان الطلب قد تلقى استجابة ناجحة، وما إذا كان المصدر نفسه قد حاول استخدام حمولات متعددة، وما إذا حدثت أخطاء مرتبطة بقاعدة البيانات في الوقت نفسه تقريبًا.
يُنشئ هذا تحليلًا أمنيًا مفيدًا بدلًا من تنبيه مبسّط يقول إنه تم اكتشاف حقن SQL.
اكتشاف محاولات استكشاف الملفات السرية واجتياز المسارات
تبحث أدوات الفحص كثيرًا عن ملفات لا ينبغي أن تكون متاحة للعامة مطلقًا.
../../../../etc/passwd
/.env
/.git/config
/config.php
/backup.zip
/database.sql
/.aws/credentials
بدلًا من إنشاء خمسين تحذيرًا منفردًا، يمكن لنظام الأمان لديّ تجميع الطلبات المرتبطة في حادثة واحدة.
INCIDENT #2841
Source:
185.234.219.32
Duration:
47 seconds
Requests:
63
Categories:
Secret-file discovery
Repository probing
Configuration discovery
Backup-file enumeration
Successful sensitive responses:
None
Risk:
High
Automatic action:
IP temporarily blocked
إنشاء تقارير حوادث الأمن السيبراني تلقائيًا
تُعد OpenAI مفيدة جدًا أيضًا لتحويل الأدلة التقنية الخام إلى تقرير حادثة مقروء.
يمكن أن يتضمن التقرير النهائي ملخص الحادثة، ووقت الاكتشاف، والمضيف المتأثر، وعناوين المصدر، والخط الزمني، والتقنيات المرصودة، وضوابط الأمان التي تم تشغيلها، والأدلة على النشاط الناجح أو الفاشل، وإجراءات الاحتواء، والمتابعة الموصى بها.
prompt = f"""
Prepare a technical cybersecurity incident report
based only on the evidence below.
Do not invent events.
Explicitly distinguish:
attempted access,
blocked access,
successful access,
and unknown outcomes.
LOG DATA:
{incident_logs}
"""
report = client.responses.create(
model="gpt-5",
input=prompt
)
يمكن بعد ذلك تحويل التحليل الناتج إلى مستند Word أو PDF باستخدام نظام إعداد التقارير نفسه المستخدم لتحليل المستندات الطبية أو القانونية.
حدث أمني
|
v
جمع السجلات
|
v
تحليل OPENAI
|
v
الخط الزمني للحادثة
|
v
تقرير WORD أو PDF
مراقبة نظام إدارة المحتوى المخصص لديّ
نظرًا إلى أن AlexanderMirvis.com يستخدم نظام إدارة محتوى مخصصًا، يمكنني تسجيل الأحداث الأمنية الخاصة بالتطبيق التي لن تظهر بوضوح أبدًا في سجل وصول خادم ويب عادي.
securityLog(
'ADMIN_LOGIN_FAILURE',
[
'username' => $username,
'ip' =>
$_SERVER['REMOTE_ADDR']
]
);
قد تشمل الأحداث الأمنية الأخرى:
- ADMIN_LOGIN_SUCCESS
- ADMIN_LOGIN_FAILURE
- PASSWORD_CHANGED
- USER_CREATED
- USER_DELETED
- FILE_UPLOADED
- EXECUTABLE_UPLOAD_BLOCKED
- PAGE_DELETED
- DATABASE_EXPORT
- API_KEY_SETTING_CHANGED
- PERMISSION_CHANGED
- HONEYPOT_TRIGGERED
يوفر هذا لـ OpenAI معلومات أفضل بكثير عمّا يحدث داخل التطبيق.
على سبيل المثال، تخيل أن النظام يرى:
03:02 ADMIN LOGIN SUCCESS
03:03 API KEY CHANGED
03:04 NEW ADMIN CREATED
03:05 87 POSTS DELETED
03:06 DATABASE EXPORT
قد تكون كل عملية فردية قد أُجيزت تقنيًا بواسطة الحساب، لكن التسلسل غير معتاد للغاية. ويمكن لمحلل سياقي التعرّف على هذا النمط ورفع مستوى المخاطر.
خطوط الأساس السلوكية واكتشاف الحالات الشاذة
استخدام آخر مثير للاهتمام هو مقارنة السلوك الحالي بالنشاط الطبيعي.
فعلى سبيل المثال، قد يعرف نظامي أن نشاط المسؤول المعتاد يتضمن عادةً تعديلات عرضية على الصفحات ونشر المقالات خلال الساعات العادية.
ثم يرى:
4:16 AM
Administrator authenticated
Previously unseen IP address
312 pages modified
14 PHP files uploaded
Database export initiated
حتى إذا لم يتم تشغيل أي توقيع تقليدي، فإن هذا المزيج يستحق اهتمامًا فوريًا.
يمكن لـ OpenAI توضيح سبب اختلاف السلوك عن الخط الأساسي المتوقع وتقديم ملخص للحادثة للمراجعة.
مراقبة سلامة الملفات
يمكن أن تصبح مراقبة سلامة الملفات أيضًا جزءًا من النظام.
inotifywait \
-m \
-r \
/home/site/public_html \
-e modify,create,delete,move
إذا أبلغ الخادم فجأة بما يلي:
CREATE shell.php
CREATE wp-admin.php
MODIFY index.php
CREATE .htaccess
DELETE security.php
فإن هذا المزيج يثير القلق بوضوح أكثر من تحديث عادي للمحتوى.
يمكن لمحلل الأمان إنشاء تحذير فورًا يوضح ظهور ملفات PHP غير متوقعة في الدليل العام، بالتزامن مع تعديل ملفات تطبيق مهمة.
عمليات البحث الأمنية باللغة الطبيعية
بمجرد تخزين الأحداث الأمنية، يمكنني استخدام OpenAI لتقديم تقارير باللغة الطبيعية.
بدلًا من إنشاء استعلامات SQL يدويًا، يمكنني أن أسأل:
أرِني برامج الفحص من الشهر الماضي التي حاولت الوصول إلى مسارات WordPress وملفات .env معًا.
أو:
هل كانت هناك أي طلبات ناجحة من عناوين IP حُظرت لاحقًا؟
أو:
ما أنماط الهجوم الأكثر شيوعًا هذا الأسبوع؟
يجب ألا يحصل الذكاء الاصطناعي على وصول غير مقيّد إلى SQL. بدلًا من ذلك، يمكنه استدعاء وظيفة تقارير خاضعة للتحكم مثل:
search_security_events
باستخدام معاملات منظَّمة:
{
"start_date": "2026-08-29",
"end_date": "2026-08-30",
"minimum_risk": 70,
"event_types": [
"reconnaissance",
"credential_attack"
]
}
ينشئ تطبيقي استعلام SQL وينفذه. ولا يحصل OpenAI مطلقًا على إذن لتنفيذ SQL عشوائي.
إحاطات أمنية يومية تلقائية
يمكنني أيضًا أتمتة ملخص يومي للأمن السيبراني.
0 7 * * * /usr/bin/python3 /opt/security/daily-report.pyيمكن للنص البرمجي جمع النشاط الأمني لليوم السابق وطلب من OpenAI تحديد الأحداث التي تستحق الاهتمام فعليًا.
تقرير أمان الخادم اليومي
الطلبات التي تم تحليلها:
184,293
المصادر عالية الخطورة:
17
تم حظرها تلقائيًا:
12
النشاط الأكثر شيوعًا:
فحص ثغرات WordPress
ثاني أكثر الأنشطة شيوعًا:
التحري عن ملفات البيئة
هجمات بيانات الاعتماد:
3
أدلة على اختراق ناجح:
لم يتم اكتشاف أي منها في بيانات القياس المقدمة
حدث مهم:
قام أحد العناوين بفحص العديد من
المسارات الإدارية ثم حاول لاحقًا
المصادقة عبر SSH.
هذا أكثر فائدة بكثير من قراءة آلاف الأحداث الأمنية الفردية يدويًا.
تقليل إرهاق التنبيهات الأمنية
تتمثل إحدى أكبر مشكلات مراقبة الأمان في إرهاق التنبيهات. فإذا أدى كل طلب فاشل إلى إصدار تحذير عاجل، فسيتوقف المسؤول في النهاية عن الانتباه.
يمكن للفرز بمساعدة الذكاء الاصطناعي أن يساعد في فصل الأحداث إلى فئات مثل المعلوماتي، والمنخفض، والمتوسط، والعالي، والحرج.
if analysis["risk_score"] >= 90:
send_critical_alert()
elif analysis["risk_score"] >= 70:
add_to_security_dashboard()
else:
archive_event()
يتيح ذلك تخصيص إشعارات البريد الإلكتروني أو الرسائل النصية أو الإشعارات الفورية للأحداث التي تستحق فعلًا اهتمامًا فوريًا.
لا تمنح الذكاء الاصطناعي مطلقًا صلاحية الجذر
تتمثل إحدى أهم قواعد الأمن السيبراني في هذه البنية بأكملها في أنه ينبغي السماح للنموذج بتحليل قدر أكبر بكثير مما يُسمح له بالتحكم فيه.
لن أخبر نظام ذكاء اصطناعي مطلقًا:
هذه سجلات خادمي. اكتشف ما حدث ونفّذ أي أوامر Linux تراها ضرورية.
بل أتيح وظائف محدودة مثل:
- block_ip
- unblock_ip
- query_ip_history
- read_recent_logs
- disable_user_session
- invalidate_web_session
- quarantine_uploaded_file
- create_security_alert
قد يطلب النموذج:
{
"ip": "185.234.219.32",
"duration": 3600
}
يتحقق تطبيقي من ذلك.
import ipaddress
def request_block(ip, duration):
address =
ipaddress.ip_address(ip)
if duration > 86400:
raise ValueError(
"الحد الأقصى للحظر التلقائي هو 24 ساعة."
)
create_firewall_block(
str(address),
duration
)
لا يحصل الذكاء الاصطناعي مطلقًا على واجهة صدفة root غير مقيّدة.
تحويل الصوت إلى نص باستخدام OpenAI
يمكن لـ OpenAI أيضًا معالجة الكلام، مما ينشئ فئة رئيسية أخرى من الأتمتة.
فعلى سبيل المثال، يمكن نسخ رسالة بريد صوتي مسجلة تلقائيًا إلى نص.
from openai import OpenAI
client = OpenAI()
with open("caller.wav", "rb") as audio:
transcription =
client.audio.transcriptions.create(
model="gpt-4o-transcribe",
file=audio
)
print(transcription.text)
ثم يمكن تحليل ذلك النص المنسوخ.
response = client.responses.create(
model="gpt-5",
input=f"""
حلّل هذه الرسالة الهاتفية.
استخرج:
نية المتصل،
الخدمة المطلوبة،
درجة الاستعجال،
الأسئلة التي لم تتم الإجابة عنها،
والمتابعة الموصى بها.
النص المنسوخ:
{transcription.text}
"""
)
print(response.output_text)
أصبحت رسالة البريد الصوتي الآن معلومات أعمال منظمة بدلًا من مجرد تسجيل صوتي موجود في صندوق البريد.
تحويل النص إلى كلام
يمكن أن تعمل العملية أيضًا في الاتجاه المعاكس. إذ يمكن لـ OpenAI تحويل النص إلى صوت منطوق.
from openai import OpenAI
client = OpenAI()
with client.audio.speech.with_streaming_response.create(
model="gpt-4o-mini-tts",
voice="cedar",
input="""
شكرًا لاتصالك.
أخبرني بنوع المستند
الذي تحتاج إلى توثيقه.
"""
) as response:
response.stream_to_file(
"response.mp3"
)
ينشئ ذلك البنية الأساسية لمساعد هاتفي يعمل بالذكاء الاصطناعي:
المتصل يتحدث
|
v
تحويل الكلام إلى نص
|
v
استدلال OpenAI
|
v
استجابة نصية
|
v
تحويل النص إلى كلام
|
v
المتصل يسمع الاستجابة
دمج OpenAI مع FreePBX
يصبح هذا مثيرًا للاهتمام بشكل خاص عندما يتم توصيل OpenAI بـ Asterisk أو FreePBX. يمكنني استخدام البنية التحتية نفسها لمساعد خدمة العملاء، أو نظام هاتفي خارج ساعات العمل، أو خط دعم داخلي، أو مصيدة عسل واردة لمكافحة الاحتيال أسميها مازحًا Troll Bot.
تبدو البنية العامة على النحو التالي:
مكالمة واردة
|
v
FREEPBX / ASTERISK
|
v
وجهة مخصصة
|
v
تسجيل المتصل
|
v
تحويل OpenAI للكلام إلى نص
|
v
استجابة OpenAI
|
v
كلام OpenAI
|
v
يُشغّل Asterisk الاستجابة
قد يبدو سياق Asterisk مبسطًا على النحو التالي:
[ai-trollbot]
exten => s,1,Answer()
same => n,Playback(custom/hello-ai)
same => n,Record(
/tmp/caller.wav,
3,
10
)
same => n,System(
/usr/bin/python3
/opt/trollbot/respond.py
/tmp/caller.wav
)
same => n,Playback(
/tmp/ai-response
)
same => n,Hangup()
يمكن لبرنامج Python تحويل كلام المتصل إلى نص.
import sys
from openai import OpenAI
client = OpenAI()
audio_file = sys.argv[1]
with open(audio_file, "rb") as f:
transcript =
client.audio.transcriptions.create(
model="gpt-4o-transcribe",
file=f
)
caller_text = transcript.text
بعد ذلك، يمكن لـ OpenAI إنشاء استجابة.
reply = client.responses.create(
model="gpt-5",
instructions="""
أنت نظام آلي
لمكافحة الاحتيال يعمل كطُعم
ويجيب على خط هاتفي وارد.
لا تطلب كلمات المرور،
أو المعلومات المصرفية،
أو أرقام الضمان الاجتماعي،
أو رموز المصادقة،
أو أي معلومات حساسة أخرى.
لا تهدد المتصل مطلقًا.
أبقِ المحادثة آمنة وغير ضارة.
كن مرتبكًا قليلًا ومرحًا باعتدال.
اجعل الردود قصيرة.
""",
input=caller_text
)
answer = reply.output_text
يمكن بعد ذلك تحويل الرد إلى كلام.
with client.audio.speech.with_streaming_response.create(
model="gpt-4o-mini-tts",
voice="cedar",
input=answer
) as speech:
speech.stream_to_file(
"/tmp/ai-response.mp3"
)
يمكن بعد ذلك تحويل الصوت إلى ملف WAV ملائم للاتصالات الهاتفية.
ffmpeg \
-y \
-i /tmp/ai-response.mp3 \
-ar 8000 \
-ac 1 \
/tmp/ai-response.wav
روبوت المقالب
روبوت المقالب هو في الحقيقة تجربة لربط البنية التحتية للاتصالات الهاتفية بنظام ذكاء اصطناعي للاستدلال. أستخدم هذا المفهوم فقط للمكالمات الواردة، ومصائد مكافحة الاحتيال، والاختبارات الداخلية، والأغراض القانونية الأخرى، وليس للمكالمات الصادرة غير المرغوب فيها أو المزعجة.
يمكن نظريًا أن تؤدي مكالمة احتيالية إلى محادثة مثل هذه:
CALLER:
مرحبًا سيدي، معك الدعم الفني لشركة Microsoft.
BOT:
رائع. أي Microsoft تقصد؟
لدي عدة نوافذ في المنزل،
وإحداها تعلق عندما تمطر.
CALLER:
لا يا سيدي، أقصد نظام Windows في حاسوبك.
BOT:
آه.
هذا أكثر منطقية بكثير.
نافذة المطبخ لا تحتوي
على لوحة مفاتيح.
النكتة مسلية، لكن الهندسة التي تقف وراءها أكثر إثارة للاهتمام بكثير. فقد أصبح Asterisk فعليًا واجهة هاتفية لنظام ذكاء اصطناعي للاستدلال.
الصوت الآني وSIP
يعمل النهج السابق عبر تسجيل الصوت، وتحويله إلى نص، وإنشاء رد، ثم تشغيل ملف صوتي جديد. وقد يؤدي ذلك إلى زمن استجابة ملحوظ.
يستخدم التصميم الأكثر تطورًا اتصالات صوتية آنية.
مكالمة SIP
|
v
FREEPBX
|
v
جلسة صوتية آنية
|
v
OPENAI
|
v
استجابة منطوقة مباشرة
يمكن للنظام الآني اكتشاف وقت بدء شخص ما الكلام وتوقفه، والاستجابة بزمن تأخير أقل بكثير، وربما السماح بالمقاطعة أثناء تحدث الذكاء الاصطناعي.
يوفر هذا تجربة هاتفية أكثر طبيعية بكثير من تسجيل مقاطع صوتية كاملة بشكل متكرر.
شخصيات ذكاء اصطناعي مختلفة للتحويلات المختلفة
ومن الميزات الأخرى الممتعة والمفيدة منح تحويلات هاتفية مختلفة تعليمات مختلفة للذكاء الاصطناعي.
التحويلة 700
موظف استقبال محترف
التحويلة 701
مساعد خارج أوقات الدوام
التحويلة 702
مصيدة مكالمات البريد المزعج
التحويلة 703
دعم فني داخلي
التحويلة 704
مساعد الأسئلة الشائعة لكاتب العدل
يمكن لجميع هذه التحويلات استخدام البنية التحتية نفسها لـ OpenAI. ولا يلزم تغيير سوى تعليماتها والوظائف المسموح بها.
قد يُسمح لموظف الاستقبال بالتحقق من ساعات العمل وتوافر المواعيد، بينما لا تحصل مصيدة مكافحة الاحتيال على أي وصول إلى وظائف العمل إطلاقًا.
من السهل إنشاء شخصيات الذكاء الاصطناعي. أما الصلاحيات فتتطلب تفكيرًا أكثر حرصًا بكثير.
استخدام OpenAI كمصنِّف قبل استخدامه ككاتب
أحد الاستخدامات التي يغفل عنها كثيرون للذكاء الاصطناعي هو التصنيف.
لنفترض أن أحد العملاء كتب:
لدي شهادة ميلادي، وأنا أنتقل إلى الخارج، وقد أخبروني بأنها تحتاج إلى تصديق.
قبل إنشاء أي رد، يستطيع OpenAI تصنيف الطلب.
{
"intent": "apostille",
"confidence": 0.94,
"urgency": "normal",
"requires_human": false
}
يعرف التطبيق الآن أي سير عمل ينبغي أن يتولى معالجة الطلب.
وهذا يعني أن العملاء لا يحتاجون إلى فهم البنية الداخلية لموقعي الإلكتروني. يمكنهم ببساطة شرح ما يحتاجون إليه بلغة عادية.
بناء مسارات للذكاء الاصطناعي بدلًا من مطالبات ضخمة
هناك تقنية أخرى مفيدة تتمثل في تقسيم العمل المعقد إلى مراحل متعددة للذكاء الاصطناعي بدلًا من استخدام مطالبة واحدة ضخمة.
قد يبدو مسار تحليل المستندات على النحو التالي:
تصنيف المستند
|
v
استخراج الأشخاص والتواريخ
|
v
بناء التسلسل الزمني
|
v
تحديد التناقضات
|
v
إنشاء أسئلة البحث
|
v
إنشاء التقرير النهائي
يمكن لسير عمل النشر أن يعمل بطريقة مماثلة:
صياغة المقالة
|
v
تحليل القواعد النحوية
|
v
تحليل تحسين محركات البحث
|
v
تحديد الادعاءات الواقعية
|
v
إنشاء البيانات الوصفية
|
v
اقتراحات الروابط الداخلية
|
v
مراجعة بشرية
|
v
نشر
يجعل تقسيم العمل إلى مراحل منفصلة النظام أسهل في الاختبار وتصحيح الأخطاء والتحسين.
افصل بين أحكام الذكاء الاصطناعي وحقيقة قاعدة البيانات
هذا أحد أهم الدروس المستفادة عند بناء تطبيقات موثوقة باستخدام OpenAI.
يُعد الذكاء الاصطناعي ممتازًا في الإجابة عن أسئلة مثل:
- ماذا يُرجح أن يقصد هذا الشخص؟
- إلى أي فئة ينتمي هذا؟
- ما المعلومات التي يبدو أنها مفقودة؟
- كيف ينبغي شرح ذلك؟
- أي جزء من هذه السجلات يبدو ذا صلة؟
- ما الذي ينبغي أن أتحقق منه بعد ذلك؟
- كيف يمكن تلخيص هذه المعلومات؟
لا ينبغي التعامل مع الذكاء الاصطناعي باعتباره المصدر الموثوق للمعلومات المتعلقة بالمعاملات، مثل:
- كم دفع هذا العميل؟
- متى يكون الموعد؟
- ما سعر الخدمة الحالي؟
- هل دُفعت الفاتورة فعلًا؟
- ما الأذونات التي يمتلكها هذا المستخدم حاليًا؟
توجد إجابات هذه الأسئلة في قاعدة البيانات.
يفسر النموذج السؤال. أما تطبيقي فيسترجع الحقيقة.
الخصوصية والأمان جزء من البنية
يجب تصميم أي نظام يحلل السجلات الطبية أو المستندات القانونية أو سجلات الأعمال أو سجلات الأمان مع مراعاة الخصوصية منذ البداية.
لا أحتاج إلى إرسال ملف تعريف مستخدم كامل عندما يكون مستند واحد فقط ذا صلة. ينبغي حذف التحميلات المؤقتة عندما لا تعود مطلوبة. يجب ألا تظهر المستندات الحساسة في سجلات التصحيح العادية. ينبغي أن تظل مفاتيح واجهة برمجة التطبيقات على الخادم. ويجب أن تظل مجموعات المعرفة العامة والخاصة منفصلة.
ينطبق المبدأ نفسه على الأمن السيبراني. قد تتمكن OpenAI من تحليل سجلات الخادم، لكن هذا لا يعني أن النموذج ينبغي أن يتلقى تلقائيًا كل بيانات الاعتماد أو رموز الجلسات أو المفاتيح السرية أو قيم الإعدادات الموجودة في تلك السجلات.
قبل إرسال السجلات للتحليل، يمكن تنقيح البيانات الحساسة أو توحيدها، حيثما كان ذلك عمليًا.
ما الذي تحوّل OpenAI مواقعي الإلكترونية إليه فعليًا
بمجرد دمج هذه الأنظمة، تتوقف OpenAI عن كونها مجرد حداثة.
يمكن أن يصبح AlexanderMirvis.com منصة للنشر والبحث والأمن السيبراني بمساعدة الذكاء الاصطناعي. يمكن إنشاء المقالات ومراجعتها وتلخيصها وترجمتها وتقييمها وإضافة البيانات الوصفية إليها. ويمكن أن تتحول المستندات المحمّلة إلى جداول زمنية وتقارير. ويمكن لنظام إدارة المحتوى المخصص مراقبة أحداثه الأمنية بنفسه. كما يمكن تحليل سجلات الخادم تلقائيًا، وتلخيص الأنشطة المشبوهة في صورة حوادث أمنية.
يمكن أن يصبح BrooklynNotaryNinjas.com منصة أعمال بمساعدة الذكاء الاصطناعي. يستطيع روبوت الدردشة الإجابة عن الأسئلة باستخدام معرفة الشركة الخاضعة للتحكم، واسترداد المعلومات المباشرة من قواعد البيانات، وتصنيف طلبات العملاء، وشرح الإجراءات، والمساعدة في المستندات المحمّلة، وتوجيه الأشخاص نحو الخدمة الصحيحة.
ويمكن للبنية التحتية نفسها الخاصة بـ OpenAI أن تمتد إلى FreePBX. يتحول الكلام الهاتفي إلى نص، ويحدد النموذج ما يعنيه المتصل، ويمكن للوظائف المعتمدة استرداد المعلومات، ثم يمكن نطق الإجابة الناتجة للمتصل.
وفي الوقت نفسه، يمكن لنظام الأمن السيبراني فحص ما يحدث خلف الكواليس باستمرار. إذ يمكن أن تسهم سجلات خوادم الويب، وأحداث نظام إدارة المحتوى، ونشاط SSH، وإجراءات جدار الحماية، وأخطاء التطبيقات، وتغييرات الملفات، جميعًا في تكوين صورة أشمل عن أمن الخادم.
والدرس الأهم هو أن OpenAI لا ينبغي أن تتحكم في كل شيء.
تفسّر OpenAI. ويقرّر تطبيقي.
تستدلّ OpenAI. وتظلّ قاعدة بياناتي هي المرجع المعتمد.
تقترح OpenAI إجراءات. ويقرّر خادمي ما إذا كان مسموحًا بتنفيذ تلك الإجراءات.
تحلّل OpenAI الأحداث الأمنية. وتقرّر سياستي الأمنية ما إذا كان ينبغي حظر شيء ما.
تنشئ OpenAI المحتوى. ويقرّر نظام إدارة المحتوى لديّ ما سيتم نشره.
وهنا تصبح واجهة OpenAI البرمجية قوية حقًا.
فهي ليست مجرد ChatGPT موضوعًا داخل موقع إلكتروني.
بل تصبح طبقة استدلال تجلس بين اللغة البشرية والمستندات وقواعد البيانات والمواقع الإلكترونية وأنظمة الهاتف وأدوات الأمن السيبراني والبرمجيات العادية.
وبمجرد أن بدأت أتعامل مع OpenAI بهذه الطريقة، أصبحت الإمكانات أكبر بكثير من مجرد مطالبة الذكاء الاصطناعي بكتابة شيء ما. فقد أصبحت أداة يمكنها المساعدة في تشغيل الأنظمة نفسها وتحليلها وأتمتتها وحمايتها.