{"id":501035,"date":"2026-10-30T14:32:18","date_gmt":"2026-10-30T11:32:18","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=501035"},"modified":"2026-10-30T14:32:18","modified_gmt":"2026-10-30T11:32:18","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=501035","title":{"rendered":"\u041f\u0430\u0439\u043f\u044b OpenWebUI: \u0437\u0430\u0447\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0442\u0430\u043c, \u0433\u0434\u0435 \u00ab\u0432\u0441\u0451 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445\u00bb"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u0410\u0432\u0442\u043e\u0440: \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u041a\u0430\u0437\u0430\u043d\u0446\u0435\u0432, \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043e\u0442\u0434\u0435\u043b\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430<\/em><\/p>\n<p>OpenWebUI \u0443\u043c\u0435\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0435: \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u0431\u0430\u0437\u0443 \u0437\u043d\u0430\u043d\u0438\u0439 (RAG), \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b (MCP\/tools), \u043d\u0430\u0432\u044b\u043a\u0438 \u0438 \u0442. \u0434. \u0421 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0443 \u0441\u0440\u0435\u0434\u044b \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435, \u0438 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u043b\u044f \u0418\u0418-\u0431\u043e\u0442\u0430 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u0431\u0430\u0437\u0435 \u0447\u0435\u0433\u043e-\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 Qwen-3.8 \u0438\u043b\u0438 Gemma 4, \u043d\u0430\u0432\u0435\u0441\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0451 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043d\u0443\u0436\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u0430\u0437\u0443 \u0437\u043d\u0430\u043d\u0438\u0439 \u2014 \u0438 \u0433\u043e\u0442\u043e\u0432\u043e!<\/p>\n<p>\u0421\u043a\u0430\u0436\u0443 \u0447\u0435\u0441\u0442\u043d\u043e: \u043c\u044b \u0432 HOSTKEY \u0442\u0430\u043a \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438. \u0410 \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0439\u043f\u043e\u0432 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u0431\u043e\u0442\u043e\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043c\u044f\u0433\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043d\u0435 \u00ab\u043a\u0430\u043a \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb \u2014 \u044d\u0442\u043e \u0432\u0441\u0451 \u0435\u0441\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 OpenWebUI, \u0430 \u00ab\u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0445 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u00bb \u0438 \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0430\u0439\u043f\u044b \u0434\u043b\u044f \u0431\u043e\u0442\u043e\u0432 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 Remote Hands Request.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0418\u0418 \u0447\u0430\u0442-\u0431\u043e\u0442 \u0441 OpenWebUI \u0438 Ollama \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/strong><\/p>\n<p>\u0417\u0430\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c AI-\u0447\u0430\u0442-\u0431\u043e\u0442\u043e\u043c \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p align=\"left\"><a href=\"https:\/\/hostkey.ru\/apps\/machine-learning\/ollama-ai-chatbot\/\">\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c<\/a><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438<\/h3>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c <strong>hostkeyrurhr<\/strong>, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043d\u0430 <strong>gemma4:26b-a4b-it-qat<\/strong>. \u0412 \u0435\u0451 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 (\u043a\u0430\u043a \u0438\u0445 \u0432\u0438\u0434\u043d\u043e \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u0438\u0437 OpenWebUI) \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<ul>\n<li>\n<p>Function Calling \u2014 Legacy;<\/p>\n<\/li>\n<li>\n<p>Temperature \u2014 0.2, think (Ollama) \u2014 Off, draft_num_predict \u2014 1;<\/p>\n<\/li>\n<li>\n<p>Knowledge \u2014 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f hostkey_ru, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438;<\/p>\n<\/li>\n<li>\n<p>Tools \u2014 status_ru_mcp, docs_url_ru (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0430\u0439\u0442\u0430, \u0438\u043d\u0432\u0430\u043f\u0438 \u0438 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u043e\u0432 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0438 MCP \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 VPS \u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430).<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/90\/fe\/96\/90fe96d528573f53410b9ad041d2515e.png\" width=\"2048\" height=\"1147\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/90\/fe\/96\/90fe96d528573f53410b9ad041d2515e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/90\/fe\/96\/90fe96d528573f53410b9ad041d2515e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u043c\u043e\u0434\u0435\u043b\u0438 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 <strong>get_vps_list<\/strong> \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e MCP \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a VPS \u0441 \u0446\u0435\u043d\u0430\u043c\u0438 \u043f\u043e \u043b\u043e\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043f\u0440\u043e\u0441\u0438\u043c \u043f\u0440\u043e \u0434\u0435\u0448\u0451\u0432\u044b\u0439 VPS \u0432 \u0413\u0435\u0440\u043c\u0430\u043d\u0438\u0438.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/49\/76\/1c\/49761cfd7e942274bf6f8a62fcd68c8e.png\" width=\"1323\" height=\"687\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/49\/76\/1c\/49761cfd7e942274bf6f8a62fcd68c8e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/49\/76\/1c\/49761cfd7e942274bf6f8a62fcd68c8e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u0446\u0435\u043d\u044b \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 API \u0432 Invapi, \u0438 \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430\u0448 MCP-\u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0437\u0430 \u043d\u0438\u043c\u0438 \u043d\u0435 \u0438\u0434\u0451\u0442. \u041e\u0442\u0432\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 RAG: \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0430 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 Native \u0440\u0435\u0436\u0438\u043c, \u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0435\u0449\u0451 \u0445\u0443\u0436\u0435 \u0438 \u00ab\u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb \u0443\u0436\u0435 \u0438 RAG.<\/p>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0447\u0435\u0440\u0435\u0437 API (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 CURL) \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0435\u0449\u0451 \u0432\u0435\u0441\u0435\u043b\u0435\u0435: \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0433\u043e\u043b\u044b\u0439 <strong>tool_call<\/strong> \u0441 \u043f\u0443\u0441\u0442\u044b\u043c <strong>content<\/strong>. \u0412\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u043f\u0435\u0440\u0435\u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u044f\u0437\u0430\u043d \u043a\u043b\u0438\u0435\u043d\u0442 (\u0447\u0442\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 OpenWebUI). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438, \u0447\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 \u043e\u0442\u0432\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u0441\u043c\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u0441 RAG \u0438 \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c, \u043d\u0435\u0442.<\/p>\n<p>\u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u0430\u0439\u043f\u0430\u043c\u0438, \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0442\u043e\u0438\u0442 Legacy \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430 Native.<\/p>\n<p><strong>Legacy (Default).<\/strong> OpenWebUI \u043d\u0435 \u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u0430\u043c\u0430 \u00ab\u0443\u043c\u0435\u0435\u0442\u00bb \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043e\u0431\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0434\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442), \u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u043d\u0430 \u0443\u0436\u0435 \u043f\u043e \u043d\u0438\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0432 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0442\u0435\u043c \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f. \u042d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e, \u043d\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f: \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 JSON \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442.<\/p>\n<p><strong>Native (Agentic).<\/strong> \u041c\u043e\u0434\u0435\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 API-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0430 \u043d\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435. \u041c\u043e\u0434\u0435\u043b\u044c, \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0442 tool calling, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435. OpenWebUI \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u043d\u0435 \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u043c\u0435\u043b\u0430 \u0432 \u0432\u0438\u0434\u0443.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 Qwen3 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438 \u0432 \u0442\u043e\u043c \u0438 \u0434\u0440\u0443\u0433\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0442\u043e \u0441 Gemma 4 Native \u0440\u0435\u0436\u0438\u043c \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0438 it (Instruction-Tuned) \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u0431\u0435\u0440\u0451\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u043f\u0430\u0439\u043f (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0443).<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u043d\u0435 Qwen, \u0430 Gemma? \u0414\u0435\u043b\u043e \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u0421 \u043e\u0442\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f Gemma 4 \u0432\u044b\u0434\u0430\u0451\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u044b\u0439 (\u0435\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u043f\u043e\u0445\u0443\u0436\u0435) \u043e\u0442\u0432\u0435\u0442 \u0437\u0430 5\u20137 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u0441\u0432\u044f\u0437\u043a\u0435 \u0438\u0437 \u0434\u0432\u0443\u0445 16 \u0413\u0411 A4000, \u0430 Qwen 3 \u00ab\u0434\u0443\u043c\u0430\u0435\u0442\u00bb \u043f\u043e 30\u201340 \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<h3>Pipe (function) \u0438 Valves<\/h3>\n<p>Pipe (\u043e\u043d \u0436\u0435 function) \u2014 \u044d\u0442\u043e <a href=\"https:\/\/docs.openwebui.com\/features\/extensibility\/plugin\/functions\/pipe\/\">\u043f\u043b\u0430\u0433\u0438\u043d OpenWebUI<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e Python-\u043a\u043b\u0430\u0441\u0441 \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c pipe, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0442\u0435\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443, JSON \u0438\u043b\u0438 \u043f\u043e\u0442\u043e\u043a; \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u0439\u043f \u0432\u043e\u043b\u0435\u043d \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0440\u0430\u0437 \u0445\u043e\u0434\u0438\u0442\u044c \u0432 LLM, \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c MCP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u043c\u043f\u0442 \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c\/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c RAG.<\/p>\n<p>\u041e\u043d \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u00ab\u043e\u0434\u043d\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435\u00bb \u0432 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440: \u043f\u0430\u0439\u043f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 OpenWebUI \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0430, \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u00ab\u0438\u0437\u0432\u043d\u0435\u00bb \u043f\u043e API, \u0430 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u0445 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432 \u0432\u044b\u0437\u043e\u0432\u0435 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0430\u0439\u043f\u0430.\u00a0<\/p>\n<p>Valves \u2014 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0430\u0439\u043f\u0430, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u044e\u0449\u0430\u044f, \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435 \u00ab\u043f\u0440\u043e\u0442\u0435\u043a\u0430\u044e\u0442\u00bb \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 Pipe \u043a\u043b\u0430\u0441\u0441-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a BaseModel (\u043f\u043b\u044e\u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 UserValves \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a): \u043e\u043d \u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (\u043a\u043b\u044e\u0447\u0438, URL, \u043f\u043e\u0440\u043e\u0433\u0438), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0411\u0414, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438 \u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u00ab\u0440\u0443\u0447\u043a\u0438\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0439\u043f\u0430 \u0431\u0435\u0437 \u043f\u0440\u0430\u0432\u043a\u0438 \u043a\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u043d\u044e.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/f3\/74\/57\/f37457fc69873dddb3d9db59acf29f82.png\" width=\"1201\" height=\"903\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/f3\/74\/57\/f37457fc69873dddb3d9db59acf29f82.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/f3\/74\/57\/f37457fc69873dddb3d9db59acf29f82.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>Valves \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0449\u0438 \u0432 \u043d\u0438\u0445 \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0438\u0445 \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0430\u0439\u043f\u0430\u0445 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u2014 \u043d\u0430\u043c \u043f\u0440\u043e\u0449\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u043f\u0442\u044b \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043a\u043e\u0434\u0435 \u043f\u0430\u0439\u043f\u0430.<\/p>\n<p>\u0421\u0430\u043c\u0438 \u043f\u0430\u0439\u043f\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <strong>Admin Panel &#8212; Function<\/strong>.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/0e\/21\/97\/0e219719e6cb9a1c495ea614a4ff84c9.png\" width=\"1164\" height=\"553\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/0e\/21\/97\/0e219719e6cb9a1c495ea614a4ff84c9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/0e\/21\/97\/0e219719e6cb9a1c495ea614a4ff84c9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e<\/h3>\n<p>\u041a\u0440\u043e\u043c\u0435 \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0432\u043e\u0442 \u0447\u0442\u043e \u043d\u0430\u0441 \u0435\u0449\u0451 \u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u043b\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u0445 OpenWebUI:<\/p>\n<ul>\n<li>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0430 \u0436\u0435 \u043c\u043e\u0434\u0435\u043b\u044c, \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442. \u041d\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u043e\u043b\u0435\u0439 \u043d\u0430 \u00ab\u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440\u00bb \u0438 \u00ab\u043c\u043e\u0434\u0435\u043b\u044c-\u043e\u0442\u0432\u0435\u0442\u0447\u0438\u043a \u0441 RAG\u00bb \u0438 \u0442. \u043f. \u0412\u0441\u0451 \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u043e\u0434\u043d\u0438\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0438 \u043e\u0434\u043d\u0438\u043c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u043c, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0439 \u0438 \u0442. \u043f.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0444\u0430\u0437. \u0428\u0442\u0430\u0442\u043d\u044b\u0439 tool calling \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u0430\u043c, \u043f\u043e\u0442\u043e\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 MCP Invapi, \u0430 \u0443\u0436\u0435 \u043f\u043e\u0442\u043e\u043c \u043e\u0442\u0432\u0435\u0442 \u0441 RAG.<\/p>\n<\/li>\n<li>\n<p>RAG \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0448\u0430\u0433\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043b\u0438\u0441\u044c.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u044f\u0437\u044b\u043a\u0430, \u043e\u0431\u0440\u0435\u0437\u043a\u0438 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u0445\u0432\u043e\u0441\u0442\u043e\u0432, \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u00ab\u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043a\u00bb, fallback. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u043f\u0442\u0430, \u043d\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 tool_calls \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0447\u0435\u0440\u0435\u0437 API, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0434\u0430\u0451\u0442 \u0433\u043e\u043b\u044b\u0439 \u0432\u044b\u0437\u043e\u0432, \u0430 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a LLM \u0438 MCP-\u0432\u044b\u0437\u043e\u0432\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a \u00ab\u0437\u0430\u0432\u0438\u0441\u0448\u0438\u0439\u00bb \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0410\u043d\u0430\u0442\u043e\u043c\u0438\u044f \u043f\u0430\u0439\u043f\u0430<\/h3>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043f\u0430\u0439\u043f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 <strong>hostkeyru_rhr_pipe<\/strong>. \u041e\u043d \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 HOSTKEY: \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u043e VPS, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u0442\u0438\u043f\u043e\u0432\u044b\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c, \u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b (MCP) \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0434\u0451\u0442 \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c <strong>hostkeyrurhr<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0430\u0439\u043f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441, \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u044e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u0443\u0436\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0448\u0430\u0433\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0431\u043e\u0433\u0430\u0449\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c RAG.<\/p>\n<p>\u041f\u0430\u0439\u043f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442 OpenWebUI \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435: <strong>body<\/strong> (\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043c\u043e\u0434\u0435\u043b\u044c, \u0444\u043b\u0430\u0433\u0438, tool_ids, features), <strong>tools <\/strong>(\u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 MCP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438) \u0438 <strong>__event_emitter__<\/strong> (\u043a\u0430\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u0432 UI):<\/p>\n<pre><code class=\"python\">async def pipe(\u00a0\u00a0\u00a0\u00a0self,\u00a0\u00a0\u00a0\u00a0body: dict,\u00a0\u00a0\u00a0\u00a0user: Optional[dict] = None,\u00a0\u00a0\u00a0\u00a0tools: Optional[dict] = None,\u00a0\u00a0\u00a0\u00a0metadata: Optional[dict] = None,\u00a0\u00a0\u00a0\u00a0__event_emitter__=None,) -&gt; Union[str, Generator, Iterator, Dict[str, Any]]:\u00a0\u00a0\u00a0\u00a0messages = list(body.get(\"messages\", []))\u00a0\u00a0\u00a0\u00a0if not messages:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"\u041e\u0448\u0438\u0431\u043a\u0430: \u043f\u0443\u0441\u0442\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441.\"\u00a0\u00a0\u00a0\u00a0user_wanted_stream = body.get(\"stream\", False)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442 \u2014 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u043e\u0434\u0430\u043b\u044c\u043d\u044b\u043c (\u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043b\u043e\u043a\u043e\u0432 \u00ab\u0442\u0435\u043a\u0441\u0442 + \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u00bb):<\/p>\n<pre><code class=\"python\">for i, msg in enumerate(reversed(messages)):\u00a0\u00a0\u00a0\u00a0if msg.get(\"role\") == \"user\":\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0user_msg_index = len(messages) - 1 - i\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0original_content = msg.get(\"content\", \"\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if isinstance(original_content, str):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0user_query_text = original_content\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0elif isinstance(original_content, list):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0text_parts = [item.get(\"text\", \"\") for item in original_content if item.get(\"type\") == \"text\"]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0user_query_text = \" \".join(text_parts).strip()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0434 \u0431\u0435\u0437 \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e <strong>__event_emitter__<\/strong>. \u042d\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 OpenWebUI \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0432 \u043f\u0430\u0439\u043f. \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432\u0441\u0435 \u043a\u0430\u043a async-\u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0447\u0430\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f: \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u044b, \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u0442 \u0438\u0445 \u043f\u0440\u044f\u043c\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u0433\u0434\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u00ab\u0437\u0430\u0432\u0438\u0441\u0448\u0435\u0439\u00bb \u043f\u043e\u043b\u043e\u0441\u043e\u0447\u043a\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043c\u0435\u043d\u044f\u0435\u043c\u0430\u044f \u043b\u0435\u043d\u0442\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439: \u00ab\u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e \u0437\u0430\u043f\u0440\u043e\u0441 &gt; \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u044e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 &gt; \u0418\u0449\u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e &gt; \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 &gt; \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 &gt; \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u044e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442\u00bb.<\/p>\n<p>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0442\u0438\u043f\u0430 <strong>status<\/strong>:<\/p>\n<pre><code class=\"python\">async def emit_status(description: str, done: bool = False):\u00a0\u00a0\u00a0\u00a0if __event_emitter__:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await __event_emitter__({\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"status\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"data\": {\"description\": description, \"done\": done}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0})<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u0434\u043b\u044f \u043f\u0430\u0439\u043f\u043e\u0432, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a LLM \u0438 MCP. \u0411\u0435\u0437 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0438 \u0447\u0430\u0441\u0442\u043e \u0443\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0447\u0430\u0442\u0430, \u043d\u0435 \u0434\u043e\u0436\u0434\u0430\u0432\u0448\u0438\u0441\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<h4>\u0424\u0430\u0437\u0430 \u22121. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0437\u043e\u043d\u044b \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 RHR: \u043a\u0430\u0441\u043a\u0430\u0434 \u0438\u0437 \u0442\u0440\u0451\u0445 \u044d\u0448\u0435\u043b\u043e\u043d\u043e\u0432<\/h4>\n<p>\u0412 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u0439\u043f\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u00ab\u044d\u0442\u043e RHR-\u0437\u0430\u043f\u0440\u043e\u0441?\u00bb \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u043e\u043e\u0431\u0449\u0435. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u00ab\u0432\u044b\u043f\u0438\u0448\u0438\u0442\u0435 \u043c\u043d\u0435 \u0441\u0447\u0451\u0442\u00bb \u0438 \u043d\u0430 \u00abssh \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u00bb \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u0412\u0441\u0451 \u044d\u0442\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u043b\u043e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u0431\u043e\u0442\u0430.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u0430\u0439\u043f\u0435 <strong>hostkeyru_rhr_pipe<\/strong> \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c <strong>\u0424\u0430\u0437\u0430 \u22121<\/strong>, \u0438 \u044d\u0442\u043e \u043d\u0435 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043a LLM, \u0430 \u043a\u0430\u0441\u043a\u0430\u0434, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u0448\u0435\u043b\u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043d\u0435 \u0434\u0430\u043b \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430.<\/p>\n<p><strong>\u042d\u0448\u0435\u043b\u043e\u043d 1 \u2014 keyword guard (_keyword_prefilter)<\/strong><\/p>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Python, \u0431\u0435\u0437 LLM. \u041a\u043e\u0434 \u0438\u0449\u0435\u0442 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0434\u0432\u0430 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432: <strong>RHR_KEYWORDS<\/strong> (ssh, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437, raid, \u0441\u0435\u0442\u044c, dns, \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u2026) \u0438 <strong>CLIENT_SOFTWARE_SIGNALS<\/strong> (\u043a\u043e\u0434 \u0441\u0430\u0439\u0442\u0430, \u043a\u043e\u043d\u0444\u0438\u0433 nginx, wordpress, laravel\u2026). \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e RHR-\u043a\u043b\u044e\u0447\u0438, \u0441\u0442\u0430\u0432\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <strong>in_scope=True, edge, 0.9<\/strong>. \u0415\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0441\u043e\u0444\u0442\u0430, \u0442\u043e <strong>in_scope=False, client_software, 0.9<\/strong>. \u0415\u0441\u043b\u0438 \u043e\u0431\u0430 \u0438\u043b\u0438 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0442\u0434\u0430\u0451\u043c <strong>None<\/strong> \u0438 \u0434\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>\u042d\u0442\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u0438\u043f\u043e\u0432\u044b\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p><strong>\u042d\u0448\u0435\u043b\u043e\u043d 2 \u2014 LLM-\u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (_classify_rhr_scope + RHR_SCOPE_SYSTEM_PROMPT)<\/strong><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u043c\u043e\u0434\u0435\u043b\u0438 <strong>gemma4nothink<\/strong> \u0441 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0439 \u0440\u0430\u0432\u043d\u043e\u0439 \u043d\u0443\u043b\u044e. \u0412 \u043f\u0440\u043e\u043c\u043f\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0448\u0438\u0442\u044b \u043f\u043e\u043b\u043d\u044b\u0439 \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442 <strong>RHR_REGULATION,<\/strong> \u043f\u044f\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b (\u00ab\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043e\u043d\u0443\u00bb, \u00abKEYWORD GUARD\u00bb, \u00abclient_software \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u044f\u0432\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432\u00bb, \u00ab\u043f\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 = edge\u00bb, \u00ab\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0430 confidence\u00bb), \u0432\u043e\u0441\u0435\u043c\u044c few-shot \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438 \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 JSON \u043e\u0442\u0432\u0435\u0442\u0430. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0443\u0434\u043e\u0431\u043e\u0432\u0430\u0440\u0438\u043c\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u0434\u043b\u044f \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u044d\u0448\u0435\u043b\u043e\u043d\u0430. \u041f\u0440\u0438 \u043b\u044e\u0431\u043e\u0439 \u043d\u0435\u0443\u0434\u0430\u0447\u0435 \u0437\u0430\u0434\u0430\u0451\u043c \u043e\u0442\u0432\u0435\u0442:<strong> in_scope=True, unknown, 0.0<\/strong>.<\/p>\n<p><strong>\u042d\u0448\u0435\u043b\u043e\u043d 3 \u2014 recheck (_recheck_rhr_scope + RHR_RECHECK_SYSTEM_PROMPT)<\/strong><\/p>\n<p>\u042d\u0442\u043e \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430 \u043e\u0442 \u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u044f: \u043a\u043b\u0438\u0435\u043d\u0442 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0435 \u0443\u0439\u0434\u0451\u0442 \u0432 \u0431\u0438\u043b\u043b\u0438\u043d\u0433. Recheck \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u0432\u0435\u0440\u043d\u0443\u043b <strong>in_scope=False<\/strong>, \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e <strong>client_software<\/strong> \u0438\u043b\u0438 <strong>unknown<\/strong>, \u0438 <strong>confidence<\/strong> \u043f\u043e\u043f\u0430\u043b \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d <strong>[0.7, 0.85]<\/strong>. \u0414\u043b\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 billing, client_area, legal, sales, abuse (\u0442\u0430\u043c \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c) \u0438 \u0434\u043b\u044f edge (\u0442\u0430\u043c in_scope=True) recheck \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0438\u0434\u0438\u0442 \u0441\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u044b: \u00ab\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u0437\u043e\u043d\u0443 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 Remote Hands\u2026\u00bb, \u00ab\u041f\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u2014 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u0437\u043e\u043d\u0443\u2026\u00bb (\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 recheck), \u00ab\u0417\u0430\u043f\u0440\u043e\u0441 \u0432\u043d\u0435 \u0437\u043e\u043d\u044b RHR, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\u00bb \/ \u00ab\u0417\u0430\u043f\u0440\u043e\u0441 \u0432 \u0437\u043e\u043d\u0435 RHR, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u00bb.<\/p>\n<p>\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u043a\u0430\u0441\u043a\u0430\u0434\u0430:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p><strong>\u0417\u0430\u043f\u0440\u043e\u0441<\/strong><\/p>\n<\/th>\n<th>\n<p><strong>\u042d\u0448\u0435\u043b\u043e\u043d<\/strong><\/p>\n<\/th>\n<th>\n<p><strong>\u0412\u0435\u0440\u0434\u0438\u043a\u0442<\/strong><\/p>\n<\/th>\n<th>\n<p><strong>\u0427\u0442\u043e \u0432\u0438\u0434\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c<\/strong><\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ssh \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">True, edge, 0.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u043a\u0430\u043a \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433 nginx<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">False, client_software, 0.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0445\u043e\u0447\u0443 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0434\u0435\u043d\u044c\u0433\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<td>\n<p align=\"left\">False, billing, 0.95<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041d\u0415 \u041f\u041e\u0414\u041a\u041b\u042e\u0427\u0410\u0419\u0421\u042f \u041f\u041e ssh!<\/p>\n<\/td>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<td>\n<p align=\"left\">True, edge, 0.95<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0441\u0430\u0439\u0442 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, ssh \u0442\u043e\u0436\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">2\u21923<\/p>\n<\/td>\n<td>\n<p align=\"left\">True, edge, &gt;=0.85<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0447\u0442\u043e-\u0442\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">2, fail-open<\/p>\n<\/td>\n<td>\n<p align=\"left\">True, unknown, 0.0<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0424\u0430\u0437\u0430 0. \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/h4>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043a \u043c\u043e\u0434\u0435\u043b\u0438 <strong>gemma4nothink<\/strong> (\u044d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u043d\u043e \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0435\u043c). \u0412 \u043d\u0451\u043c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 2\u20133 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0441\u043b\u043e\u0432\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043f\u0430\u0439\u043f\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043b\u0430\u043d\u0430) \u0436\u0451\u0441\u0442\u043a\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0444\u0440\u0430\u0437\u044b \u0434\u0430\u044e\u0442 \u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u043e\u0438\u0441\u043a:<\/p>\n<pre><code class=\"python\">router_messages = [{\u00a0\u00a0\u00a0\u00a0\"role\": \"system\",\u00a0\u00a0\u00a0\u00a0\"content\": (\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u041f\u0435\u0440\u0435\u0444\u0440\u0430\u0437\u0438\u0440\u0443\u0439 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u0437 2-3 \u0441\u043b\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 HOSTKEY. \"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u0412\u044b\u0432\u0435\u0434\u0438 \u0422\u041e\u041b\u042c\u041a\u041e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b. \u041d\u0438\u0447\u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435. \"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u0425\u043e\u0440\u043e\u0448\u043e: 'ssh \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435', 'gpu nvidia', 'ip \u0430\u0434\u0440\u0435\u0441', '\u0441\u043c\u0435\u043d\u0430 ip \u0430\u0434\u0440\u0435\u0441\u0430', '\u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438'. \"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u041f\u043b\u043e\u0445\u043e: '\u0441\u043c\u0435\u043d\u0430 ip \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 ip' (\u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432). \"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u0421\u0442\u0440\u043e\u0433\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435: 2-3 \u0441\u043b\u043e\u0432\u0430.\"\u00a0\u00a0\u00a0\u00a0)}, {\"role\": \"user\", \"content\": user_text}]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c query, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 MCP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u043c\u044b \u0437\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0443\u044e \u0434\u043e\u043a\u0443 \u0438 \u0432\u0432\u043e\u0434\u0438\u043c \u043d\u0430\u0448 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0412\u044b\u0437\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0438\u0434\u0451\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e (\u0432\u0435\u0441\u044c MCP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u00ab\u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f\u00bb \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u0436\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0433\u0434\u0435 \u0438 Ollama \u0441 OpenWebUI). \u0412 \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u0443\u0442\u0438: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438\u0449\u0435\u0442\u0441\u044f \u0432 <strong>tools<\/strong> (\u0442\u0430\u043c \u0436\u0435, \u0433\u0434\u0435 \u0435\u0433\u043e \u0432\u0438\u0434\u0438\u0442 OpenWebUI), \u0430 \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0442\u0430\u043c \u043d\u0435\u0442, \u0442\u043e \u0438\u0434\u0451\u0442 HTTP-\u0444\u043e\u043b\u043b\u0431\u044d\u043a \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 MCP-\u0441\u0435\u0440\u0432\u0435\u0440:<\/p>\n<pre><code class=\"python\">MCP_BASE_URL = \"http:\/\/host.docker.internal:8000\"tool_path = \"\/docs_url_ru\"tool_name = \"search_hostkey_docs_ru\"url = f\"{MCP_BASE_URL}{tool_path}\/{tool_name}\"response = await self.client.post(url, json={\"query\": query, \"limit\": 5})<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c (\u043c\u0435\u043d\u044c\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <strong>docs_retry_threshold<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u043d \u0432 400 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432), \u043f\u0430\u0439\u043f \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u0441\u044b\u0440\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438.<\/p>\n<p>\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 <strong>docs_result<\/strong> \u0434\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0438 \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0430\u043a \u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442, \u0442\u0430\u043a (\u0447\u0442\u043e \u043d\u0435\u043c\u0430\u043b\u043e\u0432\u0430\u0436\u043d\u043e) \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0431\u0430\u0437\u0435 \u0437\u043d\u0430\u043d\u0438\u0439 \u0443 \u043d\u0430\u0441 \u0438\u0445 \u043d\u0435\u0442 \u0432 \u044f\u0432\u043d\u043e\u043c \u0432\u0438\u0434\u0435.<\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0438\u0434\u0438\u0442 \u0442\u0440\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f: \u00ab\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u044e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430\u2026\u00bb \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043a LLM, \u00ab\u0418\u0449\u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e: {query}\u00bb \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c MCP \u0438 \u00ab\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043d\u0430\u0439\u0434\u0435\u043d\u0430\u00bb \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0445\u0430. \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u2014 \u00ab\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u2026\u00bb.<\/p>\n<h4>\u0424\u0430\u0437\u0430 1. MCP-\u0440\u043e\u0443\u0442\u0435\u0440<\/h4>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0442\u0430\u043a\u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u043a <strong>gemma4nothink<\/strong>, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043a\u0430\u043a \u043a \u00ab\u0440\u043e\u0443\u0442\u0435\u0440\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432\u00bb. \u041c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0430\u0435\u0442, \u043d\u0443\u0436\u0435\u043d \u043b\u0438 \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 MCP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0438 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442:<\/p>\n<pre><code class=\"python\">tool_checking_messages = [\u00a0\u00a0\u00a0\u00a0{\"role\": \"system\", \"content\": (\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u0422\u044b \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440. \u0422\u0432\u043e\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b MCP \u043f\u043e\u0434 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u0415\u0441\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043d\u0443\u0436\u0435\u043d, \u0432\u044b\u0437\u043e\u0432\u0438 \u0435\u0433\u043e \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u0415\u0441\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0439 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0448\u0438: 'skip'.\")},\u00a0\u00a0\u00a0\u00a0{\"role\": \"user\", \"content\": user_query_text},]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0430\u0439\u043f \u043f\u0440\u0430\u0432\u0438\u0442 \u0435\u0433\u043e \u0442\u0435\u043b\u043e: \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 knowledge\/search-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 RAG \u0438 \u0436\u0451\u0441\u0442\u043a\u043e \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u044c:<\/p>\n<pre><code class=\"python\">if \"tool_ids\" in body and body[\"tool_ids\"]:\u00a0\u00a0\u00a0\u00a0body[\"tool_ids\"] = [t for t in body[\"tool_ids\"] if \"knowledge\" not in t and \"search\" not in t]\u00a0\u00a0\u00a0\u00a0body[\"tool_ids\"] = self._filter_tool_ids_by_lang(body[\"tool_ids\"])body[\"docs\"] = []if \"features\" in body:\u00a0\u00a0\u00a0\u00a0body[\"features\"][\"retrieval\"] = False\u00a0 # RAG \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u043e\u0443\u0442\u0435\u0440\u0430body.setdefault(\"options\", {})[\"temperature\"] = 0body[\"model\"] = \"gemma4nothink\"body[\"stream\"] = Falsebody[\"messages\"] = tool_checking_messages<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041e\u0442\u0432\u0435\u0442 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0434\u043e\u043c. \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b t<strong>ool_calls<\/strong> \u043f\u0430\u0440\u0441\u044f\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <strong>json.loads<\/strong>, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0449\u0435\u0442\u0441\u044f \u0432 <strong>tools<\/strong> (\u0441 \u0444\u043e\u043b\u043b\u0431\u044d\u043a\u043e\u043c \u043f\u043e \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u043c\u0443 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044e \u0438\u043c\u0435\u043d\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432<strong> tool_call<\/strong> \u0438 \u043a\u043b\u044e\u0447 \u0432 <strong>tools<\/strong> \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c), \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u0441\u0432\u043e\u0434\u043a\u0443:<\/p>\n<pre><code class=\"python\">for tc in tool_calls:\u00a0\u00a0\u00a0\u00a0func_name = tc.get(\"function\", {}).get(\"name\")\u00a0\u00a0\u00a0\u00a0func_args_str = tc.get(\"function\", {}).get(\"arguments\", \"{}\")\u00a0\u00a0\u00a0\u00a0try:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = json.loads(func_args_str) if isinstance(func_args_str, str) else func_args_str\u00a0\u00a0\u00a0\u00a0except (json.JSONDecodeError, TypeError):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = {}\u00a0\u00a0\u00a0\u00a0callable_func = None\u00a0\u00a0\u00a0\u00a0if tools:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if func_name in tools:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0callable_func = tools[func_name].get(\"callable\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for key, tool_data in tools.items():\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if func_name in key or key.endswith(f\"_{func_name}\"):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0callable_func = tool_data.get(\"callable\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break\u00a0\u00a0\u00a0\u00a0if callable_func:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if asyncio.iscoroutinefunction(callable_func):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0raw_result = await callable_func(**args)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0raw_result = callable_func(**args)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if isinstance(raw_result, dict):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mcp_data_summary += json.dumps(raw_result, ensure_ascii=False, default=str) + \"\\n\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mcp_data_summary += str(raw_result) + \"\\n\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0except Exception as e:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mcp_data_summary += f\"[\u041e\u0448\u0438\u0431\u043a\u0430 MCP]: {str(e)}\\n\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 (\u0435\u0441\u043b\u0438 \u043e\u043d \u0432 \u0447\u0430\u0442\u0435) \u0432\u0438\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u00ab\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432\u2026\u00bb, \u0430 \u043f\u0435\u0440\u0435\u0434 \u043a\u0430\u0436\u0434\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c MCP: \u00ab\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442: {func_name}\u00bb. \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442: \u00ab\u041e\u0448\u0438\u0431\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430: {\u0442\u0435\u043a\u0441\u0442}\u00bb.\u00a0<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043d\u0430\u0448\u0451\u043b\u0441\u044f \u0432 <strong>tools<\/strong> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0434\u0435\u043b\u044c gemma4nothink \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 OpenWebUI), \u0442\u043e \u043f\u0430\u0439\u043f \u0442\u043e\u0436\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442, \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 RAG. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u0436\u043d\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043a\u0430\u043a \u043a \u043e\u0431\u0449\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0442\u0430\u043a \u0438 \u043a \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439! \u0418\u043d\u0430\u0447\u0435 \u0440\u043e\u0443\u0442\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u0432\u044b\u0437\u0432\u0430\u0442\u044c.<\/p>\n<h4>\u0424\u0430\u0437\u0430 2. \u041e\u0431\u043e\u0433\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u0430<\/h4>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0442 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439. \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043a\u043b\u0435\u0439\u043a\u0443 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u0432 \u043a\u043e\u0434\u0435. \u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0435\u0441\u0442\u044c, \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u043e\u043d\u0438, \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f, \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f; \u0435\u0441\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f. \u0415\u0441\u043b\u0438 \u0438 \u0435\u0451 \u043d\u0435\u0442, \u0442\u043e \u043b\u0438\u0448\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043f\u043e-\u0440\u0443\u0441\u0441\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u0438\u043b\u0438 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u043c:<\/p>\n<pre><code class=\"python\">strict_ru_instruction = (\u00a0\u00a0\u00a0\u00a0\"\\n\\n[\u0421\u0422\u0420\u041e\u0413\u0410\u042f \u0418\u041d\u0421\u0422\u0420\u0423\u041a\u0426\u0418\u042f: \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0439 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0418\u0421\u041a\u041b\u042e\u0427\u0418\u0422\u0415\u041b\u042c\u041d\u041e \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \"\u00a0\u00a0\u00a0\u00a0\"\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439, \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439, \u0430\u0440\u0430\u0431\u0441\u043a\u0438\u0439 \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u044f\u0437\u044b\u043a. \"\u00a0\u00a0\u00a0\u00a0\"\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0439 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0438\u043b\u044c \u0441\u043b\u0443\u0436\u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438.]\")if mcp_data_summary and user_msg_index != -1:\u00a0\u00a0\u00a0\u00a0enriched_text = (\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0f\"\\n\\n\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442: {user_query_text}\\n\\n\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0f\"\u0410\u041a\u0422\u0423\u0410\u041b\u042c\u041d\u042b\u0415 \u0414\u0410\u041d\u041d\u042b\u0415 \u0418\u0417 \u0421\u0418\u0421\u0422\u0415\u041c\u042b INVAPI (MCP TOOL RESULT):\\n{mcp_data_summary}\\n\\n\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0f\"\u0420\u0415\u041b\u0415\u0412\u0410\u041d\u0422\u041d\u0410\u042f \u0414\u041e\u041a\u0423\u041c\u0415\u041d\u0422\u0410\u0426\u0418\u042f:\\n{docs_result}\\n\\n\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0f\"\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f: \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0439 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0438\u0440\u0430\u0439\u0441\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b INVAPI \u0432\u044b\u0448\u0435 \u0438 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0442\u0432\u043e\u0435\u0439 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0411\u0430\u0437\u044b \u0417\u043d\u0430\u043d\u0438\u0439 (RAG).\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0f\"{strict_ru_instruction}\"\u00a0\u00a0\u00a0\u00a0)\u00a0\u00a0\u00a0\u00a0if isinstance(original_content, list):\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 # \u043d\u0435 \u043b\u043e\u043c\u0430\u0435\u043c \u0431\u043b\u043e\u043a \u0441\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u043e\u043c\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0original_content.append({\"type\": \"text\", \"text\": enriched_text})\u00a0\u00a0\u00a0\u00a0else:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0messages[user_msg_index][\"content\"] = f\"{original_content}{enriched_text}\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u0440\u043e \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044e \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437: \u043b\u0438\u0431\u043e \u0432\u043d\u0443\u0442\u0440\u0438 enriched_text, \u043b\u0438\u0431\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0431\u043b\u043e\u043a\u043e\u043c, \u0435\u0441\u043b\u0438 \u043e\u0431\u043e\u0433\u0430\u0449\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u044b\u043b\u043e.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0432\u0430\u0436\u043d\u043e \u0441\u0442\u0435\u0440\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c RAG:<\/p>\n<pre><code class=\"python\">if \"tools\" in body: del body[\"tools\"]if \"tool_ids\" in body: del body[\"tool_ids\"]if \"docs\" in body: del body[\"docs\"]if \"features\" in body: body[\"features\"][\"retrieval\"] = True \u00a0 # \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c RAG \u043e\u0431\u0440\u0430\u0442\u043d\u043ebody[\"model\"] = \"hostkeyrurhr\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h4>\u0424\u0430\u0437\u0430 3. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f<\/h4>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0444\u0430\u0437\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u0434\u0451\u0442 \u0443\u0436\u0435 \u043a \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 <strong>hostkeyrurhr<\/strong> \u0441 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c RAG \u0438 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u043e\u043c, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c:<\/p>\n<pre><code class=\"python\">messages.insert(0, {\u00a0\u00a0\u00a0\u00a0\"role\": \"system\",\u00a0\u00a0\u00a0\u00a0\"content\": (\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u041a\u0420\u0418\u0422\u0418\u0427\u0415\u0421\u041a\u041e\u0415 \u041f\u0420\u0410\u0412\u0418\u041b\u041e: \u0422\u044b \u0414\u041e\u041b\u0416\u0415\u041d \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0422\u041e\u041b\u042c\u041a\u041e \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439, \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439, \u0430\u0440\u0430\u0431\u0441\u043a\u0438\u0439 \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u044f\u0437\u044b\u043a. \"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u0415\u0441\u043b\u0438 \u0442\u044b \u0432 \u0447\u0451\u043c-\u0442\u043e \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d, \u043e\u0442\u0432\u0435\u0447\u0430\u0439 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c. \"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u042d\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b.\"\u00a0\u00a0\u00a0\u00a0)})body[\"messages\"] = messagesbody[\"stream\"] = user_wanted_streamfinal_response = await self._post_with_retry(body, headers)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0444\u0430\u0437\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0432\u0438\u0434\u0438\u0442 \u00ab\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u044e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442\u2026\u00bb. \u042d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u00ab\u0434\u043e\u043b\u0433\u0430\u044f\u00bb \u0441\u0442\u0430\u0434\u0438\u044f, \u0438 \u0434\u043e \u0435\u0451 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u0435\u0449\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<h4>\u0424\u0430\u0437\u0430 4. \u041f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u044f\u0437\u044b\u043a\u0430, \u0432\u044b\u0440\u0435\u0437\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043a \u0438 fallback<\/h4>\n<p>\u042d\u0442\u043e \u0442\u043e\u0442 \u0441\u043b\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 OpenWebUI \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435. \u0412 \u043d\u0451\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0434 \u043d\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043c\u044b \u0438\u0449\u0435\u043c \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u0443, \u0438 \u0435\u0441\u043b\u0438 \u0435\u0451 \u043d\u0435\u0442, \u0430 \u043b\u0430\u0442\u0438\u043d\u0438\u0446\u0430 \u0435\u0441\u0442\u044c \u2014 \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u043d\u0435 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u0438 \u0435\u0433\u043e \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043b\u0438 \u0432\u044b\u0434\u0430\u0442\u044c fallback.<\/p>\n<pre><code class=\"python\">def checklanguage_heuristic(self, text: str) -&gt; bool:\u00a0\u00a0\u00a0\u00a0if not text or not text.strip():\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return True\u00a0\u00a0\u00a0\u00a0cyrillic_pattern = re.compile(r'[\\u0400-\\u04FF]', re.UNICODE)\u00a0\u00a0\u00a0\u00a0cleaned = re.sub(r'``[\\s\\S]*?``', '', text)\u00a0\u00a0\u00a0\u00a0cleaned = re.sub(r'[^]+`', '', cleaned)\u00a0\u00a0\u00a0\u00a0cleaned = re.sub(r'https?:\/\/\\S+', '', cleaned)\u00a0\u00a0\u00a0\u00a0if cyrillic_pattern.search(cleaned):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return True\u00a0\u00a0\u00a0\u00a0latin_pattern = re.compile(r'[A-Za-z]', re.UNICODE)\u00a0\u00a0\u00a0\u00a0if latin_pattern.search(cleaned):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0print(\"[PIPE] \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u044f\u0437\u044b\u043a\u0430 \u041d\u0415 \u041f\u0420\u041e\u0419\u0414\u0415\u041d\u0410: \u041a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u0430 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043d\u0435 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return False\u00a0\u00a0\u00a0\u00a0return True<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0418\u043d\u043b\u0430\u0439\u043d-\u043a\u043e\u0434 \u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0432\u044b\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043b\u043e\u0432\u0438\u0442\u044c \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 \u0432\u0440\u043e\u0434\u0435 SSH, IP, VPS. \u041f\u0440\u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 \u0443\u0441\u0438\u043b\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u0438\u044f \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0440\u0443\u0441\u0441\u043a\u0438\u0439 fallback \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440 \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0442\u0430\u043a: \u0432 <strong>messages<\/strong> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b \u043d\u0435 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u0442\u0435\u043a\u0441\u0442, \u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u044f\u0437\u044b\u043a \u0442\u0430\u043a \u0438 \u043d\u0435 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f <strong>FALLBACK_RESPONSE<\/strong>.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u044f\u0437\u044b\u043a\u0430, \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0449\u0451 \u0434\u0432\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0432\u0435\u0449\u0438, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u043e\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p><strong>\u0412\u044b\u0440\u0435\u0437\u0430\u043d\u0438\u0435 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u0444\u0440\u0430\u0437\u044b \u00ab\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c\u00bb<\/strong><\/p>\n<p>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043a\u043e\u043d\u0435\u0446 \u043e\u0442\u0432\u0435\u0442\u0430 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u00ab\u0415\u0441\u043b\u0438 \u0432\u0430\u0448 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u0440\u0435\u0448\u0451\u043d \u0438 \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0448\u0438\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c, \u0442\u043e \u043d\u0430\u0436\u043c\u0438\u0442\u0435 &#171;\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c&#187; \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438\u00bb. \u042d\u0442\u0430 \u0444\u0440\u0430\u0437\u0430 \u0437\u0430\u0448\u0438\u0442\u0430 \u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u043f\u0440\u043e\u043c\u043f\u0442\u0435, \u0438 \u0432 fallback-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u043e\u043d\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a HR. \u0417\u043d\u0430\u0447\u0438\u0442, \u0435\u0451 \u043d\u0430\u0434\u043e \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043f\u0430\u0439\u043f\u0435 \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u044d\u0442\u0430 \u0444\u0440\u0430\u0437\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435, \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0440\u0435\u0437\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 N \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043d\u0435\u043b\u044c\u0437\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u0439\u043f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 (\u0434\u043b\u0438\u043d\u0430 \u0441\u0430\u043c\u043e\u0439 \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u043e\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0444\u0440\u0430\u0437\u044b + \u0437\u0430\u043f\u0430\u0441) \u0438 \u043e\u0442\u0434\u0430\u0451\u0442 \u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043a\u043e\u043d\u0435\u0446 \u043e\u0442\u0432\u0435\u0442\u0430. \u0425\u0432\u043e\u0441\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <strong><em>strip<\/em>prompt_footer <\/strong>\u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043a\u0430\u0432\u044b\u0447\u0435\u043a \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430.<\/p>\n<p><strong>\u0412\u044b\u0440\u0435\u0437\u0430\u043d\u0438\u0435 \u0430\u0431\u0437\u0430\u0446\u0435\u0432-\u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043a<\/strong><\/p>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0442\u0432\u0435\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 (\u043c\u0435\u043d\u044c\u0448\u0435 800 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432) \u0438 \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 400 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445 \u043d\u0430\u0439\u0434\u0435\u043d \u043c\u0430\u0440\u043a\u0435\u0440 fallback-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0438 (FALLBACK_MARKERS) (\u00ab\u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0448\u0438\u043c\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430\u043c\u0438\u00bb, \u00ab\u043d\u0430\u0436\u043c\u0438\u0442\u0435 &#171;\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c&#187;\u00bb, \u00ab\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435\u00bb \u0438 \u0442. \u043f.), \u043f\u0430\u0439\u043f \u0440\u0435\u0436\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e \u0430\u0431\u0437\u0430\u0446\u0430\u043c \u0438 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0442\u0435, \u0447\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043c\u0430\u0440\u043a\u0435\u0440. \u042d\u0442\u043e \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u0430\u043c\u0430 \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u0432 \u043e\u0442\u0432\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0443, \u0445\u043e\u0442\u044f \u0432\u043e\u043f\u0440\u043e\u0441 \u0431\u044b\u043b \u0432 \u0437\u043e\u043d\u0435 RHR.<\/p>\n<p>\u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043d\u0430\u0448 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\u043c. \u0414\u0430, \u0435\u0449\u0435 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e, \u0438 \u0435\u0441\u0442\u044c \u043d\u0430\u0434 \u0447\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/e4\/93\/3f\/e4933f6e01abc49d12570a5cd2fc1296.png\" width=\"1280\" height=\"597\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/e4\/93\/3f\/e4933f6e01abc49d12570a5cd2fc1296.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/e4\/93\/3f\/e4933f6e01abc49d12570a5cd2fc1296.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0430\u0439\u043f\u0430 \u043c\u044b \u0442\u0435\u0440\u044f\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442 5 \u0434\u043e 10 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u043e\u0442\u0432\u0435\u0442 \u0434\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a LLM, \u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e, \u0438 \u0432\u043c\u0435\u0441\u0442\u043e 5-10 \u0441\u0435\u043a\u0443\u043d\u0434 \u043e\u0442\u0432\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 10-20 \u0441\u0435\u043a\u0443\u043d\u0434, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430 \u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0430\u0439\u043f\u043e\u043c<\/h3>\n<p>\u0427\u0435\u0441\u0442\u043d\u043e \u0441\u043a\u0430\u0436\u0435\u043c: \u043f\u0430\u0439\u043f \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043b\u0430\u0433\u0438\u043d \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438, \u0430 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0434\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c. \u0418 \u043b\u044e\u0431\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0432 \u043d\u0435\u043c \u043f\u0440\u0430\u0432\u043e\u043a.<\/p>\n<ul>\n<li>\n<p>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 <strong>pipe()<\/strong> \u0438 \u0444\u043e\u0440\u043c\u0430\u0442 <strong>tools<\/strong> \u2014 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 OpenWebUI. \u041f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u0440\u0435\u0434\u044b \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f, \u0438 \u043f\u0430\u0439\u043f \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u043f\u0442\u0430 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435) \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u044f\u0442\u044c \u0444\u0430\u0437, \u0442\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a LLM, \u0432\u044b\u0437\u043e\u0432\u044b MCP \u0438 \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0439\u043f \u043d\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e RAG \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432 \u0441 \u0433\u0438\u0431\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u041e\u043d \u043b\u0438\u0448\u044c \u0434\u0430\u0451\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0444\u0430\u0437 \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0432\u044b\u0437\u043e\u0432\u0443\u0442\u0441\u044f \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0441\u043c\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u0441 RAG. \u0415\u0441\u043b\u0438 \u0431\u0430\u0437\u0430 \u0437\u043d\u0430\u043d\u0438\u0439 \u043f\u0443\u0441\u0442\u0430\u044f \u0438\u043b\u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u044b \u043f\u043b\u043e\u0445\u0438\u0435, \u0442\u043e \u043f\u0430\u0439\u043f \u0432\u0430\u0441 \u043d\u0435 \u0441\u043f\u0430\u0441\u0451\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0438 \u043a \u043e\u0431\u0449\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0438 \u043a \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439. \u0418\u043d\u0430\u0447\u0435 \u0440\u043e\u0443\u0442\u0435\u0440 \u0438\u0445 \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0442 \u0438 \u043c\u043e\u043b\u0447\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442 \u0432\u044b\u0437\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u043e\u0434\u0432\u0435\u0434\u0435\u043c \u0438\u0442\u043e\u0433\u0438<\/h3>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 OpenWebUI \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u0443 \u0437\u043d\u0430\u043d\u0438\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0442\u043e\u043d\u043a\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u043e\u0434\u0435\u043b\u0438, \u043d\u043e \u0434\u043b\u044f \u0431\u043e\u0435\u0432\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u044d\u0442\u043e\u0433\u043e, \u0443\u0432\u044b, \u0443\u0436\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.\u00a0<\/p>\n<p>\u0428\u0442\u0430\u0442\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u0437\u043e\u0432\u043e\u0432 (\u0430 \u0447\u0435\u0440\u0435\u0437 API \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432\u043e\u043e\u0431\u0449\u0435), \u043d\u0435 \u0434\u0430\u0451\u0442 \u00ab\u043f\u043e\u0433\u0430\u0441\u0438\u0442\u044c\u00bb RAG \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u043e\u043b\u0438 \u00ab\u0440\u043e\u0443\u0442\u0435\u0440\u00bb \u0438 \u00ab\u043e\u0442\u0432\u0435\u0442\u0447\u0438\u043a\u00bb \u0438 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443.\u00a0<\/p>\n<p>\u041f\u0430\u0439\u043f \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u00ab\u043e\u0434\u043d\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435\u00bb \u0432 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440: keyword guard \u0438 LLM-\u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0442\u0441\u0435\u043a\u0430\u044e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u043d\u0435 \u0437\u043e\u043d\u044b \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0448\u0430\u0433 \u0438\u0449\u0435\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 MCP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c RAG, \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u0436\u0435 \u043e\u0431\u043e\u0433\u0430\u0449\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442, \u0430 \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u044f\u0437\u044b\u043a, \u0432\u044b\u0440\u0435\u0437\u0430\u0435\u0442 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0445\u0432\u043e\u0441\u0442\u044b \u0438 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0438 \u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u044b\u0432\u0430\u0435\u0442 fallback-\u043e\u0442\u0432\u0435\u0442\u043e\u043c.<\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0444\u0430\u0437, \u044f\u0432\u043d\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c RAG \u0438 \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0431\u043e\u0442\u043e\u0432 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c\u0438: \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u043e\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0430 \u043e\u0442\u0432\u0435\u0442\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 \u043d\u0443\u0436\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0418\u0418 \u0447\u0430\u0442-\u0431\u043e\u0442 \u0441 OpenWebUI \u0438 Ollama \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/strong><\/p>\n<p>\u0417\u0430\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c AI-\u0447\u0430\u0442-\u0431\u043e\u0442\u043e\u043c \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p align=\"left\"><a href=\"https:\/\/hostkey.ru\/apps\/machine-learning\/ollama-ai-chatbot\/\">\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c<\/a><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1101710\/\">https:\/\/habr.com\/ru\/articles\/1101710\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0410\u0432\u0442\u043e\u0440: \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u041a\u0430\u0437\u0430\u043d\u0446\u0435\u0432, \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043e\u0442\u0434\u0435\u043b\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430OpenWebUI \u0443\u043c\u0435\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0435: \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u0431\u0430\u0437\u0443 \u0437\u043d\u0430\u043d\u0438\u0439 (RAG), \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b (MCP\/tools), \u043d\u0430\u0432\u044b\u043a\u0438 \u0438 \u0442. \u0434. \u0421 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0443 \u0441\u0440\u0435\u0434\u044b \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435, \u0438 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u043b\u044f \u0418\u0418-\u0431\u043e\u0442\u0430 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u0431\u0430\u0437\u0435 \u0447\u0435\u0433\u043e-\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 Qwen-3.8 \u0438\u043b\u0438 Gemma 4, \u043d\u0430\u0432\u0435\u0441\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0451 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043d\u0443\u0436\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u0430\u0437\u0443 \u0437\u043d\u0430\u043d\u0438\u0439 \u2014 \u0438 \u0433\u043e\u0442\u043e\u0432\u043e!\u0421\u043a\u0430\u0436\u0443 \u0447\u0435\u0441\u0442\u043d\u043e: \u043c\u044b \u0432 HOSTKEY \u0442\u0430\u043a \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438. \u0410 \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0439\u043f\u043e\u0432 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u0431\u043e\u0442\u043e\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043c\u044f\u0433\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e.\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043d\u0435 \u00ab\u043a\u0430\u043a \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb \u2014 \u044d\u0442\u043e \u0432\u0441\u0451 \u0435\u0441\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 OpenWebUI, \u0430 \u00ab\u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0445 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u00bb \u0438 \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0430\u0439\u043f\u044b \u0434\u043b\u044f \u0431\u043e\u0442\u043e\u0432 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 Remote Hands Request.\u0418\u0418 \u0447\u0430\u0442-\u0431\u043e\u0442 \u0441 OpenWebUI \u0438 Ollama \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435\u0417\u0430\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c AI-\u0447\u0430\u0442-\u0431\u043e\u0442\u043e\u043c \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c hostkeyrurhr, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043d\u0430 gemma4:26b-a4b-it-qat. \u0412 \u0435\u0451 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 (\u043a\u0430\u043a \u0438\u0445 \u0432\u0438\u0434\u043d\u043e \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u0438\u0437 OpenWebUI) \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:Function Calling \u2014 Legacy;Temperature \u2014 0.2, think (Ollama) \u2014 Off, draft_num_predict \u2014 1;Knowledge \u2014 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f hostkey_ru, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438;Tools \u2014 status_ru_mcp, docs_url_ru (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0430\u0439\u0442\u0430, \u0438\u043d\u0432\u0430\u043f\u0438 \u0438 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u043e\u0432 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0438 MCP \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 VPS \u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430).\u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u043c\u043e\u0434\u0435\u043b\u0438 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 get_vps_list \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e MCP \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a VPS \u0441 \u0446\u0435\u043d\u0430\u043c\u0438 \u043f\u043e \u043b\u043e\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043f\u0440\u043e\u0441\u0438\u043c \u043f\u0440\u043e \u0434\u0435\u0448\u0451\u0432\u044b\u0439 VPS \u0432 \u0413\u0435\u0440\u043c\u0430\u043d\u0438\u0438.\u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u0446\u0435\u043d\u044b \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 API \u0432 Invapi, \u0438 \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430\u0448 MCP-\u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0437\u0430 \u043d\u0438\u043c\u0438 \u043d\u0435 \u0438\u0434\u0451\u0442. \u041e\u0442\u0432\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 RAG: \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0430 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 Native \u0440\u0435\u0436\u0438\u043c, \u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0435\u0449\u0451 \u0445\u0443\u0436\u0435 \u0438 \u00ab\u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb \u0443\u0436\u0435 \u0438 RAG.\u041f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0447\u0435\u0440\u0435\u0437 API (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 CURL) \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0435\u0449\u0451 \u0432\u0435\u0441\u0435\u043b\u0435\u0435: \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0433\u043e\u043b\u044b\u0439 tool_call \u0441 \u043f\u0443\u0441\u0442\u044b\u043c content. \u0412\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u043f\u0435\u0440\u0435\u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u044f\u0437\u0430\u043d \u043a\u043b\u0438\u0435\u043d\u0442 (\u0447\u0442\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 OpenWebUI). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438, \u0447\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 \u043e\u0442\u0432\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u0441\u043c\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u0441 RAG \u0438 \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c, \u043d\u0435\u0442.\u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u0430\u0439\u043f\u0430\u043c\u0438, \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0442\u043e\u0438\u0442 Legacy \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430 Native.Legacy (Default). OpenWebUI \u043d\u0435 \u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u0430\u043c\u0430 \u00ab\u0443\u043c\u0435\u0435\u0442\u00bb \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043e\u0431\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0434\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442), \u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u043d\u0430 \u0443\u0436\u0435 \u043f\u043e \u043d\u0438\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0432 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0442\u0435\u043c \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f. \u042d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e, \u043d\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f: \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 JSON \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442.Native (Agentic). \u041c\u043e\u0434\u0435\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 API-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0430 \u043d\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435. \u041c\u043e\u0434\u0435\u043b\u044c, \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0442 tool calling, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435. OpenWebUI \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u043d\u0435 \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u043c\u0435\u043b\u0430 \u0432 \u0432\u0438\u0434\u0443.\u0415\u0441\u043b\u0438 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 Qwen3 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438 \u0432 \u0442\u043e\u043c \u0438 \u0434\u0440\u0443\u0433\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0442\u043e \u0441 Gemma 4 Native \u0440\u0435\u0436\u0438\u043c \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0438 it (Instruction-Tuned) \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u0431\u0435\u0440\u0451\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u043f\u0430\u0439\u043f (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0443).\u041f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u043d\u0435 Qwen, \u0430 Gemma? \u0414\u0435\u043b\u043e \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u0421 \u043e\u0442\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f Gemma 4 \u0432\u044b\u0434\u0430\u0451\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u044b\u0439 (\u0435\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u043f\u043e\u0445\u0443\u0436\u0435) \u043e\u0442\u0432\u0435\u0442 \u0437\u0430 5\u20137 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u0441\u0432\u044f\u0437\u043a\u0435 \u0438\u0437 \u0434\u0432\u0443\u0445 16 \u0413\u0411 A4000, \u0430 Qwen 3 \u00ab\u0434\u0443\u043c\u0430\u0435\u0442\u00bb \u043f\u043e 30\u201340 \u0441\u0435\u043a\u0443\u043d\u0434.Pipe (function) \u0438 ValvesPipe (\u043e\u043d \u0436\u0435 function) \u2014 \u044d\u0442\u043e \u043f\u043b\u0430\u0433\u0438\u043d OpenWebUI, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e Python-\u043a\u043b\u0430\u0441\u0441 \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c pipe, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0442\u0435\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443, JSON \u0438\u043b\u0438 \u043f\u043e\u0442\u043e\u043a; \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u0439\u043f \u0432\u043e\u043b\u0435\u043d \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0440\u0430\u0437 \u0445\u043e\u0434\u0438\u0442\u044c \u0432 LLM, \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c MCP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u043c\u043f\u0442 \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c\/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c RAG.\u041e\u043d \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u00ab\u043e\u0434\u043d\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435\u00bb \u0432 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440: \u043f\u0430\u0439\u043f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 OpenWebUI \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0430, \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u00ab\u0438\u0437\u0432\u043d\u0435\u00bb \u043f\u043e API, \u0430 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u0445 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432 \u0432\u044b\u0437\u043e\u0432\u0435 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0430\u0439\u043f\u0430.\u00a0Valves \u2014 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0430\u0439\u043f\u0430, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u044e\u0449\u0430\u044f, \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435 \u00ab\u043f\u0440\u043e\u0442\u0435\u043a\u0430\u044e\u0442\u00bb \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 Pipe \u043a\u043b\u0430\u0441\u0441-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a BaseModel (\u043f\u043b\u044e\u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 UserValves \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a): \u043e\u043d \u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (\u043a\u043b\u044e\u0447\u0438, URL, \u043f\u043e\u0440\u043e\u0433\u0438), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0411\u0414, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438 \u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u00ab\u0440\u0443\u0447\u043a\u0438\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0439\u043f\u0430 \u0431\u0435\u0437 \u043f\u0440\u0430\u0432\u043a\u0438 \u043a\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u043d\u044e.Valves \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0449\u0438 \u0432 \u043d\u0438\u0445 \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0438\u0445 \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0430\u0439\u043f\u0430\u0445 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u2014 \u043d\u0430\u043c \u043f\u0440\u043e\u0449\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u043f\u0442\u044b \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043a\u043e\u0434\u0435 \u043f\u0430\u0439\u043f\u0430.\u0421\u0430\u043c\u0438 \u043f\u0430\u0439\u043f\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 Admin Panel &#8212; Function.\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u041a\u0440\u043e\u043c\u0435 \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0432\u043e\u0442 \u0447\u0442\u043e \u043d\u0430\u0441 \u0435\u0449\u0451 \u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u043b\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u0445 OpenWebUI:\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0430 \u0436\u0435 \u043c\u043e\u0434\u0435\u043b\u044c, \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442. \u041d\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u043e\u043b\u0435\u0439 \u043d\u0430 \u00ab\u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440\u00bb \u0438 \u00ab\u043c\u043e\u0434\u0435\u043b\u044c-\u043e\u0442\u0432\u0435\u0442\u0447\u0438\u043a \u0441 RAG\u00bb \u0438 \u0442. \u043f. \u0412\u0441\u0451 \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u043e\u0434\u043d\u0438\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0438 \u043e\u0434\u043d\u0438\u043c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u043c, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0439 \u0438 \u0442. \u043f.\u041d\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0444\u0430\u0437. \u0428\u0442\u0430\u0442\u043d\u044b\u0439 tool calling \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u0430\u043c, \u043f\u043e\u0442\u043e\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 MCP Invapi, \u0430 \u0443\u0436\u0435 \u043f\u043e\u0442\u043e\u043c \u043e\u0442\u0432\u0435\u0442 \u0441 RAG.RAG \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0448\u0430\u0433\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043b\u0438\u0441\u044c.\u041d\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u044f\u0437\u044b\u043a\u0430, \u043e\u0431\u0440\u0435\u0437\u043a\u0438 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u0445\u0432\u043e\u0441\u0442\u043e\u0432, \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u00ab\u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043a\u00bb, fallback. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u043f\u0442\u0430, \u043d\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e.\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 tool_calls \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0447\u0435\u0440\u0435\u0437 API, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0434\u0430\u0451\u0442 \u0433\u043e\u043b\u044b\u0439 \u0432\u044b\u0437\u043e\u0432, \u0430 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442.\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a LLM \u0438 MCP-\u0432\u044b\u0437\u043e\u0432\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a \u00ab\u0437\u0430\u0432\u0438\u0441\u0448\u0438\u0439\u00bb \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441.\u0410\u043d\u0430\u0442\u043e\u043c\u0438\u044f \u043f\u0430\u0439\u043f\u0430\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043f\u0430\u0439\u043f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 hostkeyru_rhr_pipe. \u041e\u043d \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 HOSTKEY: \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u043e VPS, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u0442\u0438\u043f\u043e\u0432\u044b\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c, \u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b (MCP) \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0434\u0451\u0442 \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c hostkeyrurhr, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0430\u0439\u043f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441, \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u044e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u0443\u0436\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0448\u0430\u0433\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0431\u043e\u0433\u0430\u0449\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c RAG.\u041f\u0430\u0439\u043f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442 OpenWebUI \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435: body (\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043c\u043e\u0434\u0435\u043b\u044c, \u0444\u043b\u0430\u0433\u0438, tool_ids, features), tools (\u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 MCP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438) \u0438 __event_emitter__ (\u043a\u0430\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u0432 UI):async def pipe(\u00a0\u00a0\u00a0\u00a0self,\u00a0\u00a0\u00a0\u00a0body: dict,\u00a0\u00a0\u00a0\u00a0user: Optional[dict] = None,\u00a0\u00a0\u00a0\u00a0tools: Optional[dict] = None,\u00a0\u00a0\u00a0\u00a0metadata: Optional[dict] = None,\u00a0\u00a0\u00a0\u00a0__event_emitter__=None,) -&gt; Union[str, Generator, Iterator, Dict[str, Any]]:\u00a0\u00a0\u00a0\u00a0messages = list(body.get(&#171;messages&#187;, []))\u00a0\u00a0\u00a0\u00a0if not messages:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return &#171;\u041e\u0448\u0438\u0431\u043a\u0430: \u043f\u0443\u0441\u0442\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441.&#187;\u00a0\u00a0\u00a0\u00a0user_wanted_stream = body.get(&#171;stream&#187;, False)\u0417\u0430\u0442\u0435\u043c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442 \u2014 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u043e\u0434\u0430\u043b\u044c\u043d\u044b\u043c (\u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043b\u043e\u043a\u043e\u0432 \u00ab\u0442\u0435\u043a\u0441\u0442 + \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u00bb):for i, msg in enumerate(reversed(messages)):\u00a0\u00a0\u00a0\u00a0if msg.get(&#171;role&#187;) == &#171;user&#187;:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0user_msg_index = len(messages) &#8212; 1 &#8212; i\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0original_content = msg.get(&#171;content&#187;, &#171;&#187;)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if isinstance(original_content, str):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0user_query_text = original_content\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0elif isinstance(original_content, list):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0text_parts = [item.get(&#171;text&#187;, &#171;&#187;) for item in original_content if item.get(&#171;type&#187;) == &#171;text&#187;]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0user_query_text = &#187; &#171;.join(text_parts).strip()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0434 \u0431\u0435\u0437 \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439.\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e __event_emitter__. \u042d\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 OpenWebUI \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0432 \u043f\u0430\u0439\u043f. \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432\u0441\u0435 \u043a\u0430\u043a async-\u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0447\u0430\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f: \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u044b, \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u0442 \u0438\u0445 \u043f\u0440\u044f\u043c\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u0433\u0434\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u00ab\u0437\u0430\u0432\u0438\u0441\u0448\u0435\u0439\u00bb \u043f\u043e\u043b\u043e\u0441\u043e\u0447\u043a\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043c\u0435\u043d\u044f\u0435\u043c\u0430\u044f \u043b\u0435\u043d\u0442\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439: \u00ab\u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e \u0437\u0430\u043f\u0440\u043e\u0441 &gt; \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u044e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 &gt; \u0418\u0449\u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e &gt; \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 &gt; \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 &gt; \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u044e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442\u00bb.\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0442\u0438\u043f\u0430 status:async def emit_status(description: str, done: bool = False):\u00a0\u00a0\u00a0\u00a0if __event_emitter__:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await __event_emitter__({\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#171;type&#187;: &#171;status&#187;,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#171;data&#187;: {&#171;description&#187;: description, &#171;done&#187;: done}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0})\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u0434\u043b\u044f \u043f\u0430\u0439\u043f\u043e\u0432, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a LLM \u0438 MCP. \u0411\u0435\u0437 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0438 \u0447\u0430\u0441\u0442\u043e \u0443\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0447\u0430\u0442\u0430, \u043d\u0435 \u0434\u043e\u0436\u0434\u0430\u0432\u0448\u0438\u0441\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.\u0424\u0430\u0437\u0430 \u22121. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0437\u043e\u043d\u044b \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 RHR: \u043a\u0430\u0441\u043a\u0430\u0434 \u0438\u0437 \u0442\u0440\u0451\u0445 \u044d\u0448\u0435\u043b\u043e\u043d\u043e\u0432\u0412 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u0439\u043f\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u00ab\u044d\u0442\u043e RHR-\u0437\u0430\u043f\u0440\u043e\u0441?\u00bb \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u043e\u043e\u0431\u0449\u0435. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u00ab\u0432\u044b\u043f\u0438\u0448\u0438\u0442\u0435 \u043c\u043d\u0435 \u0441\u0447\u0451\u0442\u00bb \u0438 \u043d\u0430 \u00abssh \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u00bb \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u0412\u0441\u0451 \u044d\u0442\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u043b\u043e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u0431\u043e\u0442\u0430.\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u0430\u0439\u043f\u0435 hostkeyru_rhr_pipe \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0424\u0430\u0437\u0430 \u22121, \u0438 \u044d\u0442\u043e \u043d\u0435 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043a LLM, \u0430 \u043a\u0430\u0441\u043a\u0430\u0434, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u0448\u0435\u043b\u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043d\u0435 \u0434\u0430\u043b \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430.\u042d\u0448\u0435\u043b\u043e\u043d 1 \u2014 keyword guard (_keyword_prefilter)\u041d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Python, \u0431\u0435\u0437 LLM. \u041a\u043e\u0434 \u0438\u0449\u0435\u0442 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0434\u0432\u0430 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432: RHR_KEYWORDS (ssh, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437, raid, \u0441\u0435\u0442\u044c, dns, \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u2026) \u0438 CLIENT_SOFTWARE_SIGNALS (\u043a\u043e\u0434 \u0441\u0430\u0439\u0442\u0430, \u043a\u043e\u043d\u0444\u0438\u0433 nginx, wordpress, laravel\u2026). \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e RHR-\u043a\u043b\u044e\u0447\u0438, \u0441\u0442\u0430\u0432\u0438\u043c&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-501035","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/501035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=501035"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/501035\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=501035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=501035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=501035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}