## **1. Индексация**
Обычно индексация работает следующим образом:
1. **Загрузка**: сначала нам нужно загрузить наши данные. Это делается с помощью [**загрузчиков документов**](https://docs.langchain.com/oss/javascript/integrations/document_loaders).
2. **Разделение**: [**Разделители текста**](https://docs.langchain.com/oss/javascript/integrations/splitters) разбивают большие документы на более мелкие фрагменты. Это полезно как для индексации данных, так и для передачи их в модель, поскольку большие фрагменты сложнее искать и они не помещаются в конечное контекстное окно модели.
3. **Store**: нам нужно где-то хранить и индексировать наши разбиения, чтобы потом можно было выполнять поиск по ним. Часто для этого используют [**VectorStore**](https://docs.langchain.com/oss/javascript/integrations/vectorstores) и модель [**Embeddings**](https://docs.langchain.com/oss/javascript/integrations/text_embedding).
## 2. Поиск
Приложения RAG обычно работают следующим образом:
1. **Извлечение (Retrieve)**: на основе пользовательского ввода из хранилища извлекаются соответствующие фрагменты с помощью [Retrieval](https://docs.langchain.com/oss/python/langchain/retrieval#retrievers).
2. **Генерация**: [**модель**](https://docs.langchain.com/oss/python/langchain/models) выдаёт ответ на запрос пользователя. Но перед генерацией ответа, к запросу подмешивается контекст, полученный из retrieval.