RAG-бот на YandexGPT без Python: медицинский кейс на PHP и WordPress | AiManual
AiManual Logo Ai / Manual.
27 Мар 2026 Гайд

Как сделать RAG-бота на YandexGPT без Python: кейс внедрения в медицине на PHP и WordPress

Практический гайд по созданию медицинского AI-ассистента с точными ответами на основе документов. Используем Yandex Cloud Agent, PHP и WordPress без сложных орк

Почему все тащат Python, если можно на PHP?

Откройте любой гайд по RAG - там сразу Python, векторизация, LangChain, куча зависимостей. Звучит умно. Но для реального внедрения в клинике, где сайт на WordPress, а админ едва в консоль заходит, это все равно что предлагать хирургу собрать скальпель из микросхем. Перегруженно. Дорого. Бессмысленно.

Наш кейс проще: у медицинского центра есть сайт на WordPress, тонна PDF с протоколами лечения, инструкциями, статьями. Нужен чат-бот, который отвечает ТОЛЬКО на основе этих документов, не выдумывая. Без халтуры. Без Python. На том, что уже есть.

Забудьте про 'просто подключите GPT API'. Медицина - не место для фантазий LLM. Одна выдуманная дозировка препарата - и вас ждут серьезные проблемы. Точность здесь критична, поэтому нужен RAG (Retrieval-Augmented Generation).

Что нам понадобится? Ничего экзотического

  • Аккаунт в Yandex Cloud. На 27.03.2026 там есть полностью управляемый сервис Yandex Cloud Agent - это их готовое RAG-решение. Не нужно самому возиться с векторами и чанками.
  • Доступ к YandexGPT API. Используем последнюю на сегодня модель YandexGPT 3.0 Pro (код модели в API: general:3.0-pro). Она лучше понимает контекст и медицинские термины.
  • Сайт на WordPress с поддержкой PHP 8.2 или новее. Да, тот самый, который 'устарел для AI'.
  • Медицинские документы в структурированном виде (PDF, DOCX). Заранее очищенные от персональных данных.
  • Базовое понимание PHP. Если вы делали кастомные плагины - этого более чем достаточно. О сложностях читайте здесь.

Архитектура: три слоя, ноль оркестраторов

Мы не строим научный кластер. Мы делаем рабочую лошадку. Архитектура до безобразия проста:

💡
Пользователь спрашивает что-то на сайте -> WordPress плагин отправляет запрос на наш PHP-скрипт -> Скрипт идет в Yandex Cloud Agent, который находит релевантные чанки из документов -> Агент формирует промпт с контекстом и отправляет в YandexGPT -> Ответ возвращается обратно в чат. Все. Никаких очередей, дополнительных баз или микросервисов.

Главный компонент - Yandex Cloud Agent. Он берет на себя всю грязную работу: индексацию документов, семантический поиск, формирование контекста для LLM. Нам нужно только загрузить файлы и правильно позвать API. Это ключевое отличие от самостоятельной сборки, где цена сложности быстро растет.

1 Подготовка базы знаний в Yandex Cloud Agent

Идем в консоль Yandex Cloud. Создаем новый 'Агент'. Загружаем подготовленные PDF. Важный нюанс: медицинские документы часто имеют сложные таблицы и схемы. Yandex Cloud Agent на 27.03.2026 неплохо справляется с таблицами, но для максимального качества я конвертирую все в чистый текстовый формат с помощью pandoc.

# Конвертируем PDF в текст для лучшего парсинга (делается один раз)
pandoc input.pdf -t plain -o output.txt

В настройках Агента выбираем модель для эмбеддингов - 'yandexgpt'. Настраиваем параметры чанкинга. Для медицинских текстов лучше уменьшить размер чанка до 500-700 символов, чтобы не терять конкретику. Оставляем включенной опцию 'Перекрестное кодирование' для более точного ретривера.

2 Получаем ключи и настраиваем доступ

