Прыватны «другі мозг» на AI: лакальны RAG з AnythingLLM, Ollama і Obsidian
Прыватны «другі мозг»: AnythingLLM і мадэль эмбедынгаў на віртуальнай машыне Proxmox дазваляюць лакальнай Mistral 7B шукаць па нататках Obsidian праз RAG на Ollama — з рэальным расходам рэсурсаў.
Крыніцы: Giving My Local AI a Memory: Turning It Into a Private AI Second Brain with RAG and AnythingLLM
Чароўны амнэзік
Местны мовны мадэль можа весты размову, поясняць паняванні і памагаць прааналізаваць ідэі, пры чым жаданы даныя не выходзяць за межы прыстрою. Але ён не можа сама адзначыць нічога з таго, што вы збераглі.
Уявіце сабе годзіну накопіяваных нотатак у Obsidian: хутчэйкі, зафіксаваные опоўні, напаловыя думкі, довгі артыкул пра пошуковыя сістэмы, абавесці пра працу і нотаткі з семінараў. Усё гэта знаходзіцца ў папцы на ноутбуке, невідма для AI, якой патрэбна была цэлая вясна, каб запрацаваць без інтэрнэту.
Зберохват ніколі не быў проблемай. Проблема — адзначэнне інфармацыі. Толькі правыя нотаткі у правы момант ператвараюць папку з хутчэйкамі на знанні, а не на аднойчы організаваны кашфорд. Таму наступны логічны крок у стварэнні прыватнай AI-сістэмы — даць ёй доступ да гэтых нотатак.
Што такое RAG і чаму гэта важна
Большасць нарадчыкаў па „раннюю AI локальна“ прыхоўвае гэты частак, верагодна таму, што панявы пра эмбедынгі здаюцца нуднымі. Хоць яны і ўсё-такі некалькі нудныя, іх варта зразумець.
RAG — гэта Retrieval-Augmented Generation. Ён дазволяе мовнаму модэлю апыляцца вашымі сабскрытымі дакументамі без падготавкі модэля занова і без аплодавання іх на сервер трэцьей стороны.
Уявіце сабе найбольш шырокага бібліятэкара замест таго, каб прасіць AI запам’ятаваць кожную кнігу. Бібліятэкар не запам’ятае вашыя нотаткі на або, а толькі ведае, калію кнігу выкарыстаць, калі вы задаеце запітанне.
Гэта тое, што адбываецца пад час работы:
- Дакументы дзелююцца на часткі і ператвараюцца ў эмбедынгі — цэфрычныя прэдставленні значэння, якія зберагаюцца ў базе дадзеных у вектарнай форме.
- Запітанне таксама ператвараецца ў эмбедынг.
- База дадзеных знаходзіць часткі, якія за значэннем найбліжэй прылеглі да запітання.
- Этыя часткі надаюцца мовнаму модэлю як кантэкст.
Інструмент: AnythingLLM
AnythingLLM падходзіць для гэтага рашэння з кальколька прычын:
- Рабочыя прасторы зберагаюць адзінаковыя базы знанняя для разных кантэкстаў, такіх як нотаткі, даследжэнні чыстыя версіі блога.
- Яна чытае Markdown натыўна, таму нотаткі в Obsidian не патрабуюць пераканвертавання.
- Яна працуе безпосерэдна з Ollama.
- Яна ўстановленая сама і працуе як контэйнер Docker, без неабходнасці адкрыцья адказу чыста ў воблаку.
- У яе таксама ёсць дэсктопны прыстрой, які дапамагае тым, у каго няма домашняй лабораторыі.
Гэта не ўсё можлівыя варыянты. Open WebUI таксама мае RAG у сваім складзе. Але модэль рабочага прастора AnythingLLM лепей падходзіць да ідэі „вторага мозга“, а яе інтэрфейс настолькі дружэльны, што можа быць рэкамендаваны нават нетэхнічным чытачам.
Стварэнне асяроддзя
Пачаткова точка
Установка апелюець да такога базовага структурування:
- хост Proxmox VE на чыстай апаратнасці;
- адзін віртуальны апарат Ubuntu 24.04, у яком размешчаны Ollama з Mistral 7B;
- Open WebUI як фронтэнд для чату.
У процэсе нарабаткі додаецца ўтрохты віртуальны апарат.
Новы віртуальны апарат у Proxmox
Створыце новы віртуальны апарат Ubuntu 24.04 LTS для AnythingLLM. Размешчэнне яго окола віртуальнага апарата з Ollama дазволяе ствараць знімкі стану, навольна нарабляць бягучыя проблемы і вярнуць усё у пачатковы стан, не паўтараючы саму установку для аналізу даных. Навольна нарабляць проблемы лепшая, чым пазней зіткнуцца з імі віпадкова.
Рэкамендаваныя характэрыстыкі:
- 4 vCPUs
- 8 GB RAM
- 40 GB дыска, адколькі векторныя базы даных займаюць прастор
Нічага тут няўажка. У дасведчэннях усё паспісвае, плюс трохі працы з пробамі і памылкамі, бальш тым для тых, хто вялікі час яўляеся налаштаваў VM Ollama. Асалодным лімітам являецца наяўны апарат, і самэ гэта ёсць метай гэтага задачы.
Установка модэлю эмбедынгу
Большасць інструкцый прахоўвае гэты крок, і гэта вызывае найбольшыя проблемы.
RAG патрэбны два модэлі. Адны ёсць модэль інферэнсу, які ўжо ўключаны ў Mistral 7B. Другі — модэль эмбедынгу, які ператварае тэкст у вектары. Гэта разныя рэшчы, але мало хто з інструкцый працягвае гэта з самага пачатку.
На існуючай VM Ollama запрашыце модэль эмбедынгу:
ollama pull nomic-embed-text
nomic-embed-text мае невялікі розмеры — адносна 270 МБ, шырока працюе на CPU і добра працуе з англійскім тэкстам, таму яўляецца разумным выборам для апаратуры без GPU.
Іншая проблема: Ollama за замовчаннем працуе толькі на localhost. Ёнколі AnythingLLM, якая знаходзіцца на іншай віртуальной машыне, хочаць з’яўіцца да яго, Ollama павінен быць доступным праз усі інтэрфейсы. Пачніце з рэдагавання службы:
sudo systemctl edit ollama
Потым дадзіце гэтыя настройкі пераканалення:
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
Паўзапусціце systemd і пачніце занова службу:
sudo systemctl daemon-reload
sudo systemctl restart ollama
Далей неабяжна ачыць порт 11434 у захістным ўрэжыме Proxmox межы двумя віртуальнымі машынамі. Урок парадоксальны: сама служба і сама мадэль працавалі нормальна. Проблема была ў прыпуску, што за замовчанням усе можа спілкувацца з усім.
Меры захісту сеткі моглі б быць строгей, і, верагатэльна, так і трэба зробіць у будучыні. Гэта тыпавая позіцыя хобіста: прабавіць усё запрацаваць, зрозумець, як усё побудавана, а потым знісці і зробіць усё правільна.
AnythingLLM праз Docker
На новай віртуальной машыне спачатку установіце Docker:
# Install Docker
curl -fsSL <https://get.docker.com> | sh
sudo usermod -aG docker $USER
newgrp docker
Потым запускайце AnythingLLM:
# Run AnythingLLM
docker run -d \
-p 3001:3001 \
--name anythingllm \
-v ~/.anythingllm:/app/server/storage \
mintplexlabs/anythingllm
Ачыніце http://<new-vm-ip>:3001 у браузеры. Канфігурацыя праз першы запуск такая:
- Прадаўца LLM: Ollama, пад адрэсам
http://<ollama-vm-ip>:11434 - Мадэль чату: Mistral 7B
- Прадаўца эмбедынга: Ollama, з
nomic-embed-text - База вектарных дадзеных: LanceDB, якая ўжо ўбудована і не трэбуе дадатковай наладкі
Задаўце яму зьвісткі
Створыце рабочую прастору пад назвай „Second Brain“ і націсніце AnythingLLM на хранілню Obsidian. Яго калектар дакументаў прымае завантажэнні папак, таму задаце яму катэгорыю зьвістак і дазволіце яму обрабацаваць усё.
Ён прымае файлы фармата .md, .txt, .pdf, .docx і .csv. Файлы Obsidian canvas ў сэрцы ў фармаце JSON, таму яны не спрычыняюць адзінакоў, але і не даюць нічы якіснага.
Пасля запісу на робочай плошчадцы паказуецца колькісць фрагментаў і статус ўкладання. Кожная зметка дзеліцца на перакрываючыяся фрагменты па праза 500 токенав, таму довгая артыкул пра пошуковыя сістэмы стае дзесяткамі окрэма доступных фрагментаў.
Момент натыкання
Праўяя працэзнае перацэнка — гэта звычайны запіт, напрыклад, просьба да асістэнта пераканацца конкрэтную зметку пад назвай "улучшэнні домашнья лабораторыя".
Асістэнт знаходзіць рэальны файл, паводзіцься пра яго па імені і цітуе точную лінію з пазначэннем часу. У паводзе прыводзіцца назва джэральнага дакумента і дата публікацыі. Адзысканне функцыонуе так, як абявляецца: файл отрымае назву і знаходзіцца, без выдуманага контэнту і без нечыткага пераказу, толькі правыя даныя плюс прывод.
Забавна частка выклікаецца тады, калі мадэль прагне поясніць ту запіску. У яй післяворотнае опісае Claude Code як свае роду персональнага асістэнта чыясь службы. Mistral 7B, які працюе офлайн на прыстрое homelab з толькі CPU, не мае жадных уявленняў пра тое, што такое Claude Code чыясь сервер MCP. Ён можа запрашваць словы, але не можа ўсё абсалютна ўсваяць іх.
Гэта ўжо болей корыстны урок. Запрашэнне і розумеўце — гэта разныя проблемы. RAG ставі правы кантэкст перад модэлью, але розумеўце гэтага кантэкста як і раней залежыць ад самай модэлі. З маленькай модэлью 7B без інтэрнэту такі ліміт прыходзіць дужа быстра.
Што пайшло не так і што гэта навучыла
Калькія заставы не перазсталі пасля стварэння.
- RAG — гэта не чары. Ён настолькі ж корыстны, насколькі інфармацыя, якая яму даецца, а некаляканыя запіскі даюць некаляканыя рэзультаты. Што введзенае, тое і выведзенае.
- Сеткавая адаптацыя стае часткай праекта ў раннім перыядзе. Калі службы розмешчаюцца на кальколькі апаратаў, важліва ўможлівіць ўсім ім надзеясна взаімае вярбаванне, так сама як і налаштаванне кожнага з іх.
- Не крытыкуйце мадэль занадта шыбка. Інодзе проблема крыўдзіцца ў паданым кантэксце. Хораша сістэма пошуку можа зробіць невялікую мадэль неспадзевана корыстной, але яна не можа запрацаваць знанні, якіх мадэль ніколі не мела.
Што вы у канцы кінцоў атрымуеце і які ў таго кошт
Годзіна захаваных лінкаў, ідэй і незаканчаных думак стае доступной для пошуку, і не толькі па ключоўым словам, але і сэмантычна. Запытайце пра певную концэпцію, і будуць паказаны супаўзвязаныя нотаткі, пра якія вы забылі, што яны супаўзвязаны, кожная з якіх мае атрыбут з вяскрасленнем да ўсходнага файла.
Тэставы апарат быў EliteDesk з процэсорам i5, 32 GB RAM і без GPU, і ўсё працавала афлайн. Рэзультаты таго аднаго тэставага запуску:
| Пункт | Рэзультат |
|---|---|
| Врэмя адміністрування запіту з початку до канцэру | 1 хвіліна 35,9 секунды; AnythingLLM паказуе 41,9 секунды на генераванне |
| Памяць AnythingLLM у стане спакою | прыблізна 440 МБ з 7,76 ГБ, выданых для выкарыстоўвання |
| Памяць віртуальнага апарата Ollama, якая выкарыстоўваецца | 7,8 ГБ з 19 ГБ |
| Памяць пад час выканання Mistral | прыблізна 6,5 ГБ |
| nomic-embed-text | прыблізна 360 МБ |
| Open WebUI | прыблізна 1 ГБ |
Разлік у прыблізна 54 секунды между двума часамі адміністрування не мае пояснення. Аднойчы можлівай прычыной ёсць перазавантажэнне модэлю з жорсткага дыска па часе работы Ollama.
Нічыга з гэтага не ўскоранае, і цяпер гэтага і не патрабуецца. Гэта першы дзень стварэння домашней лабораторыі RAG, якая ўсё шчэ шукае сваю форму, і гэта не ўзор для пораўнання з чым-небудзь серйозным. Будзе цікава паглядзець на гэтыя цыфры, калі местны апарат зможа апрацоўваць значна больш токенав на секунду.
Што застаецца пасля
Праект пачынаецца з простай меты — дазволіць местнай штучнай інтэлекту перазіраць вашы зьвісткі, — але вучыць і большаму колькасці рэчаў. У процэсе вы даведаецеся, як працюе RAG, чым займаюцца векторныя базы дадзеных, што робіць выкарыстоўванне інфармацыі эфектыва, і чаму правы кантэкст можа матыць большое значэнне, чым большая мадэль.
Што ўжо важлівей, рэзультатам ёсць тое, што вы сапраўды зможаце выкарыстоўваць. Дванаццац месцаў захаваных зьвістак больш не розбросаныя па папкі, а стаюць чымось, пра што можна проста запытацца. Усё гэта працуе на вжываным ноутбуку ў канцы кімнаты, што не ўжо так і паслядні варыянт для апарату, які ўжо меў пайсці на пенсію.
RAG працуе. Але розумеўце — тое вялікая іншая історыя.
Да чытання
Дасяжныя дакументы для AnythingLLM, Ollama, LanceDB і Obsidian паводліваюць усі дэталі. Аўтарскія статты пра тэхналогію RAG, „Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks“, адказваюць на пытанні, які стоіць за ўсім гэтым. Усе, што опісана, працюе на перэадрасаваным апаратным забезпечэнні, без вікорыстання воблака, без падпіскаў і без выходу дадзэнняў за межы сеткі.