Кейс 4. RAG для внутренней документации с использованием LLPhant
В этом кейсе мы делаем осознанный шаг от "чистого PHP" к первому специализированному PHP-фреймворку для работы с LLM – LLPhant. Это переходный момент: механика RAG уже понятна, и теперь нас интересует не изобретение инфраструктуры, а сохранение инженерного контроля при использовании готовых компонентов.
LLPhant хорош тем, что он не превращает RAG в магию. Архитектура остаётся прозрачной, а код читается как обычный PHP-проект.
Цель кейса
Построить систему вопросов-ответов по внутренней документации компании, где:
ответы формируются строго на основе документов
исключаются галлюцинации и домыслы
архитектура RAG остаётся прозрачной и контролируемой
инфраструктурная сложность минимизирована с помощью LLPhant
Бизнес-сценарий
В компании есть внутренняя документация:
Markdown-файлы с регламентами
README-файлы сервисов
SLA и операционные инструкции
Политики безопасности
Сотрудники задают вопросы в свободной форме:
Какой SLA у сервиса X?
Как часто происходит ротация API-ключей?
Где описан процесс восстановления после сбоя?
Важно: модель не должна придумывать ответы.
Если информации в документации нет – система должна честно сообщить об этом.
Архитектура решения
Мы реализуем классический RAG-пайплайн:
Документы разбиваются на чанки
Для чанков считаются эмбеддинги
Эмбеддинги сохраняются во векторное хранилище
По пользовательскому запросу извлекаются Top-K фрагментов
Из них формируется контролируемый контекст
LLM генерирует ответ строго на его основе
LLPhant закрывает инфраструктурную часть (эмбеддинги + vector store), но не принимает архитектурных решений за нас.
Этап 1. Индексация документов
На этом этапе мы:
загружаем документы,
создаём эмбеддинги,
сохраняем их во векторное хранилище.
Что здесь происходит:
LLPhant автоматически создаёт эмбеддинги для каждого документа
Векторные представления сохраняются в MemoryVectorStore
Мы не пишем вручную код для работы с embeddings
Важно:
LLPhant берёт на себя расчёт эмбеддингов и их хранение, но не вмешивается в архитектуру RAG как системы.
Этап 2. Поиск релевантных фрагментов
Теперь пользователь задаёт вопрос:
Что делает система:
создаёт embedding для запроса
сравнивает его с embedding документов
возвращает Top-K наиболее релевантных фрагментов
Ключевой момент:
Мы получаем не ответ, а строительный материал для него – релевантные куски документации.
LLM на этом этапе ещё не участвует.
Этап 3. Context Building: контроль вместо магии
Это самый важный шаг во всём кейсе.
Здесь происходит превращение retrieval в управляемую систему:
мы явно формулируем правила поведения модели
ограничиваем её доступным контекстом
запрещаем добавлять факты вне базы знаний
Даже при использовании фреймворка именно здесь RAG становится инженерной системой, а не просто вызовом LLM.
Если этот шаг реализован плохо – вся система начинает галлюцинировать
Этап 4. Генерация ответа
Теперь передаём собранный контекст в LLM:
LLM:
видит только отобранные фрагменты
получает строгую инструкцию
формирует ответ
Если документация содержит:
Ротация API-ключей происходит каждые 90 дней.
Модель ответит:
Ротация API-ключей происходит каждые 90 дней.
Если информации нет — модель должна сообщить об этом.
Что происходит под капотом
Полный RAG-процесс выглядит так:
Пользовательский запрос
→ Embedding запроса
→ Similarity search
→ Top-K документы
→ Контролируемый prompt
→ LLM
→ Ответ
LLPhant автоматизирует инфраструктуру, но:
не принимает решений о логике
не строит контекст за нас
не скрывает механику RAG
Типичные ошибки
Передавать в LLM слишком много документов
→ контекст размывается
Не ограничивать модель инструкциями
→ начинаются галлюцинации
Использовать similaritySearch без ограничения K
→ падает релевантность
Преимущества такого подхода
Минимум кода для embeddings
Читаемая архитектура
Полный контроль над prompt
Простота масштабирования
MemoryVectorStore можно заменить на Qdrant или другой векторный движок без изменения логики.
Ограничения
Чанкование нужно проектировать отдельно (для реальной документации это критично)
MemoryVectorStore не подходит для продакшена
Нужен контроль над размером контекста
Выводы по кейсу
Этот кейс показывает важный принцип:
LLPhant не делает RAG за нас, он:
убирает инфраструктурный шум
ускоряет разработку
сохраняет контроль над логикой и контекстом
Он не превращает систему в "магический чёрный ящик". Именно поэтому LLPhant отлично подходит как первый фреймворк для внедрения RAG в PHP-проектах:
мы уже не пишем всё вручную
но ещё полностью контролируем архитектуру
Last updated