Image

Мой путь к «умному» LibreChat: боль, радость и 20 тестовых вопросов к RAG

3de7feca64db68db976bcb047e8c2832

Помню тот момент, когда я в очередной раз пытался вытащить конкретную спецификацию из стопки PDF‑отчетов. «Вот бы ИИ мог сам в этом покопаться», — подумал я. Это чувство знакомо многим, кто работает с большими массивами текстовой информации.

Тогда я и решил, что хватит это терпеть. Последующий день превратился в марафон по установке и настройке RAG (генерация с дополнением извлеченной информацией). Это был путь проб и ошибок, который в итоге увенчался успехом. И теперь я хочу поделиться этим опытом с вами.

В этом материале мы:

  • Пошагово установим rag_api в уже развёрнутый LibreChat;

  • Воспользуемся Python 3.12, PostgreSQL 17;

  • В командной строке соберём PostgreSQL‑аддон pg_vector через x64 Native Tools Command Prompt for VS 2022;

  • Протестируем RAG‑систему 20 вопросами к вымышленной документации, сгенерированной в Gemini 2.5 Pro;

  • Узнаем, во сколько раз медленнее запускать через CPU, чем через GPU.

Приятного прочтения!

Эта статья — продолжение предыдущей, и если вы уже ставили LibreChat, то сейчас самое время прокачать его.

  1. Прикрепление текстов и документов (.txt, .csv, .tsv, исходный код, .pdf, .docx, .xlsx, .pptx и др.). Из коробки LibreChat этого не умеет — только изображения.

  2. Поддержка RAG (retrieval‑augmented generation) — режима, в котором модель способна использовать вашу собственную базу знаний.

Если хотите меньше танцев с бубном — попробуйте Open WebUI. Он устанавливается легче и из коробки поддерживает больше форматов файлов.

Что такое RAG, или Как превратить языковую модель в отраслевого эксперта

RAG — это retrieval‑augmented generation, или, по‑русски, «генерация, дополненная извлечённой информацией». Представьте, что у модели есть возможность подсмотреть в конспект перед ответом. Именно этим RAG и занимается — добавляет к её внутренним знаниям свежие данные из ваших документов, PDF‑файлов, статей, баз данных, иногда даже из новостей.

Как же работает эта магия?

e8a1a8341963498ec732040a86459e25

Если отбросить мистику, всё довольно логично. Процесс делится на четыре ключевых этапа:

1. Документы индексируются, примерно как в поисковике. (Да, и это еще один повод сравнить RAG с мини поисковой системой.)

Как часто это происходит? Возможны варианты:

  • Если RAG существует в виде «неизменной» базы данных, индексацию делают изредка — при создании базы или обновлении её файлов.

  • Если же вы каждый раз прикрепляете к диалогу с чат‑ботом новые файлы в режиме RAG, они будут индексироваться прямо на месте, пока эмбеддинг‑модель работает в фоне. Именно этот способ мы применим в сегодняшней статье.

2. Когда пользователь задает вопрос, система не сразу отправляет его в языковую модель. Вместо этого она сначала прогоняет запрос через этап извлечения. Специальный алгоритм векторного поиска молниеносно ищет в вашей базе знаний фрагменты текста, наиболее релевантные вопросу. Похоже на то, как искать нужную цитату в книге по ключевым словам.

3. Этап дополнения. Найденные фрагменты подшиваются к исходному запросу — и получается расширенный промпт.

Примерно так:

ВОТ ВОПРОС ПОЛЬЗОВАТЕЛЯ:
[вопрос]

ЭТО ВЫДЕРЖКИ ИЗ НАШЕЙ БАЗЫ ЗНАНИЙ:
[контекст]

ОТВЕТЬ, ИСПОЛЬЗУЯ ЭТУ ВСПОМОГАТЕЛЬНУЮ ИНФОРМАЦИЮ.

(Чаще используют не капслок, а XML‑теги — модели обрабатывают этот формат стабильнее.)

4. Финальный этап — генерация. Весь собранный промпт отправляется в конечную модель. Её задача — синтезировать связный, аргументированный ответ, как будто это делал эксперт, знающий контекст изнутри. В результате вы получаете аргументированный ответ, основанный на реальных документах.

Пункты 1–2 (индексация и извлечение) можно выполнять как через CPU, так и через GPU. GPU даёт фору — иначе скорость падает в 5–100 раз (зависит от размера документа, модели поиска и скорости оборудования).

