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 – это не всегда векторное хранилище. Это универсальный слой поиска, который можно подменять под задачу".