Локальная RAG‑система на Go, PostgreSQL и Ollama без облачных API
В статье показано, как собрать полностью локальную RAG‑платформу: разбивка документов, хранение эмбеддингов в PostgreSQL и генерация ответов через Ollama, без сторонних облачных сервисов.
RAG (Retrieval‑Augmented Generation) уже стал де‑факто способом подключать LLM к собственным документам, но большинство решений полагаются на облачные API и сторонние векторные базы. В новой статье на Habr ML автор предлагает полностью локальный стек, построенный на Go, PostgreSQL и Ollama.
Ключевые шаги:
- Chunking – документы разбиваются на чанки размером 500‑800 токенов с помощью простого Go‑модуля, учитывающего границы предложений и заголовков.
- Эмбеддинги – для каждого чанка генерируются векторные представления через Ollama (модель
mistral‑open‑7b). Полученные эмбеддинги сохраняются в таблице PostgreSQL с типомvector(расширениеpgvector). - Семантический поиск – запрос пользователя преобразуется в эмбеддинг, после чего в PostgreSQL выполняется
SELECT … ORDER BY embedding <=> query_embedding LIMIT 5, что обеспечивает быстрый поиск без внешних сервисов. - Контекстный генератор – найденные чанки конкатенируются и подаются в Ollama‑модель
llama2‑13b‑chatдля генерации ответа. Всё происходит локально, без передачи данных в Интернет.
Технические детали: стек полностью открытый, использует Go 1.22, PostgreSQL 15 и Ollama 0.3.2. Автор публикует готовый Docker‑Compose‑файл, позволяющий поднять систему за 5 минут. В статье также сравниваются скорости поиска (≈ 12 мс на запрос) и стоимость эксплуатации (≈ 0,02 USD/час на обычном сервере) с облачными аналогами.
Ссылка на оригинал: https://habr.com/ru/companies/first/articles/1062546/
Для разработчиков и студентов это отличная возможность построить приватный RAG‑сервис без расходов на облако. Однако потребуется базовое знание Go и администрирования PostgreSQL, а также готовность управлять локальными LLM‑моделями.