И ещё приятная деталь: всё это может работать не только локально, но и в облаке.

В итоге RAG — это мощная надстройка, благодаря которой можно обходиться без переобучения модели под каждые новые данные. Он превращает универсального собеседника в узкопрофильного специалиста, который в курсе последних событий и ваших внутренних правил.

И теперь попробуем разобраться, как подключить всё это к программе LibreChat.

Стек

Для этой части вам понадобятся следующие инструменты (пока не устанавливайте — просто ознакомьтесь с набором):

  • Python версии 3.8+.

  • PostgreSQL — скачиваем отсюда: https://www.postgresql.org/download/.

  • Расширение для PostgreSQL pg_vector: https://github.com/pgvector/pgvector.git.

  • Проект rag_api: https://github.com/danny‑avila/rag_api.

  • x64 Native Tools Command Prompt for VS 2022 — можно установить или обновить по ссылке: https://visualstudio.microsoft.com/downloads/#build‑tools‑for‑visual‑studio-2022.

Локации, в которые будет происходить установка:

  • Виртуальное окружение: C:rag_env;

  • RAG‑сервер: D:rag_api;

  • pgvector: D:pgvector;

  • PostgreSQL: C:Program FilesPostgreSQL;

  • Python 3.12: C:Python312.

Установка

1. Устанавливаем PostgreSQL отсюда: https://www.postgresql.org/download/.

2. В процессе установки нужно будет придумать пароль суперпользователя.

64d2c8246890581b90f4223f80664e85

3. Установите или обновите Build Tools for Visual Studio. Эти инструменты нужны, чтобы собрать расширение pg_vector.

4. Битва с командной строкой стартует здесь.

Клонируйте проект pgvector: git clone https://github.com/pgvector/pgvector.git D:pgvector.

5. Через «Пуск» запустите x64 Native Tools Command Prompt for VS 2022 — специальную консольную среду, которая активирует нужные переменные. (Этот ярлык откроет .bat‑файл: %comspec% /k «C:Program Files (x86)Microsoft Visual Studio2022BuildToolsVCAuxiliaryBuildvcvars64.bat».)

Кроме того, есть вариант запустить через новую вкладку:

49e4f3a06bdcf7c43563ab6d3117671d

6. В открывшейся среде собираем pg_vector:

set «PGROOT=C:Program FilesPostgreSQL17» && cd /d D:pgvector && nmake /F Makefile.win && nmake /F Makefile.win install

Скриншот

76df74b06e4080aacad356a227ffa51c

После успешного запуска появятся свежесобранные файлы расширений в этих папках:

  • C:Program FilesPostgreSQL17shareextension

  • C:Program FilesPostgreSQL17includeserverextensionvector

7. Откройте консольный PosgreSQL (psql) от имени суперпользователя postgres:

«c:Program FilesPostgreSQL17binpsql.exe» -U postgres -h localhost -p 5432

Если запросит, вводим ранее заданный пароль и жмём Enter. Пароль не отображается при вводе, чтобы никто не узнал, сколько звёздочек вбивать.

8. Находясь в psql, создадим для RAG базу данных и виртуального пользователя. С помощью такой команды:

CREATE DATABASE rag_db; CREATE USER rag_user WITH PASSWORD ‘rag_password_123456’ SUPERUSER;

Да, пароль можно заменить на свой, одновременно нужно будет менять его и в файле D:rag_api.env.

9. Клонируйте проект rag_api:

git clone https://github.com/danny-avila/rag_api D:

10. Теперь займёмся Python. Я устанавливал на Python 3.12, взять можно отсюда: https://www.python.org/downloads/.

Лучше ставить в папку с коротким путём, например C:Python312. Включите Add python.exe to PATH, иначе команда py не найдёт нужную версию.

17f76995b4e75b9208b7013e7353015a

11. Создаём и активируем виртуальное окружение, затем устанавливаем зависимости:

py -3.12 -m venv C:rag_env && C:rag_envScriptsactivate && cd /d D:rag_api && pip install -r requirements.txt

4e05e5beffd67ee7dd539e963196d5bd

12. Создайте файл D:rag_api.env, следующего содержания:

