За пределами 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. Вместо того чтобы каждый раз при публикации чего-либо вручную писать тег title, метаописание, список ключевых слов и поисковое описание, я могу поручить OpenAI изучить саму статью и автоматически предложить их.
Важная особенность заключается в том, что я не обязательно хочу, чтобы OpenAI отвечал мне в разговорной форме. Я хочу, чтобы моя CMS получала данные, которые можно напрямую сохранить в базе данных.
Например, я могу запросить ответ, выглядящий так:
{
"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"
]
}
Я могу запросить у API структурированный вывод вместо произвольного текста.
$pageText = strip_tags($pageHtml);
$response = openaiResponse([
'model' => 'gpt-5',
'instructions' => '
Вы — движок SEO-анализа для 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
]
]
]
]);Теперь CMS может автоматически сохранять результаты, вместо того чтобы требовать от меня вручную копировать и вставлять их.
$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-слаг, категории, ключевые слова, внутренние ссылки и даже проверить, действительно ли статья выполняет обещание, данное в её заголовке.
Моя CMS может отображать что-то вроде:
SEO SCORE: 82 / 100
Сильные стороны:
Статья ясно объясняет основную тему.
Основная тема появляется в начале.
Структура заголовков логична.
Проблемы:
Метаописание слишком общее.
Нет внутренней ссылки на связанную статью.
Два подзаголовка посвящены почти идентичному материалу.
Предлагаемый заголовок:
Как на самом деле работает удалённое онлайн-нотариальное заверение в Нью-Йорке
Автоматический анализ статей перед публикацией
Ещё один полезный приём — напрямую подключить OpenAI к рабочему процессу публикации. Вместо того чтобы помнить о необходимости нажать кнопку AI, CMS может автоматически анализировать страницу при изменении её статуса с черновика на опубликованную.
if ($oldStatus === 'draft' && $newStatus === 'published') {
$seo = analyzePageWithOpenAI($post);
saveSeoAnalysis(
$post['id'],
$seo
);
if ($seo['seo_score'] < 60) {
createAdminWarning(
'У этой статьи есть существенные проблемы с SEO.'
);
}
}
С этого момента OpenAI становится частью процесса публикации, а не чем-то отдельным от CMS.
Использование 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;
Модель может быть той же, но инструкции превращают её в совершенно другое приложение.
Я также могу добавить в свою CMS отдельные функции ИИ, такие как «Переписать», «Расширить», «Сократить», «Упростить», «Сделать техническим», «Сгенерировать FAQ», «Сгенерировать резюме», «Сгенерировать SEO-текст», «Перевести», «Проанализировать аргументы» и «Выявить утверждения, требующие проверки».
Это фактически превращает OpenAI в интеллектуальную панель редактора.
Загрузка документов для анализа с помощью ИИ
Анализ документов — это область, в которой API 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": "Проверка медицинской документации",
"summary": "Здесь будет краткое содержание",
"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(
'Анализ медицинской документации',
1
);
$section->addText(
$analysis['summary']
);
$section->addTitle(
'Хронология',
2
);
foreach ($analysis['timeline'] as $entry) {
$section->addText(
$entry['date'] . ' - ' .
$entry['provider'],
['bold' => true]
);
$section->addText(
$entry['summary']
);
}
$section->addTitle(
'Важные результаты',
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>Анализ документа</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 работать без нажатия кнопки
API OpenAI становится особенно ценным, когда подключается к автоматизации. Вместо того чтобы вручную просить модель выполнять одну и ту же задачу снова и снова, сервер может запускать эту задачу автоматически.
Например, задание Linux cron может каждую ночь анализировать недавно опубликованные статьи.
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, активность брандмауэра, ошибки базы данных и попытки входа в CMS.
В каждой системе атака может выглядеть по-разному.
ЖУРНАЛ ВЕБ-СЕРВЕРА:
Повторяющиеся запросы к /admin/login
ЖУРНАЛ ПРИЛОЖЕНИЯ:
Двадцать неудачных попыток входа администратора
FAIL2BAN:
IP добавлен в тюрьму
ЖУРНАЛ АУТЕНТИФИКАЦИИ:
Неудачные попытки аутентификации SSH
с того же адреса
Просмотр каждого источника отдельно может скрыть общую картину. OpenAI может помочь сопоставить их.
security_event = f"""
ЖУРНАЛ ВЕБ-СЕРВЕРА
---------------
{web_log}
ЖУРНАЛ ПРИЛОЖЕНИЯ
---------------
{application_log}
ЖУРНАЛ SSH
---------------
{ssh_log}
ЖУРНАЛ FAIL2BAN
---------------
{fail2ban_log}
"""После этого объединённое событие можно проанализировать.
response = client.responses.create(
model="gpt-5",
instructions="""
Выступай в роли аналитика по защитной безопасности.
Сопоставь события в этих серверных журналах.
Определи, связаны ли события между собой.
Подготовь:
Резюме для руководства
Хронология
Исходные IP-адреса
Целевые службы
Подозрительные запросы
Успешные запросы
Неудачные запросы
Возможная техника атаки
Доказательства в поддержку оценки
Доказательства против оценки
Рекомендуемые меры защиты
Никогда не утверждай, что произошла компрометация, если
предоставленные журналы не содержат соответствующих доказательств.
""",
input=security_event
)
Это различие чрезвычайно важно. Запрос к /.env не означает, что запрашивающий получил этот файл. Если сервер вернул HTTP 403, скорее всего, средство защиты предотвратило доступ.
Обнаружение запросов к WordPress на сайте, не использующем WordPress
На AlexanderMirvis.com используется пользовательская CMS, но автоматические сканеры об этом не знают. Боты всё равно будут запрашивать пути 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 probing",
"Environment file probing",
"Git configuration probing"
],
"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 может дополнить его, выполняя другую задачу.
СОБЫТИЕ В ЖУРНАЛЕ
|
v
ДЕТЕРМИНИРОВАННЫЕ ПРАВИЛА
|
v
АНАЛИЗ OPENAI
|
v
ОЦЕНКА РИСКА
|
v
МОДУЛЬ ПОЛИТИК
|
v
FAIL2BAN ИЛИ БРАНДМАУЭР
Модуль политик чрезвычайно важен. OpenAI может рекомендовать временную блокировку, но моё приложение определяет, соответствует ли эта рекомендация фактическим правилам применения мер.
if (
analysis["risk_score"] >= 90
and event_count >= 10
):
action = "temporary_block"
elif analysis["risk_score"] >= 60:
action = "watch"
else:
action = "log"
Модель предоставляет интерпретацию. Моё программное обеспечение обеспечивает применение мер.
Безопасные автоматизированные действия брандмауэра
Если я автоматизирую временные действия брандмауэра, я не позволяю модели создавать произвольные команды оболочки. Вместо этого приложение вызывает предопределённую функцию безопасности.
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 рекомендует:
временная блокировка
Приложение преобразует это в:
предопределённую и проверенную
операцию брандмауэра
Обнаружение атак на учётные данные 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
Вместо создания пятидесяти отдельных предупреждений моя система безопасности может объединять связанные запросы в один инцидент.
ИНЦИДЕНТ №2841
Источник:
185.234.219.32
Продолжительность:
47 секунд
Запросы:
63
Категории:
Обнаружение секретных файлов
Проверка репозитория
Обнаружение конфигурации
Перебор файлов резервных копий
Успешные ответы с конфиденциальными данными:
Нет
Риск:
Высокий
Автоматическое действие:
IP-адрес временно заблокирован
Автоматическое создание отчётов об инцидентах кибербезопасности
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
Наблюдение за моей собственной CMS
Поскольку AlexanderMirvis.com использует собственную CMS, я могу регистрировать специфичные для приложения события безопасности, которые никогда не отображались бы явно в обычном журнале доступа веб-сервера.
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 УСПЕШНЫЙ ВХОД АДМИНИСТРАТОРА
03:03 КЛЮЧ API ИЗМЕНЁН
03:04 СОЗДАН НОВЫЙ АДМИНИСТРАТОР
03:05 УДАЛЕНО 87 ПУБЛИКАЦИЙ
03:06 ЭКСПОРТ БАЗЫ ДАННЫХ
Каждая отдельная операция технически могла быть разрешена этой учётной записью, но последовательность событий весьма необычна. Контекстный анализатор может распознать эту закономерность и повысить уровень риска.
Поведенческие базовые показатели и обнаружение аномалий
Ещё один интересный вариант использования — сравнение текущего поведения с обычной активностью.
Например, моя система может знать, что обычная активность администратора, как правило, включает периодическое редактирование страниц и публикацию статей в стандартные рабочие часы.
Затем она видит:
4:16 AM
Аутентификация администратора
IP-адрес, который ранее не использовался
Изменено 312 страниц
Загружено 14 PHP-файлов
Инициирован экспорт базы данных
Даже если ни одна традиционная сигнатура не сработала, такое сочетание событий требует немедленного внимания.
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()
Это позволяет использовать уведомления по электронной почте, SMS или push-уведомления только для событий, действительно требующих немедленного внимания.
Никогда не предоставляйте ИИ доступ с правами root
Одно из важнейших правил кибербезопасности во всей этой архитектуре заключается в том, что модели следует разрешать анализировать гораздо больше, чем ей разрешено контролировать.
Я бы никогда не сказал системе ИИ:
Вот журналы моего сервера. Выясни, что произошло, и выполни любые команды 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(
"Maximum automatic block is 24 hours."
)
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"""
Analyze this telephone message.
Extract:
caller intent,
requested service,
urgency,
unanswered questions,
and recommended follow-up.
Transcript:
{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="""
Thank you for calling.
Tell me what kind of document
you need notarized.
"""
) 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="""
Вы — автоматизированный анти-мошеннический
honeypot, отвечающий на входящую
телефонную линию.
Никогда не запрашивайте пароли,
банковскую информацию,
номера социального страхования,
коды аутентификации
или другую конфиденциальную информацию.
Никогда не угрожайте звонящему.
Поддерживайте разговор безобидным.
Будьте слегка растерянными и умеренно юмористичными.
Делайте ответы короткими.
""",
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
Бот-тролль
Бот-тролль на самом деле представляет собой эксперимент по подключению телекоммуникационной инфраструктуры к системе искусственного интеллекта, способной рассуждать. Я использую эту концепцию только для входящих звонков, анти-мошеннических honeypot, внутреннего тестирования и других законных целей, а не для нежелательных или преследующих исходящих звонков.
Теоретически мошеннический звонок мог бы привести к такому разговору:
ЗВОНИВШИЙ:
Здравствуйте, сэр, это служба технической поддержки Microsoft.
БОТ:
Замечательно. Какой именно Microsoft?
У меня в доме несколько окон,
и одно заедает, когда идёт дождь.
ЗВОНИВШИЙ:
Нет, сэр, Windows на вашем компьютере.
БОТ:
А.
Так гораздо понятнее.
На кухонном окне нет
клавиатуры.
Шутка забавная, но инженерная часть гораздо интереснее. Asterisk фактически превратился в телефонный интерфейс к системе искусственного интеллекта, способной рассуждать.
Голос в реальном времени и SIP
Предыдущий подход работает следующим образом: запись, расшифровка, генерация ответа и воспроизведение нового аудиофайла. Это может привести к заметной задержке.
Более сложная конструкция использует аудиосвязь в реальном времени.
SIP CALL
|
v
FREEPBX
|
v
REALTIME VOICE SESSION
|
v
OPENAI
|
v
LIVE SPOKEN RESPONSE
Система реального времени может определять, когда человек начинает и прекращает говорить, отвечать с гораздо меньшей задержкой и потенциально позволять перебивать ИИ во время его речи.
Это обеспечивает гораздо более естественное телефонное взаимодействие, чем многократная запись полностью завершённых аудиофрагментов.
Разные личности ИИ для разных добавочных номеров
Ещё одна интересная и полезная возможность — назначить разным телефонным добавочным номерам разные инструкции для ИИ.
Extension 700
Professional receptionist
Extension 701
After-hours assistant
Extension 702
Spam-call honeypot
Extension 703
Internal technical support
Extension 704
Notary FAQ assistant
Все эти добавочные номера могут использовать одну и ту же инфраструктуру OpenAI. Изменить нужно только их инструкции и разрешённые функции.
Ресепшионисту можно разрешить проверять часы работы и доступность записи, тогда как антискам-ловушка вообще не получит доступа к бизнес-функциям.
Создавать личности ИИ легко. Разрешения требуют гораздо более тщательного обдумывания.
Использование OpenAI в качестве классификатора, а не только автора
Одна из недооценённых возможностей искусственного интеллекта — классификация.
Предположим, клиент пишет:
У меня есть свидетельство о рождении, я переезжаю за границу, и мне сказали, что его нужно легализовать.
До генерации какого-либо ответа OpenAI может классифицировать запрос.
{
"intent": "apostille",
"confidence": 0.94,
"urgency": "normal",
"requires_human": false
}
Теперь приложение знает, какой рабочий процесс должен обработать запрос.
Это означает, что клиентам не нужно понимать внутреннюю структуру моего веб-сайта. Они могут просто объяснить обычными словами, что им нужно.
Создание конвейеров ИИ вместо гигантских промптов
Еще один полезный прием — разбивать сложную работу на несколько этапов с использованием ИИ вместо одного огромного промпта.
Конвейер анализа документов может выглядеть так:
КЛАССИФИКАЦИЯ ДОКУМЕНТА
|
v
ИЗВЛЕЧЕНИЕ ИМЕН И ДАТ
|
v
СОСТАВЛЕНИЕ ХРОНОЛОГИИ
|
v
ВЫЯВЛЕНИЕ НЕСООТВЕТСТВИЙ
|
v
СОЗДАНИЕ ИССЛЕДОВАТЕЛЬСКИХ ВОПРОСОВ
|
v
ГЕНЕРАЦИЯ ИТОГОВОГО ОТЧЕТА
Издательский процесс может работать аналогичным образом:
ЧЕРНОВИК СТАТЬИ
|
v
ГРАММАТИЧЕСКИЙ АНАЛИЗ
|
v
SEO-АНАЛИЗ
|
v
ВЫЯВЛЕНИЕ ФАКТОЛОГИЧЕСКИХ УТВЕРЖДЕНИЙ
|
v
ГЕНЕРАЦИЯ МЕТАДАННЫХ
|
v
ПРЕДЛОЖЕНИЯ ПО ВНУТРЕННИМ ССЫЛКАМ
|
v
ПРОВЕРКА ЧЕЛОВЕКОМ
|
v
ПУБЛИКАЦИЯ
Разбиение работы на отдельные этапы упрощает тестирование, отладку и улучшение системы.
Отделяйте суждения ИИ от данных базы
Это один из важнейших уроков при создании надежных приложений на базе OpenAI.
Искусственный интеллект отлично подходит для вопросов вроде:
- Что, вероятно, имеет в виду этот человек?
- К какой категории это относится?
- Какой информации, по-видимому, не хватает?
- Как это следует объяснить?
- Какая часть этих записей, по-видимому, имеет отношение к делу?
- Что мне следует исследовать дальше?
- Как можно обобщить эту информацию?
Искусственный интеллект не следует считать авторитетным источником транзакционной информации, например:
- Сколько заплатил этот клиент?
- Когда назначена встреча?
- Какова текущая цена услуги?
- Был ли счет действительно оплачен?
- Какими разрешениями в данный момент обладает этот пользователь?
Ответы на эти вопросы должны находиться в базе данных.
Модель интерпретирует вопрос. Мое приложение извлекает достоверные данные.
Конфиденциальность и безопасность — часть архитектуры
Любая система, анализирующая медицинские карты, юридические документы, деловые записи или журналы безопасности, должна с самого начала создаваться с учетом требований конфиденциальности.
Мне не нужно отправлять весь профиль пользователя, если имеет значение только один документ. Временные загруженные файлы следует удалять, когда они больше не нужны. Конфиденциальные документы не должны появляться в обычных журналах отладки. Ключи API должны оставаться на сервере. Публичные и частные коллекции знаний следует хранить раздельно.
Тот же принцип применяется и к кибербезопасности. OpenAI может анализировать журналы сервера, но это не означает, что модель должна автоматически получать все учетные данные, токены сессий, секретные ключи или значения конфигурации, содержащиеся в этих журналах.
Перед отправкой журналов на анализ конфиденциальные данные, где это практически возможно, можно удалить или привести к стандартизированному виду.
Во что OpenAI на самом деле превращает мои веб-сайты
После объединения этих систем OpenAI перестает быть просто диковинкой.
AlexanderMirvis.com может превратиться в платформу для публикации, исследований и кибербезопасности с поддержкой ИИ. Статьи можно генерировать, проверять, обобщать, переводить, оценивать и снабжать метаданными. Загруженные документы могут превращаться в хронологии и отчеты. Пользовательская CMS может самостоятельно отслеживать события безопасности. Журналы сервера можно анализировать автоматически, а подозрительную активность — обобщать в инциденты безопасности.
BrooklynNotaryNinjas.com может превратиться в бизнес-платформу с поддержкой ИИ. Чат-бот может отвечать на вопросы, используя контролируемую базу знаний компании, получать актуальную информацию из баз данных, классифицировать запросы клиентов, объяснять процедуры, помогать с загруженными документами и направлять людей к нужной услуге.
Та же инфраструктура OpenAI может быть интегрирована с FreePBX. Речь по телефону преобразуется в текст, модель определяет, что имеет в виду звонящий, одобренные функции могут получать информацию, а полученный ответ может быть озвучен звонящему.
Тем временем система кибербезопасности может непрерывно отслеживать происходящее за кулисами. Журналы веб-сервера, события CMS, активность SSH, действия брандмауэра, ошибки приложений и изменения файлов — все это может вносить вклад в более целостную картину безопасности сервера.
Самый важный вывод заключается в том, что OpenAI не должна контролировать всё.
OpenAI интерпретирует. Моё приложение принимает решения.
OpenAI рассуждает. Моя база данных остаётся авторитетным источником.
OpenAI предлагает действия. Мой сервер решает, разрешены ли эти действия.
OpenAI анализирует события безопасности. Моя политика безопасности решает, следует ли что-либо заблокировать.
OpenAI генерирует контент. Моя CMS решает, что будет опубликовано.
Именно здесь API OpenAI становится по-настоящему мощным.
Это не просто ChatGPT, помещённый внутрь веб-сайта.
Он превращается в слой рассуждений, расположенный между человеческим языком, документами, базами данных, веб-сайтами, телефонными системами, инструментами кибербезопасности и обычным программным обеспечением.
Когда я начал воспринимать OpenAI именно так, возможности оказались гораздо шире, чем просто попросить ИИ что-нибудь написать. Он стал инструментом, который может помогать эксплуатировать, анализировать, автоматизировать и защищать сами системы.