Retriever – это компонент, который **выбирает нужные куски текста из базы знаний по вопросу пользователя**.
Его задача – решить простую, но критичную задачу: **какие именно фрагменты документов стоит отдать модели, чтобы она смогла ответить правильно**.
Как это выглядит на практике:
- пользователь задаёт вопрос обычным текстом;
- retriever ищет в базе знаний подходящие фрагменты;
- возвращает несколько документов с текстом (`page_content`) и служебной информацией (`metadata`);
- **только эти документы** дальше передаются в LLM.
Важно понимать:
- retriever работает **до LLM** и определяет, что модель вообще увидит;
- vector store можно "превратить" в retriever через `.as_retriever()`, но есть и другие типы retriever’ов (BM25, Arxiv, web-поиск, long-term memory и т.д.).
[Retrievers - Docs by LangChain](https://docs.langchain.com/oss/javascript/integrations/retrievers)
**Retriever – это точка, где ты управляешь стратегией поиска, а не только хранилищем.**
>[!info] > На уровне LangChain retriever – это любой компонент, реализующий интерфейс "запрос → список документов".
**Примеры из документации**
[Retrievers – Docs by LangChain](https://docs.langchain.com/oss/javascript/integrations/retrievers?utm_source=chatgpt.com)
|Тип retriever’а|Источник|Когда полезен|
|---|---|---|
|**Vector store retriever**|Любой vector store (`.as_retriever()`)|Базовый RAG по своим документам|
|**BM25 / keyword retriever**|Классический full-text|Точные формулировки, поиск по ключевым словам|
|**ArxivRetriever**|arXiv|Поиск по научным статьям|
|**Web / Search retrievers**|Tavily, Exa и др.|Нужно ходить в интернет|
|**Long-term memory retrievers**|Zep и подобные|Память о прошлых диалогах, user history|
Идея для урока:
> "Retriever – это не всегда векторное хранилище. Это универсальный слой поиска, который можно подменять под задачу".