LLPhant - это библиотека на PHP для создания приложений с генеративным ИИ. Она предоставляет единый интерфейс для работы с различными LLM-провайдерами и заимствует архитектурные подходы из LangChain и LlamaIndex.
Фреймворк разработан Максимом Тунсеном и ориентирован на упрощение интеграции ИИ в PHP-приложения.
Поддержка нескольких LLM-провайдеров
LLPhant абстрагирует различия между провайдерами, позволяя переключаться между ними без значительных изменений в коде. Поддерживаются OpenAI, Anthropic, Mistral, LM Studio и Ollama.
Пример использования разных моделей с одинаковым интерфейсом:
// OpenAI
$chat = new OpenAIChat();
$response = $chat->generateText('What is the capital of France?');
// Anthropic Claude
$chat = new AnthropicChat(
new AnthropicConfig(AnthropicConfig::CLAUDE_3_5_SONNET)
);
$response = $chat->generateText('What is the capital of France?');
// Локальные модели через Ollama
$config = new OllamaConfig();
$config->model = 'llama2';
$chat = new OllamaChat($config);Библиотека также поддерживает стриминг ответов, учет использования токенов и работу с изображениями.
Embeddings и векторные хранилища
LLPhant включает полный пайплайн для построения RAG-приложений: загрузка документов, разбиение на части, генерация эмбеддингов и сохранение в векторные базы данных.
Пример:
// Чтение документов
$reader = new FileDataReader(__DIR__.'/documents');
$documents = $reader->getDocuments();
// Разбиение на части
$splitDocuments = DocumentSplitter::splitDocuments($documents, 800);
// Генерация эмбеддингов
$embeddingGenerator = new OpenAI3SmallEmbeddingGenerator();
$embeddedDocuments = $embeddingGenerator->embedDocuments($splitDocuments);
// Сохранение в PostgreSQL (pgvector)
$vectorStore = new DoctrineVectorStore($entityManager, Document::class);
$vectorStore->addDocuments($embeddedDocuments);
// Поиск похожих данных
$embedding = $embeddingGenerator->embedText('search query');
$results = $vectorStore->similaritySearch($embedding, 5);Поддерживаются различные векторные хранилища, включая PostgreSQL (pgvector), Redis, Elasticsearch, MongoDB, Qdrant, Milvus, Pinecone и другие.
Вопрос-ответ с использованием RAG
Класс QuestionAnswering реализует полный цикл RAG: поиск релевантных документов и генерацию ответа на их основе.
use LLPhant\Query\SemanticSearch\QuestionAnswering;
$qa = new QuestionAnswering(
$vectorStore,
$embeddingGenerator,
$chat
);
$response = $qa->answerQuestion(
'What are the main topics covered in the documentation?'
);Поддерживается настройка системного промпта, добавление ограничений (guardrails) и использование multi-query подходов для повышения качества поиска.
Function calling и инструменты
LLPhant поддерживает механизм function calling (tools), позволяющий моделям взаимодействовать с внешними API и сервисами. Инструменты описываются как PHP-классы, а модель сама решает, когда их использовать в зависимости от контекста диалога.