Для работы нужны два ключа:

  1. API-ключ для доступа к YandexGPT (создается в сервисе 'Yandex GPT').
  2. IAM-токен или сервисный аккаунт для доступа к Yandex Cloud Agent. Для простоты используем IAM-токен, который генерируется командой:
yc iam create-token

Никогда не храните эти ключи в коде плагина WordPress! Особенно в публичном репозитории. Выносите их в переменные окружения сервера или используйте специальные плагины для управления секретами. Одна утечка - и ваш счет в Yandex Cloud могут опустошить.

3 Пишем PHP-сервис для общения с агентом

Создаем отдельный PHP-файл, например, medical_rag_service.php. Он будет принимать вопрос, идти в Cloud Agent, получать контекст, затем запрашивать YandexGPT. Вот основная часть логики. Используем современный синтаксис PHP 8.3+.

agentId = getenv('YANDEX_AGENT_ID');
        $this->folderId = getenv('YANDEX_FOLDER_ID');
        $this->iamToken = getenv('YANDEX_IAM_TOKEN');
        $this->gptApiKey = getenv('YANDEXGPT_API_KEY');
    }

    public function askAgent(string $question): string {
        // 1. Ищем релевантные фрагменты через Cloud Agent API
        $searchUrl = "https://agent.mds.yandexcloud.net/v1/agents/{$this->agentId}:search";
        $searchData = [
            'query' => $question,
            'folder_id' => $this->folderId,
            'limit' => 5 // Берем топ-5 наиболее релевантных фрагментов
        ];

        $searchResult = $this->makeRequest($searchUrl, $searchData, $this->iamToken);
        if (empty($searchResult['chunks'])) {
            return "В моей базе знаний нет информации по этому вопросу.";
        }

        // 2. Формируем контекст из найденных чанков
        $context = '';
        foreach ($searchResult['chunks'] as $chunk) {
            $context .= "\n\n" . $chunk['text'];
        }

        // 3. Отправляем контекст и вопрос в YandexGPT с жестким промптом
        $prompt = $this->buildMedicalPrompt($context, $question);
        return $this->callYandexGPT($prompt);
    }

    private function buildMedicalPrompt(string $context, string $question): string {
        // Критически важная часть. Промпт должен запрещать выдумывать
        return << "gpt://{$this->folderId}/yandexgpt-3.0-pro-lite",
            'completionOptions' => [
                'temperature' => 0.1, // Низкая температура для минимальной креативности
                'maxTokens' => 1500
            ],
            'messages' => [
                ['role' => 'user', 'text' => $prompt]
            ]
        ];

        $result = $this->makeRequest($url, $data, $this->gptApiKey);
        return $result['result']['alternatives'][0]['message']['text'] ?? 'Ошибка получения ответа.';
    }

    private function makeRequest(string $url, array $data, string $token): array {
        $jsonData = json_encode($data);
        $ch = curl_init($url);
        curl_setopt_array($ch, [
            CURLOPT_POST => true,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER => [
                'Content-Type: application/json',
                'Authorization: Bearer ' . $token
            ],
            CURLOPT_POSTFIELDS => $jsonData
        ]);
        $response = curl_exec($ch);
        curl_close($ch);
        return json_decode($response, true) ?: [];
    }
}
?>

Это ядро. Промпт - наше все. Я использую жесткий шаблон, который не дает модели отходить от контекста. Больше готовых шаблонов для разных случаев - в отдельной подборке.

4 Встраиваем сервис в WordPress как чат-бота

Создаем простой плагин WordPress. Добавляем шорткод [medical_chat], который выведет форму чата. AJAX-обработчик будет вызывать наш MedicalRAGService. Для интерфейса используем обычные HTML и немного JavaScript. Никаких тяжелых фронтенд-фреймворков.

 admin_url('admin-ajax.php')]);

    ob_start();
    ?>
    
