Урок 04

RAG: Retrieval-Augmented Generation

RAG — паттерн, при котором агент сначала ищет релевантные данные, потом генерирует ответ на их основе.

Зачем RAG

  • Модель не знает твои данные
  • Fine-tuning дорогой и медленный
  • RAG даёт актуальные знания без переобучения

Компоненты

  1. Документы — тексты, PDF, статьи
  2. Embeddings — вектора документов
  3. Vector Store — хранилище векторов
  4. SimilaritySearch — поиск
  5. Агент — генерация ответа

Полный цикл

Шаг 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 для улучшения