VECTOR_DB_TYPE=pgvector POSTGRES_DB=rag_db POSTGRES_USER=rag_user POSTGRES_PASSWORD=rag_password_123456 DB_HOST=localhost DB_PORT=5432 DB_NAME=rag_db COLLECTION_NAME=ragapicollection # Перед началом индексации данные делятся на фрагменты длиной 1500 символов, # с перехлестом в 100 символов. Эти значения можно изменить ниже. CHUNK_SIZE=1500 CHUNK_OVERLAP=100 # Указываем провайдера и модель для эмбеддингов. # Для intfloat/multilingual-e5-base (≈110M параметров) # требуется 1,2–1,5 RAM/VRAM. # Примеры других мультиязычных моделей, которые попробовать: # — sentence-transformers/all-MiniLM-L6-v2 (≈22M параметров, ~0,4–0,6 ГБ RAM/VRAM) # — BAAI/bge-large-zh/bge-large-m3 (≈330M параметров, ~3,5–4,5 ГБ RAM/VRAM) EMBEDDINGS_PROVIDER=huggingface EMBEDDINGS_MODEL=intfloat/multilingual-e5-base # Параметры сервера RAG API: RAG_HOST=0.0.0.0 RAG_PORT=8000

13. И наконец, подключаем RAG‑сервер к LibreChat’у. Откройте D:LibreChat.env и добавьте строку:

RAG_API_URL=http://0.0.0.0:8000

Всё, подготовка закончена. Дальше начинается запуск и тестирование.

Запуск

Пора запускать сервер, пробуем сделать это следующей командой:

cd /d D:rag_api && C:rag_envScriptspython.exe ‑m uvicorn main:app ‑host 0.0.0.0 ‑port 8000

(Если хочется удобства — в Windows можно создать ярлык «RAG‑сервер для LibreChat», который делает то же самое: cmd /k «cd /d D:rag_api && C:rag_envScriptspython.exe -m uvicorn main:app —host 0.0.0.0 —port 8000».)

При первом запуске скачается эмбеддинг‑модель с Hugging Face:

c853e5e4a9e6607a704094478584581f

В конце концов окно запущенного сервера выглядит так:

0666f2a857b0f76c03187af7004ae085
07e58a12527c6582f68d94a1f845a671

Пока активен запущенный в командной строке RAG‑сервер, в LibreChat становится возможным прикреплять (вдобавок к изображениям) тексты и документы.

С одним значительным «но»…

bb2665e8191736ce0e3ae3e9e477f478

Как уже замечено в прошлой статье, RAG — это не просто один из способов загрузки офисных файлов в LibreChat, а, по сути, единственный способ их загрузить. Соглашусь, что это не очень удобно (и данная проблема обсуждается в ветвях репозитория), поэтому не будет лишним повторить, что все дороги ведут в Open WebUI.

Наглядный пример XML-разметки, в которой файлы передаются в конечную ИИ-модель

a569d907c86df47467f119de29d6263a

Тест RAG-функций

Чтобы проверить систему, я сгенерировал документацию через Gemini 2.5 Pro — объём примерно ~32 500 символов.

Дальше тест был прост: я прикреплял этот Markdown‑файл к LibreChat и задавал вопросы по его содержимому. Как именно шёл запрос:

  • Перетаскивал Markdown‑файл в диалог;

  • В промпте задавал конкретный вопрос, относящийся к материалу файла. RAG‑система искала релевантные фрагменты и передавала их вместе с запросом в LLM.

  • Дополнительно в промпте просил вывести те самыe фрагменты, которые RAG признала релевантными (то есть, по сути, вернуть невидимую часть запроса обратно), — чтобы прочитать, что именно попало в контекст модели.

Итак — что получилось в тесте. Всего было 20 вопросов. В качестве конечной модели я использовал ChatGPT o3-mini — мини‑модель, быстрая и подходящая для задач с парсингом и быстрыми ответами.

Первая половина вопросов задумывались простыми, с упором на ключевые слова; вторая половина более обобщённые, для углубленного теста RAG‑системы.

Продолжим разбирать результаты и выводы?

1.

Какова основная цель протокола EtherLink (ELP v4.2) и какие у него ключевые особенности?

Скриншот

b78d2fec9860cf01be6d04a40a01f798

RAG уверенно поймал тему, выбрав шесть фрагментов, но слегка расплескал контекст — часть кусков оказалась о портах и JSON‑примерах.

2.

Что такое когнитивный поток (Cognitive Flow) и какие основные поля содержит его JSON‑структура?

Скриншот

47bdaea2443fa0d3cca6f9b4dc4d8f9b

Система сработала почти идеально — вытащила фрагменты с определением и JSON‑структурой потока, лишь слегка добавив шум. Ответ получился полный и аккуратный, без выдумок. Типичный случай, когда узкий запрос показывает силу RAG.