Ответы формируются на основе утвержденных медицинских протоколов. Не заменяют консультацию врача.
askAgent($question); wp_send_json_success(['answer' => $answer]); } ?>

JavaScript часть простая: отправляет вопрос, показывает ответ. Добавьте индикатор загрузки.

5 Тестируем и ловим грабли

Первое же тестирование покажет слабые места. Давайте разберем типичные ошибки:

Ошибка Почему возникает Как исправить
Бот выдает общие фразы, не относящиеся к контексту Температура YandexGPT слишком высокая или промпт слабый Понизить temperature до 0.1. Усилить промпт: явно запретить выдумывать, требовать ответа только из контекста.
Бот находит не те документы Чанки слишком большие или эмбеддинги плохо уловили смысл Уменьшить размер чанка до 500 символов. В Cloud Agent попробовать другой метод реранкинга (например, включить 'cross-encoder').
Долгий ответ (больше 10 секунд) Сеть или API Yandex Cloud тормозит Добавить кеширование частых вопросов в WordPress Transients. Использовать streaming для ответов YandexGPT, чтобы показывать ответ по частям.

Обязательно привлеките к тестированию реальных врачей. Они сразу увидят неточности в терминологии или логике ответов. Это не технический, а предметный баг.

Главный нюанс: кто отвечает за ошибку?

Вы сделали бота. Он где-то ошибся. Кто виноват? Вы, как разработчик? Нет. Медицинское учреждение, которое его использует. Поэтому перед запуском нужен юридический документ - disclaimer, что бот дает справочную информацию и не заменяет врача. И самое главное - логгируйте все вопросы и ответы. Чтобы в случае спорной ситуации можно было проверить, на основе каких чанков был сформирован ответ.

На 27.03.2026 Yandex Cloud Agent предоставляет функцию 'cite sources' - он возвращает не только текст, но и ссылки на исходные документы, номера страниц. Обязательно показывайте эти ссылки в интерфейсе чата. Это увеличивает доверие и дает врачу возможность проверить первоисточник.

А что с деньгами?

Бюджет. Yandex Cloud Agent тарифицируется за количество токенов в индексированных документах и за количество запросов. YandexGPT - за количество токенов в запросе и ответе. Для медицинского центра с 1000 страниц документов и ~500 запросами в месяц счет на весну 2026 года будет примерно 2000-3000 рублей. Дешевле, чем платить отдельному сотруднику за консультации по телефону. Подробнее о бюджетах на разных стеках - в этом сравнении.

Не пытайтесь сэкономить, выбрав более слабую модель YandexGPT. В медицине важна точность формулировок. YandexGPT 3.0 Pro стоит своих денег.

Частые вопросы от скептиков

PHP же медленный для AI?

Вся тяжелая работа - индексация и инференс модели - происходит на стороне Yandex Cloud. PHP выступает лишь как 'клей', который передает запросы и ответы. С этой задачей он справляется на отлично. Если сомневаетесь, посмотрите на TransformersPHP.

А если сайт на WordPress взломают, не получат ли злоумышленники доступ к API?

Получат, если ключи хранятся в коде. Поэтому ключи должны быть в переменных окружения сервера или в защищенном хранилище, например, в Yandex Lockbox. В коде плагина - только их загрузка через getenv().

Можно ли такую систему масштабировать на сотни тысяч документов?

Yandex Cloud Agent на текущий момент (27.03.2026) имеет лимиты на размер базы знаний. Для очень больших архивов уже нужна кастомная архитектура на векторных базах. Но для 95% медицинских учреждений, где объем документов не превышает 10-20 тыс. страниц, управляемого агента более чем достаточно. Не усложняйте без необходимости.

Главный вывод: вам не нужен Data Scientist и Python-разработчик, чтобы внедрить умного RAG-бота в медицине. Нужно понимание задачи, готовые облачные сервисы и немного PHP-кода для интеграции. Остальное - уже придумано за вас. И да, это работает прямо сейчас.

Подписаться на канал