{"id":481953,"date":"2026-06-01T14:22:22","date_gmt":"2026-06-01T14:22:22","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=481953"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=481953","title":{"rendered":"AI-\u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d \u0432 \u043f\u0440\u043e\u0434\u0435 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043c\u0435\u0441\u044f\u0446\u0435 \u2014 5 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0438 \u0438\u043d\u0444\u0440\u0430-\u0442\u044e\u043d\u0438\u043d\u0433"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c AI-\u0447\u0430\u0442 \u043f\u043e \u0442\u0438\u043f\u043e\u0432\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u2014 chat-completions API, OpenAI Memory, \u043e\u0434\u0438\u043d \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 Stable Diffusion \u2014 \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0441\u0442\u0435\u043d\u044b. \u0411\u043e\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u0441\u044f\u0442\u044c \u0440\u0435\u043f\u043b\u0438\u043a. \u0418\u043d\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u043e\u0434\u0440\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 HTTP 200, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u0432\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u2014 \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430: \u043d\u0438 \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u044d\u0442\u043e \u043c\u043e\u043b\u0447\u0430. \u041e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0440\u0438\u0441\u0443\u0435\u0442 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439. \u0410 \u043e\u0434\u0435\u0442\u044c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u043b\u0430\u0442\u044c\u0435 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435.<\/p>\n<p>\u042f \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430 \u0434\u0435\u0440\u0436\u0443 \u0432 \u043f\u0440\u043e\u0434\u0435 AI-\u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d\u0430: \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0431\u044d\u043a\u0435\u043d\u0434 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0438 Telegram-\u0431\u043e\u0442, \u0438 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0410\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044f \u2014 \u0441\u043e\u0442\u043d\u0438 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u0435 \u0441\u043e\u0442\u043d\u0438 \u0442\u044b\u0441\u044f\u0447. \u041a\u043e\u043d\u0432\u0435\u0440\u0441\u0438\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u0432 \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0442\u0430\u0440\u0438\u0444 \u2014 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u044b, \u043a\u0430\u043a \u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u043d\u0430 \u0440\u0430\u043d\u043d\u0435\u0439 \u0441\u0442\u0430\u0434\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0446\u0438\u0444\u0440 \u043f\u0440\u043e \u00ab\u043c\u0438\u043b\u043b\u0438\u043e\u043d MAU\u00bb, \u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u0446\u0435\u043d\u044b \u0437\u0430 \u0442\u044b\u0441\u044f\u0447\u0443 \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u043e\u043b\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0439 \u0432 \u043a\u0435\u0448, \u0434\u043d\u0435\u0432\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043b\u043a\u0438 \u0442\u0440\u0430\u0442 \u0438 \u0434\u043e\/\u043f\u043e\u0441\u043b\u0435 \u043f\u043e \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043f\u0440\u043e\u0434\u0430.<\/p>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u0447\u0435\u0442\u044b\u0440\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0445 build-log \u043f\u043e\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b \u043d\u0430 dev.to (\u0441\u0435\u0440\u0438\u044f \u00abBuilding HoneyChat\u00bb), \u0441\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0432 \u043e\u0434\u0438\u043d \u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c. \u041f\u043b\u044e\u0441 \u0434\u0432\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e: \u043f\u0440\u043e \u0434\u0435\u043d\u044c\u0433\u0438 (\u044e\u043d\u0438\u0442-\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043c\u0435\u0441\u044f\u0446\u0435) \u0438 \u043f\u0440\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0442\u044e\u043d\u0438\u043d\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0434\u0432\u0438\u043d\u0443\u043b \u043f\u043e\u0442\u043e\u043b\u043e\u043a DAU \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b.<\/p>\n<h3>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h3>\n<ol>\n<li>\n<p>\u041f\u0430\u043c\u044f\u0442\u044c: Redis + ChromaDB<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f LLM \u0438 \u043a\u0435\u0448 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c: LoRA \u0438 IP-Adapter<\/p>\n<\/li>\n<li>\n<p>\u042e\u043d\u0438\u0442-\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043c\u0435\u0441\u044f\u0446\u0435<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0434-\u0442\u044e\u043d\u0438\u043d\u0433: \u0447\u0442\u043e \u043f\u043e\u0434\u043a\u0440\u0443\u0442\u0438\u043b \u0432 \u0438\u043d\u0444\u0440\u0435 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043c\u0435\u0441\u044f\u0446\u0435<\/p>\n<\/li>\n<li>\n<p>\u0427\u0442\u043e \u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043b, \u043d\u0430\u0447\u0430\u0432 \u0441\u0435\u0439\u0447\u0430\u0441<\/p>\n<\/li>\n<li>\n<p>\u0413\u0434\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043f\u0440\u043e\u0434\u0435 \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438<\/p>\n<\/li>\n<\/ol>\n<h3>TL;DR<\/h3>\n<ul>\n<li>\n<p><strong>\u041f\u0430\u043c\u044f\u0442\u044c<\/strong> \u2014 <code>Redis<\/code> \u043f\u043e\u0434 \u0441\u0432\u0435\u0436\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u0440\u0435\u043f\u043b\u0438\u043a \u043f\u043b\u044e\u0441 <code>ChromaDB<\/code> \u043f\u043e\u0434 \u0441\u0436\u0430\u0442\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u044b \u043a\u0443\u0441\u043a\u043e\u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u0430. \u0422\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e. \u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u2014 \u043f\u0440\u044f\u043c\u0430\u044f \u0434\u043e\u0440\u043e\u0433\u0430 \u043a \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043b\u043e\u0445\u0438\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f LLM<\/strong> \u2014 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 UI \u0434\u0432\u0430 \u0442\u0435\u043c\u043f\u0430 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 (<code>slow_burn<\/code> \u0438 <code>instant<\/code>) \u043f\u043b\u044e\u0441 legacy-\u0434\u0435\u0444\u043e\u043b\u0442 <code>natural<\/code>. \u041f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u043c\u043f, \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u0440\u0438\u0444 \u2014 \u0441\u0432\u043e\u044f \u043c\u043e\u0434\u0435\u043b\u044c. \u041f\u043b\u044e\u0441 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 <strong>\u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432<\/strong>. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043b\u043e\u0432\u0443\u0448\u043a\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0435 \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u044e\u0442\u0441\u044f: \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 HTTP 200, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u00ab\u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0444\u0438\u043b\u044c\u0442\u0440 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430\u00bb \u2014 \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430, \u043d\u0435 \u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0438\u0448\u0438\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0435\u0448 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432<\/strong> \u2014 \u043d\u0430 Gemini 3.1 Flash Lite \u043e\u0434\u0438\u043d \u043c\u0430\u0440\u043a\u0435\u0440 <code>cache_control: ephemeral<\/code> \u043f\u043e\u0432\u0435\u0440\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u043f\u0442\u0430 (\u044d\u0442\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f) \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 <strong>75% \u043d\u0430 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/strong> \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0423 \u043c\u0435\u043d\u044f \u044d\u0442\u043e\u0442 \u043e\u0434\u0438\u043d \u043c\u0430\u0440\u043a\u0435\u0440 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0432\u0441\u0435\u0433\u043e LLM-\u0431\u044e\u0434\u0436\u0435\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/strong> \u2014 LoRA, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0434\u043e\u043e\u0431\u0443\u0447\u0430\u0435\u0442\u0435 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u041e\u043d\u0430 \u00ab\u0443\u0447\u0438\u0442\u00bb Stable Diffusion \u0443\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043b\u0438\u0446\u043e. \u041f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0451 IP-Adapter (\u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u043f\u043e\u0434\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441-\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438) \u0441 \u0443\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u043b\u043e\u0439 \u0438 \u0440\u0430\u043d\u043d\u0438\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0440\u0438\u0441\u0443\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u043e\u0432\u0430\u0440 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043b\u0438\u0446\u043e \u043d\u0435 \u0443\u0435\u0445\u0430\u043b\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u044e\u043d\u0438\u043d\u0433 \u043f\u0440\u043e\u0434\u0430<\/strong> \u2014 LRU-\u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u0432 ChromaDB, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a uvicorn-\u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432 \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, 90 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u043c\u044f\u0433\u043a\u043e\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u0434\u043d\u044f\u0442\u044b\u0439 \u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0442\u0440\u0430\u0442. \u0412 \u0441\u0443\u043c\u043c\u0435 \u043f\u043e\u0442\u043e\u043b\u043e\u043a API \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b \u0441 ~500 \u0434\u043e ~1200 DAU, \u043f\u043e\u0442\u043e\u043b\u043e\u043a ChromaDB \u2014 \u0441 ~800 \u0434\u043e 2000+ DAU. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u043b.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u043e, \u0441 \u043a\u043e\u0434\u043e\u043c, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0446\u0438\u0444\u0440\u0430\u043c\u0438 \u0438 \u0442\u0435\u043c, \u0447\u0442\u043e \u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043b.<\/p>\n<h3>1. \u041f\u0430\u043c\u044f\u0442\u044c: Redis + ChromaDB<\/h3>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 \u0441\u043a\u043e\u043b\u044c\u0437\u044f\u0449\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e<\/h4>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0443 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u2014 \u043e\u0442\u0434\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 N \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0437\u0430\u0431\u044b\u0442\u044c. \u0427\u0435\u0440\u0435\u0437 10-20 \u0440\u0435\u043f\u043b\u0438\u043a \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442, \u0431\u043e\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u0442 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0451\u043d\u043d\u043e\u0441\u0442\u0438. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u00ab\u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u043e\u043a\u043d\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u00bb \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0435 \u0432\u0435\u0449\u0438: \u0446\u0435\u043d\u0443 \u0432 \u0442\u043e\u043a\u0435\u043d\u0430\u0445 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043b\u043e\u0433\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u043d\u043e \u043e\u0449\u0443\u0442\u0438\u043c\u043e\u0439) \u0438 \u0432 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438 \u0438\u0437 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b.<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u0448\u0430\u0433 \u2014 \u0441\u043a\u043e\u043b\u044c\u0437\u044f\u0449\u0438\u0439 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437: \u043a\u0430\u0436\u0434\u044b\u0435 N \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0436\u0430\u0442\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e. \u0414\u0451\u0448\u0435\u0432\u043e, \u043d\u043e <strong>\u0442\u0435\u0440\u044f\u0435\u0442 \u043d\u044e\u0430\u043d\u0441 \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u0430\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/strong>. \u041f\u0440\u043e\u0433\u043e\u043d\u0438\u0442\u0435 \u0440\u0443\u043a\u0430\u043c\u0438:<\/p>\n<pre><code>\u0420\u0435\u043f\u043b\u0438\u043a\u0430 1: \u00ab\u041e\u043d\u0430 \u0441\u043a\u0430\u0437\u0430\u043b\u0430, \u0447\u0442\u043e \u043d\u0435\u043d\u0430\u0432\u0438\u0434\u0438\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0438\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d            \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u0435\u0451 \u0440\u0430\u0431\u043e\u0442\u0443\u00bbSummary 1: \u00ab\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0441 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435\u00bbSummary 2: \u00ab\u0423 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441\u0442\u0440\u0435\u0441\u0441 \u0438\u0437-\u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u044b\u00bbSummary 3: \u00ab\u0423 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0435\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u00bb<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0438\u0441\u0447\u0435\u0437\u043b\u0430. \u0411\u043e\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0437\u0432\u0443\u0447\u0430\u0442\u044c \u043a\u0430\u043a \u0437\u0430\u0435\u0437\u0436\u0435\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0441\u0442\u0438\u043d\u043a\u0430. \u041b\u0435\u0447\u0438\u0442\u0441\u044f <strong>\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043b\u043e\u0451\u0432<\/strong>: \u0441\u0432\u0435\u0436\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e, \u0441\u0436\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u043a\u0443\u0441\u043a\u0438, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0441\u043c\u044b\u0441\u043b\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437 \u0438\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0438.<\/p>\n<h4>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u0434\u0432\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0441\u043b\u043e\u044f<\/h4>\n<ul>\n<li>\n<p><code><strong>Redis<\/strong><\/code> \u2014 \u0433\u043e\u0440\u044f\u0447\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u043f\u043e \u043a\u043b\u044e\u0447\u0443 <code>(user_id, character_id, session_id)<\/code>, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430, \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u043a\u043b\u044e\u0447\u0430 (TTL), \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438. \u042d\u0442\u043e \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0440\u043e\u0447\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u00ab\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 20-30 \u0440\u0435\u043f\u043b\u0438\u043a\u00bb.<\/p>\n<\/li>\n<li>\n<p><code><strong>ChromaDB<\/strong><\/code> \u2014 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0431\u0430\u0437\u0430, \u0445\u0440\u0430\u043d\u0438\u0442 <strong>\u0441\u0436\u0430\u0442\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u044b<\/strong> \u043a\u0443\u0441\u043a\u043e\u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u0430, \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0417\u0430\u043f\u0438\u0441\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0431\u0430\u0442\u0447\u0430\u043c\u0438. \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u043c\u044b\u0441\u043b\u0443 \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u043e (embedding similarity).<\/p>\n<\/li>\n<\/ul>\n<p>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u0438\u0451\u043c \u2014 <strong>\u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u044b, \u0430 \u043d\u0435 \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<\/strong>. \u0414\u0435\u0441\u044f\u0442\u044c \u043d\u0435\u0434\u0435\u043b\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0447\u0430\u0442\u0430 \u2014 \u044d\u0442\u043e 30-50 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e, \u0430 \u043d\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0442\u044b\u0441\u044f\u0447. \u0418\u043d\u0434\u0435\u043a\u0441 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0445 \u0432\u0440\u043e\u0434\u0435 \u00ab\u0443\u0433\u0443\u00bb \u043d\u0435 \u0437\u0430\u0433\u0440\u044f\u0437\u043d\u044f\u0435\u0442\u0441\u044f (\u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u0430\u0451\u0442 \u0441\u043b\u0430\u0431\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0438 \u0442\u044f\u043d\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0448\u0443\u043c\u043d\u044b\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f).<\/p>\n<p>\u041f\u0440\u043e <code>session_id<\/code> \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u0412\u0435\u0431-\u0447\u0430\u0442 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u00ab\u0441\u0446\u0435\u043d\u044b\u00bb: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0441 \u0442\u0435\u043c \u0436\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u043c \u0432 \u043d\u043e\u0432\u043e\u043c \u0441\u0435\u0442\u0442\u0438\u043d\u0433\u0435, \u0438 \u043f\u0430\u043c\u044f\u0442\u044c <strong>\u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u043e\u0442\u0435\u043a\u0430\u0442\u044c<\/strong> \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0446\u0435\u043d\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0438 Redis \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 ChromaDB \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 <code>session_id<\/code>, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0435\u0441\u0442\u044c. \u0411\u043e\u0442 \u0432 Telegram \u043f\u043e\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0431\u0435\u0437 session-\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u0441\u043b\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439.<\/p>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 summary-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 ChromaDB:<\/p>\n<pre><code class=\"python\">{    \"id\": \"summary:uid42:char_anna:sess_kn3a:turn_120\",    \"document\": \"\u0410\u043d\u043d\u0430 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u0435\u0433\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435...\",    \"metadata\": {        \"type\": \"summary\",       # \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442 \u043e\u0442 event-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432        \"turn_range\": \"100-120\", # \u043a\u0430\u043a\u043e\u0439 \u043a\u0443\u0441\u043e\u043a \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0441\u0436\u0430\u0442        \"ts\": \"2026-05-20T14:32:00Z\",        \"lang\": \"ru\",    },}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u0435 <code>type: \"summary\"<\/code> \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u2014 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043b\u0435\u0436\u0430\u043b\u0438 \u0431\u0435\u0437 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430 (\u00abevent\u00bb, \u00abfact\u00bb) \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u043e\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438. \u0421\u043e\u0432\u0435\u0442: <strong>\u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u043a\u043b\u0430\u0434\u0438\u0442\u0435 <\/strong><code><strong>type<\/strong><\/code><strong> \u0432 metadata<\/strong>, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043e\u0434\u0438\u043d \u0442\u0438\u043f.<\/p>\n<h4>\u0417\u0430\u043f\u0438\u0441\u044c \u0432 Redis: bounded list + TTL \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0435<\/h4>\n<pre><code class=\"python\">async def save_message(user_id: int, char_id: str, role: str, content: str) -&gt; None:    r = get_redis()    key = f\"chat:{user_id}:{char_id}:messages\"    msg = json.dumps({        \"role\": role,        \"content\": content,        \"ts\": datetime.now(timezone.utc).isoformat(),    })    pipe = r.pipeline()    pipe.rpush(key, msg)    pipe.ltrim(key, -HOT_BUFFER_SIZE, -1)    pipe.expire(key, 86400 * HOT_BUFFER_TTL_DAYS)    await pipe.execute()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0440\u0438 \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0434\u0435\u0441\u044c \u0432\u0430\u0436\u043d\u044b:<\/p>\n<ol>\n<li>\n<p><code><strong>ltrim<\/strong><\/code><strong> \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.<\/strong> \u0421\u043f\u0438\u0441\u043e\u043a \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 N \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439), \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u2014 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u0430\u044f, \u0430 \u043d\u0435 \u0440\u0430\u0441\u0442\u0451\u0442 \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u043a\u043b\u044e\u0447\u0430 \u043f\u0440\u043e\u0434\u043b\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.<\/strong> \u041d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u0438. \u0412\u0430\u0436\u043d\u043e: \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 Redis \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c <code>maxmemory-policy allkeys-lru<\/code> \u2014 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u0430\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 <code>noeviction<\/code> \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438 \u044d\u0442\u043e \u0441\u044e\u0440\u043f\u0440\u0438\u0437 \u0432 \u0441\u0430\u043c\u044b\u0439 \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>Pipelined \u0437\u0430\u043f\u0438\u0441\u044c.<\/strong> <code>rpush<\/code> + <code>ltrim<\/code> + <code>expire<\/code> \u0443\u0445\u043e\u0434\u044f\u0442 \u043e\u0434\u043d\u0438\u043c \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0432 Redis, \u0430 \u043d\u0435 \u0442\u0440\u0435\u043c\u044f.<\/p>\n<\/li>\n<\/ol>\n<h4>\u0427\u0442\u0435\u043d\u0438\u0435 \u2014 \u0442\u0440\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e<\/h4>\n<pre><code class=\"python\">async def build_prompt_context(user_id: int, char_id: str, user_query: str) -&gt; dict:    recent, summary, memories = await asyncio.gather(        get_recent(user_id, char_id),        get_latest_summary(user_id, char_id),        get_relevant_memories(user_id, char_id, user_query),    )    return {\"recent\": recent, \"summary\": summary, \"memories\": memories}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u044d\u0448 \u0441\u0432\u0435\u0436\u0435\u0433\u043e summary \u0436\u0438\u0432\u0451\u0442 \u0432 Redis \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c TTL; \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0442\u0443\u0445 \u2014 <code>ChromaDB<\/code>-\u0437\u0430\u043f\u0440\u043e\u0441 \u0438 write-back \u0432 Redis, \u0447\u0442\u043e\u0431\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u0441\u043d\u043e\u0432\u0430 \u0431\u044b\u043b \u0433\u043e\u0440\u044f\u0447\u0438\u043c.<\/p>\n<h4>\u0413\u0440\u0430\u0431\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043b\u043e\u0432\u0438\u043b \u0432 \u043f\u0440\u043e\u0434\u0435<\/h4>\n<ul>\n<li>\n<p><strong>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u043e\u043d\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0441\u0443\u043c\u043c\u0430\u0440\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438.<\/strong> \u0414\u0432\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043f\u043e\u0447\u0442\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043e\u0431\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0441\u0443\u043c\u043c\u0430\u0440\u0438\u0437\u0430\u0446\u0438\u044e, \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043f\u0430\u0434\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b. \u0423 \u043c\u0435\u043d\u044f \u0432 \u043f\u0440\u043e\u0434\u0435 \u0436\u0438\u0432\u0451\u0442 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c <code>_SUMMARIZE_TASKS: dict[str, asyncio.Task]<\/code> \u0441 \u043a\u043b\u044e\u0447\u043e\u043c <code>f\"{user_id}:{char_id}:{session_id}\"<\/code>; \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>task.cancel()<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0447\u0438\u0441\u0442\u0438\u043b \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043f\u0440\u044f\u043c\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0443\u043c\u043c\u0430\u0440\u0438\u0437\u0430\u0446\u0438\u0438.<\/strong> \u0416\u043c\u0451\u0442 \u00ab\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0447\u0430\u0442\u00bb, \u043f\u043e\u043a\u0430 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041f\u0435\u0440\u0435\u0441\u043a\u0430\u0437 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u0435\u0442 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0436\u0435 \u043d\u0435\u0442. \u041b\u0435\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430 Redis \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e; \u0435\u0441\u043b\u0438 \u043a\u043b\u044e\u0447 \u0438\u0441\u0447\u0435\u0437 \u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0438\u0445\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0443\u0441\u0442\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u044b \u043a\u0435\u0448\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441 \u0434\u043b\u0438\u043d\u043d\u044b\u043c TTL.<\/strong> LLM \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043f\u0443\u0441\u0442\u043e\u0442\u043e\u0439 \u0438\u0437-\u0437\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (rate limit), \u0430 \u044f \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430 3 \u0434\u043d\u044f. \u041b\u0435\u0447\u0438\u0442\u0441\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e \u2014 <code>if summary:<\/code> \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u043a\u0435\u0448.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u043d\u0435\u0442 \u0443 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<\/strong> \u0417\u0430\u043f\u0440\u043e\u0441 \u043a \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 ChromaDB \u0431\u0440\u043e\u0441\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432 <code>try\/except<\/code> \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0442\u0443 \u2014 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<\/li>\n<\/ul>\n<h3>2. \u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f LLM \u0438 \u043a\u0435\u0448 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432<\/h3>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u0434\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u0432\u0441\u0451 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h4>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0430 \u043c\u044b\u0441\u043b\u044c \u0432\u0437\u044f\u0442\u044c \u043e\u0434\u043d\u0443 \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0427\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u0432 \u043f\u0440\u043e\u0434\u0435 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0422\u0440\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b.<\/p>\n<p><strong>\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0438 \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0442\u0430\u0440\u0438\u0444\u044b \u0442\u044f\u043d\u0443\u0442 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0443 \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b.<\/strong> \u041d\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u0442\u0430\u0440\u0438\u0444\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0448\u043b\u0451\u0442 20 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0434\u0435\u043d\u044c. \u0415\u0441\u043b\u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0444\u043b\u0430\u0433\u043c\u0430\u043d\u0441\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u2014 \u044d\u0442\u043e\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0438\u043a \u0441\u0442\u043e\u0438\u0442 \u0432\u0430\u043c \u0434\u043e\u0440\u043e\u0436\u0435, \u0447\u0435\u043c \u0441\u0430\u043c \u043f\u043b\u0430\u0442\u0438\u0442. \u0410 \u043f\u043b\u0430\u0442\u0438\u0442 \u043e\u043d, \u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u043e\u0447\u043a\u0443, \u043d\u043e\u043b\u044c. \u041d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043f\u043b\u0430\u0442\u043d\u043e\u043c \u0442\u0430\u0440\u0438\u0444\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0436\u0434\u0451\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430 \u0441\u0432\u043e\u0438 \u0434\u0435\u043d\u044c\u0433\u0438: \u0431\u0443\u0434\u044c \u0434\u043e\u0431\u0440, \u0434\u0430\u0439 \u0435\u043c\u0443 \u0444\u043b\u0430\u0433\u043c\u0430\u043d. \u041e\u0434\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u0432\u0441\u0435\u0445 \u2014 \u044d\u0442\u043e \u043b\u0438\u0431\u043e \u0442\u0438\u0445\u0430\u044f \u0434\u043e\u0442\u0430\u0446\u0438\u044f \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u0437\u0430 \u0441\u0447\u0451\u0442 \u043f\u043b\u0430\u0442\u044f\u0449\u0438\u0445, \u043b\u0438\u0431\u043e \u043f\u043b\u0430\u0442\u044f\u0449\u0438\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439, \u0438 \u043e\u0431\u0438\u0436\u0430\u0435\u0442\u0441\u044f. \u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0442\u0443\u0442 \u043d\u0438\u043a\u043e\u0433\u043e \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442.<\/p>\n<p><strong>\u041c\u043e\u0434\u0435\u043b\u0438 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0443.<\/strong> GPT-4 \u0438 Claude \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0441\u0446\u0435\u043d\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u043d\u0430 \u043f\u043b\u0430\u0442\u043d\u043e\u043c \u0442\u0430\u0440\u0438\u0444\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b \u0437\u0430\u043a\u043e\u043d\u043e\u043c \u0434\u043b\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e\u043b\u0435\u0442\u043d\u0435\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0438. \u041c\u0435\u043d\u0435\u0435 \u0437\u0430\u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u043e\u0433\u043b\u0430\u0448\u0430\u044e\u0442\u0441\u044f, \u043d\u043e \u0445\u0443\u0436\u0435 \u0434\u0435\u0440\u0436\u0430\u0442 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u2014 \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442, \u043a\u0442\u043e \u0447\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u043b \u0434\u0435\u0441\u044f\u0442\u044c \u0440\u0435\u043f\u043b\u0438\u043a \u043d\u0430\u0437\u0430\u0434. \u0427\u0435\u043c-\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p><strong>\u0423 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0442\u0435\u043c\u043f\u0430.<\/strong> \u0412 UI \u043e\u043d \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439: <code>slow_burn<\/code> (\u00ab\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f, \u0431\u0435\u0437 18+, \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u00bb) \u0438 <code>instant<\/code> (\u00ab\u0441\u0440\u0430\u0437\u0443 \u043a \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c\u0443, \u0431\u0435\u0437 \u0434\u043e\u043b\u0433\u0438\u0445 \u043f\u0440\u0435\u043b\u044e\u0434\u0438\u0439\u00bb). \u041f\u043b\u044e\u0441 \u0432 \u0411\u0414 \u0435\u0449\u0451 \u0436\u0438\u0432\u0451\u0442 legacy-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>natural<\/code> \u2014 \u0434\u0435\u0444\u043e\u043b\u0442 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0442\u0435\u043c\u043f\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b. \u042d\u0442\u0438 \u0442\u0435\u043c\u043f\u044b \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430, \u043d\u043e \u0438 \u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043e\u0442 \u043c\u043e\u0434\u0435\u043b\u0438: \u043d\u0430 <code>instant<\/code> \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u0448\u043b\u0451\u0442 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u0438 \u0436\u0434\u0451\u0442 \u043e\u0442\u0432\u0435\u0442\u0430 \u0437\u0430 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b; \u043d\u0430 <code>slow_burn<\/code> \u0438\u043b\u0438 <code>natural<\/code> \u2014 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0446\u0435\u043d\u044b, \u0442\u0443\u0442 \u0442\u0435\u0440\u043f\u0438\u0442 \u0438 10. \u0416\u0451\u0441\u0442\u043a\u043e \u0437\u0430\u0448\u0438\u0442\u0430\u044f \u043e\u0434\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443, \u043b\u0438\u0431\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443: \u043b\u0438\u0431\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u043c \u0447\u0430\u0442\u0435, \u043b\u0438\u0431\u043e \u0448\u0442\u0430\u043c\u043f\u0443\u0435\u0442 \u0441\u0443\u0445\u0438\u0435 \u0444\u0440\u0430\u0437\u044b \u0442\u0430\u043c, \u0433\u0434\u0435 \u0436\u0434\u0430\u043b\u0438 \u0441\u0446\u0435\u043d\u0443.<\/p>\n<p>\u041f\u043e\u0432\u0435\u0440\u0445 \u0442\u0435\u043c\u043f\u0430 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 <strong>\u0441\u0442\u0438\u043b\u044c \u043e\u0442\u0432\u0435\u0442\u0430<\/strong> (<code>response_style<\/code>) \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435: <code>standard<\/code> (\u0434\u0435\u0444\u043e\u043b\u0442), <code>cinematic<\/code> (\u0434\u043b\u0438\u043d\u043d\u0430\u044f \u0441\u0446\u0435\u043d\u0430 \u0441 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u043e\u0439 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 <code>\u2726action\u2726<\/code>), <code>brief<\/code> (1-2 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f), <code>slang<\/code> (SMS-\u0441\u0442\u0438\u043b\u044c), <code>conversational<\/code> (\u0436\u0438\u0432\u043e\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0431\u0435\u0437 action markers). \u0421\u0442\u0438\u043b\u044c \u0438 \u0442\u0435\u043c\u043f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b: \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0442\u0435\u043c\u043f\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0438\u043b\u044c. \u041d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0442\u0438\u043b\u044c \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442, \u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0442 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u2014 <code>brief<\/code>\/<code>slang<\/code>\/<code>conversational<\/code> \u0432\u044b\u0440\u0435\u0437\u0430\u044e\u0442 cinematic-\u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0438 \u0440\u0435\u0436\u0443\u0442 \u0434\u043b\u0438\u043d\u0443 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u0430.<\/p>\n<p>\u041e\u0442\u0441\u044e\u0434\u0430 \u0441\u0445\u0435\u043c\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435: <code>(\u0442\u0430\u0440\u0438\u0444) \u00d7 (\u0442\u0435\u043c\u043f) \u2192 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c<\/code>, \u043f\u043b\u044e\u0441 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 \u043e\u0442\u043a\u0430\u0437\u0430. \u0427\u0435\u0440\u0435\u0437 <a href=\"https:\/\/openrouter.ai\" rel=\"noopener noreferrer nofollow\">OpenRouter<\/a> \u2014 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440 LLM-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0441 \u0435\u0434\u0438\u043d\u044b\u043c API \u2014 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e: \u043e\u0434\u0438\u043d \u043a\u043b\u044e\u0447, \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0438\u0434\u043d\u043e, \u0447\u0435\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u0431\u044d\u043a\u0435\u043d\u0434 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e.<\/p>\n<h4>\u041a\u0430\u0440\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0422\u0430\u0440\u0438\u0444<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0422\u0435\u043c\u043f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041c\u043e\u0434\u0435\u043b\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0426\u0435\u043d\u0430 $\/1M \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0432\u0445\u043e\u0434\/\u0432\u044b\u0445\u043e\u0434<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u0435\u0448<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \/ \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \/ premium<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>slow_burn<\/code>, <code>natural<\/code> (legacy)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>qwen\/qwen3-235b-a22b-2507<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0.07 \/ 0.10<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \/ \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \/ premium<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>instant<\/code> + \u044f\u0432\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>deepseek\/deepseek-v4-flash<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0.14 \/ 0.28<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u044f\u0432\u043d\u044b\u0439, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">VIP \/ Elite<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043b\u044e\u0431\u043e\u0439 \u0442\u0435\u043c\u043f<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>google\/gemini-3.1-flash-lite<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0.25 \/ 1.50<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u044f\u0432\u043d\u044b\u0439, \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u0440\u043a\u0435\u0440<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u043f\u0440\u0438 \u043e\u0442\u043a\u0430\u0437\u0435\/\u043f\u0443\u0441\u0442\u043e\u0442\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>x-ai\/grok-4.20<\/code>, \u0437\u0430\u0442\u0435\u043c <code>minimax\/minimax-m2-her<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Qwen3-235B-A22B-2507 \u2014 \u0441\u0430\u043c\u0430\u044f \u0434\u0435\u0448\u0451\u0432\u0430\u044f \u00ab\u043f\u0440\u0438\u043b\u0438\u0447\u043d\u0430\u044f\u00bb \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0437 \u0442\u0435\u0445, \u0447\u0442\u043e \u044f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b. 235 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u043e\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 MoE (Mixture of Experts \u2014 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0438\u0434\u044f\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u00ab\u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043d\u044b\u0445\u00bb \u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439, \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u043f\u043b\u043e\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430). \u041e\u043a\u043d\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 131 \u0442\u044b\u0441. \u0442\u043e\u043a\u0435\u043d\u043e\u0432, $0.10 \u0437\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435. \u0414\u043b\u044f \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u0442\u0430\u0440\u0438\u0444\u0430 \u044d\u0442\u043e\u0433\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c.<\/p>\n<p>Gemini 3.1 Flash Lite \u043d\u0430 \u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u0442\u0430\u0440\u0438\u0444\u0430\u0445 \u0434\u0430\u0451\u0442 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043f\u043b\u043e\u0442\u043d\u0443\u044e \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0441\u0446\u0435\u043d, \u043d\u043e \u0431\u0435\u0437 \u043a\u0435\u0448\u0430 \u043e\u043d\u0430 \u0434\u043e\u0440\u043e\u0436\u0435 Qwen \u0432 3.5 \u0440\u0430\u0437\u0430 \u043f\u043e \u0432\u0445\u043e\u0434\u0443 \u0438 \u0432 15 \u0440\u0430\u0437 \u043f\u043e \u0432\u044b\u0445\u043e\u0434\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0431\u043b\u043e\u043a\u0435 \u2014 \u043f\u0440\u043e \u043a\u0435\u0448.<\/p>\n<h4>\u041a\u0435\u0448 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432 \u043d\u0430 Gemini 3.1: \u0433\u0434\u0435 \u0441\u043f\u0440\u044f\u0442\u0430\u043b\u0438\u0441\u044c 25% \u0431\u044e\u0434\u0436\u0435\u0442\u0430<\/h4>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043a\u0435\u0448\u0430 \u043e\u0431\u0438\u0434\u043d\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 \u0443\u0437\u043d\u0430\u0451\u0448\u044c \u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0444\u0430\u043a\u0442\u0443\u043c. \u041a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u0443\u0441\u043a\u0430 \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430, \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u043e \u0442\u043e\u043d\u0443. \u042d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c <strong>\u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430 \u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443<\/strong> \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u0438\u0430\u043b\u043e\u0433\u0430. \u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0431\u0440\u0430\u0442\u044c \u043e\u0442\u0442\u0443\u0434\u0430 \u0436\u0435 \u043f\u043e \u0446\u0435\u043d\u0435 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043d\u0438\u0436\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430. \u041f\u043b\u0430\u0442\u0438\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u2014 \u0437\u0430 \u0441\u0432\u0435\u0436\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>OpenRouter \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u0435\u0448, \u043d\u043e \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u2014 <strong>\u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0440\u043e\u0432\u043d\u043e \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u044f\u043c<\/strong>. \u042f \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u043c\u0435\u0441\u044f\u0446\u0430 \u043f\u043b\u0430\u0442\u0438\u043b \u043f\u043e\u043b\u043d\u0443\u044e \u0446\u0435\u043d\u0443 \u0437\u0430 Gemini, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u043e\u0447\u0438\u0442\u0430\u043b \u0434\u043e\u043a\u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0438 \u043d\u0435 \u0432\u043a\u0440\u0443\u0442\u0438\u043b \u043e\u0434\u0438\u043d \u043c\u0430\u0440\u043a\u0435\u0440 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443. \u042d\u0444\u0444\u0435\u043a\u0442 \u2014 \u043e\u043a\u043e\u043b\u043e 25% \u0432\u0441\u0435\u0433\u043e LLM-\u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443. \u041e\u0434\u0438\u043d \u0438\u0437 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u0448\u044c, \u0433\u043e\u0440\u0434\u0438\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u0440\u0443\u0433\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>\u042d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430:<\/p>\n<ul>\n<li>\n<p><strong>DeepSeek V4 Flash<\/strong> \u2014 \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u0442 \u0441\u0430\u043c, \u0431\u0435\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0422\u0435\u0441\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043b 1.5-1.8 \u0442\u044b\u0441. \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043a\u0435\u0448\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0445\u043e\u0434.<\/p>\n<\/li>\n<li>\n<p><strong>DeepSeek Chat v3.1<\/strong> \u2014 \u043a\u0435\u0448\u0430 \u043d\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>Qwen3-235B<\/strong> \u2014 \u043d\u0435\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 OpenRouter-\u043e\u043c. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>Gemini 3.1 Flash Lite<\/strong> \u2014 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 <strong>\u044f\u0432\u043d\u044b\u0439 \u043c\u0430\u0440\u043a\u0435\u0440 <\/strong><code><strong>cache_control<\/strong><\/code><strong> \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435<\/strong> (\u0434\u043b\u044f \u0432\u0435\u0442\u043a\u0438 3.x, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 2.5 \u2014 \u0442\u0430\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438). \u041d\u0430 \u0442\u0435\u0441\u0442\u0435 3772 \u0438\u0437 3779 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u043f\u043e\u043f\u0430\u043b\u0438 \u0432 \u043a\u0435\u0448. \u0426\u0435\u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u2014 <strong>\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 25% \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c <strong>\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f 75%<\/strong> \u043d\u0430 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0440\u043e\u043a \u0436\u0438\u0437\u043d\u0438 \u043a\u0435\u0448\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u2014 5 \u043c\u0438\u043d\u0443\u0442 (<code>ephemeral<\/code>), \u043d\u043e OpenRouter \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 sticky-\u0440\u043e\u0443\u0442\u0438\u043d\u0433 (\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0442\u043e\u0433\u043e \u0436\u0435 \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0431\u044d\u043a\u0435\u043d\u0434-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0435\u0448 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0433\u043e\u0440\u044f\u0447\u0438\u043c, \u043f\u043e\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u0434\u043b\u044f \u043c\u0430\u0440\u043a\u0435\u0440\u0430 \u2014 \u043e\u043a\u043e\u043b\u043e 1024 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432; \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u044d\u0442\u043e \u043e\u043a\u043d\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442.<\/p>\n<p>\u041a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u043c\u0435\u043d\u044f \u0432 \u043f\u0440\u043e\u0434\u0435:<\/p>\n<pre><code class=\"python\">_EXPLICIT_CACHE_PREFIXES = (\"google\/gemini-\",)def _apply_prompt_caching(messages: list[dict], model: str) -&gt; list[dict]:    \"\"\"\u0417\u0430\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0435 system-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 blocks-\u0444\u043e\u0440\u043c\u0443 \u0441 \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u043c    cache_control: ephemeral \u2014 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0443\u0436\u0435\u043d \u044f\u0432\u043d\u044b\u0439    \u043c\u0430\u0440\u043a\u0435\u0440 (\u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e Gemini). \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043b\u0438\u0431\u043e \u043a\u0435\u0448\u0438\u0440\u0443\u044e\u0442    \u043d\u0435\u044f\u0432\u043d\u043e (DeepSeek V4), \u043b\u0438\u0431\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442 \u043c\u0430\u0440\u043a\u0435\u0440 \u0442\u0438\u0445\u043e.\"\"\"    if not model.startswith(_EXPLICIT_CACHE_PREFIXES):        return messages    out: list[dict] = []    cached_one = False    for m in messages:        if not cached_one and m.get(\"role\") == \"system\":            content = m.get(\"content\")            if isinstance(content, str) and len(content) &gt;= 1024:                new_msg = dict(m)                new_msg[\"content\"] = [{                    \"type\": \"text\",                    \"text\": content,                    \"cache_control\": {\"type\": \"ephemeral\"},                }]                out.append(new_msg)                cached_one = True                continue        out.append(m)    return out<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0435\u0442\u044b\u0440\u0435 \u0434\u0435\u0442\u0430\u043b\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u043c\u0430\u0445\u043d\u0443\u0442\u044c\u0441\u044f:<\/p>\n<ol>\n<li>\n<p><strong>\u041c\u0430\u0440\u043a\u0435\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0442\u0435 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430, \u0447\u0442\u043e \u0435\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u044e\u0442.<\/strong> \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442 \u043f\u043e\u043b\u0435 \u0442\u0438\u0445\u043e, \u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 OpenAI SDK \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u0432\u0435\u0440\u0433\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u0440\u043a\u0435\u0440 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442.<\/strong> \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u0440\u0430\u0437\u043d\u0430\u044f, \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e. \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 \u2014 \u0441\u0430\u043c\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0430\u043c\u0430\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043e\u043d\u0430 \u0438 \u0434\u0430\u0451\u0442 90% \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0440\u043e\u0433 1024 \u0441\u0438\u043c\u0432\u043e\u043b\u0430.<\/strong> \u041d\u0438\u0436\u0435 OpenRouter \u043d\u0435 \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u0442, \u043c\u0430\u0440\u043a\u0435\u0440 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><code><strong>cache_control<\/strong><\/code><strong> \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043f\u043e\u043b\u044f <\/strong><code><strong>content<\/strong><\/code><strong>.<\/strong> \u041e\u0431\u044b\u0447\u043d\u044b\u0439 <code>content: \"\u0441\u0442\u0440\u043e\u043a\u0430\"<\/code> \u043c\u0430\u0440\u043a\u0435\u0440 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u0442 \u2014 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u043b\u043e\u043a\u043e\u0432 <code>[{type, text, cache_control}]<\/code>. \u0412 \u0434\u043e\u043a\u0430\u0445 OpenRouter \u044d\u0442\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0440\u043e\u043a, \u043d\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<\/ol>\n<h4>\u041b\u043e\u0432\u0443\u0448\u043a\u0430 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0441 HTTP 200<\/h4>\n<p>\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438-\u00ab\u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u0442\u0435\u043b\u0438\u00bb \u0443 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 <strong>\u0434\u043e<\/strong> \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u041d\u0430 \u043f\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043e\u043d\u0438 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 HTTP-\u043e\u0448\u0438\u0431\u043a\u0443. \u041e\u043d\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 <strong>HTTP 200<\/strong> \u0441 \u0442\u0430\u043a\u0438\u043c \u0442\u0435\u043b\u043e\u043c:<\/p>\n<pre><code class=\"json\">{  \"choices\": [{    \"finish_reason\": \"content_filter\",    \"message\": { \"content\": \"\" }  }]}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430. \u0411\u0435\u0437 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0411\u0435\u0437 \u0441\u0442\u0430\u0442\u0443\u0441\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0435\u0441\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 retry-\u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 <code>httpx.HTTPStatusError<\/code> \u2014 \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u0442\u0432\u0435\u0442 \u0443\u043b\u0435\u0442\u0430\u0435\u0442 \u043f\u0440\u044f\u043c\u043e \u0432 \u0447\u0430\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/p>\n<p>\u041b\u0435\u0447\u0438\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043e\u0442\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u0430\u043b\u044c\u0448\u0435:<\/p>\n<pre><code class=\"python\">def _is_silent_refusal(choice: dict) -&gt; bool:    \"\"\"Reasoning-\u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 HTTP 200 + finish_reason=content_filter    + content=\"\". \u0415\u0441\u043b\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \u2014 \u044e\u0437\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u0443\u044e \u0440\u0435\u043f\u043b\u0438\u043a\u0443.\"\"\"    reason = choice.get(\"finish_reason\")    content = choice.get(\"message\", {}).get(\"content\") or \"\"    return reason in (\"content_filter\", \"length\") and not content.strip()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>content.strip()<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 <code>finish_reason<\/code> \u2014 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 <code>finish_reason=stop<\/code> \u0441 \u043f\u0443\u0441\u0442\u044b\u043c content, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043c\u044f\u0433\u043a\u043e.<\/p>\n<h4>\u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439<\/h4>\n<pre><code class=\"python\">async def complete(messages, *, primary=None, chain=None) -&gt; CompletionResult:    models = list(chain) if chain is not None else _build_chain(primary)    async with httpx.AsyncClient() as client:        for attempt, model in enumerate(models):            try:                data = await _call(client, model, messages)            except httpx.HTTPStatusError as e:                if e.response.status_code in TRANSIENT_CODES:                    continue                raise            except (httpx.ReadTimeout, httpx.ConnectError):                continue            choice = (data.get(\"choices\") or [{}])[0]            if _is_silent_refusal(choice):                continue            content = choice.get(\"message\", {}).get(\"content\") or \"\"            if not content.strip():                continue            return CompletionResult(content=content, model=model, attempt=attempt)    raise AllModelsFailedError(f\"no model returned usable content; tried {models}\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0448\u0430\u0433\u0430 \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u2014 <strong>\u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b<\/strong>. \u0415\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0445\u043e\u0441\u0442\u0438\u0442\u0441\u044f \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 A \u0438 \u0443\u043f\u0430\u043b\u0430, \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u0434\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 B. \u0420\u0435\u0437\u0435\u0440\u0432 \u0443 \u0442\u043e\u0433\u043e \u0436\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440 \u043c\u043e\u0434\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u043e\u0438\u0442 <strong>\u0434\u043e<\/strong> \u0441\u0430\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u043d\u0430 API-\u0448\u043b\u044e\u0437\u0435. \u0423 OpenRouter \u044d\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u0427\u0442\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\n<p><strong>\u041a\u0430\u043a\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u0438\u0442\u043e\u0433\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u0430<\/strong> (\u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u043b\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0430\u044f, \u0438 \u0435\u0451 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435). \u0415\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 10% \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432, \u044d\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438: \u043f\u043e\u0434\u0432\u0438\u043d\u044c\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0440\u0435\u043c\u044f \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430 vs \u043e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u0432\u0435\u0442\u0430<\/strong> \u2014 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0433\u0434\u0435 \u0437\u0430\u0442\u044b\u043a: \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u043b\u0438 \u0443 \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u0442\u043e\u043a\u0435\u043d\u0430\u0445<\/strong> (\u0432\u0445\u043e\u0434 + \u0432\u044b\u0445\u043e\u0434) \u0441 \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u043e\u0439 \u043f\u043e \u0442\u0430\u0440\u0438\u0444\u0443.<\/p>\n<\/li>\n<\/ul>\n<h3>3. \u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c: LoRA \u0438 IP-Adapter<\/h3>\n<p>\u0414\u0432\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445 \u043f\u0435\u0440\u0432\u043e\u0439:<\/p>\n<ul>\n<li>\n<p><strong>\u041b\u0438\u0446\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e<\/strong> \u043e\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e LoRA.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435 \u043d\u0430\u0434\u043e \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u043e\u0432\u0430\u0440 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430<\/strong>, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u0442\u044c \u0435\u043c\u0443 \u043b\u0438\u0446\u043e \u2014 \u044d\u0442\u043e IP-Adapter, \u043d\u0430\u043a\u0440\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0432\u0435\u0440\u0445 LoRA.<\/p>\n<\/li>\n<\/ul>\n<h4>3.1. \u041f\u043e\u0447\u0435\u043c\u0443 \u00ab\u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u043e\u043c\u043f\u0442 = \u0442\u043e \u0436\u0435 \u043b\u0438\u0446\u043e\u00bb \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h4>\n<p>\u0418\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043a\u0430\u0436\u0435\u0442\u0441\u044f:<\/p>\n<pre><code>\"anime girl, long silver hair, green eyes, Arknights operator outfit\"+ seed=12345\u2192 \u0410\u043d\u043d\u0430. \u0412\u0441\u0435\u0433\u0434\u0430.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u2014 \u043d\u0435\u0442. \u0422\u0440\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b:<\/p>\n<ul>\n<li>\n<p><strong>\u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0442\u0447\u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u044b\u0432\u043e\u0434.<\/strong> \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 Stable Diffusion \u043e\u0434\u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0441 <code>batch_size=1<\/code> \u0438 \u043f\u0435\u0440\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0438\u0437 \u0431\u0430\u0442\u0447\u0430 <code>batch_size=4<\/code> \u043f\u0440\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u043c seed \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f <strong>\u0440\u0430\u0437\u043d\u044b\u043c\u0438<\/strong>. \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0442\u0447\u0430, \u0438 \u044d\u0442\u043e \u043d\u0435 \u0431\u0430\u0433 \u2014 \u044d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u044d\u043c\u043f\u043b\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0434\u0432\u0438\u0433 \u0441\u044d\u043c\u043f\u043b\u0435\u0440\u0430 \u043d\u0430 \u0447\u0443\u0436\u0438\u0445 API.<\/strong> \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0451\u0440\u0433\u0430\u0435\u0442\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b (<code>fal.ai<\/code>, <code>Replicate<\/code>, <code>Together<\/code>), \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u044c, \u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u044d\u043c\u043f\u043b\u0435\u0440 \u2014 \u0438 \u0432\u0430\u0448 \u00ab\u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u044b\u0439\u00bb \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436 \u0434\u0440\u0435\u0439\u0444\u0443\u0435\u0442 \u0437\u0430 \u043d\u0435\u0434\u0435\u043b\u0438. \u0423 \u043c\u0435\u043d\u044f \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439 \u0437\u0430 \u043c\u0435\u0441\u044f\u0446 \u00ab\u043f\u043e\u0441\u0442\u0430\u0440\u0435\u043b \u043b\u0435\u0442 \u043d\u0430 \u043f\u044f\u0442\u044c\u00bb, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043e\u0442\u043a\u0430\u0442\u0438\u043b \u043c\u0438\u043d\u043e\u0440\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u043b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 \u043d\u0430\u0441\u044b\u0449\u0430\u0435\u0442\u0441\u044f.<\/strong> \u041f\u043e\u0441\u043b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u0435\u0433\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u043f\u043e\u043c\u043e\u0433\u0430\u0442\u044c. \u041c\u043e\u0434\u0435\u043b\u044c \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e (\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u00ab\u0441\u0440\u0435\u0434\u043d\u0435\u0435\u00bb \u0438\u0437 \u0447\u0435\u0433\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0433\u043e, \u0447\u0442\u043e \u0432\u0438\u0434\u0435\u043b\u0430 \u043d\u0430 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0435).<\/p>\n<\/li>\n<\/ul>\n<h4>3.2. IP-Adapter \u0432 \u043e\u0434\u0438\u043d\u043e\u0447\u043a\u0443 \u0434\u0430\u0451\u0442 \u0441\u043b\u0430\u0431\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h4>\n<p><a href=\"https:\/\/github.com\/tencent-ailab\/IP-Adapter\" rel=\"noopener noreferrer nofollow\">IP-Adapter<\/a> \u2014 \u044d\u0442\u043e \u0442\u0435\u0445\u043d\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u043a\u0438\u043d\u0443\u0442\u044c <strong>\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441-\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443<\/strong> \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c\u0443 \u043f\u0440\u043e\u043c\u043f\u0442\u0443; \u043c\u043e\u0434\u0435\u043b\u044c \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0435\u0451 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0430 \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u043e.<\/p>\n<p>\u0414\u043b\u044f <strong>\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043b\u0438\u0446\u0430 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430<\/strong> \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e IP-Adapter \u0442\u044f\u043d\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 <strong>\u0432\u0441\u0451 \u0441 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441-\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/strong> \u2014 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435, \u043f\u043e\u0437\u0443, \u0444\u043e\u043d, \u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u0441\u0430\u043c\u0443 \u043e\u0434\u0435\u0436\u0434\u0443. \u0421\u043d\u0438\u0437\u0438\u0448\u044c \u0441\u0438\u043b\u0443 \u0435\u0433\u043e \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u2014 \u043b\u0438\u0446\u043e \u043e\u0441\u043b\u0430\u0431\u0435\u0432\u0430\u0435\u0442; \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u0448\u044c \u2014 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0434 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>IP-Adapter \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043c, \u0433\u0434\u0435 <strong>\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c<\/strong> (\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u043e\u0432\u0430\u0440 \u0438\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442). \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u0446\u043e<\/strong> \u2014 \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442.<\/p>\n<h4>3.3. LoRA \u043d\u0430 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430: \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0438 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c<\/h4>\n<p>LoRA (Low-Rank Adaptation) \u2014 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u0435\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 Stable Diffusion. \u041f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0444\u0430\u0439\u043b LoRA \u2014 100-300 \u041c\u0411 \u043f\u0440\u043e\u0442\u0438\u0432 6-7 \u0413\u0411 \u0443 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 SDXL, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 20-30 \u0440\u0430\u0437 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0435\u0435. \u041d\u0430\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 20-30 \u0447\u0438\u0441\u0442\u044b\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0437\u0430\u0445, \u0440\u0430\u043a\u0443\u0440\u0441\u0430\u0445 \u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0438, \u043e\u043d \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 <strong>\u0432\u043d\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u043b\u0438\u0446\u0430 \u043f\u0440\u044f\u043c\u043e \u0432 \u0432\u0435\u0441\u0430\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438<\/strong>, \u0430 \u043d\u0435 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u043c\u043f\u0442\u0435. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u00ab\u0432\u044b\u0443\u0447\u0438\u043b\u0430\u00bb, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436, \u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443.<\/p>\n<p>\u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u043d\u0430 \u043c\u043e\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435:<\/p>\n<ul>\n<li>\n<p>\u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <strong>80+ \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439<\/strong>, \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0432\u043e\u0439 LoRA. \u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0440\u0430\u0441\u0442\u0451\u0442 \u043f\u043e \u043c\u0435\u0440\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0445, \u0430 \u043d\u0435 \u0440\u0430\u0437\u043e\u0432\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0430 \u2014 \u043d\u0430 \u0430\u0440\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0439 GPU \u0447\u0435\u0440\u0435\u0437 Vast.ai, RTX 3090\/4090 \u0441 24 GB \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438. GPU \u0432\u0437\u044f\u0442\u0430 \u043f\u043e\u043c\u0435\u0441\u044f\u0447\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 marginal cost \u0441\u0430\u043c\u043e\u0439 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u0431\u043b\u0438\u0437\u043e\u043a \u043a \u043d\u0443\u043b\u044e: \u043c\u044b \u043f\u043b\u0430\u0442\u0438\u043c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0430\u0440\u0435\u043d\u0434\u0443, \u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e LoRA \u043d\u0430 \u043d\u0435\u0439 \u043d\u0430\u0442\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u043c \u0437\u0430 \u043c\u0435\u0441\u044f\u0446 \u2014 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0438 \u043d\u0430\u0442\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u043c. \u0414\u0435\u043d\u044c\u0433\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043a\u0430\u043f\u0430\u0442\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 GPU offline \u0438 \u043c\u044b \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u043d\u043e \u0432\u0430\u043b\u0438\u043c\u0441\u044f \u043d\u0430 \u043f\u043b\u0430\u0442\u043d\u044b\u0439 fallback (OpenRouter Flux\/Riverflow \u2014 $0.03-0.07 \u0437\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443).<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0434\u0438\u043d LoRA \u0434\u043b\u044f SDXL \u2014 15-25 \u043c\u0438\u043d\u0443\u0442 GPU-\u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0438 \u0447\u0438\u0441\u043b\u0430 \u0448\u0430\u0433\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0435\u043a\u043f\u043e\u0438\u043d\u0442\u044b \u043b\u0435\u0436\u0430\u0442 \u0432 Storj S3, \u043e\u0434\u0438\u043d safetensors-\u0444\u0430\u0439\u043b LoRA \u2014 100-300 \u041c\u0411 (\u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 rank, \u0443 \u043d\u0430\u0441 \u043e\u0431\u044b\u0447\u043d\u043e 16-32). \u041d\u0430 \u0444\u043e\u043d\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 SDXL \u0432 6-7 \u0413\u0411 \u044d\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e: \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0442\u044b\u0441\u044f\u0447 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439 \u0431\u0435\u0437 \u0431\u043e\u043b\u0438 \u043f\u043e \u0434\u0438\u0441\u043a\u0430\u043c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a (inference) \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f GPU \u0441 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e SDXL \u0438 \u0433\u043e\u0440\u044f\u0447\u0435\u0439 \u0441\u043c\u0435\u043d\u043e\u0439 LoRA \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u043c\u043e\u0434\u0435\u043b\u0438 \u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u0441\u0438\u0434\u0438\u0442 \u0442\u0430\u043c; \u0441\u043c\u0435\u043d\u0430 LoRA \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u2014 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<p>Pipeline:<\/p>\n<pre><code class=\"python\">workflow = [    \"Checkpoint\",           # \u0431\u0430\u0437\u043e\u0432\u0430\u044f SDXL    f\"LoRA: {char.lora}\",   # \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 LoRA \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430    \"FreeU\",                # noise rebalance, +\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0435\u0437 compute    \"KSampler\",]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441 \u043e\u0434\u043d\u0438\u043c-\u0434\u0432\u0443\u043c\u044f \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430\u043c\u0438 LoRA-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u0435\u043d. \u0414\u043b\u044f 50+ \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439 \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0437\u0443\u043c\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430.<\/p>\n<h4>3.4. \u0427\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0432 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0435<\/h4>\n<p>\u041a\u0430\u0440\u043a\u0430\u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0434\u043b\u044f \u0442\u0440\u0435\u043d\u0435\u0440\u0430 <code>Kohya_ss<\/code> \u2014 \u0441 \u043f\u0443\u0441\u0442\u044b\u043c\u0438 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u043f\u043e\u0434 \u043f\u043e\u0434\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e\u0434 \u0432\u0430\u0448\u0443 \u0437\u0430\u0434\u0430\u0447\u0443:<\/p>\n<pre><code>[model_arguments]pretrained_model_name_or_path = \"PATH_TO_SDXL_BASE.safetensors\"[dataset_arguments]train_data_dir    = \".\/dataset\/train\"resolution        = \"1024,1024\"caption_extension = \".txt\"[training_arguments]output_dir       = \".\/output\"output_name      = \"YOUR_CHARACTER_V1\"learning_rate    = \"TUNE_ME\"max_train_steps  = \"TUNE_ME\"train_batch_size = \"TUNE_ME\"[network_arguments]network_module = \"networks.lora\"network_dim    = \"TUNE_ME\"network_alpha  = \"TUNE_ME\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0430\u044e\u0442 (learning rate, \u0447\u0438\u0441\u043b\u043e \u0448\u0430\u0433\u043e\u0432, rank, alpha, \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430), <strong>\u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u043e \u0432\u044b \u0443\u0447\u0438\u0442\u0435<\/strong>. \u0410\u043d\u0438\u043c\u0435-\u043b\u0438\u0446\u0430 \u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0435 \u0442\u0430\u043a, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0435. \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u2014 \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 3-4 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435 \u0441\u0435\u0442\u043a\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432.<\/p>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442:<\/p>\n<ul>\n<li>\n<p><strong>\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0432\u0430\u0436\u043d\u0435\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/strong> 20 \u0447\u0438\u0441\u0442\u044b\u0445, \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0441 \u043f\u043e\u0434\u043f\u0438\u0441\u044f\u043c\u0438 \u0431\u044c\u044e\u0442 100 \u0433\u0440\u044f\u0437\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0437\u043d\u0430\u044f \u043f\u043e\u0437\u0430 \u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435, \u043e\u0434\u043d\u043e \u043b\u0438\u0446\u043e.<\/strong> 30 \u0440\u0430\u0437 \u043e\u0434\u0438\u043d \u0440\u0430\u043a\u0443\u0440\u0441 \u0443\u0447\u0438\u0442 \u00ab\u044d\u0442\u043e\u0442 \u0440\u0430\u043a\u0443\u0440\u0441\u00bb, \u0430 \u043d\u0435 \u00ab\u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430\u00bb.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0434\u043f\u0438\u0441\u044c (caption) \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0446\u0435\u043d\u0443, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430.<\/strong> \u00ab\u0414\u0435\u0432\u0443\u0448\u043a\u0430 \u0432 \u0441\u0430\u0434\u0443\u00bb \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u00ab\u0410\u043d\u043d\u0430 \u0432 \u0441\u0430\u0434\u0443\u00bb \u2014 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u0443\u0447\u0438\u043b\u0430 \u043b\u0438\u0446\u043e \u0438\u0437 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0430 \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u043b\u0430 \u0435\u0433\u043e \u043a \u0441\u043b\u043e\u0432\u0443 \u00ab\u0410\u043d\u043d\u0430\u00bb.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 rank \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/strong> \u041d\u0438\u0437\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435\u0434\u043e\u0443\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043b\u0438\u0446\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u044b\u0442\u043e\u0435; \u0432\u044b\u0441\u043e\u043a\u043e\u0435 \u2014 \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u043b\u0438\u0446\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u00ab\u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u044b\u043c\u00bb \u0438 \u043f\u043b\u043e\u0445\u043e \u0433\u043d\u0451\u0442\u0441\u044f \u043f\u043e\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0437\u044b \u0438\u043b\u0438 \u044d\u043c\u043e\u0446\u0438\u0438 \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435.<\/p>\n<\/li>\n<\/ul>\n<h4>3.5. IP-Adapter \u043f\u043e\u0432\u0435\u0440\u0445 LoRA \u0434\u043b\u044f \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430: \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0434\u0432\u0443\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432<\/h4>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0434\u0430\u0447\u0430: \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0410\u043d\u043d\u0430 (\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 LoRA), \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u043a\u0443\u043f\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u043b\u0430\u0442\u044c\u0435. \u041d\u0443\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e: \u043b\u0438\u0446\u043e \u0410\u043d\u043d\u044b \u043d\u0435 \u0434\u0440\u0435\u0439\u0444\u0443\u0435\u0442, <strong>\u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e<\/strong> \u043f\u043b\u0430\u0442\u044c\u0435 \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0435\u043d\u043e \u0443\u0437\u043d\u0430\u0432\u0430\u0435\u043c\u043e.<\/p>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433 \u044d\u0442\u043e \u043d\u0435 \u0432\u044b\u0442\u044f\u043d\u0435\u0442: \u00abAnna wearing a red silk dress with a white collar\u00bb \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0442 <strong>\u043a\u0430\u043a\u043e\u0435-\u0442\u043e<\/strong> \u043a\u0440\u0430\u0441\u043d\u043e\u0435 \u0448\u0451\u043b\u043a\u043e\u0432\u043e\u0435 \u043f\u043b\u0430\u0442\u044c\u0435, \u043d\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e. SKU-\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u0432 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0435.<\/p>\n<p>\u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 LoRA \u0438 IP-Adapter: LoRA \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043b\u0438\u0446\u043e, IP-Adapter \u0442\u044f\u043d\u0435\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u0432\u0441\u0451 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043b\u0438\u0446\u043e, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u0435). \u041d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u0438\u043b\u0435 IP-Adapter \u0410\u043d\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441; \u043d\u0430 \u043d\u0438\u0437\u043a\u043e\u0439 \u2014 \u043f\u043b\u0430\u0442\u044c\u0435 \u00ab\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430\u00bb, \u0430 \u043d\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u043e.<\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u0434\u0432\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<ul>\n<li>\n<p><code><strong>weight<\/strong><\/code> \u2014 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043b\u044c\u043d\u043e IP-Adapter \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e. \u042d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043e\u0442 0 \u0434\u043e 1. \u041d\u0438\u0436\u0435 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u00ab\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435\u043c\u00bb. \u0412\u044b\u0448\u0435 \u2014 \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0434 \u0432\u0441\u0435\u043c. <strong>\u041d\u0438\u0436\u043d\u044f\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430<\/strong> (0.2-0.5) \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0430\u0451\u0442 \u043b\u0443\u0447\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<\/li>\n<li>\n<p><code><strong>end_at<\/strong><\/code> \u2014 \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0434\u043e\u043b\u0435 \u0448\u0430\u0433\u043e\u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 IP-Adapter \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f. Stable Diffusion \u0440\u0438\u0441\u0443\u0435\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043d\u0435 \u0437\u0430 \u043e\u0434\u0438\u043d \u0448\u0430\u0433, \u0430 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u00ab\u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u0448\u0443\u043c\u00bb (denoising) \u0437\u0430 20-50 \u0448\u0430\u0433\u043e\u0432. \u0415\u0441\u043b\u0438 IP-Adapter \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0441\u0435 \u0448\u0430\u0433\u0438 \u2014 \u043e\u043d \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u043b\u0438\u0446\u0430. \u0415\u0441\u043b\u0438 <strong>\u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 70-90% \u043f\u0443\u0442\u0438<\/strong> \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0448\u0430\u0433\u0438 \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 \u0432\u0435\u0441\u0430\u043c\u0438 LoRA, \u0438 \u043b\u0438\u0446\u043e \u00ab\u043f\u0435\u0440\u0435\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0443.<\/p>\n<\/li>\n<\/ul>\n<p>\u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f: <strong>\u0442\u043e\u0432\u0430\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u0444\u043e\u0440\u043c\u0443 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u0430 \u043b\u0438\u0446\u043e \u0434\u043e\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u0436\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435<\/strong>.<\/p>\n<p>\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u043d\u043e\u0434 \u0432 ComfyUI:<\/p>\n<pre><code>[Checkpoint Loader]  \u2192 [LoRA Loader: character_lora]    \u2192 [FreeU: quality touch-up]      \u2192 [IPAdapter Advanced: reference, weight=W, end_at=E]        \u2192 [KSampler]          \u2192 [VAE Decode]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>LoRA \u0438\u0434\u0451\u0442 <strong>\u0434\u043e<\/strong> IP-Adapter \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435. LoRA \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u0441\u0430\u043c\u0438 \u0432\u0435\u0441\u0430 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438; IP-Adapter \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0441\u043b\u043e\u0438 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f (cross-attention) \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0430\u043c\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. \u041a\u043e\u0433\u0434\u0430 IP-Adapter \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0448\u0430\u0433\u0435 <code>end_at<\/code>, \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0448\u0430\u0433\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e LoRA-\u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 <strong>\u0431\u0435\u0437<\/strong> \u0432\u043b\u0438\u044f\u043d\u0438\u044f IP-Adapter \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0438\u0446\u0443 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u043d\u043e\u0440\u043c\u0435.<\/p>\n<p>\u041a\u0430\u043a \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c <code>weight<\/code> \u0438 <code>end_at<\/code> \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435:<\/p>\n<ol>\n<li>\n<p>\u0412\u043e\u0437\u044c\u043c\u0438\u0442\u0435 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u0441 \u0447\u0438\u0441\u0442\u044b\u043c \u0444\u043e\u043d\u043e\u043c \u0438 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0441 \u0443\u0436\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c LoRA.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441 <code>weight=0.4, end_at=0.8<\/code> \u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443 \u043c\u0435\u043d\u044f \u0432 \u043f\u0440\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u043b\u0430\u043d\u0441 \u043b\u0438\u0446\u0430 \u0438 \u043e\u0434\u0435\u0436\u0434\u044b. \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0439\u0442\u0435, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041b\u0438\u0446\u043e \u0443\u043f\u043b\u044b\u043b\u043e \u2192 \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u0435 <code>weight<\/code> \u0438\u043b\u0438 <code>end_at<\/code> \u043d\u0430 0.05.<\/p>\n<\/li>\n<li>\n<p>\u0422\u043e\u0432\u0430\u0440 \u043d\u0435 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u2192 \u043f\u043e\u0434\u043d\u0438\u043c\u0438\u0442\u0435 <code>weight<\/code> \u043d\u0430 0.05.<\/p>\n<\/li>\n<li>\n<p><strong>\u0428\u0430\u0433 \u2014 0.05, \u043d\u0435 0.1.<\/strong> \u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0443\u0436\u0435, \u0447\u0435\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430 \u0433\u043b\u0430\u0437.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431\u0435 \u0446\u0438\u0444\u0440\u044b \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u0441\u044f \u2014 \u043d\u0435 \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0439\u0442\u0435 \u0438\u0445 \u043a\u0430\u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<h4>3.6. \u041a\u0430\u043a \u044d\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u043e \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0435<\/h4>\n<ul>\n<li>\n<p><strong>\u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043e\u0432.<\/strong> \u041a\u0430\u0436\u0434\u044b\u0439 \u0442\u043e\u0432\u0430\u0440 \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0432\u043e\u044e \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441-\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432 S3.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u0435\u0432\u044c\u044e \u0433\u0435\u043d\u0435\u0440\u0438\u043c \u0437\u0430\u0440\u0430\u043d\u0435\u0435.<\/strong> \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u0433\u0430\u0437\u0438\u043d, \u043e\u043d \u0432\u0438\u0434\u0438\u0442 \u043f\u0440\u0435\u0432\u044c\u044e \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440\u0430 \u043d\u0430 <strong>\u0441\u0432\u043e\u0451\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435<\/strong>. \u042d\u0442\u0438 \u043f\u0440\u0435\u0432\u044c\u044e \u0440\u0435\u043d\u0434\u0435\u0440\u044f\u0442\u0441\u044f \u043d\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 (Celery), \u0438 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043a\u0435\u0448\u0430 \u0432 S3.<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u0435 \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <\/strong><code><strong>weight<\/strong><\/code><strong> \u0438 <\/strong><code><strong>end_at<\/strong><\/code><strong> \u0438\u0434\u0443\u0442 \u0432 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u043a\u0430\u0434\u0440 \u0432\u0438\u0434\u0435\u043e.<\/strong> \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u043a\u0430\u0442\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0445, \u043f\u043e\u0442\u043e\u043c \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0439\u0442\u0435 \u0432 \u0432\u0438\u0434\u0435\u043e-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440\u0430 \u0435\u0441\u0442\u044c \u0432\u0438\u0437\u0443\u0430\u043b.<\/strong> \u0427\u0430\u0441\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u2014 \u0431\u043e\u043d\u0443\u0441 \u043a \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c, \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432, \u0444\u043b\u0430\u0433 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439. \u0423 \u043d\u0438\u0445 \u043d\u0435\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u0438 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 ComfyUI \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e. \u041d\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0435\u0441\u0442\u044c \u044f\u0432\u043d\u044b\u0439 \u0444\u043b\u0430\u0433 <code>visual: true|false<\/code>, \u0438 API \u0440\u0435\u0436\u0435\u0442 \u043d\u0435\u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u0432\u0430\u0440\u044b \u043d\u0430 \u0432\u0445\u043e\u0434\u0435, \u0434\u043e \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c GPU.<\/p>\n<\/li>\n<\/ul>\n<h4>3.7. \u0413\u0440\u0430\u0431\u043b\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430<\/h4>\n<ul>\n<li>\n<p><strong>\u041b\u0438\u0446\u043e \u043f\u043e\u043f\u043b\u044b\u043b\u043e \u043d\u0430 \u043f\u0440\u0435\u0432\u044c\u044e \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u0432 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0435.<\/strong> \u042f \u0432\u044b\u043a\u0440\u0443\u0442\u0438\u043b <code>weight<\/code> IP-Adapter \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u044b\u0441\u043e\u043a\u043e \u2014 \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u00ab\u043f\u043e\u043b\u0443\u0447\u0448\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043e\u0434\u0435\u0436\u0434\u0443\u00bb. \u041e\u0442\u043a\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u043d\u0438\u0436\u043d\u044e\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u043f\u043b\u0435\u0441\u043a\u0430 \u0436\u0430\u043b\u043e\u0431. \u0423\u0440\u043e\u043a \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439: \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0439 \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0437\u0430 \u0440\u0430\u0437, \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u044b \u0438\u0441\u0442\u0435\u043a\u0430\u043b\u0438 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u043b\u0435\u0442\u0443.<\/strong> \u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0432 S3 \u0440\u0430\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u0447\u0435\u0440\u0435\u0437 presigned URL \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c \u0441\u0440\u043e\u043a\u043e\u043c \u0436\u0438\u0437\u043d\u0438. \u0424\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0441\u0441\u044b\u043b\u043a\u0443 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0430 ComfyUI \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043b \u0435\u0451 \u043f\u043e\u0437\u0436\u0435 \u2014 \u0441\u0441\u044b\u043b\u043a\u0430 \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0443\u0436\u0435 \u043c\u0451\u0440\u0442\u0432\u0430\u044f. \u041b\u0435\u0447\u0438\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0430\u043c\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u0430 \u0432 ComfyUI \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0436\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 IP-Adapter \u0441 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 SDXL.<\/strong> <code>IP-Adapter Plus<\/code> \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u0430\u0445, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c SDXL. \u041c\u0438\u043a\u0441 \u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u2014 \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u043b\u0447\u0430 \u0434\u0430\u0451\u0442 \u0431\u043e\u043b\u0435\u0435 \u0442\u0443\u0441\u043a\u043b\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0417\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u044e IP-Adapter \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0434\u0435\u043f\u043b\u043e\u044f \u0440\u044f\u0434\u043e\u043c \u0441 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c \u043f\u0430\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435\u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u043e\u0432\u0430\u0440 \u0440\u043e\u043d\u044f\u043b \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d.<\/strong> \u041e\u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435 \u2014 API \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u0442\u043e\u0432\u0430\u0440 \u0431\u0435\u0437 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 image-pipeline. \u041b\u0435\u0447\u0438\u0442\u0441\u044f \u0444\u043b\u0430\u0433\u043e\u043c <code>visual<\/code> \u043d\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 API \u0435\u0449\u0451 \u0434\u043e \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c.<\/p>\n<\/li>\n<\/ul>\n<h3>4. \u042e\u043d\u0438\u0442-\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043c\u0435\u0441\u044f\u0446\u0435<\/h3>\n<h4>\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442<\/h4>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0436\u0438\u0432\u0451\u0442 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u0421\u043e\u0442\u043d\u0438 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u0435 \u0441\u043e\u0442\u043d\u0438 \u0442\u044b\u0441\u044f\u0447. \u041a\u043e\u043d\u0432\u0435\u0440\u0441\u0438\u044f \u0432 \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0442\u0430\u0440\u0438\u0444 \u2014 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u044b, \u0442\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0434\u043b\u044f \u0440\u0430\u043d\u043d\u0435\u0439 \u0441\u0442\u0430\u0434\u0438\u0438. \u042d\u0442\u043e \u043a \u0447\u0435\u043c\u0443: <strong>\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0434\u0451\u0448\u0435\u0432\u043e \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438<\/strong>, \u0438\u043d\u0430\u0447\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u044a\u0435\u0434\u044f\u0442 \u0431\u044e\u0434\u0436\u0435\u0442 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b \u043f\u043e\u0439\u043c\u0451\u0442\u0435, \u043d\u0430\u0448\u043b\u0438 \u043b\u0438 \u0432\u044b \u0441\u0432\u043e\u0438\u0445 \u043f\u043b\u0430\u0442\u044f\u0449\u0438\u0445. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0441\u043a\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0435 \u0441\u043e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u2014 \u044d\u0442\u043e \u043b\u0438\u0448\u043d\u0438\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u0432\u0437\u043b\u0451\u0442\u043d\u043e\u0439 \u043f\u043e\u043b\u043e\u0441\u044b.<\/p>\n<p>\u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043b\u043a\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435:<\/p>\n<pre><code class=\"python\">daily_cost_alert_usd: float    = 30.0   # \u0448\u043b\u0451\u0442 \u0430\u043b\u0451\u0440\u0442 \u0432 Telegram \u0430\u0434\u043c\u0438\u043d\u0443, \u043d\u043e \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442daily_cost_hard_stop_usd: float = 50.0  # is_generation_allowed() \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 False, \u043d\u043e\u0432\u044b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u0436\u0443\u0442\u0441\u044f<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u0435\u0441\u044f\u0447\u043d\u044b\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u0431\u0435\u0437 \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u2014 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 $900-1500. \u0412 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0434\u0435\u043d\u044c \u0442\u0440\u0430\u0442\u0438\u043c <strong>\u0432 \u0440\u0430\u0437\u044b \u043c\u0435\u043d\u044c\u0448\u0435<\/strong>: \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432. \u041f\u0438\u043a\u043e\u0432\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 (\u043c\u0430\u0441\u0441\u043e\u0432\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a\/\u0432\u0438\u0434\u0435\u043e) \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u044a\u0435\u0437\u0436\u0430\u0442\u044c \u043a \u0443\u0440\u043e\u0432\u043d\u044e \u0430\u043b\u0451\u0440\u0442\u0430.<\/p>\n<h4>\u0421\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u00ab\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0439 \u043f\u0440\u0438 \u0441\u0431\u043e\u0435\u00bb<\/h4>\n<p>\u0421\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0436\u0438\u0432\u0443\u0442 \u0432 Redis \u0441\u043e \u0441\u0440\u043e\u043a\u043e\u043c \u0436\u0438\u0437\u043d\u0438 7 \u0434\u043d\u0435\u0439:<\/p>\n<pre><code>costs:daily:{YYYY-MM-DD}             \u2014 \u043e\u0431\u0449\u0430\u044f \u0441\u0443\u043c\u043c\u0430 $ \u0437\u0430 \u0434\u0435\u043d\u044ccosts:user:{uid}:{YYYY-MM-DD}        \u2014 \u0441\u0443\u043c\u043c\u0430 $ \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0437\u0430 \u0434\u0435\u043d\u044c<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0438\u0441\u044c \u2014 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0439 <code>INCRBYFLOAT<\/code>: \u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 Redis \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0442 \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0433\u043e\u043d\u043e\u043a \u043f\u0440\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u0430\u0445. \u0427\u0442\u0435\u043d\u0438\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u00ab\u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e\u00bb \u2014 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 <code>GET<\/code> \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u0442\u043e\u043b\u043a\u043e\u043c.<\/p>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c: <strong>\u0435\u0441\u043b\u0438 Redis \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u00ab\u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e\u00bb<\/strong>. \u042d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f fail-closed \u043f\u043e\u0434\u0445\u043e\u0434. \u0417\u0432\u0443\u0447\u0438\u0442 \u043f\u0430\u0440\u0430\u043d\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u043a\u0430 \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0443\u0442\u0440\u043e\u043c \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0448\u044c, \u0447\u0442\u043e \u043d\u043e\u0447\u044c\u044e \u0433\u0434\u0435-\u0442\u043e \u043a\u0440\u0443\u0442\u0438\u043b\u0430\u0441\u044c \u043b\u0430\u0432\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438 \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432 \u0432\u044b\u0436\u0433\u043b\u0430 \u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u2014 \u043d\u0438\u043a\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u0435\u043b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043c\u043e\u043b\u0447\u0430\u043b. \u0421 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0436\u0435\u043b\u0435\u0437\u043e\u0431\u0435\u0442\u043e\u043d\u043d\u043e\u0435: <strong>\u0435\u0441\u043b\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u2014 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c<\/strong>. \u0426\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 (\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043e\u0442\u0432\u0435\u0442) \u043d\u0438\u0437\u043a\u0430\u044f; \u0446\u0435\u043d\u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043d\u0430 API \u0437\u0430 $1.50 \u0437\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u2014 \u0432\u044b\u0441\u043e\u043a\u0430\u044f.<\/p>\n<h4>\u0413\u0434\u0435 \u0434\u0435\u043d\u044c\u0433\u0438 \u0443\u0445\u043e\u0434\u044f\u0442<\/h4>\n<ul>\n<li>\n<p><strong>LLM Gemini 3.1 FL<\/strong> (\u0442\u0430\u0440\u0438\u0444\u044b VIP \u0438 Elite) \u2014 \u043e\u043a\u043e\u043b\u043e 40-50% \u0431\u044e\u0434\u0436\u0435\u0442\u0430. \u0414\u043e\u0440\u043e\u0433\u043e\u0439 \u0432\u044b\u0445\u043e\u0434 (1.50 USD \u0437\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0442\u043e\u043a\u0435\u043d\u043e\u0432), \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442 \u043a\u0435\u0448\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>LLM Qwen3-235B<\/strong> (\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439, \u0431\u0430\u0437\u043e\u0432\u044b\u0439, premium \u0442\u0430\u0440\u0438\u0444\u044b) \u2014 \u043e\u043a\u043e\u043b\u043e 15-20%. \u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0435\u0448\u0451\u0432\u0430\u044f, \u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u043d\u043e\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>LLM \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435<\/strong> (Grok, MiniMax) \u2014 \u043c\u0435\u043d\u0435\u0435 5%. \u0421\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043e\u0442\u043a\u0430\u0437\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0413\u043e\u043b\u043e\u0441 Inworld TTS-1.5 Max<\/strong> \u2014 \u043e\u043a\u043e\u043b\u043e 15-20%. 10 USD \u0437\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 0.005-0.01 USD \u043d\u0430 \u043e\u0434\u043d\u043e \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/strong> (Vast.ai GPU \u043f\u043b\u044e\u0441 \u0440\u0435\u0437\u0435\u0440\u0432) \u2014 \u043e\u043a\u043e\u043b\u043e 15-25%. GPU \u043e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043c\u0435\u0441\u044f\u0447\u043d\u044b\u043c \u043f\u043b\u0430\u0442\u0435\u0436\u043e\u043c; \u0440\u0435\u0437\u0435\u0440\u0432 \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 OpenRouter, 0.03-0.07 USD \u0437\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0438\u0434\u0435\u043e<\/strong> (WaveSpeed \u0438 fal Pixverse) \u2014 \u043f\u0438\u043a\u043e\u0432\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b. 0.16-0.25 USD \u0437\u0430 \u0440\u043e\u043b\u0438\u043a, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043e\u0442 \u0442\u0430\u0440\u0438\u0444\u0430 Premium.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0427\u0442\u043e \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u043a\u0435\u0448 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432<\/h4>\n<p>\u0413\u0440\u0443\u0431\u0430\u044f \u043f\u0440\u0438\u043a\u0438\u0434\u043a\u0430 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 VIP-\u0440\u0435\u043f\u043b\u0438\u043a\u0438:<\/p>\n<pre><code>\u0411\u0435\u0437 \u043a\u0435\u0448\u0430:  \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 ~3800 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u00d7 $0.25\/1M = $0.00095 \u043d\u0430 \u0432\u0445\u043e\u0434  + output ~300 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u00d7 $1.50\/1M       = $0.00045  \u2248 $0.0014 \u043d\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0443\u0421 \u043a\u0435\u0448\u0435\u043c (cache hit \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u043f\u0440\u043e\u043c\u043f\u0442\u0435, \u0440\u0435\u043f\u043b\u0438\u043a\u0438 2+ \u0432 \u0441\u0435\u0441\u0441\u0438\u0438):  \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 ~3800 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u00d7 $0.0625\/1M = $0.000238 (75% off)  + output ~300 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u00d7 $1.50\/1M           = $0.00045  \u2248 $0.00069 \u043d\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0443<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u043e\u043a\u043e\u043b\u043e <strong>50% \u043d\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0445 2+<\/strong>, \u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u0432 \u0436\u0438\u0432\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u2014 \u044d\u0442\u043e \u00ab\u0440\u0435\u043f\u043b\u0438\u043a\u0438 2+\u00bb. \u041d\u0430 \u043c\u043e\u0451\u043c \u043c\u0438\u043a\u0441\u0435 \u044d\u0442\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u043a\u043e\u043b\u043e \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438 \u0432\u0441\u0435\u0433\u043e LLM-\u0431\u044e\u0434\u0436\u0435\u0442\u0430.<\/p>\n<p>DeepSeek V4 \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u044f\u0432\u043d\u043e \u2014 \u0435\u0449\u0451 10-15% \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u043d\u0430 instant-pace \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0445 \u0441\u0432\u0435\u0440\u0445\u0443. Qwen3 \u0432 OpenRouter-\u043a\u0435\u0448 \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442.<\/p>\n<h3>5. \u041f\u0440\u043e\u0434-\u0442\u044e\u043d\u0438\u043d\u0433: \u0447\u0442\u043e \u043f\u043e\u0434\u043a\u0440\u0443\u0442\u0438\u043b \u0432 \u0438\u043d\u0444\u0440\u0435 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043c\u0435\u0441\u044f\u0446\u0435<\/h3>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u043f\u043e\u0442\u043e\u043b\u043e\u043a DAU \u043d\u0435 \u0441\u0434\u0432\u0438\u043d\u0435\u0448\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u0448\u044c\u0441\u044f \u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0441\u043b\u043e\u0435\u043c \u2014 \u043b\u0438\u043c\u0438\u0442\u0430\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430\u043c\u0438, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043f\u043e\u0442\u043e\u043b\u043a\u0430\u043c\u0438 \u0442\u0440\u0430\u0442. \u042d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0442 \u0432 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430\u0445 \u00ab\u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0447\u0430\u0442-\u0431\u043e\u0442\u0430\u00bb. \u0417\u0430\u0442\u043e \u043e\u043d\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0440\u0435\u0448\u0430\u0435\u0442, \u0443\u043f\u0440\u0451\u0442\u0435\u0441\u044c \u0432\u044b \u0432 \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u043f\u0440\u0438 500 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u0445 \u0438\u043b\u0438 \u043f\u0440\u0438 1500. \u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u0447\u0435\u0442\u044b\u0440\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043c\u0435\u043d\u044f\u043b \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u0435\u0434\u0435\u043b\u0438, \u0441 \u0434\u043e\/\u043f\u043e\u0441\u043b\u0435 \u0432 \u0446\u0438\u0444\u0440\u0430\u0445.<\/p>\n<h4>5.1. ChromaDB: LRU-\u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0434\u043d\u044f\u0442\u044b\u0439 \u043b\u0438\u043c\u0438\u0442 \u043f\u0430\u043c\u044f\u0442\u0438<\/h4>\n<p>\u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u044f \u043b\u043e\u0432\u0438\u043b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 ChromaDB \u043d\u0430\u0447\u0430\u043b \u0441\u044a\u0435\u0434\u0430\u0442\u044c 2 \u0413\u0411. \u041f\u043e\u0434\u043d\u044f\u043b \u0434\u043e 4. \u0427\u0435\u0440\u0435\u0437 \u0434\u0432\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 OOMKill \u2014 \u043f\u043e\u0434\u043d\u044f\u043b \u0434\u043e 6. \u0427\u0435\u0440\u0435\u0437 \u0435\u0449\u0451 \u043d\u0435\u0434\u0435\u043b\u044e \u2014 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u044e \u0433\u043e\u043d\u043a\u0443 \u0441 \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u043c \u0430\u043f\u043f\u0435\u0442\u0438\u0442\u043e\u043c \u0431\u0430\u0437\u044b.<\/p>\n<p>\u041f\u043e\u043b\u0435\u0437 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c. \u0412\u0438\u043d\u043e\u0432\u043d\u0438\u043a \u043d\u0430\u0448\u0451\u043b\u0441\u044f \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0442\u0438\u043a\u0435\u0442\u0430\u0445 ChromaDB: <a href=\"https:\/\/github.com\/chroma-core\/chroma\/issues\/3336\" rel=\"noopener noreferrer nofollow\">issue #3336<\/a> \u0438 <a href=\"https:\/\/github.com\/chroma-core\/chroma\/issues\/5843\" rel=\"noopener noreferrer nofollow\">#5843<\/a>, \u043e\u0431\u0430 \u0435\u0449\u0451 \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044b \u0432 \u0432\u0435\u0442\u043a\u0435 0.5.x. \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043a\u0435\u0448 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0434\u0435\u0440\u0436\u0438\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u00ab\u0432\u0435\u0447\u043d\u043e\u00bb \u0438 \u043d\u0435 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0438\u0445 \u0441\u0430\u043c, \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u0434\u0430\u0432\u043d\u043e \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. \u0423 \u043c\u0435\u043d\u044f 2233 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 (\u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u043d\u0430 \u043f\u0430\u0440\u0443 <code>user \u00d7 character \u00d7 session<\/code>), \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u2014 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u0442\u0443\u0434\u0430 \u043d\u0435 \u0443\u0445\u043e\u0434\u044f. \u041f\u0430\u043c\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0440\u043e\u0441\u043b\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e: ~250 \u041c\u0411 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e.<\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438: \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c LRU-\u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435. LRU \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a Least Recently Used \u2014 \u0434\u0430\u0432\u043d\u043e \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c\u0438, \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043f\u043b\u044e\u0441 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e \u0436\u0451\u0441\u0442\u043a\u0438\u0439 \u043b\u0438\u043c\u0438\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0434\u043e 10 \u0413\u0411:<\/p>\n<pre><code class=\"yaml\">chromadb:  environment:    CHROMA_SEGMENT_CACHE_POLICY: LRU    CHROMA_MEMORY_LIMIT_BYTES: \"8589934592\"   # 8 \u0413\u0411 \u2014 \u043f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 LRU  deploy:    resources:      limits:        memory: 10G<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0445\u043b\u043e\u043f\u043d\u0443\u043b\u0441\u044f \u0434\u043e <strong>50-200 \u041c\u0411<\/strong> \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0441\u0441\u0438\u0438 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043f\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442. \u0425\u043e\u043b\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0440\u043e\u0441\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f. \u0411\u0435\u0437 LRU \u0443\u0431\u0438\u0439\u0441\u0442\u0432\u043e \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438\u0448\u043b\u043e \u0431\u044b \u0447\u0435\u0440\u0435\u0437 6-8 \u043d\u0435\u0434\u0435\u043b\u044c, \u0441 \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u044b\u043c \u0440\u0438\u0441\u043a\u043e\u043c \u0431\u043e\u043d\u0443\u0441\u043e\u043c: \u0435\u0441\u043b\u0438 ChromaDB \u0443\u043f\u0430\u0434\u0451\u0442 \u0440\u043e\u0432\u043d\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0438\u0441\u0438, \u0442\u0438\u0445\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u2014 \u0431\u0435\u0437 \u0430\u043b\u0451\u0440\u0442\u0430, \u0431\u0435\u0437 \u044f\u0432\u043d\u044b\u0445 \u0441\u043b\u0435\u0434\u043e\u0432.<\/p>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 2 \u0413\u0411 \u043f\u043e\u0432\u0435\u0440\u0445 \u043b\u0438\u043c\u0438\u0442\u0430 LRU \u2014 \u0437\u0430\u043f\u0430\u0441 \u043d\u0435 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0431\u0430\u0437\u044b, \u0430 \u043f\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0431\u044d\u043a\u0430\u043f\u0430. tar \u0432 3.3 \u0413\u0411 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u044e \u0437\u0430 IO \u0441 \u0441\u0430\u043c\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c ChromaDB; \u0432 Sentry \u043c\u0435\u0440\u0446\u0430\u043b\u0438 \u0441\u0431\u043e\u0438 \u0431\u044d\u043a\u0430\u043f\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0440\u0443\u043a\u0430\u043c\u0438. \u041f\u043e\u0441\u043b\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043b\u0438\u043c\u0438\u0442\u0430 \u2014 \u043f\u0440\u043e\u043f\u0430\u043b\u043e \u0441\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439.<\/p>\n<p><strong>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 LRU \u043d\u0435 \u0440\u0435\u0448\u0430\u0435\u0442.<\/strong> 2233 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043c\u043e\u0435\u0439 \u0436\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 (\u0441\u043c. \u0447\u0430\u0441\u0442\u044c 1). \u041a\u043e\u0433\u0434\u0430 DAU \u0432\u044b\u0440\u0430\u0441\u0442\u0435\u0442 \u0434\u043e 5000+, \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0441\u0442\u0430\u043d\u0435\u0442 \u0442\u044b\u0441\u044f\u0447 30, \u0438 LRU \u043d\u0430\u0447\u043d\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e: \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u00ab\u0432\u044b\u0433\u0440\u0443\u0437\u0438\u043b-\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u00bb, \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u043f\u043e\u043f\u043e\u043b\u0437\u0451\u0442 \u0432\u0432\u0435\u0440\u0445. \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u0443 \u043e\u0431\u0449\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c \u043f\u043e <code>session_id<\/code> \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u042d\u0442\u043e \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043d\u0430 \u043f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u2014 \u043e\u0442\u043b\u043e\u0436\u0438\u043b, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u043d\u0443\u0436\u043d\u043e.<\/p>\n<h4>5.2. \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432 uvicorn \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/h4>\n<p><strong>\u0427\u0442\u043e \u0431\u044b\u043b\u043e.<\/strong> \u0412 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 FastAPI\/uvicorn \u0443\u0442\u0435\u0447\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438: \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0435 480 \u041c\u0411 \u2192 ~800 \u041c\u0411 \u0437\u0430 8 \u0447\u0430\u0441\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b. \u041d\u0430 4 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e 1.5 \u0413\u0411 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e = 6 \u0413\u0411 \u2014 \u044d\u0442\u043e \u043b\u0438\u043c\u0438\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u0443\u0431\u0438\u0439\u0441\u0442\u0432\u0430 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 DAU ~500.<\/p>\n<p><strong>\u0427\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b.<\/strong> \u0414\u043e\u0431\u0430\u0432\u0438\u043b <code>--limit-max-requests 5000<\/code> \u2014 uvicorn \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u043e\u0440\u043a\u0435\u0440 \u043f\u043e\u0441\u043b\u0435 N \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (\u0442\u043e \u0435\u0441\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0430 \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u044c\u0441\u044f):<\/p>\n<pre><code class=\"yaml\">api:  command: &gt;    uvicorn api.main:app    --workers 4    --limit-max-requests 5000    --timeout-graceful-shutdown 90<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b.<\/strong> \u041f\u0440\u0438 DAU 300 \u0438 ~30 \u0442\u044b\u0441\u044f\u0447\u0430\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0434\u0435\u043d\u044c: 4 \u0432\u043e\u0440\u043a\u0435\u0440\u0430 \u2192 1-2 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u0440\u043a\u0435\u0440 \u0432 \u0441\u0443\u0442\u043a\u0438 \u2192 \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0441\u0442\u0430\u0440\u0442\u0443 480 \u041c\u0411. \u041d\u0430 4 \u00d7 480 \u041c\u0411 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e = 1.9 \u0413\u0411, \u0432 6 \u0413\u0411 \u043b\u0438\u043c\u0438\u0442 \u0432\u043b\u0435\u0437\u0430\u0435\u0442 \u0441 \u0442\u0440\u0451\u0445\u043a\u0440\u0430\u0442\u043d\u044b\u043c \u0437\u0430\u043f\u0430\u0441\u043e\u043c. <strong>\u041f\u043e\u0442\u043e\u043b\u043e\u043a API \u043f\u043e DAU \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u0441\u044f \u0441 ~500 \u0434\u043e ~1200.<\/strong><\/p>\n<h4>5.3. \u041c\u044f\u0433\u043a\u043e\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435: 90 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 LLM<\/h4>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 \u0440\u043e\u0434\u0438\u043b\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442. \u0412\u043e\u0440\u043a\u0435\u0440 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f. \u0418 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0437\u0430\u043d\u043e\u0432\u043e, \u043e\u043d \u043e\u0431\u0440\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u2014 \u0430 LLM-\u0432\u044b\u0437\u043e\u0432 \u0434\u043b\u0438\u0442\u0441\u044f 10-60 \u0441\u0435\u043a\u0443\u043d\u0434, \u0435\u0433\u043e \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0448\u044c. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u0442 \u0432 \u0447\u0430\u0442\u0435 \u00abNetwork error\u00bb, \u043e\u0448\u0438\u0431\u043a\u0443 502 \u0438\u043b\u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u0442\u0432\u0435\u0442. \u041f\u0440\u0438\u043a\u0438\u043d\u0443\u043b \u043d\u0430 \u0431\u0443\u043c\u0430\u0436\u043a\u0435: 6 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u0432 \u0441\u0443\u0442\u043a\u0438 \u00d7 ~3 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 = <strong>~18 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0434\u0435\u043d\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0438\u0434\u044f\u0442 \u0436\u0438\u0432\u044b\u0435 \u043b\u044e\u0434\u0438<\/strong>. \u0418 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437-\u0437\u0430 \u043c\u043e\u0435\u0439 \u0436\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0414\u0430\u043b \u0432\u043e\u0440\u043a\u0435\u0440\u0443 90 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435. \u0412\u0430\u0436\u043d\u043e \u2014 \u0432 \u0434\u0432\u0443\u0445 \u0441\u043b\u043e\u044f\u0445:<\/p>\n<pre><code class=\"yaml\">api:  command: uvicorn ... --timeout-graceful-shutdown 90  stop_grace_period: 90s   # docker \u0436\u0434\u0451\u0442 90s, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043e\u0441\u043b\u0430\u0442\u044c SIGKILL<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b.<\/strong> P99 (99-\u0439 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0438\u043b\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438) LLM-\u0432\u044b\u0437\u043e\u0432\u0430 \u2014 60 \u0441\u0435\u043a\u0443\u043d\u0434, \u0437\u0430\u043f\u0430\u0441 50%. \u041d\u0430 \u0442\u043e\u0439 \u0436\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u2014 <strong>0 \u043e\u0448\u0438\u0431\u043e\u043a \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/strong>. \u041f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u0434\u043e DAU 1000 \u0431\u0435\u0437 \u044d\u0442\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u044b\u043b\u043e \u0431\u044b 60+ \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0434\u0435\u043d\u044c.<\/p>\n<p>\u0414\u0435\u0442\u0430\u043b\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u043c\u0430\u0445\u043d\u0443\u0442\u044c\u0441\u044f: \u043e\u0434\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 uvicorn \u0431\u0435\u0437 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f <code>stop_grace_period<\/code> \u0432 docker-compose \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 \u2014 Docker \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0431\u044c\u0451\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 \u0441\u0432\u043e\u0439 \u0434\u0435\u0444\u043e\u043b\u0442 (10 \u0441\u0435\u043a\u0443\u043d\u0434). \u041d\u0443\u0436\u043d\u044b <strong>\u043e\u0431\u0435<\/strong> \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<h4>5.4. \u0414\u043d\u0435\u0432\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0442\u0440\u0430\u0442: $30 \u2192 $50<\/h4>\n<p>\u0412 \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u043d\u0435\u0439 \u043c\u0430\u044f \u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0440\u0430\u0441\u0445\u043e\u0434 \u043f\u043e\u0434\u0441\u043a\u043e\u0447\u0438\u043b \u0434\u043e $21.70. \u042d\u0442\u043e \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u0441\u0442\u0430\u0440\u043e\u043c\u0443 \u043f\u043e\u0442\u043e\u043b\u043a\u0443 $30, \u0438 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0431\u043b\u0438\u0437\u043a\u043e: \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0440\u0430\u0441\u0445\u043e\u0434 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0434\u043d\u044f, \u043a \u0432\u0435\u0447\u0435\u0440\u0443 \u043c\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0443\u043f\u0440\u0451\u043c\u0441\u044f \u0432 \u0436\u0451\u0441\u0442\u043a\u0438\u0439 \u0441\u0442\u043e\u043f, \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u00ab\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u00bb \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0442\u0432\u0435\u0442\u043e\u0432. \u041f\u043e\u0434\u043d\u044f\u043b \u0436\u0451\u0441\u0442\u043a\u0438\u0439 \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0434\u043e $50, \u0430\u043b\u0451\u0440\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043d\u0430 $30 (60% \u043e\u0442 \u043a\u0440\u044b\u0448\u0438) \u2014 \u044d\u0442\u043e \u0434\u0430\u0451\u0442 5-6 \u0447\u0430\u0441\u043e\u0432 \u0437\u0430\u043f\u0430\u0441\u0430 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0438 \u0441\u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e \u0431\u043b\u043e\u043a\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 (~$0.06 \u043d\u0430 \u043e\u0434\u043d\u043e\u0433\u043e DAU \u0432 \u0434\u0435\u043d\u044c) \u0436\u0451\u0441\u0442\u043a\u0438\u0439 \u043f\u043e\u0442\u043e\u043b\u043e\u043a $50 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0434\u043e DAU 800. \u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u043b\u0438\u0431\u043e \u0440\u043e\u0441\u0442 \u043f\u043b\u0430\u0442\u044f\u0449\u0435\u0439 \u0434\u043e\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0430\u043f\u0441\u0435\u0439\u043b, \u043b\u0438\u0431\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u043e\u0434\u044a\u0451\u043c \u043f\u043b\u0430\u043d\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u043e\u0446\u0435\u043d\u043a\u0430 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0438.<\/p>\n<h4>\u0421\u0432\u043e\u0434\u043d\u0430\u044f: \u0433\u0434\u0435 \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u0438\u0441\u044c \u043f\u043e\u0442\u043e\u043b\u043a\u0438<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0423\u0437\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0411\u044b\u043b\u043e<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0442\u0430\u043b\u043e<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0440\u0438\u0440\u043e\u0441\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0430\u043c\u044f\u0442\u044c API, \u0443\u0431\u0438\u0439\u0441\u0442\u0432\u043e \u043f\u043e \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">~500 DAU<\/p>\n<\/td>\n<td>\n<p align=\"left\">~1200 DAU<\/p>\n<\/td>\n<td>\n<p align=\"left\">+140%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0430\u043c\u044f\u0442\u044c ChromaDB<\/p>\n<\/td>\n<td>\n<p align=\"left\">~800 DAU<\/p>\n<\/td>\n<td>\n<p align=\"left\">~2000+ DAU<\/p>\n<\/td>\n<td>\n<p align=\"left\">+150%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0416\u0451\u0441\u0442\u043a\u0438\u0439 \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0442\u0440\u0430\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">~480 DAU<\/p>\n<\/td>\n<td>\n<p align=\"left\">~830 DAU<\/p>\n<\/td>\n<td>\n<p align=\"left\">+73%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">502 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432\u043e\u0440\u043a\u0435\u0440\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">~18\/\u0434\u0435\u043d\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u044f \u0437\u0430 IO \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0431\u044d\u043a\u0430\u043f\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043c\u0435\u0440\u0446\u0430\u044e\u0449\u0438\u0435 \u0441\u0431\u043e\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043e<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0426\u0435\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439<\/h4>\n<ul>\n<li>\n<p>+4 \u0413\u0411 \u043d\u0430 \u0445\u043e\u0441\u0442-\u043c\u0430\u0448\u0438\u043d\u0435 \u043f\u043e\u0434 \u043b\u0438\u043c\u0438\u0442 ChromaDB. \u041d\u0430 \u0445\u043e\u0441\u0442\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e 18 \u0413\u0411, \u043d\u0435 \u0434\u0430\u0432\u0438\u0442.<\/p>\n<\/li>\n<li>\n<p>0 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 CPU \u043e\u0442 LRU \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>~0.5 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430: \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u043e\u0434\u0438\u043d \u043f\u043e\u0432\u0442\u043e\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0438\u0441\u043a \u043d\u0438\u0437\u043a\u0438\u0439 \u2014 \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0437 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043e\u043a\u043e\u0432 ChromaDB \u0438 uvicorn, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0445\u0430\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0418\u0442\u043e\u0433.<\/strong> \u0422\u044e\u043d\u0438\u043d\u0433 \u043a\u0443\u043f\u0438\u043b \u043f\u043e\u0440\u044f\u0434\u043a\u0430 6-12 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 ChromaDB \u0438\u043b\u0438 \u0436\u0435\u043b\u0435\u0437\u043e. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0443\u0437\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u2014 Vast.ai GPU \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043e\u0442\u043a\u0430\u0437\u0430 \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 32 \u0413\u0411 \u0445\u043e\u0441\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0451 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f: \u0443\u043f\u0430\u0434\u0451\u0442 \u043c\u0430\u0448\u0438\u043d\u0430 \u2014 \u0443\u043f\u0430\u0434\u0451\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041f\u043e\u0441\u043b\u0435 DAU 1500 \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e.<\/p>\n<h3>6. \u0427\u0442\u043e \u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043b, \u043d\u0430\u0447\u0430\u0432 \u0441\u0435\u0439\u0447\u0430\u0441<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u044f \u043c\u043e\u0433 \u043e\u0442\u043c\u043e\u0442\u0430\u0442\u044c \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430 \u043d\u0430\u0437\u0430\u0434 \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u0441 \u0443\u0436\u0435 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u044b\u043c \u043e\u043f\u044b\u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u044b \u043f\u043e\u043c\u0435\u043d\u044f\u043b.<\/p>\n<p><strong>\u041f\u0430\u043c\u044f\u0442\u044c:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041d\u0435 \u043b\u0435\u0437 \u0431\u044b \u0432 <code>pgvector<\/code> \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u043f\u043e \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u0430\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u044b\u043b\u043e \u0445\u0443\u0436\u0435, \u0447\u0435\u043c \u0443 <code>ChromaDB<\/code>. \u041d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u0445 pgvector \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0438\u0433\u0440\u0430\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b \u0431\u044b \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440. \u0418\u043d\u0434\u0435\u043a\u0441 \u043f\u0443\u0445\u043d\u0435\u0442, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0435 \u0440\u0430\u0441\u0442\u0451\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0443\u043c\u043c\u0430\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0431\u044b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u043a\u043d\u0430\u043c\u0438 \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u0440\u0435\u043f\u043b\u0438\u043a, \u0430 \u043d\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0414\u043d\u0435\u0432\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043b 500 \u0440\u0430\u0437 \u0437\u0430 \u043e\u0434\u0438\u043d \u0434\u0435\u043d\u044c.<\/p>\n<\/li>\n<li>\n<p>\u0421 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b \u0431\u044b \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043e\u0442\u043c\u0435\u043d\u044b \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0438 \u043f\u043e\u043b\u0435 <code>metadata.type<\/code> \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 ChromaDB.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f LLM:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0431\u044b \u043f\u043e \u0442\u0435\u043c\u043f\u0443 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0438 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043b\u043e\u0436\u0438\u043b \u0431\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0437 \u0441\u0442\u0438\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u0430. \u041f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0447\u0430\u0442\u0430 \u043f\u043e\u0434 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0437\u0430\u0434\u043d\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u2014 \u0431\u043e\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u043b \u0431\u044b \u043c\u0430\u0440\u043a\u0435\u0440 <code>cache_control<\/code> \u043d\u0430 Gemini \u0441\u0440\u0430\u0437\u0443 \u2014 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u043c\u0435\u0441\u044f\u0446\u0430 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u043e\u0433\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0432\u0451\u043b \u0431\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u0442\u0438\u0445\u0438\u0445 \u043e\u0442\u043a\u0430\u0437\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0438 (HTTP 200 \u0441 \u043f\u0443\u0441\u0442\u044b\u043c \u0442\u0435\u043b\u043e\u043c). \u041e\u043d \u0440\u0435\u0434\u043a\u0438\u0439, \u043d\u043e \u0431\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0435\u0433\u043e \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0448\u044c.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0431\u044b \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043b\u044e\u0447 OpenRouter \u0432 dev \u0438 prod. \u041b\u0438\u043c\u0438\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043e\u0431\u0449\u0438\u0439, \u0448\u0443\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0435\u0441\u0442 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d-\u043a\u0432\u043e\u0442\u0443.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0438:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u0431\u044b \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0441 LoRA \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043d\u044f, \u0434\u0430\u0436\u0435 \u043d\u0430 \u0442\u0440\u0451\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430\u0445. \u041d\u0435\u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043d\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u0442\u0430\u0440\u0438\u0444\u0435 \u0443\u0431\u0438\u0432\u0430\u044e\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0432\u0438\u0434\u0438\u0442 \u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u043b\u0430\u043b \u0431\u044b \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b \u0440\u0443\u043a\u0430\u043c\u0438, \u043d\u0435 \u0441\u043a\u0440\u0435\u0439\u043f\u0438\u043b. 5 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u043e 20 \u0440\u0443\u0447\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0431\u044c\u044e\u0442 \u0441\u043a\u0440\u0435\u0439\u043f \u043d\u0430 200.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0431\u044b LoRA: <code>char_v1<\/code>, <code>char_v2<\/code> \u0436\u0438\u0432\u0443\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e; \u043f\u0440\u0438 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438 \u043e\u0442\u043a\u0430\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0443, \u0430 \u043d\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0438\u043b \u0431\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a IP-Adapter (<code>weight<\/code>, <code>end_at<\/code>) \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u0435\u043f\u043b\u043e\u044f, \u0430 \u043d\u0435 \u043a\u0430\u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432 \u043a\u043e\u0434\u0435. \u041f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u044d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430 \u0441\u0434\u0432\u0438\u0433\u0430\u044e\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u042e\u043d\u0438\u0442-\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430 \u0438 \u043f\u0440\u043e\u0434-\u0442\u044e\u043d\u0438\u043d\u0433:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0412\u043b\u0438\u043b \u0431\u044b \u043c\u0430\u0440\u043a\u0435\u0440 <code>cache_control<\/code> \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0434\u0435\u043d\u044c. \u041e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 helper, \u043d\u0435\u0434\u0435\u043b\u044f \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u2014 \u0430 \u044f \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u043c\u0435\u0441\u044f\u0446\u0430 \u0436\u0438\u043b \u0431\u0435\u0437 \u043d\u0435\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0423\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b \u0431\u044b \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0442\u0440\u0430\u0442 \u043d\u0430 \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0439. \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043d\u043e\u0432\u043e\u043c \u0442\u0438\u043f\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0434\u0435\u043b\u0430\u043b \u0431\u044b \u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c. \u0421\u0435\u0439\u0447\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0436\u0451\u0441\u0442\u043a\u0438\u0439 \u0441\u0442\u043e\u043f \u2014 \u043e\u0434\u0438\u043d \u043e\u0441\u043e\u0431\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0434\u043e\u043b\u044e \u0434\u043d\u0435\u0432\u043d\u043e\u0433\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 rate-\u043b\u0438\u043c\u0438\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0432\u0451\u043b \u0431\u044b \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u043f\u043e \u0434\u043e\u043b\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0439 \u0432 \u043a\u0435\u0448. OpenRouter \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>prompt_tokens_details.cached_tokens<\/code> \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0435, \u043d\u043e \u0431\u0435\u0437 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438 \u0432 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0432\u044b \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u0435, \u0435\u0441\u043b\u0438 \u043a\u0435\u0448 \u00ab\u043e\u0442\u0432\u0430\u043b\u0438\u0442\u0441\u044f\u00bb \u0438\u0437-\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u0430\u0442\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u2014 \u0438 \u043a\u0435\u0448 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442).<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0427\u0442\u043e \u041d\u0415 \u0437\u0430\u043a\u0440\u044b\u0442\u043e \u0438 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0443\u0437\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430:<\/strong><\/p>\n<ul>\n<li>\n<p>Vast.ai GPU \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043e\u0442\u043a\u0430\u0437\u0430. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u0432\u0442\u043e\u0440\u043e\u0439 GPU \u0432 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u0440\u0435\u0437\u0435\u0440\u0432\u0435. \u041e\u043a\u0443\u043f\u0438\u0442\u0441\u044f \u043f\u0440\u0438 DAU 1500+.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0434\u0438\u043d 32 \u0413\u0411 \u0445\u043e\u0441\u0442. \u0415\u0441\u043b\u0438 \u0443\u043c\u0438\u0440\u0430\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0430 \u2014 \u0443\u043c\u0438\u0440\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0434\u0443\u043a\u0442. \u041d\u0430 \u043d\u0430\u0448\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>2233 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432 ChromaDB \u2014 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435. LRU \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u0442, \u043d\u0435 \u0440\u0435\u0448\u0430\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0413\u0434\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043f\u0440\u043e\u0434\u0435<\/h3>\n<p>\u0412\u0441\u0451 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0448\u0435 \u0436\u0438\u0432\u0451\u0442 \u043f\u043e\u0434 \u043e\u0434\u043d\u0438\u043c \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <strong>HoneyChat<\/strong> \u2014 \u044d\u0442\u043e AI-\u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a <strong>Telegram-\u0431\u043e\u0442 (<\/strong><a href=\"https:\/\/t.me\/HoneyChatAIBot\" rel=\"noopener noreferrer nofollow\"><strong>@HoneyChatAIBot<\/strong><\/a><strong>)<\/strong> \u0438 \u043a\u0430\u043a <strong>\u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 <\/strong><a href=\"https:\/\/honeychat.bot\" rel=\"noopener noreferrer nofollow\"><strong>honeychat.bot<\/strong><\/a>. \u0422\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0447\u0430\u0442, \u043f\u0430\u043c\u044f\u0442\u044c, \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0438 \u0438 LoRA \u2014 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438 \u0438\u0437 Telegram, \u0438 \u0438\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0441 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0442\u0443 \u0441\u0430\u043c\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044f:<\/p>\n<ul>\n<li>\n<p><strong>\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 Telegram:<\/strong> <a href=\"https:\/\/t.me\/HoneyChatAIBot\" rel=\"noopener noreferrer nofollow\">@HoneyChatAIBot<\/a> \u2014 <code>\/start<\/code>, free-\u0442\u0430\u0440\u0438\u0444 \u0434\u0430\u0451\u0442 20 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0434\u0435\u043d\u044c \u0431\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435:<\/strong> <a href=\"https:\/\/honeychat.bot\" rel=\"noopener noreferrer nofollow\">honeychat.bot<\/a> \u2014 \u0442\u043e\u0442 \u0436\u0435 \u0431\u044d\u043a\u0435\u043d\u0434, \u043f\u043e\u043b\u043d\u044b\u0439 \u0447\u0430\u0442-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438 \u0433\u043e\u043b\u043e\u0441.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u0434:<\/strong> \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 tutorial-\u043f\u0430\u043f\u043a\u0438 \u0441 runnable \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043b\u0435\u0436\u0430\u0442 \u0432 <a href=\"https:\/\/github.com\/sm1ck\/honeychat\/tree\/main\/tutorial\" rel=\"noopener noreferrer nofollow\">github.com\/sm1ck\/honeychat\/tree\/main\/tutorial<\/a> \u2014 \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>docker compose<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u0438 \u0443\u043f\u0451\u0440\u043b\u0438\u0441\u044c \u0432 \u043e\u0434\u043d\u043e \u0438\u0437 \u043c\u0435\u0441\u0442 \u0432\u044b\u0448\u0435 \u2014 \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u0447\u0443\u0436\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043e \u0433\u043e\u043d\u043a\u0430\u043c \u0432\u043e\u043a\u0440\u0443\u0433 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 (clear history, switch character) \u0438 \u043f\u043e \u0442\u044e\u043d\u0438\u043d\u0433\u0443 <code>weight<\/code>\/<code>end_at<\/code> \u043d\u0430 \u0441\u0432\u0435\u0436\u0438\u0445 SDXL-\u0444\u043e\u0440\u043a\u0430\u0445. \u041f\u043e \u044d\u0442\u043e\u0439 \u0441\u0432\u044f\u0437\u043a\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u043d\u0435 \u0430\u043d\u0438\u043c\u0435-\u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438.<\/p>\n<h3>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438<\/h3>\n<p><strong>\u041f\u0430\u043c\u044f\u0442\u044c:<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/docs.trychroma.com\/\" rel=\"noopener noreferrer nofollow\">ChromaDB docs<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/chroma-core\/chroma\/issues\/3336\" rel=\"noopener noreferrer nofollow\">ChromaDB issue #3336 \u2014 segment cache growth<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/chroma-core\/chroma\/issues\/5843\" rel=\"noopener noreferrer nofollow\">ChromaDB issue #5843 \u2014 LRU eviction<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/redis.io\/commands\/ltrim\/\" rel=\"noopener noreferrer nofollow\">Redis LTRIM<\/a><\/p>\n<\/li>\n<\/ul>\n<p><strong>LLM:<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/openrouter.ai\/models\" rel=\"noopener noreferrer nofollow\">OpenRouter model list<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/openrouter.ai\/docs\/features\/prompt-caching\" rel=\"noopener noreferrer nofollow\">OpenRouter prompt caching docs<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/platform.openai.com\/docs\/api-reference\/chat\/object\" rel=\"noopener noreferrer nofollow\">Chat Completions <code>finish_reason<\/code> semantics<\/a><\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412\u0438\u0437\u0443\u0430\u043b:<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/arxiv.org\/abs\/2106.09685\" rel=\"noopener noreferrer nofollow\">LoRA paper \u2014 Hu et al., 2021<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/bmaltais\/kohya_ss\" rel=\"noopener noreferrer nofollow\">Kohya_ss SDXL training<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/tencent-ailab\/IP-Adapter\" rel=\"noopener noreferrer nofollow\">IP-Adapter (tencent-ailab)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/cubiq\/ComfyUI_IPAdapter_plus\" rel=\"noopener noreferrer nofollow\">ComfyUI IPAdapter Plus<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/huggingface.co\/stabilityai\/stable-diffusion-xl-base-1.0\" rel=\"noopener noreferrer nofollow\">SDXL base model<\/a><\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0418\u043d\u0444\u0440\u0430:<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/www.uvicorn.org\/deployment\/\" rel=\"noopener noreferrer nofollow\">uvicorn deployment<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.docker.com\/compose\/compose-file\/compose-file-v3\/#stop_grace_period\" rel=\"noopener noreferrer nofollow\">Docker Compose stop_grace_period<\/a><\/p>\n<\/li>\n<\/ul>\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\/1042280\/\">https:\/\/habr.com\/ru\/articles\/1042280\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c AI-\u0447\u0430\u0442 \u043f\u043e \u0442\u0438\u043f\u043e\u0432\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u2014 chat-completions API, OpenAI Memory, \u043e\u0434\u0438\u043d \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 Stable Diffusion \u2014 \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0441\u0442\u0435\u043d\u044b. \u0411\u043e\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u0441\u044f\u0442\u044c \u0440\u0435\u043f\u043b\u0438\u043a. \u0418\u043d\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u043e\u0434\u0440\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 HTTP 200, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u0432\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u2014 \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430: \u043d\u0438 \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u044d\u0442\u043e \u043c\u043e\u043b\u0447\u0430. \u041e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0440\u0438\u0441\u0443\u0435\u0442 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439. \u0410 \u043e\u0434\u0435\u0442\u044c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u043b\u0430\u0442\u044c\u0435 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435.\u042f \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430 \u0434\u0435\u0440\u0436\u0443 \u0432 \u043f\u0440\u043e\u0434\u0435 AI-\u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d\u0430: \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0431\u044d\u043a\u0435\u043d\u0434 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0438 Telegram-\u0431\u043e\u0442, \u0438 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0410\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044f \u2014 \u0441\u043e\u0442\u043d\u0438 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u0435 \u0441\u043e\u0442\u043d\u0438 \u0442\u044b\u0441\u044f\u0447. \u041a\u043e\u043d\u0432\u0435\u0440\u0441\u0438\u044f \u0438\u0437 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u0432 \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0442\u0430\u0440\u0438\u0444 \u2014 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u044b, \u043a\u0430\u043a \u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u043d\u0430 \u0440\u0430\u043d\u043d\u0435\u0439 \u0441\u0442\u0430\u0434\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0446\u0438\u0444\u0440 \u043f\u0440\u043e \u00ab\u043c\u0438\u043b\u043b\u0438\u043e\u043d MAU\u00bb, \u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u0446\u0435\u043d\u044b \u0437\u0430 \u0442\u044b\u0441\u044f\u0447\u0443 \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u043e\u043b\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0439 \u0432 \u043a\u0435\u0448, \u0434\u043d\u0435\u0432\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043b\u043a\u0438 \u0442\u0440\u0430\u0442 \u0438 \u0434\u043e\/\u043f\u043e\u0441\u043b\u0435 \u043f\u043e \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043f\u0440\u043e\u0434\u0430.\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u0447\u0435\u0442\u044b\u0440\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0445 build-log \u043f\u043e\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b \u043d\u0430 dev.to (\u0441\u0435\u0440\u0438\u044f \u00abBuilding HoneyChat\u00bb), \u0441\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0432 \u043e\u0434\u0438\u043d \u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c. \u041f\u043b\u044e\u0441 \u0434\u0432\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e: \u043f\u0440\u043e \u0434\u0435\u043d\u044c\u0433\u0438 (\u044e\u043d\u0438\u0442-\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043c\u0435\u0441\u044f\u0446\u0435) \u0438 \u043f\u0440\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0442\u044e\u043d\u0438\u043d\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0434\u0432\u0438\u043d\u0443\u043b \u043f\u043e\u0442\u043e\u043b\u043e\u043a DAU \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b.\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u041f\u0430\u043c\u044f\u0442\u044c: Redis + ChromaDB\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f LLM \u0438 \u043a\u0435\u0448 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c: LoRA \u0438 IP-Adapter\u042e\u043d\u0438\u0442-\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043c\u0435\u0441\u044f\u0446\u0435\u041f\u0440\u043e\u0434-\u0442\u044e\u043d\u0438\u043d\u0433: \u0447\u0442\u043e \u043f\u043e\u0434\u043a\u0440\u0443\u0442\u0438\u043b \u0432 \u0438\u043d\u0444\u0440\u0435 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043c\u0435\u0441\u044f\u0446\u0435\u0427\u0442\u043e \u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043b, \u043d\u0430\u0447\u0430\u0432 \u0441\u0435\u0439\u0447\u0430\u0441\u0413\u0434\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043f\u0440\u043e\u0434\u0435 \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438TL;DR\u041f\u0430\u043c\u044f\u0442\u044c \u2014 Redis \u043f\u043e\u0434 \u0441\u0432\u0435\u0436\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u0440\u0435\u043f\u043b\u0438\u043a \u043f\u043b\u044e\u0441 ChromaDB \u043f\u043e\u0434 \u0441\u0436\u0430\u0442\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u044b \u043a\u0443\u0441\u043a\u043e\u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u0430. \u0422\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e. \u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u2014 \u043f\u0440\u044f\u043c\u0430\u044f \u0434\u043e\u0440\u043e\u0433\u0430 \u043a \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043b\u043e\u0445\u0438\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c.\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f LLM \u2014 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 UI \u0434\u0432\u0430 \u0442\u0435\u043c\u043f\u0430 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 (slow_burn \u0438 instant) \u043f\u043b\u044e\u0441 legacy-\u0434\u0435\u0444\u043e\u043b\u0442 natural. \u041f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u043c\u043f, \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u0440\u0438\u0444 \u2014 \u0441\u0432\u043e\u044f \u043c\u043e\u0434\u0435\u043b\u044c. \u041f\u043b\u044e\u0441 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043b\u043e\u0432\u0443\u0448\u043a\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0435 \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u044e\u0442\u0441\u044f: \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 HTTP 200, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u00ab\u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0444\u0438\u043b\u044c\u0442\u0440 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430\u00bb \u2014 \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430, \u043d\u0435 \u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0438\u0448\u0438\u043d\u0430.\u041a\u0435\u0448 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432 \u2014 \u043d\u0430 Gemini 3.1 Flash Lite \u043e\u0434\u0438\u043d \u043c\u0430\u0440\u043a\u0435\u0440 cache_control: ephemeral \u043f\u043e\u0432\u0435\u0440\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u043f\u0442\u0430 (\u044d\u0442\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f) \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 75% \u043d\u0430 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0423 \u043c\u0435\u043d\u044f \u044d\u0442\u043e\u0442 \u043e\u0434\u0438\u043d \u043c\u0430\u0440\u043a\u0435\u0440 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0432\u0441\u0435\u0433\u043e LLM-\u0431\u044e\u0434\u0436\u0435\u0442\u0430.\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u2014 LoRA, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0434\u043e\u043e\u0431\u0443\u0447\u0430\u0435\u0442\u0435 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u041e\u043d\u0430 \u00ab\u0443\u0447\u0438\u0442\u00bb Stable Diffusion \u0443\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043b\u0438\u0446\u043e. \u041f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0451 IP-Adapter (\u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u043f\u043e\u0434\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441-\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438) \u0441 \u0443\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u043b\u043e\u0439 \u0438 \u0440\u0430\u043d\u043d\u0438\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0440\u0438\u0441\u0443\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u043e\u0432\u0430\u0440 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043b\u0438\u0446\u043e \u043d\u0435 \u0443\u0435\u0445\u0430\u043b\u043e.\u0422\u044e\u043d\u0438\u043d\u0433 \u043f\u0440\u043e\u0434\u0430 \u2014 LRU-\u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u0432 ChromaDB, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a uvicorn-\u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432 \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, 90 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u043c\u044f\u0433\u043a\u043e\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u0434\u043d\u044f\u0442\u044b\u0439 \u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0442\u0440\u0430\u0442. \u0412 \u0441\u0443\u043c\u043c\u0435 \u043f\u043e\u0442\u043e\u043b\u043e\u043a API \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b \u0441 ~500 \u0434\u043e ~1200 DAU, \u043f\u043e\u0442\u043e\u043b\u043e\u043a ChromaDB \u2014 \u0441 ~800 \u0434\u043e 2000+ DAU. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u043b.\u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u043e, \u0441 \u043a\u043e\u0434\u043e\u043c, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0446\u0438\u0444\u0440\u0430\u043c\u0438 \u0438 \u0442\u0435\u043c, \u0447\u0442\u043e \u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043b.1. \u041f\u0430\u043c\u044f\u0442\u044c: Redis + ChromaDB\u041f\u043e\u0447\u0435\u043c\u0443 \u0441\u043a\u043e\u043b\u044c\u0437\u044f\u0449\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0443 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u2014 \u043e\u0442\u0434\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 N \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0437\u0430\u0431\u044b\u0442\u044c. \u0427\u0435\u0440\u0435\u0437 10-20 \u0440\u0435\u043f\u043b\u0438\u043a \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442, \u0431\u043e\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u0442 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0451\u043d\u043d\u043e\u0441\u0442\u0438. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u00ab\u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u043e\u043a\u043d\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u00bb \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0435 \u0432\u0435\u0449\u0438: \u0446\u0435\u043d\u0443 \u0432 \u0442\u043e\u043a\u0435\u043d\u0430\u0445 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043b\u043e\u0433\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u043d\u043e \u043e\u0449\u0443\u0442\u0438\u043c\u043e\u0439) \u0438 \u0432 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438 \u0438\u0437 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b.\u0412\u0442\u043e\u0440\u043e\u0439 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u0448\u0430\u0433 \u2014 \u0441\u043a\u043e\u043b\u044c\u0437\u044f\u0449\u0438\u0439 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437: \u043a\u0430\u0436\u0434\u044b\u0435 N \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0436\u0430\u0442\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e. \u0414\u0451\u0448\u0435\u0432\u043e, \u043d\u043e \u0442\u0435\u0440\u044f\u0435\u0442 \u043d\u044e\u0430\u043d\u0441 \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u0430\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0440\u043e\u0433\u043e\u043d\u0438\u0442\u0435 \u0440\u0443\u043a\u0430\u043c\u0438:\u0420\u0435\u043f\u043b\u0438\u043a\u0430 1: \u00ab\u041e\u043d\u0430 \u0441\u043a\u0430\u0437\u0430\u043b\u0430, \u0447\u0442\u043e \u043d\u0435\u043d\u0430\u0432\u0438\u0434\u0438\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0438\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d            \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u0435\u0451 \u0440\u0430\u0431\u043e\u0442\u0443\u00bbSummary 1: \u00ab\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0441 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435\u00bbSummary 2: \u00ab\u0423 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441\u0442\u0440\u0435\u0441\u0441 \u0438\u0437-\u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u044b\u00bbSummary 3: \u00ab\u0423 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0435\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u00bb\u041a \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0438\u0441\u0447\u0435\u0437\u043b\u0430. \u0411\u043e\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0437\u0432\u0443\u0447\u0430\u0442\u044c \u043a\u0430\u043a \u0437\u0430\u0435\u0437\u0436\u0435\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0441\u0442\u0438\u043d\u043a\u0430. \u041b\u0435\u0447\u0438\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043b\u043e\u0451\u0432: \u0441\u0432\u0435\u0436\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e, \u0441\u0436\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u043a\u0443\u0441\u043a\u0438, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0441\u043c\u044b\u0441\u043b\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437 \u0438\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0438.\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u0434\u0432\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0441\u043b\u043e\u044fRedis \u2014 \u0433\u043e\u0440\u044f\u0447\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u043f\u043e \u043a\u043b\u044e\u0447\u0443 (user_id, character_id, session_id), \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430, \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u043a\u043b\u044e\u0447\u0430 (TTL), \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438. \u042d\u0442\u043e \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0440\u043e\u0447\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u00ab\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 20-30 \u0440\u0435\u043f\u043b\u0438\u043a\u00bb.ChromaDB \u2014 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0431\u0430\u0437\u0430, \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0436\u0430\u0442\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u044b \u043a\u0443\u0441\u043a\u043e\u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u0430, \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0417\u0430\u043f\u0438\u0441\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0431\u0430\u0442\u0447\u0430\u043c\u0438. \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u043c\u044b\u0441\u043b\u0443 \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u043e (embedding similarity).\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u0438\u0451\u043c \u2014 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u044b, \u0430 \u043d\u0435 \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0414\u0435\u0441\u044f\u0442\u044c \u043d\u0435\u0434\u0435\u043b\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0447\u0430\u0442\u0430 \u2014 \u044d\u0442\u043e 30-50 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e, \u0430 \u043d\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0442\u044b\u0441\u044f\u0447. \u0418\u043d\u0434\u0435\u043a\u0441 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0445 \u0432\u0440\u043e\u0434\u0435 \u00ab\u0443\u0433\u0443\u00bb \u043d\u0435 \u0437\u0430\u0433\u0440\u044f\u0437\u043d\u044f\u0435\u0442\u0441\u044f (\u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u0430\u0451\u0442 \u0441\u043b\u0430\u0431\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0438 \u0442\u044f\u043d\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0448\u0443\u043c\u043d\u044b\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f).\u041f\u0440\u043e session_id \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u0412\u0435\u0431-\u0447\u0430\u0442 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u00ab\u0441\u0446\u0435\u043d\u044b\u00bb: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0441 \u0442\u0435\u043c \u0436\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u043c \u0432 \u043d\u043e\u0432\u043e\u043c \u0441\u0435\u0442\u0442\u0438\u043d\u0433\u0435, \u0438 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u043e\u0442\u0435\u043a\u0430\u0442\u044c \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0446\u0435\u043d\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0438 Redis \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 ChromaDB \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 session_id, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0435\u0441\u0442\u044c. \u0411\u043e\u0442 \u0432 Telegram \u043f\u043e\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0431\u0435\u0437 session-\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u0441\u043b\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439.\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 summary-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 ChromaDB:{    &#171;id&#187;: &#171;summary:uid42:char_anna:sess_kn3a:turn_120&#187;,    &#171;document&#187;: &#171;\u0410\u043d\u043d\u0430 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u0435\u0433\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435&#8230;&#187;,    &#171;metadata&#187;: {        &#171;type&#187;: &#171;summary&#187;,       # \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442 \u043e\u0442 event-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432        &#171;turn_range&#187;: &#171;100-120&#187;, # \u043a\u0430\u043a\u043e\u0439 \u043a\u0443\u0441\u043e\u043a \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0441\u0436\u0430\u0442        &#171;ts&#187;: &#171;2026-05-20T14:32:00Z&#187;,        &#171;lang&#187;: &#171;ru&#187;,    },}\u041f\u043e\u043b\u0435 type: &#171;summary&#187; \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u2014 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043b\u0435\u0436\u0430\u043b\u0438 \u0431\u0435\u0437 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430 (\u00abevent\u00bb, \u00abfact\u00bb) \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u043e\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438. \u0421\u043e\u0432\u0435\u0442: \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u043a\u043b\u0430\u0434\u0438\u0442\u0435 type \u0432 metadata, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043e\u0434\u0438\u043d \u0442\u0438\u043f.\u0417\u0430\u043f\u0438\u0441\u044c \u0432 Redis: bounded list + TTL \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0435async def save_message(user_id: int, char_id: str, role: str, content: str) -&gt; None:    r = get_redis()    key = f&#187;chat:{user_id}:{char_id}:messages&#187;    msg = json.dumps({        &#171;role&#187;: role,        &#171;content&#187;: content,        &#171;ts&#187;: datetime.now(timezone.utc).isoformat(),    })    pipe = r.pipeline()    pipe.rpush(key, msg)    pipe.ltrim(key, -HOT_BUFFER_SIZE, -1)    pipe.expire(key, 86400 * HOT_BUFFER_TTL_DAYS)    await pipe.execute()\u0422\u0440\u0438 \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0434\u0435\u0441\u044c \u0432\u0430\u0436\u043d\u044b:ltrim \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438. \u0421\u043f\u0438\u0441\u043e\u043a \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 N \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439), \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u2014 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u0430\u044f, \u0430 \u043d\u0435 \u0440\u0430\u0441\u0442\u0451\u0442 \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430.\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u043a\u043b\u044e\u0447\u0430 \u043f\u0440\u043e\u0434\u043b\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438. \u041d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u0438. \u0412\u0430\u0436\u043d\u043e: \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 Redis \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c maxmemory-policy allkeys-lru \u2014 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u0430\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 noeviction \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438 \u044d\u0442\u043e \u0441\u044e\u0440\u043f\u0440\u0438\u0437 \u0432 \u0441\u0430\u043c\u044b\u0439 \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.Pipelined \u0437\u0430\u043f\u0438\u0441\u044c. rpush + ltrim + expire \u0443\u0445\u043e\u0434\u044f\u0442 \u043e\u0434\u043d\u0438\u043c \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0432 Redis, \u0430 \u043d\u0435 \u0442\u0440\u0435\u043c\u044f.\u0427\u0442\u0435\u043d\u0438\u0435 \u2014 \u0442\u0440\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043easync def build_prompt_context(user_id: int, char_id: str, user_query: str) -&gt; dict:    recent, summary, memories = await asyncio.gather(        get_recent(user_id, char_id),        get_latest_summary(user_id, char_id),        get_relevant_memories(user_id, char_id, user_query),    )    return {&#171;recent&#187;: recent, &#171;summary&#187;: summary, &#171;memories&#187;: memories}\u041a\u044d\u0448 \u0441\u0432\u0435\u0436\u0435\u0433\u043e summary \u0436\u0438\u0432\u0451\u0442 \u0432 Redis \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c TTL; \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0442\u0443\u0445 \u2014 ChromaDB-\u0437\u0430\u043f\u0440\u043e\u0441 \u0438 write-back \u0432 Redis, \u0447\u0442\u043e\u0431\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u0441\u043d\u043e\u0432\u0430 \u0431\u044b\u043b \u0433\u043e\u0440\u044f\u0447\u0438\u043c.\u0413\u0440\u0430\u0431\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043b\u043e\u0432\u0438\u043b \u0432 \u043f\u0440\u043e\u0434\u0435\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u043e\u043d\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0441\u0443\u043c\u043c\u0430\u0440\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438. \u0414\u0432\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043f\u043e\u0447\u0442\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043e\u0431\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0441\u0443\u043c\u043c\u0430\u0440\u0438\u0437\u0430\u0446\u0438\u044e, \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043f\u0430\u0434\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b. \u0423 \u043c\u0435\u043d\u044f \u0432 \u043f\u0440\u043e\u0434\u0435 \u0436\u0438\u0432\u0451\u0442 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c _SUMMARIZE_TASKS: dict[str, asyncio.Task] \u0441 \u043a\u043b\u044e\u0447\u043e\u043c f&#187;{user_id}:{char_id}:{session_id}&#187;; \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 task.cancel().\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0447\u0438\u0441\u0442\u0438\u043b \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043f\u0440\u044f\u043c\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0443\u043c\u043c\u0430\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u0416\u043c\u0451\u0442 \u00ab\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0447\u0430\u0442\u00bb, \u043f\u043e\u043a\u0430 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041f\u0435\u0440\u0435\u0441\u043a\u0430\u0437 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u0435\u0442 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0436\u0435 \u043d\u0435\u0442. \u041b\u0435\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430 Redis \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e; \u0435\u0441\u043b\u0438 \u043a\u043b\u044e\u0447 \u0438\u0441\u0447\u0435\u0437 \u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0438\u0445\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f.\u041f\u0443\u0441\u0442\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u044b \u043a\u0435\u0448\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441 \u0434\u043b\u0438\u043d\u043d\u044b\u043c TTL. LLM \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043f\u0443\u0441\u0442\u043e\u0442\u043e\u0439 \u0438\u0437-\u0437\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (rate limit), \u0430 \u044f \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430 3 \u0434\u043d\u044f. \u041b\u0435\u0447\u0438\u0442\u0441\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e \u2014 if summary: \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u043a\u0435\u0448.\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u043d\u0435\u0442 \u0443 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0417\u0430\u043f\u0440\u043e\u0441 \u043a \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 ChromaDB \u0431\u0440\u043e\u0441\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432 try\/except \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0442\u0443 \u2014 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.2. \u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f LLM \u0438 \u043a\u0435\u0448 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432\u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u0434\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u0432\u0441\u0451 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0423 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0430 \u043c\u044b\u0441\u043b\u044c \u0432\u0437\u044f\u0442\u044c \u043e\u0434\u043d\u0443 \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0427\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u0432 \u043f\u0440\u043e\u0434\u0435 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0422\u0440\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b.\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0438 \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0442\u0430\u0440\u0438\u0444\u044b \u0442\u044f\u043d\u0443\u0442 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0443 \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u041d\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u0442\u0430\u0440\u0438\u0444\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0448\u043b\u0451\u0442 20 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0434\u0435\u043d\u044c. \u0415\u0441\u043b\u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0444\u043b\u0430\u0433\u043c\u0430\u043d\u0441\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u2014 \u044d\u0442\u043e\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0438\u043a \u0441\u0442\u043e\u0438\u0442 \u0432\u0430\u043c \u0434\u043e\u0440\u043e\u0436\u0435, \u0447\u0435\u043c \u0441\u0430\u043c \u043f\u043b\u0430\u0442\u0438\u0442. \u0410 \u043f\u043b\u0430\u0442\u0438\u0442 \u043e\u043d, \u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u043e\u0447\u043a\u0443, \u043d\u043e\u043b\u044c. \u041d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043f\u043b\u0430\u0442\u043d\u043e\u043c \u0442\u0430\u0440\u0438\u0444\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0436\u0434\u0451\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430 \u0441\u0432\u043e\u0438 \u0434\u0435\u043d\u044c\u0433\u0438: \u0431\u0443\u0434\u044c \u0434\u043e\u0431\u0440, \u0434\u0430\u0439 \u0435\u043c\u0443 \u0444\u043b\u0430\u0433\u043c\u0430\u043d. \u041e\u0434\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u0432\u0441\u0435\u0445 \u2014 \u044d\u0442\u043e \u043b\u0438\u0431\u043e \u0442\u0438\u0445\u0430\u044f \u0434\u043e\u0442\u0430\u0446\u0438\u044f \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u0437\u0430 \u0441\u0447\u0451\u0442 \u043f\u043b\u0430\u0442\u044f\u0449\u0438\u0445, \u043b\u0438\u0431\u043e \u043f\u043b\u0430\u0442\u044f\u0449\u0438\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439, \u0438 \u043e\u0431\u0438\u0436\u0430\u0435\u0442\u0441\u044f. \u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0442\u0443\u0442 \u043d\u0438\u043a\u043e\u0433\u043e \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442.\u041c\u043e\u0434\u0435\u043b\u0438 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0443. GPT-4 \u0438 Claude \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0441\u0446\u0435\u043d\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u043d\u0430 \u043f\u043b\u0430\u0442\u043d\u043e\u043c \u0442\u0430\u0440\u0438\u0444\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b \u0437\u0430\u043a\u043e\u043d\u043e\u043c \u0434\u043b\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e\u043b\u0435\u0442\u043d\u0435\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0438. \u041c\u0435\u043d\u0435\u0435 \u0437\u0430\u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u043e\u0433\u043b\u0430\u0448\u0430\u044e\u0442\u0441\u044f, \u043d\u043e \u0445\u0443\u0436\u0435 \u0434\u0435\u0440\u0436\u0430\u0442 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u2014 \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442, \u043a\u0442\u043e \u0447\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u043b \u0434\u0435\u0441\u044f\u0442\u044c \u0440\u0435\u043f\u043b\u0438\u043a \u043d\u0430\u0437\u0430\u0434. \u0427\u0435\u043c-\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u0442\u044c.\u0423 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0442\u0435\u043c\u043f\u0430. \u0412 UI \u043e\u043d \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439: slow_burn (\u00ab\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f, \u0431\u0435\u0437&#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-481953","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/481953","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=481953"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/481953\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=481953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=481953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=481953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}