LLPhant — це PHP-бібліотека для розробки застосунків на базі Generative AI. Створена Maxime Thoonsen, вона пропонує єдиний інтерфейс для роботи з різними LLM-провайдерами, зокрема OpenAI, Anthropic, Mistral, LM Studio та Ollama. Бібліотека натхненна LangChain та LLamaIndex, що дозволяє PHP-розробникам використовувати вже знайомі патерни.
# Підтримка Multi-Provider LLM
LLPhant нівелює різницю між API різних сервісів, дозволяючи перемикатися між ними з мінімальними змінами в коді. Незалежно від того, чи працюєте ви з OpenAI GPT, Anthropic Claude, Mistral, чи запускаєте локальні моделі через 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?');
// Local models via Ollama
$config = new OllamaConfig();
$config->model = 'llama2';
$chat = new OllamaChat($config);
Бібліотека також підтримує streaming відповідей для чат-інтерфейсів у реальному часі, відстеження token usage для контролю витрат та Vision-можливості для аналізу зображень.
# Embeddings та Vector Storage
LLPhant пропонує повний інструментарій для створення Retrieval-Augmented Generation (RAG) застосунків. Ви можете зчитувати документи з різних джерел (PDF, Word, текстові файли), розділяти їх на chunks, генерувати embeddings та зберігати їх у обраній vector database:
// Read and process documents
$reader = new FileDataReader(__DIR__.'/documents');
$documents = $reader->getDocuments();
// Split into chunks for embedding
$splitDocuments = DocumentSplitter::splitDocuments($documents, 800);
// Generate embeddings
$embeddingGenerator = new OpenAI3SmallEmbeddingGenerator();
$embeddedDocuments = $embeddingGenerator->embedDocuments($splitDocuments);
// Store in PostgreSQL with pgvector
$vectorStore = new DoctrineVectorStore($entityManager, Document::class);
$vectorStore->addDocuments($embeddedDocuments);
// Search for similar content
$embedding = $embeddingGenerator->embedText('search query');
$results = $vectorStore->similaritySearch($embedding, 5);
Підтримуються такі Vector store, як Doctrine (PostgreSQL з pgvector), Redis, Elasticsearch, MongoDB, ChromaDB, Qdrant, Milvus, AstraDB, OpenSearch, Pinecone та Typesense.
# Question Answering з RAG
Клас QuestionAnswering автоматизує весь робочий процес RAG: від пошуку релевантних документів у vector store до генерації контекстуальних відповідей:
use LLPhant\Query\SemanticSearch\QuestionAnswering;
$qa = new QuestionAnswering($vectorStore, $embeddingGenerator, $chat);
$response = $qa->answerQuestion('What are the main topics covered in the documentation?');
Ви можете кастомізувати шаблони system message для керування контекстом, додавати guardrails для безпеки та впроваджувати multi-query transformations для покращення якості вибірки даних.
# Function Calling та Tools
LLPhant підтримує Function Calling (tools), що дозволяє LLM взаємодіяти із зовнішніми API та сервісами. Достатньо описати інструменти як PHP-класи, і модель сама вирішить, коли їх викликати, спираючись на контекст діалогу.
Дізнатися більше про LLPhant та ознайомитися з документацією можна на llphant.readthedocs.org або у GitHub-репозиторії.