3.

Какие компоненты входят в состав архитектуры эфирного узла AetherCore?

Скриншот

08f858bc5b04efd5ae756ab285956922

Тут RAG промахнулась — вместо списка компонентов из раздела 3.1 подала общие описания и теорию. LLM, не имея точных данных, ответила частично верно, но поверхностно.

4.

Как протокол DPoC (Dynamic Proof‑of‑Coherence) обеспечивает консенсус между узлами?

Скриншот

1e22040b6c32182745764df511ce2637

Отличный результат — RAG нашел нужный блок с описанием кворума и голосования, а LLM чётко воспроизвела механизм без искажений.

5.

Что делает модуль безопасности «Эгида» и какие методы шифрования он использует?

Скриншот

7d24fcc685090794a263d3b7251caf2a

RAG попал точно в нужный раздел, между тем добавив пару бесполезных кусков. LLM грамотно структурировала ответ: X.509, AES-256-GCM, ECDSA, всё по тексту. Демонстрация идеального взаимодействия RAG + LLM.

6.

Какие метрики производительности экспортируются в формате Prometheus?

Скриншот

e7f64e996e515d4db0cf9e8f7c4463a7

RAG‑система вытащила таблицу метрик и контекст, добавив чуть‑чуть мусора из JSON‑разделов. LLM корректно пересказала все показатели и типы. Простая задача — чистый тест на факт‑ретрив, выполнен уверенно.

7.

Что представляет собой AetherVM и зачем используется язык AetherScript?

Скриншот

6cd30c9e775f042c56564040533d3430

Три из пяти фрагментов в точку, два — шум. Видно, что RAG вытянул глоссарий и примеры, но пропустил детали про байт‑код. Ответ ChatGPT o3-mini тем не менее — краткий, точный, с минимумом воды. Рабочий кейс с лёгким недоборчиком контекста.

8.

Какие типы топологий поддерживает сетевая модель AetherCore?

Скриншот

9e9e1d8cff29ca631525da980c28b71e

Промах RAG — ключевой раздел с явным списком топологий пропущен. Модель логично додумала на основе общих описаний. Результат выглядит умно, но по факту неточен.

9.

В чём заключается отличие AetherCore от традиционных HPC и облачных архитектур?

Скриншот

149a5838101439b848d8d0c7caff8442

Почти эталон: RAG достал таблицу сравнений и нужные куски, LLM выдала структурированный список отличий без ошибок. Небольшие потери деталей, но ответ читается как готовый фрагмент статьи.

10.

Какие команды доступны в интерфейсе командной строки ACLI?

Скриншот

571c4fa0a03c7db38d4b940c56512a3e

Один фрагмент попал точно в цель, остальные — шумовые. Несмотря на это, LLM выдала стопроцентно корректный список команд. Хороший пример, как даже при грязном контексте модель может фильтровать мусор.

11.

Каким образом теория динамических когерентных полей влияет на маршрутизацию когнитивных потоков?

Скриншот

0cdb7baa4872595c9e09c97523fb73c7

Большинство фрагментов релевантны, ответ математически точен и понятен.

12.

Почему модель Hybrid Distributed Computing (HDC) считается «гибридной» и какие преимущества это даёт для NP‑трудных задач?

Скриншот

0c416127942491c1bfdd90c4987c7c20

RAG‑система уверенно справилась с вопросом о доступных API‑интерфейсах, вытянув правильные разделы из документации. Ответ получился точным и почти без шума, хотя часть фрагментов касалась лишь косвенно SDK и могла быть отброшена.

13.

Как система AetherCore реагирует на каскадный отказ узлов и какие механизмы обеспечивают самовосстановление сети?

Скриншот

4b23ffe3d33d5228f588484c9d5a0e0e

Тест показал, что RAG может чётко доставать структурированные таблицы и YAML‑примеры. Модель верно воспроизвела поля логов и уровни серьёзности.

14.

Чем квантовые шарды (QSh) отличаются от реальных квантовых компьютеров и какие задачи на них решаются?

Скриншот

80c34554f9adafd4cdca5962e832e3d3

Здесь система немного споткнулась: RAG пропустил ключевой подпункт с пошаговым сценарием, из‑за чего LLM ответила в общих чертах. Тем не менее общая логика и терминология были выдержаны, а конечная ИИ‑модель o3-mini честно призналась, что подробностей в тексте нет. Хороший пример самокоррекции LLM при неполных данных.

