RAG: Retrieval-Augmented Generation
RAG — паттерн, при котором агент сначала ищет релевантные данные, потом генерирует ответ на их основе.
Зачем RAG
- Модель не знает твои данные
- Fine-tuning дорогой и медленный
- RAG даёт актуальные знания без переобучения
Компоненты
- Документы — тексты, PDF, статьи
- Embeddings — вектора документов
- Vector Store — хранилище векторов
- SimilaritySearch — поиск
- Агент — генерация ответа
Полный цикл
Шаг 1: Загрузка документа
use Laravel\Ai\Files\Document;
$file = Document::fromPath('/path/to/manual.pdf')->put();
$store = Stores::create('Manuals');
$store->add($file->id);
Шаг 2: Генерация embeddings
В фоне, чтобы не блокировать HTTP:
// Job
$embedding = Str::of($document->content)->toEmbeddings();
$document->update(['embedding' => $embedding]);
Шаг 3: Агент с поиском
use Laravel\Ai\Tools\SimilaritySearch;
class DocumentSearch implements Agent, HasTools
{
public function tools(): iterable
{
return [
SimilaritySearch::usingModel(Document::class, 'embedding'),
];
}
}
Шаг 4: Запрос
$response = (new DocumentSearch)->prompt('Как сбросить пароль?');
Агент найдёт релевантные документы и ответит на их основе.
FileSearch
Встроенный tool для поиска по файлам:
use Laravel\Ai\Providers\Tools\FileSearch;
public function tools(): iterable
{
return [
new FileSearch(stores: ['store_id']),
];
}
WebSearch и WebFetch
Для поиска в интернете:
use Laravel\Ai\Providers\Tools\{WebSearch, WebFetch};
public function tools(): iterable
{
return [
(new WebSearch)->max(5)->allow(['laravel.com']),
new WebFetch,
];
}
Chunking
Длинные документы разбиваются на части перед embedding. Это позволяет искать по фрагментам, а не по всему документу.
Reranking
После поиска можно переранжировать результаты:
use Laravel\Ai\Reranking;
$response = Reranking::of(['Doc 1', 'Doc 2', 'Doc 3'])
->rerank('PHP frameworks');
$response->first()->document;
Итоги
- RAG = поиск + генерация
- Embeddings в фоне
- SimilaritySearch для поиска
- FileSearch для файлов
- WebSearch для интернета
- Reranking для улучшения