{"id":67,"date":"2026-10-10T18:22:30","date_gmt":"2026-10-10T18:22:30","guid":{"rendered":"https:\/\/ivand.eu\/?p=67"},"modified":"2026-10-10T18:32:36","modified_gmt":"2026-10-10T18:32:36","slug":"building-localmind-a-privacy-first-agentic-rag-system","status":"publish","type":"post","link":"https:\/\/ivand.eu\/index.php\/2026\/10\/10\/building-localmind-a-privacy-first-agentic-rag-system\/","title":{"rendered":"Building LocalMind: A Privacy-First Agentic RAG System"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"484\" src=\"https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/Screenshot-2-2026-10-10-210247-1024x484.png\" alt=\"\" class=\"wp-image-68\" srcset=\"https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/Screenshot-2-2026-10-10-210247-1024x484.png 1024w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/Screenshot-2-2026-10-10-210247-300x142.png 300w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/Screenshot-2-2026-10-10-210247-768x363.png 768w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/Screenshot-2-2026-10-10-210247-1536x726.png 1536w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/Screenshot-2-2026-10-10-210247-2048x968.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">&lt;BG><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041f\u043e\u0432\u0435\u0447\u0435\u0442\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u201e\u0447\u0430\u0442 \u0441 \u0432\u0430\u0448\u0438\u044f PDF\u201c \u0441\u043f\u0438\u0440\u0430\u0442 \u0434\u043e \u0435\u0434\u0438\u043d \u0438 \u0441\u044a\u0449 \u0435\u0442\u0430\u043f: \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0444\u0430\u0439\u043b, \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0438 (embeddings), \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435 \u043d\u0430 \u043d\u0430\u0439-\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438 (top-k) \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u0433\u043e\u0432\u043e\u0440. \u0422\u043e\u0432\u0430 \u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 \u0437\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u043d\u0435 \u0442\u0430\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0430\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0438\u0442\u0435 \u0437\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0437\u043d\u0430\u043d\u0438\u044f \u0432 \u0440\u0435\u0430\u043b\u043d\u0430 \u0441\u0440\u0435\u0434\u0430.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0412\u044a\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u043e\u0442 \u0440\u0435\u0430\u043b\u043d\u0438\u044f \u0436\u0438\u0432\u043e\u0442 \u0441\u0430 \u043f\u043e-\u0441\u043b\u043e\u0436\u043d\u0438. \u041f\u043e\u043d\u044f\u043a\u043e\u0433\u0430 \u043e\u0442\u0433\u043e\u0432\u043e\u0440\u044a\u0442 \u0441\u0435 \u0441\u044a\u0434\u044a\u0440\u0436\u0430 \u0441\u0430\u043c\u043e \u0432\u044a\u0432 \u0432\u0430\u0448\u0438\u0442\u0435 \u043b\u0438\u0447\u043d\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438, \u0434\u0440\u0443\u0433 \u043f\u044a\u0442 \u2013 \u0441\u0430\u043c\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0430 \u043f\u043e\u043d\u044f\u043a\u043e\u0433\u0430 \u0441\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0438 \u0438 \u0434\u0432\u0430\u0442\u0430 \u0438\u0437\u0442\u043e\u0447\u043d\u0438\u043a\u0430. \u0422\u043e\u0447\u043d\u0438\u0442\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0438 \u0441\u0430 \u0441\u044a\u0449\u043e \u0442\u043e\u043b\u043a\u043e\u0432\u0430 \u0432\u0430\u0436\u043d\u0438, \u043a\u043e\u043b\u043a\u043e\u0442\u043e \u0438 \u0441\u043c\u0438\u0441\u044a\u043b\u044a\u0442. \u041e\u0441\u0432\u0435\u043d \u0442\u043e\u0432\u0430, \u0430\u043a\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u043f\u043e\u0441\u043e\u0447\u0438 \u0438\u0437\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0430 \u043e\u0442\u0433\u043e\u0432\u043e\u0440\u0430, \u0435 \u0442\u0440\u0443\u0434\u043d\u043e \u0434\u0430 \u045d \u0441\u0435 \u0433\u043b\u0430\u0441\u0443\u0432\u0430 \u0434\u043e\u0432\u0435\u0440\u0438\u0435.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0421\u044a\u0437\u0434\u0430\u0434\u043e\u0445 LocalMind, \u0437\u0430 \u0434\u0430 \u0438\u0437\u0441\u043b\u0435\u0434\u0432\u0430\u043c \u0442\u0430\u0437\u0438 \u043f\u0440\u0430\u0437\u043d\u0438\u043d\u0430 \u2013 \u043d\u0435 \u043a\u0430\u0442\u043e \u043f\u043e\u0440\u0435\u0434\u043d\u0438\u044f \u0447\u0430\u0442\u0431\u043e\u0442-\u0438\u0433\u0440\u0430\u0447\u043a\u0430, \u0430 \u043a\u0430\u0442\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0430, \u0446\u044f\u043b\u043e\u0441\u0442\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0442 \u0442\u0438\u043f\u0430 \u201eAgentic RAG\u201c (\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u0441 \u0440\u0430\u0437\u0448\u0438\u0440\u044f\u0432\u0430\u043d\u0435 \u0447\u0440\u0435\u0437 \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435 \u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0432\u0430\u043d\u0430 \u043e\u0442 \u0430\u0433\u0435\u043d\u0442\u0438). \u0422\u044f \u0440\u0430\u0431\u043e\u0442\u0438 \u043b\u043e\u043a\u0430\u043b\u043d\u043e \u043f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435, \u0438\u043d\u0442\u0435\u043b\u0438\u0433\u0435\u043d\u0442\u043d\u043e \u043d\u0430\u0441\u043e\u0447\u0432\u0430 \u0437\u0430\u044f\u0432\u043a\u0438\u0442\u0435 \u043a\u044a\u043c \u0441\u044a\u043e\u0442\u0432\u0435\u0442\u043d\u0438\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u0438 \u043f\u0440\u0430\u0432\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0430 \u043d\u0430 \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435 \u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u0437\u043c\u0435\u0440\u0438\u043c \u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u0435\u043d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044a\u0442, \u043a\u043e\u0439\u0442\u043e \u0438\u0441\u043a\u0430\u0445 \u0434\u0430 \u0440\u0435\u0448\u0430<br>\u0412\u0435\u0447\u0435 \u0431\u044f\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0438\u043b LocalBot \u2013 \u043d\u0430\u0441\u0442\u043e\u043b\u0435\u043d \u0430\u0441\u0438\u0441\u0442\u0435\u043d\u0442, \u043a\u043e\u0439\u0442\u043e \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 \u043e\u0442\u0432\u043e\u0440\u0435\u043d \u043a\u043e\u0434 (\u0432\u044a\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 GGUF) \u0438\u0437\u0446\u044f\u043b\u043e \u043e\u0444\u043b\u0430\u0439\u043d, \u043a\u0430\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u0430 \u0441\u043f\u043e\u0440\u0435\u0434 \u0445\u0430\u0440\u0434\u0443\u0435\u0440\u0430 \u0438 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0438 \u043f\u0440\u0438\u043a\u0430\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438. \u0422\u043e\u0437\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u043a\u0430\u0437\u0430, \u0447\u0435 \u043c\u043e\u0449\u043d\u0438\u044f\u0442 \u043b\u043e\u043a\u0430\u043b\u0435\u043d \u0438\u0437\u043a\u0443\u0441\u0442\u0432\u0435\u043d \u0438\u043d\u0442\u0435\u043b\u0435\u043a\u0442 \u0435 \u043d\u0430\u043f\u044a\u043b\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0438\u043c \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041b\u0438\u043f\u0441\u0432\u0430\u0448\u0435 \u043e\u0431\u0430\u0447\u0435 \u0440\u0430\u0431\u043e\u0442\u0435\u0449 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u044a\u043c \u0437\u0430 \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435 \u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f (retrieval pipeline) \u043e\u0442 \u043f\u0440\u043e\u0444\u0435\u0441\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u043a\u043b\u0430\u0441, \u0432\u043a\u043b\u044e\u0447\u0432\u0430\u0449:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0425\u0438\u0431\u0440\u0438\u0434\u043d\u043e \u0442\u044a\u0440\u0441\u0435\u043d\u0435 (\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u043d\u043e + \u043f\u043e \u043a\u043b\u044e\u0447\u043e\u0432\u0438 \u0434\u0443\u043c\u0438)<br>\u042f\u0441\u043d\u043e \u043d\u0430\u0441\u043e\u0447\u0432\u0430\u043d\u0435 \u043a\u044a\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 (\u0438\u0437\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 \u043b\u043e\u043a\u0430\u043b\u043d\u0438 \u0437\u043d\u0430\u043d\u0438\u044f \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442)<br>\u0426\u0438\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0442\u043e\u0447\u043d\u0438\u0446\u0438<br>\u042f\u0441\u0435\u043d \u043f\u044a\u0442 \u043e\u0442 \u0438\u0434\u0435\u044f\u0442\u0430 \u043f\u0440\u0435\u0437 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0442\u0430 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0442\u0430 \u0434\u043e \u043e\u0446\u0435\u043d\u043a\u0430\u0442\u0430 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438\u0442\u0435<br>\u0422\u043e\u0432\u0430 \u0441\u0430 \u043a\u043b\u044e\u0447\u043e\u0432\u0438\u0442\u0435 \u0443\u043c\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0430\u0442\u043e \u043f\u0440\u0435\u043c\u0438\u043d\u0430\u0432\u0430\u0442\u0435 \u043e\u0442 \u0435\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438 \u043a\u044a\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0438, \u043d\u0430 \u043a\u043e\u0438\u0442\u043e \u0445\u043e\u0440\u0430\u0442\u0430 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0440\u0430\u0437\u0447\u0438\u0442\u0430\u0442.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041a\u0430\u043a\u0432\u043e \u043f\u0440\u0430\u0432\u0438 LocalMind<br>LocalMind \u0435 \u0430\u0441\u0438\u0441\u0442\u0435\u043d\u0442 \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u044a\u0441 \u0437\u043d\u0430\u043d\u0438\u044f, \u043a\u043e\u0439\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u044f \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u0435\u043b\u043d\u043e\u0441\u0442\u0442\u0430 \u043d\u0430 \u043f\u044a\u0440\u0432\u043e \u043c\u044f\u0441\u0442\u043e. \u041f\u043e\u0441\u0442\u0430\u0432\u044f\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438 (PDF, DOCX, TXT, Markdown) \u0432 \u043f\u0430\u043f\u043a\u0430; \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 \u0433\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0432\u0430, \u0441\u044a\u0437\u0434\u0430\u0432\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441 \u0438 \u043e\u0442\u0433\u043e\u0432\u0430\u0440\u044f \u043d\u0430 \u0432\u044a\u043f\u0440\u043e\u0441\u0438 \u0447\u0440\u0435\u0437 \u043f\u0440\u043e\u0441\u0442 \u0446\u0438\u043a\u044a\u043b \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430 \u0430\u0433\u0435\u043d\u0442\u0430.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0417\u0430 \u0432\u0441\u0435\u043a\u0438 \u0432\u044a\u043f\u0440\u043e\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 \u043c\u043e\u0436\u0435:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0414\u0430 \u0442\u044a\u0440\u0441\u0438 \u0441\u0430\u043c\u043e \u0432\u044a\u0432 \u0432\u0430\u0448\u0438\u0442\u0435 \u043b\u043e\u043a\u0430\u043b\u043d\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438<br>\u0414\u0430 \u0442\u044a\u0440\u0441\u0438 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e (\u0447\u0440\u0435\u0437 DuckDuckGo, \u0431\u0435\u0437 \u043d\u0443\u0436\u0434\u0430 \u043e\u0442 API \u043a\u043b\u044e\u0447)<br>\u0414\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u0438 \u0434\u0432\u0430\u0442\u0430 \u0438\u0437\u0442\u043e\u0447\u043d\u0438\u043a\u0430<br>\u0414\u0430 \u043e\u0442\u0433\u043e\u0432\u043e\u0440\u0438 \u0431\u0435\u0437 \u0432\u044a\u043d\u0448\u043d\u043e \u0442\u044a\u0440\u0441\u0435\u043d\u0435, \u043a\u043e\u0433\u0430\u0442\u043e \u0442\u043e\u0432\u0430 \u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u044a\u0447\u043d\u043e<br>\u041e\u0442\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435 \u0441\u0435 \u0431\u0430\u0437\u0438\u0440\u0430\u0442 \u043d\u0430 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438 \u0432\u043a\u043b\u044e\u0447\u0432\u0430\u0442 \u043f\u0440\u0435\u043f\u0440\u0430\u0442\u043a\u0438 \u043a\u044a\u043c \u0438\u0437\u0442\u043e\u0447\u043d\u0438\u0446\u0438\u0442\u0435, \u043a\u043e\u0433\u0430\u0442\u043e \u0441\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u0438\u044f\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0432\u0430 \u0447\u0430\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0438\u0437\u0433\u0440\u0430\u0434\u0435\u043d\u043e \u0441\u044a\u0441 Streamlit: \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0442\u0430 \u0437\u0430 \u0438\u0437\u0431\u043e\u0440 \u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u0441\u0430 \u0432\u0438\u0434\u0438\u043c\u0438, \u0438\u0437\u0442\u043e\u0447\u043d\u0438\u0446\u0438\u0442\u0435 \u0441\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0435\u043d\u0438 \u043a\u0430\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u043d\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 (chips), \u0430 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043f\u0440\u0435\u0433\u043b\u0435\u0434\u0430\u043d \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e. \u0422\u0430\u0437\u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442 \u0435 \u0442\u044a\u0440\u0441\u0435\u043d \u0435\u0444\u0435\u043a\u0442. \u0410\u043a\u043e \u043d\u0435 \u0432\u0438\u0436\u0434\u0430\u0442\u0435 \u0437\u0430\u0449\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 \u0435 \u043e\u0442\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0430 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u043d\u0430\u0447\u0438\u043d, \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u044f \u043f\u043e\u0434\u043e\u0431\u0440\u0438\u0442\u0435. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0442\u0430 \u043d\u0430 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u0435\u0437\u0438\u043a<br>\u041a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044a\u0442 (pipeline) \u0435 \u0443\u043c\u0438\u0448\u043b\u0435\u043d\u043e \u043e\u043f\u0440\u043e\u0441\u0442\u0435\u043d \u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u043d:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0412\u0445\u043e\u0434\u043d\u0438 \u0434\u0430\u043d\u043d\u0438 (Ingestion)<br>\u0417\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438 \u2192 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u043f\u043e\u043a\u0440\u0438\u0432\u0430\u0449\u0438 \u0441\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0438 \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u0438 (\u0444\u0430\u0439\u043b, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430) \u2192 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0435\u043c\u0431\u0435\u0434\u0438\u043d\u0433\u0438 (\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044f\u043d\u0438\u044f) \u0447\u0440\u0435\u0437 SentenceTransformers \u2192 \u0441\u044a\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432 Chroma.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0418\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435 (Retrieval)<br>\u0425\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0442\u043e \u0442\u044a\u0440\u0441\u0435\u043d\u0435 \u0441\u044a\u0447\u0435\u0442\u0430\u0432\u0430:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041f\u043b\u044a\u0442\u043d\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0438 (\u0441\u043c\u0438\u0441\u044a\u043b)<br>BM25 (\u0442\u043e\u0447\u043d\u0438 \u043a\u043b\u044e\u0447\u043e\u0432\u0438 \u0434\u0443\u043c\u0438)<br>\u0420\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438\u0442\u0435 \u0441\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u0442 \u0438 \u043e\u0431\u0435\u0434\u0438\u043d\u044f\u0432\u0430\u0442 \u0441 \u0442\u0435\u0433\u043b\u043e\u0432\u0435\u043d \u043a\u043e\u0435\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u03b1, \u043a\u043e\u0439\u0442\u043e \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430. \u0427\u0438\u0441\u0442\u043e\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e \u0442\u044a\u0440\u0441\u0435\u043d\u0435 \u0447\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u0434\u043e\u0432\u0435 \u0437\u0430 \u0433\u0440\u0435\u0448\u043a\u0438, \u0438\u043c\u0435\u043d\u0430 \u043d\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438 \u0438\u043b\u0438 \u043f\u0440\u0430\u0432\u043d\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0438. \u0427\u0438\u0441\u0442\u043e\u0442\u043e \u0442\u044a\u0440\u0441\u0435\u043d\u0435 \u043f\u043e \u043a\u043b\u044e\u0447\u043e\u0432\u0438 \u0434\u0443\u043c\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u0444\u0440\u0430\u0437\u0438. \u0425\u0438\u0431\u0440\u0438\u0434\u043d\u0438\u044f\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0435 \u043f\u0440\u0430\u0433\u043c\u0430\u0442\u0438\u0447\u043d\u0430 \u201e\u0437\u043b\u0430\u0442\u043d\u0430 \u0441\u0440\u0435\u0434\u0430\u201c.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0410\u0433\u0435\u043d\u0442 (Agent)<br>\u041b\u0435\u043a \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440 (router) \u0440\u0435\u0448\u0430\u0432\u0430 \u043a\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u0430 \u0438\u0437\u0432\u0438\u043a\u0430, \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430 \u0433\u043e, \u0441\u0433\u043b\u043e\u0431\u044f\u0432\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u043d\u0438\u044f \u043e\u0442\u0433\u043e\u0432\u043e\u0440 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0437\u0430 \u0446\u0438\u0442\u0438\u0440\u0430\u043d\u0435. \u0422\u043e\u0432\u0430 \u043d\u0435 \u0435 \u0442\u0435\u0436\u043a\u0430 \u043c\u043d\u043e\u0433\u043e\u0430\u0433\u0435\u043d\u0442\u043d\u0430 \u0440\u0430\u043c\u043a\u0430 (framework). \u0422\u044f \u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u044a\u0447\u043d\u0430, \u0437\u0430 \u0434\u0430 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0437\u0430 \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435, \u0431\u0435\u0437 \u0438\u0437\u043b\u0438\u0448\u043d\u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 (Inference)<br>\u041b\u043e\u043a\u0430\u043b\u043d\u0438 GGUF \u043c\u043e\u0434\u0435\u043b\u0438 \u0447\u0440\u0435\u0437 llama-cpp-python, \u0441 \u0445\u0430\u0440\u0434\u0443\u0435\u0440\u043d\u043e \u0440\u0430\u0437\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0435, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0430\u043d\u043e \u043e\u0442 LocalBot (CUDA, Metal, ROCm \u0438\u043b\u0438 CPU). \u041d\u0435 \u0441\u0435 \u0438\u0437\u0438\u0441\u043a\u0432\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043d\u043e\u0441\u0442.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041a\u043b\u044e\u0447\u043e\u0432\u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0441\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<br>\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u043d\u0430\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 (Local-first).<br>\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u043d\u0438\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438 \u043d\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u043f\u0443\u0441\u043a\u0430\u0442 \u043c\u0430\u0448\u0438\u043d\u0430\u0442\u0430. LocalMind \u0438\u0437\u0432\u044a\u0440\u0448\u0432\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0435\u043c\u0431\u0435\u0434\u0438\u043d\u0433\u0438 \u0438 \u043e\u0442\u0433\u043e\u0432\u043e\u0440\u0438 \u043b\u043e\u043a\u0430\u043b\u043d\u043e. \u0423\u0435\u0431 \u0442\u044a\u0440\u0441\u0435\u043d\u0435\u0442\u043e \u0435 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u043d\u043e \u0438 \u0438\u0437\u0438\u0441\u043a\u0432\u0430 \u0438\u0437\u0440\u0438\u0447\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0425\u0438\u0431\u0440\u0438\u0434\u043d\u043e \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0447\u0438\u0441\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e.<br>\u0422\u043e\u0432\u0430 \u0435 \u0435\u0434\u043d\u043e \u043e\u0442 \u043f\u044a\u0440\u0432\u0438\u0442\u0435 \u043f\u043e\u0434\u043e\u0431\u0440\u0435\u043d\u0438\u044f, \u043a\u043e\u0438\u0442\u043e \u043f\u0440\u0438\u0434\u0430\u0432\u0430\u0442 \u043d\u0430 RAG \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 \u0443\u0441\u0435\u0449\u0430\u043d\u0435 \u0437\u0430 \u201e\u0438\u0441\u0442\u0438\u043d\u0441\u043a\u0438\u201c \u043f\u0440\u043e\u0434\u0443\u043a\u0442. \u041e\u0441\u0432\u0435\u043d \u0442\u043e\u0432\u0430 \u0435 \u043b\u0435\u0441\u043d\u043e \u0437\u0430 \u043e\u0431\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430 \u0442\u0435\u0441\u0442\u0432\u0430\u043d\u0435 \u0447\u0440\u0435\u0437 \u043f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 (ablation study): \u043f\u0440\u043e\u043c\u0435\u043d\u044f\u0442\u0435 \u03b1 \u0438 \u0438\u0437\u043c\u0435\u0440\u0432\u0430\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0430.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0410\u0433\u0435\u043d\u0442\u044a\u0442 \u043a\u0430\u0442\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440, \u0430 \u043d\u0435 \u043a\u0430\u0442\u043e \u0441\u0430\u043c\u043e\u0446\u0435\u043b\u043d\u043e \u0437\u0440\u0435\u043b\u0438\u0449\u0435.<br>\u0421\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0442\u0430 \u043d\u0435 \u0435 \u0432 \u201e\u0430\u0433\u0435\u043d\u0442\u0438 \u0437\u0430\u0440\u0430\u0434\u0438 \u0441\u0430\u043c\u0438\u0442\u0435 \u0430\u0433\u0435\u043d\u0442\u0438\u201c. \u0421\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0442\u0430 \u0435 \u0432 \u0438\u0437\u0431\u043e\u0440\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u043d\u0438\u044f \u0438\u0437\u0442\u043e\u0447\u043d\u0438\u043a \u043d\u0430 \u0437\u043d\u0430\u043d\u0438\u044f \u0437\u0430 \u0432\u0441\u044f\u043a\u0430 \u0437\u0430\u044f\u0432\u043a\u0430 \u0438 \u0432 \u0447\u0435\u0441\u0442\u043d\u043e\u0442\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u0435\u0443\u0441\u043f\u0435\u0445, \u043a\u043e\u0433\u0430\u0442\u043e \u043d\u0430\u043b\u0438\u0447\u043d\u0438\u0442\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0441\u0442\u0432\u0430 \u0441\u0430 \u0441\u043b\u0430\u0431\u0438.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0442\u0430 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043a\u0430\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b.<br>\u0422\u0440\u0435\u0442\u0438\u0440\u0430\u0445 LocalMind \u043a\u0430\u0442\u043e \u043c\u0430\u043b\u044a\u043a \u043f\u0440\u043e\u0434\u0443\u043a\u0442: \u044f\u0441\u043d\u0438 \u043c\u043e\u0434\u0443\u043b\u0438, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0447\u0440\u0435\u0437 .env, \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u0430 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438\u0442\u0435, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u0438 \u0431\u0435\u043b\u0435\u0436\u043a\u0438 \u0438 \u043f\u043b\u0430\u043d \u0437\u0430 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 (roadmap). \u0422\u0430\u0437\u0438 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u0435 \u0441\u044a\u0449\u043e \u0442\u043e\u043b\u043a\u043e\u0432\u0430 \u0432\u0430\u0436\u043d\u0430, \u043a\u043e\u043b\u043a\u043e\u0442\u043e \u0438 \u0441\u0430\u043c\u043e\u0442\u043e \u0438\u0437\u0432\u0438\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u0430.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041a\u0430\u043a\u0432\u043e \u0431\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u043b \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430<br>\u0415\u0434\u043d\u0430 \u0441\u0435\u0440\u0438\u043e\u0437\u043d\u0430 RAG \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0435 \u043d\u0443\u0436\u0434\u0430\u0435 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u0430 \u043d\u0435 \u0441\u0430\u043c\u043e \u043e\u0442 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438. \u0421\u043b\u0435\u0434\u0432\u0430\u0449\u0438 \u0441\u0442\u044a\u043f\u043a\u0438 \u0432 \u043c\u043e\u044f \u0441\u043f\u0438\u0441\u044a\u043a:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0417\u043b\u0430\u0442\u0435\u043d \u043d\u0430\u0431\u043e\u0440 \u0437\u0430 \u043e\u0446\u0435\u043d\u043a\u0430 \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 (\u0432\u044f\u0440\u043d\u043e\u0441\u0442, \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u043e\u0441\u0442, \u043f\u0440\u0435\u0446\u0438\u0437\u043d\u043e\u0441\u0442 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430)<br>\u041f\u0440\u0435\u043d\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u0438 \u043f\u043e-\u0434\u043e\u0431\u0440\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0437\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438<br>\u041a\u0430\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438 \u043e\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<br>\u0422\u044a\u043d\u044a\u043a \u0441\u043b\u043e\u0439 FastAPI \u0437\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f<br>\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0441\u0442: \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430 \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435, \u043e\u0431\u0440\u0430\u0442\u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u043e\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438\u0442\u0435<br>\u0422\u043e\u0432\u0430 \u0441\u0430 \u0441\u044a\u0449\u0438\u0442\u0435 \u0441\u0442\u044a\u043f\u043a\u0438, \u043a\u043e\u0438\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u0435\u043c\u0430\u0442\u0435, \u043a\u043e\u0433\u0430\u0442\u043e \u043f\u0440\u0435\u043c\u0435\u0441\u0442\u0432\u0430\u0442\u0435 PoC \u043a\u044a\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e: \u0438\u0437\u043c\u0435\u0440\u0432\u0430\u043d\u0435, \u0437\u0430\u0442\u044f\u0433\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435\u0442\u043e, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 API, \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u0442\u043e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0417\u0430\u0449\u043e \u0441\u044a\u0437\u0434\u0430\u0434\u043e\u0445 \u0442\u043e\u0432\u0430<br>\u0413\u0440\u0438\u0436\u0430 \u043c\u0435 \u0435 \u0437\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u0435\u043d \u0438\u0437\u043a\u0443\u0441\u0442\u0432\u0435\u043d \u0438\u043d\u0442\u0435\u043b\u0435\u043a\u0442 \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u0438, \u043a\u043e\u0438\u0442\u043e \u0437\u0430\u0447\u0438\u0442\u0430\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u0438\u0442\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u0438\u0442\u0435, \u043f\u0440\u0430\u0432\u044f\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0442\u0430 \u0437\u0430 \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435 \u0432\u0438\u0434\u0438\u043c\u0438 \u0438 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0431\u044a\u0434\u0430\u0442 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438 \u043e\u0442 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0438 \u0438 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u0438.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LocalBot \u043f\u043e\u043a\u0430\u0437\u0430, \u0447\u0435 \u043b\u043e\u043a\u0430\u043b\u043d\u0438\u044f\u0442 \u0438\u0437\u0432\u043e\u0434 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0443\u0441\u0435\u0442\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e\u0442\u043e \u043d\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430.<br>LocalMind \u043f\u043e\u043a\u0430\u0437\u0432\u0430 \u043a\u0430\u043a \u0442\u043e\u0437\u0438 \u0438\u0437\u0432\u043e\u0434 \u0441\u0435 \u043f\u0440\u0435\u0432\u0440\u044a\u0449\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0442 \u0437\u043d\u0430\u043d\u0438\u044f: \u043f\u0440\u0438\u0435\u043c\u0430\u043d\u0435, \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435, \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0430\u043d\u0435, \u0446\u0438\u0442\u0438\u0440\u0430\u043d\u0435, \u043f\u043e\u0434\u043e\u0431\u0440\u044f\u0432\u0430\u043d\u0435.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0410\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0438\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 RAG, \u0430\u0433\u0435\u043d\u0442\u0438 \u0438\u043b\u0438 \u043b\u043e\u043a\u0430\u043b\u043d\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u0437\u0430 LLM, \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u0442\u043e \u0435 \u043e\u0442\u0432\u043e\u0440\u0435\u043d\u043e \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0442\u0430 \u0435 \u0443\u043c\u0438\u0448\u043b\u0435\u043d\u043e \u0447\u0435\u0442\u043b\u0438\u0432\u0430. \u041e\u0431\u0440\u0430\u0442\u043d\u0430\u0442\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u0438 \u043a\u0440\u0438\u0442\u0438\u043a\u0430\u0442\u0430 \u0441\u0430 \u0434\u043e\u0431\u0440\u0435 \u0434\u043e\u0448\u043b\u0438.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>GitHub:<\/strong> <a href=\"https:\/\/github.com\/Ivan-Dambulov\" target=\"_blank\" rel=\"noopener\">LocalMind<\/a> \u00b7 <a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalBot\" target=\"_blank\" rel=\"noopener\">LocalBot<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&lt;EN><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Most \u201cchat with your PDF\u201d demos stop at the same place: load a file, embed chunks, retrieve top-k, generate an answer. That is a useful learning exercise. It is not how real knowledge systems behave.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Real questions are messier. Sometimes the answer is only in your private documents. Sometimes it is only on the web. Sometimes you need both. Exact terms matter as much as meaning. And if the system cannot say <em>where<\/em> an answer came from, it is hard to trust.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I built <strong>LocalMind<\/strong> to explore that gap \u2014 not as another toy chatbot, but as a small, end-to-end Agentic RAG system that stays local by default, routes tools intelligently, and keeps retrieval measurable and transparent.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The problem I wanted to solve<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I had already built <strong>LocalBot<\/strong>, a desktop assistant that runs open-source GGUF models fully offline, with hardware-aware inference, web search, and document attachment. It proved that capable local AI is practical on a normal machine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What it did not yet demonstrate was a production-style retrieval pipeline:<\/p>\n\n\n<ul class=\"wp-block-list is-layout-flex wp-container-core-list-is-layout-c4cf3051 wp-block-list-is-layout-flex\" style=\"\">\n<li>Hybrid search (semantic + keyword)<\/li>\n\n\n\n<li>Explicit tool routing (local knowledge vs web)<\/li>\n\n\n\n<li>Source citations<\/li>\n\n\n\n<li>A clear path from idea &rarr; architecture &rarr; implementation &rarr; evaluation<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Those are the skills that matter when you move from experiments to systems people can rely on.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What LocalMind does<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">LocalMind is a privacy-first knowledge assistant. You put documents in a folder (PDF, DOCX, TXT, Markdown). The system ingests them, builds a vector index, and answers questions through a simple agent loop.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For each question it can:<\/p>\n\n\n<ol class=\"wp-block-list is-layout-flex wp-container-core-list-is-layout-c4cf3051 wp-block-list-is-layout-flex\" style=\"\">\n<li>Search only your local documents<\/li>\n\n\n\n<li>Search the public web (DuckDuckGo, no API key)<\/li>\n\n\n\n<li>Use both<\/li>\n\n\n\n<li>Answer without external retrieval when that is enough<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Answers are grounded in retrieved context and include source references when documents are used.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The UI is a Streamlit chat app: tool decisions are visible, sources are shown as chips, and retrieved context can be inspected. That transparency is intentional. If you cannot see <em>why<\/em> the system answered the way it did, you cannot improve it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Architecture in plain terms<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The pipeline is deliberately simple and modular:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ingestion<\/strong><br>Load documents \u2192 split into overlapping chunks with metadata (file, page) \u2192 embed with SentenceTransformers \u2192 store in Chroma.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Retrieval<\/strong><br>Hybrid search combines:<\/p>\n\n\n<ul class=\"wp-block-list is-layout-flex wp-container-core-list-is-layout-c4cf3051 wp-block-list-is-layout-flex\" style=\"\">\n<li>Dense vectors (meaning)<\/li>\n\n\n\n<li>BM25 (exact keywords)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Scores are normalized and fused with a weight \u03b1 you can tune. Pure vector search often misses error codes, product names, or legal phrases. Pure keyword search misses paraphrases. Hybrid is a pragmatic middle ground.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Agent<\/strong><br>A lightweight router decides which tool to call, runs it, assembles context, then generates the final answer with citation instructions. This is not a heavy multi-agent framework. It is enough to show dynamic retrieval strategy without unnecessary complexity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Inference<\/strong><br>Local GGUF models via llama-cpp-python, with hardware detection adapted from LocalBot (CUDA, Metal, ROCm, or CPU). No cloud requirement for core use.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Design choices that mattered<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Local-first.<\/strong><br>Sensitive documents should not need to leave the machine. LocalMind runs embeddings and generation locally. Web search is optional and explicit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Hybrid retrieval over pure vectors.<\/strong><br>This is one of the first upgrades that makes RAG feel \u201creal.\u201d It is also easy to explain and easy to ablate: change \u03b1 and measure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Agent as a router, not a spectacle.<\/strong><br>The value is not \u201cagents for agents\u2019 sake.\u201d The value is choosing the right knowledge source per query and failing honestly when evidence is weak.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Project structure as a signal.<\/strong><br>I treated LocalMind like a small product: clear modules, config via .env, a work breakdown, architecture notes, and a roadmap. That discipline matters as much as the model call.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What I would do next<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A serious RAG system needs numbers, not only demos. Next steps on my list:<\/p>\n\n\n<ul class=\"wp-block-list is-layout-flex wp-container-core-list-is-layout-c4cf3051 wp-block-list-is-layout-flex\" style=\"\">\n<li>A golden evaluation set and basic metrics (faithfulness, relevance, context precision)<\/li>\n\n\n\n<li>A reranker and better chunking strategies<\/li>\n\n\n\n<li>Document upload from the UI<\/li>\n\n\n\n<li>A thin FastAPI layer for integration<\/li>\n\n\n\n<li>Observability: latency, retrieval quality, user feedback<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Those are the same steps you take when moving a PoC toward production: measure, tighten retrieval, expose an API, monitor behavior.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why I built this<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I care about practical Generative AI \u2014 systems that respect data boundaries, make retrieval decisions visible, and can be reasoned about by engineers and stakeholders.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LocalBot showed that local inference can feel product-quality.<br>LocalMind shows how that inference becomes a knowledge system: ingest, retrieve, route, cite, improve.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you work on RAG, agents, or local LLM tooling, the repo is open and the architecture is intentionally readable. Feedback and critique are welcome.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>GitHub:<\/strong> <a href=\"https:\/\/github.com\/Ivan-Dambulov\" target=\"_blank\" rel=\"noopener\">LocalMind<\/a> \u00b7 <a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalBot\" target=\"_blank\" rel=\"noopener\">LocalBot<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Ivan Dambulov \u2014 building practical AI tools with a focus on local systems, RAG, and clear engineering.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&lt;BG> \u041f\u043e\u0432\u0435\u0447\u0435\u0442\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u201e\u0447\u0430\u0442 \u0441 \u0432\u0430\u0448\u0438\u044f PDF\u201c \u0441\u043f\u0438\u0440\u0430\u0442 \u0434\u043e \u0435\u0434\u0438\u043d \u0438 \u0441\u044a\u0449 \u0435\u0442\u0430\u043f: \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0444\u0430\u0439\u043b, \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0438 (embeddings), \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435 \u043d\u0430 \u043d\u0430\u0439-\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438 (top-k) \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u0433\u043e\u0432\u043e\u0440. \u0422\u043e\u0432\u0430 \u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 \u0437\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u043d\u0435 \u0442\u0430\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0430\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0438\u0442\u0435 \u0437\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0437\u043d\u0430\u043d\u0438\u044f \u0432 \u0440\u0435\u0430\u043b\u043d\u0430 \u0441\u0440\u0435\u0434\u0430. \u0412\u044a\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u043e\u0442 \u0440\u0435\u0430\u043b\u043d\u0438\u044f \u0436\u0438\u0432\u043e\u0442 \u0441\u0430 \u043f\u043e-\u0441\u043b\u043e\u0436\u043d\u0438. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-67","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/posts\/67","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/comments?post=67"}],"version-history":[{"count":3,"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/posts\/67\/revisions"}],"predecessor-version":[{"id":71,"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/posts\/67\/revisions\/71"}],"wp:attachment":[{"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/media?parent=67"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/categories?post=67"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/tags?post=67"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}