15.

Как параметр coherence_gain в псевдокоде маршрутизатора влияет на выбор узла?

Скриншот

e224de398440e5952a154c9d028f1878

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

16.

Почему архитектура AetherCore не имеет единой точки отказа (SPOF) и как это реализуется на уровне протоколов?

Скриншот

998fc004153d21ebcb3cc796048fdff5

Очень наглядный кейс: RAG подобрал правильные куски, но добавил немного «фонового текста» про мониторинг. LLM аккуратно отфильтровала шум, объяснив механизм приоритизации и SLA‑метрики. Система показала, что даже с частично релевантным контекстом может выдать связный технический ответ.

17.

Как связаны между собой компоненты NodeManager, FlowDispatcher и Cognitive Router в процессе обработки потока?

Скриншот

bd03218a649d76c123030b8dd8d6c671

Ответ чёткий, но неполный: не хватает упоминания rollback‑процедур. Пример, когда RAG работает «вширь», но не «вглубь».

18.

Каким образом AetherTrace может быть использована для аудита безопасности или SLA‑анализа?

Скриншот

7c4f9a5bd513bb999ebe8f04856d504d

Система показала стабильность: выбрала нужные фрагменты про REST и gRPC‑шлюзы, а LLM логично структурировала их в список. Мелкий минус — не были подхвачены детали авторизации.

19.

Если в сети наблюдается рост энтропии E(S) в формуле когерентности, как это повлияет на производительность и поведение системы?

Скриншот

c4421ae64ec567165b95d7fedc5cf610

RAG вытащил в целом правильные куски про формулу, но добавил немного шума из соседних разделов. Модель корректно объяснила, как рост энтропии снижает согласованность потоков. Ответ точный, но без деталей про веса α, β, γ — чувствуется лёгкая неполнота.

20.

Каким образом AetherCore может быть применён в задачах управления городской инфраструктурой, согласно кейсам документа?

Скриншот

c7c41ae24c94d7334b9c5b3a252767ab

Система попала почти идеально: подтянула кейсы с интернетом вещей и транспортом, а LLM связала архитектуру с реальными сценариями.

Обобщённый анализ

Снова подчеркну: всё, что было выше, — про конкретную эмбеддинг‑модель intfloat/multilingual‑e5-base. Именно от эмбеддингов на 90% зависит точность RAG‑поиска. Я специально выбрал простую, но быструю модель, чтобы показать, насколько сильно качество эмбеддингов влияет на результат.

Если бы вместо неё мы взяли, например, BAAI/bge‑large‑zh/bge‑large‑m3 (или что‑то ещё более тяжёлое — вплоть до облачного варианта), картина была бы иной: точность заметно выше, но и потребление памяти выросло бы в разы. А без GPU обработка небольшого документа составила бы несколько минут.

В общем и целом ответы LLM устойчиво качественные: при точных фрагментах, предоставленных RAG, — исчерпывающие, при шумных — аккуратные обобщения без галлюцинаций. Видно, что модель неплохо фильтрует шум и даже при неидеальных данных ChatGPT o3-mini сохраняет структуру и корректность.

Повторяется закономерность — узкие вопросы обрабатываются лучше широких. RAG честно вытаскивает релевантные чанки, но иногда перестраховывается и добавляет соседние абзацы. Где вопрос узкий и формулировка конкретная, точность на уровне 85–95%.

И наконец, тесты показали, что в текущем виде это уже рабочий инструмент для поиска по техдокам, помощник для инженеров и исследователей, а также отличный полигон, чтобы протестировать параметры RAG.

Таким образом, надстройка RAG — это не просто технический трюк, а стратегическое улучшение, которое кардинально расширяет сферу применения чат‑бота. Он перестает быть просто генератором текста и становится интеллектуальным интерфейсом к вашей персональной или корпоративной базе знаний.

Проведенное тестирование на 20 вопросах наглядно продемонстрировало сильные и слабые стороны системы. Это доказывает, что RAG — настраиваемый инструмент, у которого есть несколько переменных (включая используемые модели, размеры фрагментов и выбор между локальным или облачным запуском).

В статье я применил модель ChatGPT o3-mini. Вы тоже можете протестировать её и многие другие (Claude, Grok, Gemini, Midjourney…) в сервисе BotHub, эта ссылка даёт бонусные 100 000 капсов.

Источник: habr.com

✅ Найденные теги: Мой, новости

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых