{"id":483427,"date":"2026-06-12T12:53:33","date_gmt":"2026-06-12T12:53:33","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=483427"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=483427","title":{"rendered":"AI-\u0430\u0433\u0435\u043d\u0442\u00a0\u0434\u043b\u044f\u00a0\u0441\u043a\u043b\u0430\u0434\u0430\u00a0\u0432\u00a0\u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441.\u00a0\u0427\u0430\u0441\u0442\u044c\u00a01"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u041e\u0441\u043d\u043e\u0432\u044b\u00a0\u0438\u00a0tool-\u0432\u044b\u0437\u043e\u0432\u044b<\/h2>\n<p>\u042d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 AI-\u0430\u0433\u0435\u043d\u0442\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. <a href=\"https:\/\/www.jmix.ru\/\">\u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441<\/a> (\u0438\u043b\u0438 <em>Jmix<\/em>, ex. <em>CUBA<\/em>) &#8212; \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 Java, \u0430\u0432\u0442\u043e\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u0432 \u043d\u0435\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f, \u0432 \u043d\u0430\u0448\u0435 \u0432\u0440\u0435\u043c\u044f \u043b\u044e\u0431\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a AI \u0434\u0430\u0441\u0442 \u0412\u0430\u043c \u0432\u0441\u044e \u043d\u0443\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u0434\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0430 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0430\u0433\u0435\u043d\u0442 \u0440\u0435\u0448\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043d\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u0435, \u0434\u0435\u0440\u0433\u0430\u0435\u0442 \u0438\u0445 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0441\u043a\u043b\u0430\u0434\u00a0&#8212;\u00a0\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439,\u00a0\u0443\u0437\u043d\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0448\u0438\u0440\u043e\u043a\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u0443\u0436\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435, \u043d\u043e \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c,\u00a0<em>fetch\u00a0plans<\/em>\u00a0\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>\u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u043e? \u0414\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0436\u0438\u0432\u0443\u0442 \u0437\u0430 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0438 \u0444\u043e\u0440\u043c\u0430\u043c\u0438 \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438. \u042d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u043d\u0430\u0435\u0442, \u043f\u043e \u043a\u0430\u043a\u0438\u043c \u043f\u043e\u043b\u044f\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c\u00a0&#8212;\u00a0\u0438 \u043f\u043b\u043e\u0445\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u044b\u0442\u044b\u0445, \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 &#171;\u0433\u0434\u0435 \u0443 \u043d\u0430\u0441 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0444\u0435 \u0442\u0451\u043c\u043d\u043e\u0439 \u043e\u0431\u0436\u0430\u0440\u043a\u0438 \u043f\u043e \u0441\u0435\u0432\u0435\u0440\u043d\u044b\u043c \u0441\u043a\u043b\u0430\u0434\u0430\u043c?&#187;. \u041a\u043e\u0433\u0434\u0430 \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u0438 \u0440\u0443\u043a\u0430\u043c\u0438 \u0441\u0432\u0435\u0441\u0442\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, AI-\u0430\u0433\u0435\u043d\u0442\u00a0\u0434\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c\u00a0&#8212;\u00a0\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u0438\u0437 \u0431\u044d\u043a\u0435\u043d\u0434-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c? \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441\u0430 \u0430\u0433\u0435\u043d\u0442 \u0435\u0434\u0435\u0442 \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435, \u0435\u0433\u043e\u00a0tools\u00a0\u0438\u0434\u0443\u0442 \u0447\u0435\u0440\u0435\u0437\u00a0<em>DataManager<\/em>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d \u0432\u0438\u0434\u0438\u0442 \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e\u00a0&#8212;\u00a0\u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043a \u0434\u0430\u043d\u043d\u044b\u043c, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u0445\u043e\u0434\u0430 \u043f\u0440\u0430\u0432. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0430\u0433\u0435\u043d\u0442\u0430 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u043c \u0432\u00a0enterprise-\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435, \u0438 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u00a0&#8212;\u00a0\u0441\u043a\u0432\u043e\u0437\u043d\u0430\u044f \u043d\u0438\u0442\u044c \u043e\u0431\u0435\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439.<\/p>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f\u00a0&#8212;\u00a0\u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e \u0441 <em>Java<\/em> \u0438 <em>Spring<\/em>, \u0438 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0441\u043b\u043e\u0439 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0430 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \u041c\u044b \u043d\u0435 \u0441\u043f\u043e\u0440\u0438\u043c, \u043d\u0443\u0436\u0435\u043d \u043b\u0438 \u0430\u0433\u0435\u043d\u0442 \u0432\u043e\u043e\u0431\u0449\u0435\u00a0&#8212;\u00a0\u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0431\u0443\u0434\u0435\u0442 \u0447\u0435\u0441\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b &#171;\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d&#187;\u00a0&#8212;\u00a0\u0438 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u0437\u043e\u0440 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430\u00a0\u0430\u0433\u0435\u043d\u0442\u043d\u044b\u0445\u00a0\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0437\u0430 \u0434\u0435\u043b\u043e.<\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u00a0<a href=\"https:\/\/www.infoworld.com\/article\/4150199\/spring-ai-tutorial-building-ai-agents-with-spring-ai.html\">Spring AI tutorial: Building AI agents with Spring AI<\/a>\u00a0\u0438\u0437\u00a0InfoWorld. \u0422\u0430\u043c \u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c <em>Spring<\/em> \u0431\u0435\u0437 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441\u00a0&#8212;\u00a0\u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c.<\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0434\u0435\u043c\u043e \u043b\u0435\u0436\u0438\u0442 \u0437\u0434\u0435\u0441\u044c:\u00a0<a href=\"https:\/\/github.com\/jmix-edu\/ai-warehouse\">https:\/\/github.com\/jmix-edu\/ai-warehouse<\/a>\u00a0&#8212;\u00a0\u043c\u043e\u0436\u043d\u043e \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/p>\n<h2>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435\u00a0agent\u00a0loop\u00a0\u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043d\u0435 \u0447\u0430\u0442-\u0431\u043e\u0442<\/h2>\n<p>\u0427\u0430\u0442-\u0431\u043e\u0442\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u044f: \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434, \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434. \u0412\u0441\u0435, \u0447\u0442\u043e \u043e\u043d \u0437\u043d\u0430\u0435\u0442\u00a0&#8212;\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u043e\u043c\u043f\u0442\u0435\u00a0(prompt) \u0438 \u0432 \u0432\u0435\u0441\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u0438. \u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043a \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u00a0&#8212;\u00a0\u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0447\u0430\u0442-\u0431\u043e\u0442 \u0435\u0435 \u043d\u0435 \u0440\u0435\u0448\u0438\u0442.<\/p>\n<p>AI-\u0430\u0433\u0435\u043d\u0442 \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0438\u043d\u0430\u0447\u0435. \u042d\u0442\u043e \u0446\u0438\u043a\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442, \u0430\u00a0\u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u00a0\u0438\u0437 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430. \u041a\u0430\u0436\u0434\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u0439 <em>Java<\/em>-\u043c\u0435\u0442\u043e\u0434, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0439 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439\u00a0<em>@Tool<\/em>\u00a0\u0438\u0437 <em>Spring AI<\/em>. \u041c\u043e\u0434\u0435\u043b\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 (tool) \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u044d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u0438 \u0446\u0438\u043a\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u0441\u043e\u0447\u0442\u0435\u0442, \u0447\u0442\u043e \u0443 \u043d\u0435\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430.<\/p>\n<p>\u0412 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code>loop:     response = model.call(messages + system_prompt + tools_spec)     if response is final_answer:         return response.text     for tool_call in response.tool_calls:         result = invoke(tool_call.name, tool_call.arguments)         messages += tool_result(result)     if iterations &gt; MAX:         return \"could not finish\"<\/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>\u042d\u0442\u043e\u0442 \u0446\u0438\u043a\u043b \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438\u00a0&#8212;\u00a0\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u00a0\u0443\u0432\u0438\u0434\u0435\u0442\u044c\u00a0\u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e <em>Spring AI<\/em> \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u00a0<code>ChatClient.call(\u2026\u200b)<\/code>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043a\u043e\u0434.<\/p>\n<h2>\u0426\u0438\u043a\u043b \u0440\u0443\u043a\u0430\u043c\u0438: \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430\u00a0agent\u00a0loop\u00a0\u0431\u0435\u0437 Spring AI, \u0432 \u043d\u0451\u043c \u0432\u0441\u0435\u0433\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438:<\/p>\n<ul>\n<li>\n<p><strong><em>Messages<\/em><\/strong>\u00a0&#8212;\u00a0\u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430. \u0418\u0445 \u043e\u0431\u044b\u0447\u043d\u043e \u0442\u0440\u0438 \u0442\u0438\u043f\u0430:\u00a0<em>SystemMessage<\/em>\u00a0(\u0440\u043e\u043b\u044c \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438),\u00a0<em>UserMessage<\/em>\u00a0(\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f),\u00a0<em>AssistantMessage<\/em>\u00a0(\u043e\u0442\u0432\u0435\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438; \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u00a0tool-\u0432\u044b\u0437\u043e\u0432\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u0430). \u041f\u043b\u044e\u0441\u00a0<em>ToolMessage<\/em>\u00a0&#8212;\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u00a0tool, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043a\u043b\u0430\u0434\u0451\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u0435\u0433\u043e \u0432\u0438\u0434\u0435\u043b\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><strong><em>Tools\u00a0spec<\/em><\/strong>\u00a0&#8212;\u00a0JSON-\u0441\u0445\u0435\u043c\u0430 \u0432\u0441\u0435\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445\u00a0tools\u00a0(\u0438\u043c\u0435\u043d\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u0442\u0438\u043f\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0445\u043e\u0434\u0438\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435.<\/p>\n<\/li>\n<li>\n<p><strong><em>Decision<\/em><\/strong>\u00a0&#8212;\u00a0\u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442 \u043c\u043e\u0434\u0435\u043b\u0438: \u043b\u0438\u0431\u043e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442, \u043b\u0438\u0431\u043e \u0432\u044b\u0437\u043e\u0432\u00a0tool\u00a0\u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><strong><em>Loop<\/em><\/strong>\u00a0\u0441 \u043b\u0438\u043c\u0438\u0442\u043e\u043c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439\u00a0&#8212;\u00a0\u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0413\u0440\u0443\u0431\u043e \u0432 \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"java\">record\u00a0AgentDecision(String\u00a0action,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ \"tool\" \u0438\u043b\u0438 \"done\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0String\u00a0toolName,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Map&lt;String,\u00a0Object&gt;\u00a0arguments,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0String\u00a0finalAnswer)\u00a0{}\u00a0\u00a0public\u00a0String\u00a0run(String\u00a0userQuestion)\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0List&lt;Message&gt;\u00a0messages\u00a0=\u00a0new\u00a0ArrayList&lt;&gt;();\u00a0\u00a0\u00a0\u00a0\u00a0messages.add(new\u00a0SystemMessage(SYSTEM_PROMPT));\u00a0\u00a0\u00a0\u00a0\u00a0messages.add(new\u00a0UserMessage(userQuestion));\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for\u00a0(int\u00a0i\u00a0=\u00a00;\u00a0i\u00a0&lt;\u00a0MAX_ITERATIONS;\u00a0i++)\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ 1.\u00a0ask\u00a0the\u00a0model\u00a0with\u00a0current\u00a0history\u00a0and\u00a0tools\u00a0spec\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ChatResponse\u00a0response\u00a0=\u00a0chatModel.call(new\u00a0Prompt(messages,\u00a0withTools(toolsSpec)));\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0AssistantMessage\u00a0assistantMsg\u00a0=\u00a0response.getResult().getOutput();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0messages.add(assistantMsg);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0AgentDecision\u00a0decision\u00a0=\u00a0parseDecision(assistantMsg.getText());\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ 2. \u0413\u043e\u0442\u043e\u0432 \u043e\u0442\u0432\u0435\u0442?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if\u00a0(\"done\".equals(decision.action()))\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0decision.finalAnswer();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ 3. \u0418\u043d\u0430\u0447\u0435\u00a0-\u00a0\u043e\u0442\u0434\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Object\u00a0result\u00a0=\u00a0invokeTool(decision.toolName(),\u00a0decision.arguments());\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0messages.add(new\u00a0ToolMessage(result.toString(),\u00a0decision.toolName()));\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0\"Could\u00a0not\u00a0finish\u00a0within\u00a0\"\u00a0+\u00a0MAX_ITERATIONS\u00a0+\u00a0\"\u00a0iterations.\";\u00a0}<\/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\u0442\u043e\u0442 \u043a\u043e\u0434 \u043c\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c\u00a0&#8212;\u00a0<em>Spring AI<\/em> \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u0451 \u044d\u0442\u043e \u0441\u0430\u043c. \u041d\u043e \u0442\u0440\u0438 \u0434\u0435\u0442\u0430\u043b\u0438 \u0438\u0437 \u043d\u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0441\u0430\u043c\u044b\u0445 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0431\u0430\u0433\u0430\u0445:<\/p>\n<ul>\n<li>\n<p><strong>\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0440\u0430\u0441\u0442\u0451\u0442.<\/strong>\u00a0\u0412\u00a0messages\u00a0\u043a\u043e\u043f\u0438\u0442\u0441\u044f \u0432\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u0441\u0435\u0445\u00a0<em>tools<\/em>. \u0414\u043b\u0438\u043d\u043d\u044b\u0439 \u0434\u0438\u0430\u043b\u043e\u0433 \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u0438\u043c\u0438\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>MAX_ITERATIONS\u00a0\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d.<\/strong>\u00a0\u0418\u043d\u0430\u0447\u0435 \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c. \u0423 <em>Spring<\/em> <em>AI<\/em> \u043b\u0438\u043c\u0438\u0442 \u0437\u0430\u0448\u0438\u0442 \u0432\u00a0default-\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445, \u043d\u043e \u043e\u0441\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0430\u0440\u0441\u0438\u043d\u0433\u00a0<em>decision<\/em>\u00a0\u0445\u0440\u0443\u043f\u043a\u0438\u0439.<\/strong>\u00a0\u0415\u0441\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u0438 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u00a0tool-\u0432\u044b\u0437\u043e\u0432 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 (\u0430 \u0441\u043b\u0430\u0431\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043b\u044e\u0431\u044f\u0442 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c JSON \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430), \u0432\u0441\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041a \u044d\u0442\u043e\u043c\u0443 \u0435\u0449\u0451 \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 &#171;\u0413\u0434\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f&#187;.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u00a0&#8212;\u00a0\u0432\u00a0<a href=\"https:\/\/www.infoworld.com\/article\/4150199\/spring-ai-tutorial-building-ai-agents-with-spring-ai.html\">\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 Spring AI \u043d\u0430 InfoWorld<\/a>. \u0414\u0430\u043b\u044c\u0448\u0435 \u0443 \u043d\u0430\u0441\u00a0&#8212;\u00a0\u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0447\u0435\u0440\u0435\u0437\u00a0<em>ChatClient<\/em>.<\/p>\n<h2>\u0427\u0442\u043e \u043c\u044b \u0441\u0442\u0440\u043e\u0438\u043c<\/h2>\n<p>\u0411\u0438\u0437\u043d\u0435\u0441-\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439: \u0441\u043a\u043b\u0430\u0434\u0441\u043a\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044f \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u044d\u043a\u0440\u0430\u043d\u044b \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438, \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435:<\/p>\n<ul>\n<li>\n<p>&#171;Do\u00a0we\u00a0have\u00a0any\u00a0dark-roast\u00a0coffee\u00a0available\u00a0in\u00a0Hamburg?&#187;<\/p>\n<\/li>\n<li>\n<p>&#171;Which\u00a0warehouses\u00a0are\u00a0running\u00a0low\u00a0on\u00a0Espresso\u00a0blend?\u00a0Less\u00a0than\u00a0five\u00a0units.&#187;<\/p>\n<\/li>\n<li>\n<p>&#171;Show\u00a0me\u00a0products\u00a0in\u00a0the\u00a0accessories\u00a0category\u00a0that\u00a0are\u00a0out\u00a0of\u00a0stock\u00a0everywhere.&#187;<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e\u00a0\u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430\u00a0\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0442\u0432\u0435\u0442\u0430\u00a0&#8212;\u00a0\u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u043a\u043e\u043b\u043e 7B \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438 \u0432 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430\u0445 \u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f.<\/p>\n<\/div>\n<\/details>\n<p>\u0410\u0433\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d:<\/p>\n<ol>\n<li>\n<p>\u041f\u043e\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u00a0tool\u00a0(\u043f\u043e\u0438\u0441\u043a \u0442\u043e\u0432\u0430\u0440\u0430 \u043f\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u043a\u043b\u0430\u0434\u043e\u0432).<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e\u00a0tools\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>UI\u00a0&#8212;\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u0439 <em>\u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441 View<\/em> \u0441 \u043f\u043e\u043b\u0435\u043c \u0432\u0432\u043e\u0434\u0430, \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438 \u043f\u043e\u043b\u0435\u043c \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e REST-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430: \u0430\u0433\u0435\u043d\u0442 \u0434\u0435\u0440\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0438\u0437 <em>Java<\/em> \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 <em>View<\/em>.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f\u00a0read-only\u00a0\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438. \u0417\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u044f\u0432\u043e\u043a \u043d\u0430 \u043f\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u0432\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u0435\u0442 \u0446\u0435\u043b\u044b\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u043c (\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c, \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0430\u0443\u0434\u0438\u0442), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u00a0<em>read-only<\/em>\u00a0\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0437\u0432\u0443\u0447\u0430\u0442 \u043d\u0435 \u0442\u0430\u043a \u0433\u0440\u043e\u043c\u043a\u043e.<\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043f\u0440\u0435\u043a\u0442\u0430<\/h2>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441-\u043f\u0440\u043e\u0435\u043a\u0442. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442\u00a0&#8212;\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 <em>\u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441 Studio<\/em> \u0447\u0435\u0440\u0435\u0437\u00a0<em>File \u2192 New \u2192 Project \u2192\u00a0Jmix\u00a0Project<\/em>; \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430\u0441 \u0442\u0443\u0442 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442. \u041d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e Full-stack\u00a0\u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0421\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0435\u0441\u0442\u044c \u0432\u00a0<a href=\"https:\/\/docs.jmix.ru\/jmix\/tutorial\/index.html\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<p><em>Spring AI<\/em> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <em>Spring Boot\u00a0starter<\/em>. \u0412\u00a0<strong>build.gradle<\/strong>:<\/p>\n<pre><code class=\"json\">ext\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0set('springAiVersion',\u00a0\"1.0.0\")\u00a0}\u00a0\u00a0dependencies\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0implementation\u00a0'org.springframework.ai:spring-ai-starter-model-ollama'\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ ... \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435\u00a0jmix-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438\u00a0}\u00a0\u00a0dependencyManagement\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0imports\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mavenBom\u00a0\"org.springframework.ai:spring-ai-bom:${springAiVersion}\"\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u0442\u0430\u0440\u0442\u0435\u0440\u00a0<em>ollama<\/em>, \u0430 \u043d\u0435\u00a0<em>openai<\/em>\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440. \u0414\u043b\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0447\u0435\u0440\u0435\u0437\u00a0<em>Ollama<\/em>\u00a0\u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438 \u0438 \u0442\u043e\u043a\u0435\u043d\u044b. \u0415\u0441\u043b\u0438 \u043f\u043e\u0437\u0436\u0435 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 <em>OpenAI,\u00a0Anthropic<\/em>\u00a0\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u00a0&#8212;\u00a0\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f\u00a0starter\u00a0\u0438 \u0431\u043b\u043e\u043a\u00a0<a href=\"http:\/\/spring.ai\">spring.ai<\/a>.*\u00a0\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u0434 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u042d\u0442\u043e, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u0435\u0441\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0441\u043c\u044b\u0441\u043b <em>Spring AI<\/em> \u043a\u0430\u043a \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438.<\/p>\n<p>\u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e: \u043d\u0435 \u0432\u0441\u044f\u043a\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0443\u043c\u0435\u0435\u0442\u00a0\u0432 <em>native\u00a0tool\u00a0calling<\/em>, \u0438 \u0441\u043b\u0430\u0431\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0442\u0435\u0441\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c. \u041a \u043c\u043e\u043c\u0435\u043d\u0442\u0443, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0432\u044b \u0443\u0436\u0435 \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0431\u0430\u0433 \u0432 \u043a\u043e\u0434\u0435. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c\u00a0&#8212;\u00a0\u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 &#171;\u0413\u0434\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f&#187;. \u0417\u0434\u0435\u0441\u044c \u0432\u043e\u0437\u044c\u043c\u0451\u043c\u00a0<em>qwen3:8b<\/em>\u00a0&#8212;\u00a0\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u00a0<em>tools<\/em>\u00a0\u0432\u00a0<em>Ollama<\/em>, \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 5 \u0413\u0411, \u043d\u0430 CPU \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e \u0434\u043b\u044f \u0434\u0435\u043c\u043e. \u041f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0442\u0435\u0433\u00a0<em>tools<\/em>\u00a0\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u00a0<a href=\"https:\/\/ollama.com\/library\"><em>Ollama\u00a0registry<\/em><\/a>\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u044f\u0432\u043d\u044b\u0439 \u043c\u0430\u0440\u043a\u0435\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438\u00a0<em>native\u00a0tool\u00a0calling<\/em>, \u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u0441\u0442\u043e\u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u044b\u0439.<\/p>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u00a0<strong>application.properties<\/strong>:<\/p>\n<pre><code class=\"bash\">spring.ai.ollama.base-url=http:\/\/localhost:11434\u00a0spring.ai.ollama.chat.options.model=qwen3:8b\u00a0spring.ai.ollama.chat.options.think=false\u00a0spring.ai.ollama.chat.options.temperature=0.2<\/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\u0438\u0437\u043a\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0430. \u0414\u043b\u044f\u00a0\u0430\u0433\u0435\u043d\u0442\u043d\u043e\u0433\u043e\u00a0\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c\u00a0\u0432\u044b\u0431\u0438\u0440\u0430\u043b\u0430\u00a0<em>tool<\/em>\u00a0\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, \u0430 \u043d\u0435 &#171;\u043a\u0440\u0435\u0430\u0442\u0438\u0432\u0438\u043b\u0430&#187;. \u041a\u0440\u0435\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430, \u043d\u0435 \u0432 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u00a0<em>Ollama<\/em>\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"bash\">ollama\u00a0pull\u00a0qwen3:8b\u00a0ollama\u00a0serve<\/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>\u0414\u043e\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c<\/strong><\/p>\n<p>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439:<\/p>\n<ul>\n<li>\n<p><strong>Product<\/strong>\u00a0&#8212;\u00a0\u0430\u0440\u0442\u0438\u043a\u0443\u043b, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Warehouse<\/strong>\u00a0&#8212;\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u043b\u043e\u043a\u0430\u0446\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>StockItem<\/strong>\u00a0&#8212;\u00a0\u0441\u0432\u044f\u0437\u043a\u0430 &#171;\u0442\u043e\u0432\u0430\u0440 \u043d\u0430 \u0441\u043a\u043b\u0430\u0434\u0435&#187; \u0441 \u043f\u043e\u043b\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f\u00a0read-tools\u00a0\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c\u00a0<em>ReplenishmentRequest<\/em>, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c\u00a0&#8212;\u00a0\u0442\u0430\u043c.<\/p>\n<details class=\"spoiler\">\n<summary>Product<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">@JmixEntity\u00a0@Table(name\u00a0=\u00a0\"PRODUCT\")\u00a0@Entity\u00a0public\u00a0class\u00a0Product\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@JmixGeneratedValue\u00a0\u00a0\u00a0\u00a0\u00a0@Column(name\u00a0=\u00a0\"ID\",\u00a0nullable\u00a0=\u00a0false)\u00a0\u00a0\u00a0\u00a0\u00a0@Id\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0UUID\u00a0id;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@InstanceName\u00a0\u00a0\u00a0\u00a0\u00a0@Column(name\u00a0=\u00a0\"NAME\",\u00a0nullable\u00a0=\u00a0false)\u00a0\u00a0\u00a0\u00a0\u00a0@NotNull\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0String\u00a0name;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Column(name\u00a0=\u00a0\"DESCRIPTION\",\u00a0length\u00a0=\u00a01024)\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0String\u00a0description;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Column(name\u00a0=\u00a0\"CATEGORY\")\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0String\u00a0category;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u00a0getters\/setters\u00a0}<\/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>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0<em>@InstanceName<\/em>: \u043a\u043e\u0433\u0434\u0430\u00a0<em>tool<\/em>\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432 JSON, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Warehouse:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">@JmixEntity\u00a0@Table(name\u00a0=\u00a0\"WAREHOUSE\")\u00a0@Entity\u00a0public\u00a0class\u00a0Warehouse\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@JmixGeneratedValue\u00a0\u00a0\u00a0\u00a0\u00a0@Column(name\u00a0=\u00a0\"ID\",\u00a0nullable\u00a0=\u00a0false)\u00a0\u00a0\u00a0\u00a0\u00a0@Id\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0UUID\u00a0id;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@InstanceName\u00a0\u00a0\u00a0\u00a0\u00a0@Column(name\u00a0=\u00a0\"NAME\",\u00a0nullable\u00a0=\u00a0false)\u00a0\u00a0\u00a0\u00a0\u00a0@NotNull\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0String\u00a0name;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Column(name\u00a0=\u00a0\"CITY\")\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0String\u00a0city;\u00a0}<\/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<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>StockItem:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">@JmixEntity\u00a0@Table(name\u00a0=\u00a0\"STOCK_ITEM\")\u00a0@Entity\u00a0public\u00a0class\u00a0StockItem\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@JmixGeneratedValue\u00a0\u00a0\u00a0\u00a0\u00a0@Column(name\u00a0=\u00a0\"ID\",\u00a0nullable\u00a0=\u00a0false)\u00a0\u00a0\u00a0\u00a0\u00a0@Id\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0UUID\u00a0id;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@JoinColumn(name\u00a0=\u00a0\"PRODUCT_ID\",\u00a0nullable\u00a0=\u00a0false)\u00a0\u00a0\u00a0\u00a0\u00a0@ManyToOne(fetch\u00a0=\u00a0FetchType.LAZY,\u00a0optional\u00a0=\u00a0false)\u00a0\u00a0\u00a0\u00a0\u00a0@NotNull\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0Product\u00a0product;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@JoinColumn(name\u00a0=\u00a0\"WAREHOUSE_ID\",\u00a0nullable\u00a0=\u00a0false)\u00a0\u00a0\u00a0\u00a0\u00a0@ManyToOne(fetch\u00a0=\u00a0FetchType.LAZY,\u00a0optional\u00a0=\u00a0false)\u00a0\u00a0\u00a0\u00a0\u00a0@NotNull\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0Warehouse\u00a0warehouse;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Column(name\u00a0=\u00a0\"QUANTITY\",\u00a0nullable\u00a0=\u00a0false)\u00a0\u00a0\u00a0\u00a0\u00a0@NotNull\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0Integer\u00a0quantity;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Column(name\u00a0=\u00a0\"RESERVED\",\u00a0nullable\u00a0=\u00a0false)\u00a0\u00a0\u00a0\u00a0\u00a0@NotNull\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0Integer\u00a0reserved\u00a0=\u00a00;\u00a0}<\/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<\/div>\n<\/details>\n<p><em>Liquibase-changelog<\/em>\u00a0\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f <em>Studio<\/em> \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u041f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0432 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441\u00a0&#8212;\u00a0<a href=\"https:\/\/docs.jmix.ru\/jmix\/data-model\/db-migrations.html\">\u0440\u0430\u0437\u0434\u0435\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<p><strong>Tools: \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0432\u0438\u0434\u0438\u0442 \u043c\u043e\u0434\u0435\u043b\u044c<\/strong><\/p>\n<p><em>Tool<\/em> \u0432 <em>Spring AI<\/em>\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u0439 <em>Spring-bean<\/em>\u00a0\u043c\u0435\u0442\u043e\u0434 \u0441 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439\u00a0<em>@Tool<\/em>. \u0418\u043c\u044f\u00a0<em>tool<\/em>, \u0435\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u0434\u0443\u0442 \u0432\u00a0<em>system\u00a0prompt<\/em>\u00a0\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u00a0<em>description<\/em>\u00a0\u0432\u0430\u0436\u043d\u044b: \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u043d\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0440\u0435\u0448\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445.<\/p>\n<p>\u0421\u043e\u0431\u0435\u0440\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u00a0<em>WarehouseAgentTools<\/em>. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043a\u0430\u0436\u0435\u043c \u043a\u043e\u0434 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043f\u043e\u0442\u043e\u043c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c.<\/p>\n<pre><code class=\"java\">@Component\u00a0public\u00a0class\u00a0WarehouseAgentTools\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0final\u00a0DataManager\u00a0dataManager;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public\u00a0WarehouseAgentTools(DataManager\u00a0dataManager)\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.dataManager\u00a0=\u00a0dataManager;\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Tool(description\u00a0=\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Find\u00a0products\u00a0by\u00a0a\u00a0keyword\u00a0that\u00a0may\u00a0appear\u00a0in\u00a0the\u00a0product\u00a0name\u00a0or\u00a0description. \"\u00a0+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Returns\u00a0up\u00a0to\u00a020\u00a0matches.\u00a0Use\u00a0this\u00a0first\u00a0when\u00a0the\u00a0user\u00a0asks\u00a0for\u00a0a\u00a0product\u00a0by\u00a0description.\")\u00a0\u00a0\u00a0\u00a0\u00a0public\u00a0List&lt;Product&gt;\u00a0findProducts(\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@ToolParam(description\u00a0=\u00a0\"search\u00a0keyword,\u00a0lower\u00a0case\")\u00a0String\u00a0keyword)\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0dataManager.load(Product.class)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.query(\"select\u00a0p\u00a0from\u00a0Product p \"\u00a0+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"where\u00a0lower(p.name)\u00a0like\u00a0:kw\u00a0or\u00a0lower(p.description)\u00a0like\u00a0:kw\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.parameter(\"kw\",\u00a0\"%\"\u00a0+\u00a0keyword.toLowerCase()\u00a0+\u00a0\"%\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.maxResults(20)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.fetchPlan(fp\u00a0-&gt;\u00a0fp.addAll(\"name\",\u00a0\"description\",\u00a0\"category\"))\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.list();\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Tool(description\u00a0=\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"List\u00a0available\u00a0warehouses\u00a0with\u00a0their\u00a0city. \"\u00a0+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Use\u00a0this\u00a0to\u00a0map\u00a0a\u00a0city\u00a0name\u00a0from\u00a0the\u00a0user\u00a0request\u00a0to\u00a0a\u00a0warehouse\u00a0id.\")\u00a0\u00a0\u00a0\u00a0\u00a0public\u00a0List&lt;Warehouse&gt;\u00a0listWarehouses()\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0dataManager.load(Warehouse.class)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.all()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.fetchPlan(fp\u00a0-&gt;\u00a0fp.addAll(\"name\",\u00a0\"city\"))\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.list();\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Tool(description\u00a0=\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Get\u00a0current\u00a0stock\u00a0of\u00a0a\u00a0specific\u00a0product\u00a0across\u00a0all\u00a0warehouses. \"\u00a0+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Returns\u00a0quantity,\u00a0reserved\u00a0and\u00a0available\u00a0amount\u00a0per\u00a0warehouse,\u00a0where\u00a0available\u00a0=\u00a0quantity\u00a0-\u00a0reserved.\")\u00a0\u00a0\u00a0\u00a0\u00a0public\u00a0List&lt;StockItem&gt;\u00a0getStock(\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@ToolParam(description\u00a0=\u00a0\"product\u00a0id\u00a0(UUID)\")\u00a0String\u00a0productId)\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0UUID\u00a0id\u00a0=\u00a0UUID.fromString(productId);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0dataManager.load(StockItem.class)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.query(\"select\u00a0s\u00a0from\u00a0StockItem\u00a0s \"\u00a0+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"where\u00a0s.product.id = :pid\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.parameter(\"pid\",\u00a0id)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.fetchPlan(fp\u00a0-&gt;\u00a0fp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.addAll(\"quantity\",\u00a0\"reserved\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.add(\"product\",\u00a0pFp\u00a0-&gt;\u00a0pFp.addAll(\"name\"))\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.add(\"warehouse\",\u00a0wFp\u00a0-&gt;\u00a0wFp.addAll(\"name\")))\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.list();\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Tool(description\u00a0=\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Find\u00a0products\u00a0that\u00a0have\u00a0zero\u00a0available\u00a0stock\u00a0(available\u00a0=\u00a0quantity\u00a0-\u00a0reserved) \"\u00a0+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"across\u00a0all\u00a0warehouses,\u00a0filtered\u00a0by\u00a0category. \"\u00a0+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Use\u00a0when\u00a0the\u00a0user\u00a0asks\u00a0about\u00a0out-of-stock\u00a0items.\")\u00a0\u00a0\u00a0\u00a0\u00a0public\u00a0List&lt;Product&gt;\u00a0findOutOfStockByCategory(\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@ToolParam(description\u00a0=\u00a0\"product\u00a0category\")\u00a0String\u00a0category)\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0dataManager.load(Product.class)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.query(\"select\u00a0p\u00a0from\u00a0Product p \"\u00a0+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"where\u00a0p.category\u00a0= :cat\u00a0\"\u00a0+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"and\u00a0not\u00a0exists\u00a0(select\u00a0s\u00a0from\u00a0StockItem\u00a0s \"\u00a0+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0where\u00a0s.product\u00a0= p\u00a0and\u00a0(s.quantity\u00a0-\u00a0s.reserved) &gt; 0)\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.parameter(\"cat\",\u00a0category)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.fetchPlan(fp\u00a0-&gt;\u00a0fp.addAll(\"name\",\u00a0\"description\",\u00a0\"category\"))\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.list();\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0440\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443\u00a0<em>DataManager<\/em>, \u0430 \u043d\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/strong><\/p>\n<p>\u0412 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 <em>Spring AI<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0439\u00a0<em>JpaRepository<\/em>. \u0412 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441 \u044d\u0442\u043e \u0430\u043d\u0442\u0438-\u043f\u0430\u0442\u0442\u0435\u0440\u043d:\u00a0<em>JpaRepository<\/em>\u00a0\u0438\u0434\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u00a0<em>EntityManager<\/em>\u00a0\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043c\u0438\u043c\u043e\u00a0<em>security,\u00a0soft\u00a0delete<\/em>\u00a0\u0438 \u0430\u0443\u0434\u0438\u0442\u0430. \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 AI-\u0430\u0433\u0435\u043d\u0442\u0430 \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043e\u043f\u0430\u0441\u043d\u043e: \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0431\u044b\u043b \u0431\u044b \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 <em>UI<\/em>, \u0438\u00a0<em>tool<\/em>\u00a0\u0435\u0433\u043e \u043c\u043e\u043b\u0447\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442.<\/p>\n<p><em>DataManager<\/em>\u00a0(\u0438\u043b\u0438\u00a0<em>JmixDataRepository<\/em>, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0431\u043b\u0438\u0436\u0435\u00a0\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u043d\u044b\u0439\u00a0\u0441\u0442\u0438\u043b\u044c) \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u043b\u043e\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441. \u041f\u0440\u0430\u0432\u0430 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438 (<em>CRUD<\/em>) \u0438\u00a0<em>row-level\u00a0constraints<\/em>\u00a0\u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0432 <em>UI<\/em>: \u0437\u0430\u043f\u0440\u043e\u0441, \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u043c\u043e\u043b\u0447\u0430 \u0438 \u0438\u0437\u00a0<em>tool<\/em>.\u00a0<br \/>\u00a0<br \/>\u041e\u0434\u043d\u0430 \u0432\u0430\u0436\u043d\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u0431\u044b\u0442\u044c. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435\u00a0<em>data\u00a0store<\/em>\u00a0\u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f\u00a0<strong>entity<\/strong>&#8212;\u00a0\u0438\u00a0<strong>row-level<\/strong>\u00a0\u043f\u0440\u0430\u0432\u0430; \u0430 \u0432\u043e\u0442\u00a0read-\u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430\u00a0<strong>\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b<\/strong>\u00a0<em>DataManager<\/em>\u00a0\u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u00a0&#8212;\u00a0\u044d\u0442\u043e \u043a\u043e\u043d\u0446\u0435\u043f\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e UI-\u0441\u043b\u043e\u044f. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 (\u0441\u043a\u0430\u0436\u0435\u043c,\u00a0<em>description<\/em>) \u043d\u0430\u0432\u0435\u0448\u0435\u043d \u0437\u0430\u043f\u0440\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u044f \u0440\u043e\u043b\u044c\u044e, \u043d\u043e \u0432\u044b \u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438 \u0435\u0433\u043e \u0432\u00a0<em>fetch\u00a0plan<\/em>, \u043e\u043d \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f\u00a0&#8212;\u00a0\u0438 \u0443\u0439\u0434\u0451\u0442 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c. \u0422\u043e \u0435\u0441\u0442\u044c\u00a0<em>fetch\u00a0plan<\/em>\u00a0\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0431\u043e\u0440\u043a\u0443\u00a0<strong>\u043f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044e<\/strong>, \u043d\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u0440\u0430\u0432. \u041a\u043e\u0433\u0434\u0430\u00a0<em>tool<\/em>\u00a0\u043e\u0442\u0434\u0430\u0451\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0432 <em>LLM<\/em>, \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u044f\u0432\u043d\u043e; \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e\u00a0&#8212;\u00a0\u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u0442\u0435\u0437\u0438\u0441:\u00a0<em>tools<\/em>\u00a0\u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0434\u0442\u0438 \u0447\u0435\u0440\u0435\u0437\u00a0<em>DataManager<\/em>, \u0430 \u043d\u0435 \u0432 \u043e\u0431\u0445\u043e\u0434. \u0412\u0441\u0435, \u0447\u0442\u043e \u0432 \u043e\u0431\u0445\u043e\u0434\u00a0&#8212;\u00a0\u043b\u0438\u0431\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0438 \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e (\u043c\u044b \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u0441\u0443\u0434\u0438\u043c\u00a0<em>SystemAuthenticator<\/em>), \u043b\u0438\u0431\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0438 \u0434\u044b\u0440\u0430 \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><strong>\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 <em>DTO<\/em> \u0438\u0437\u00a0tool-\u043c\u0435\u0442\u043e\u0434\u043e\u0432<\/strong><\/p>\n<p>\u0412 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 tool-\u043c\u0435\u0442\u043e\u0434\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0438 <em>DTO<\/em>-\u043e\u0431\u0451\u0440\u0442\u043a\u0438 (<em>ProductDto<\/em>,\u00a0<em>StockDto<\/em>\u00a0\u0438\u00a0\u0442.\u043f.). \u042d\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u0438 \u043e\u043d \u0440\u0435\u0448\u0430\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:<\/p>\n<ul>\n<li>\n<p>JSON-\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u044f\u043d\u0443\u0442\u044c \u043d\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043b\u0435\u043d\u0438\u0432\u044b\u0435 \u0441\u0432\u044f\u0437\u0438 \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c\u00a0<em>LazyInitializationException<\/em>\u00a0\u0432 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 <em>Spring AI<\/em>\u00a0\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u043b\u044f (<em>version,\u00a0deletedDate<\/em>), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0441\u043e\u0440\u044f\u044e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u043b\u0438\u0448\u043d\u0438\u043c\u0438 \u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><em>DTO<\/em> \u044f\u0432\u043d\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0443\u0432\u0438\u0434\u0438\u0442 \u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441 \u0442\u0435 \u0436\u0435 \u0446\u0435\u043b\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437\u00a0<em>fetch\u00a0plan<\/em>\u00a0\u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435\u00a0&#8212;\u00a0\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0434\u0435\u043c\u043e:<\/p>\n<pre><code class=\"java\">dataManager.load(Product.class)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.query(\"...\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.fetchPlan(fp\u00a0-&gt;\u00a0fp.addAll(\"name\",\u00a0\"description\",\u00a0\"category\"))\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.list();<\/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><em>Fetch\u00a0plan<\/em>\u00a0\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0440\u043e\u0432\u043d\u043e \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u043e\u043b\u044f; \u043d\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0432\u044f\u0437\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u0440\u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u043b\u044f (<em>version,\u00a0deletedDate<\/em>) \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432 \u043f\u043b\u0430\u043d\u00a0&#8212;\u00a0\u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p><em>DTO<\/em>\u00a0&#8212;\u00a0\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0439, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432\u00a0<em>fetch\u00a0plan<\/em>\u00a0&#8212;\u00a0\u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441-\u0438\u0434\u0438\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431, \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u043b\u0438\u0448\u043d\u0438\u0439 \u0441\u043b\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p><strong>\u0424\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u00a0<em>description<\/em><\/strong><\/p>\n<p>\u0421\u0430\u043c \u0444\u0430\u043a\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0<em>tool\u00a0description<\/em>\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u0447\u0430\u0441\u0442\u044c\u00a0<em>system\u00a0prompt<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0434\u0435\u043b\u044c \u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0447\u0430\u0441\u0442\u043e \u043d\u0435\u0434\u043e\u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439:<\/p>\n<ul>\n<li>\n<p>\u041f\u0438\u0448\u0438\u0442\u0435\u00a0<em>description<\/em>\u00a0\u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043f\u043e-\u0440\u0443\u0441\u0441\u043a\u0438. \u041c\u043e\u0434\u0435\u043b\u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0412\u00a0<em>description<\/em>\u00a0\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0439\u0442\u0435\u00a0\u043a\u043e\u0433\u0434\u0430\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u00a0<em>tool<\/em>, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442. \u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435 &#171;<em>Search\u00a0products\u00a0by\u00a0keyword<\/em>&#187; \u0438 &#171;<em>Use\u00a0this\u00a0first\u00a0when\u00a0the\u00a0user\u00a0asks\u00a0for\u00a0a\u00a0product\u00a0by\u00a0description<\/em>&#171;. \u0412\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0430\u0433\u0435\u043d\u0442\u0443 \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0434\u0432\u0430 \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u00a0<em>tool<\/em>\u00a0\u0441 \u0431\u043b\u0438\u0437\u043a\u0438\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u043c\u0438\u00a0&#8212;\u00a0\u043c\u043e\u0434\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f. \u041b\u0443\u0447\u0448\u0435 \u043e\u0434\u0438\u043d\u00a0<em>tool<\/em>\u00a0\u0441 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u043c, \u0447\u0435\u043c \u0434\u0432\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0445\u0441\u044f.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0421\u0431\u043e\u0440\u043a\u0430\u00a0<em>ChatClient<\/em><\/strong><\/p>\n<p><em>ChatClient<\/em>\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u0444\u0430\u0441\u0430\u0434 <em>Spring AI<\/em> \u043f\u043e\u0432\u0435\u0440\u0445 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f\u00a0<em>tools<\/em>\u00a0\u0438\u00a0<em>system\u00a0prompt<\/em>\u00a0\u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437\u00a0<em>builder<\/em>.<\/p>\n<pre><code class=\"java\">@Configuration\u00a0public\u00a0class\u00a0AgentConfig\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Bean\u00a0\u00a0\u00a0\u00a0\u00a0public\u00a0ChatClient\u00a0warehouseAgentClient(\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ChatClient.Builder\u00a0builder,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0WarehouseAgentTools\u00a0tools)\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0builder\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.defaultSystem(\"\"\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 You\u00a0are\u00a0a\u00a0warehouse\u00a0assistant.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 You\u00a0help\u00a0the\u00a0user\u00a0find\u00a0products\u00a0and\u00a0check\u00a0stock\u00a0levels.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Tools\u00a0available\u00a0to\u00a0you\u00a0operate\u00a0on\u00a0the\u00a0warehouse\u00a0database.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Important\u00a0rules:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-\u00a0When\u00a0the\u00a0user\u00a0mentions\u00a0a\u00a0city,\u00a0first\u00a0call\u00a0listWarehouses\u00a0to\u00a0get\u00a0warehouse\u00a0ids.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-\u00a0When\u00a0the\u00a0user\u00a0describes\u00a0a\u00a0product,\u00a0first\u00a0call\u00a0findProducts\u00a0to\u00a0get\u00a0product\u00a0ids.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-\u00a0Only\u00a0after\u00a0you\u00a0have\u00a0ids,\u00a0call\u00a0getStock\u00a0or\u00a0other\u00a0detail\u00a0tools.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-\u00a0If\u00a0you\u00a0cannot\u00a0find\u00a0a\u00a0match,\u00a0say\u00a0so\u00a0plainly. Do\u00a0not\u00a0invent\u00a0data.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Search\u00a0strategy\u00a0for\u00a0findProducts:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-\u00a0Use\u00a0SHORT\u00a0keywords. Single\u00a0word\u00a0is\u00a0best.\u00a0Never\u00a0pass\u00a0compound\u00a0phrases\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0with\u00a0hyphens\u00a0(e.g. \"dark-roast\u00a0coffee\"\u00a0is\u00a0bad; \"dark\u00a0roast\"\u00a0is\u00a0good).\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-\u00a0If\u00a0findProducts\u00a0returns\u00a00\u00a0results,\u00a0retry\u00a0with\u00a0a\u00a0simpler\u00a0or\u00a0alternative\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0keyword\u00a0before\u00a0concluding\u00a0the\u00a0product\u00a0is\u00a0unavailable.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"\"\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.defaultTools(tools)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.build();\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\n<p><strong>defaultTools(tools)<\/strong>\u00a0&#8212;\u00a0\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 <em>Spring-bean. Spring AI<\/em> \u0441\u0430\u043c \u043f\u0440\u043e\u0439\u0434\u0435\u0442\u0441\u044f \u043f\u043e \u043d\u0435\u043c\u0443 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0435\u0439 \u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0441 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439\u00a0<em>@Tool<\/em>.<\/p>\n<\/li>\n<li>\n<p><strong>System\u00a0prompt<\/strong>\u00a0&#8212;\u00a0\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439. \u0424\u0440\u0430\u0437\u044b &#171;<em>First\u00a0call\u00a0X,\u00a0then\u00a0Y<\/em>&#187; \u043d\u0435 \u043b\u0438\u0448\u043d\u0438\u0435: \u043e\u043d\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0443 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043f\u0440\u043e\u00a0<em>search\u00a0strategy<\/em>\u00a0&#8212;\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0436\u0438\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0438. \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0431\u0440\u0430\u043b\u0430 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 &#171;<em>dark-roast\u00a0coffee<\/em>&#187; (\u0441 \u0434\u0435\u0444\u0438\u0441\u043e\u043c, \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439), \u043d\u0435 \u043d\u0430\u0448\u043b\u0430 \u0432 \u0411\u0414 \u043d\u0438\u0447\u0435\u0433\u043e \u0438 \u0441\u0434\u0430\u043b\u0430\u0441\u044c. \u041f\u043e\u0441\u043b\u0435 \u044f\u0432\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 &#171;\u043f\u0440\u043e\u0431\u0443\u0439 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u043a\u043b\u044e\u0447\u0438, \u043f\u0440\u043e\u0431\u0443\u0439 \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u0438 \u043f\u0443\u0441\u0442\u043e\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435&#187;\u00a0&#8212;\u00a0\u0441\u0442\u0430\u043b\u0430 \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435\u00a0&#8212;\u00a0\u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 &#171;\u0413\u0434\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f&#187;.<\/p>\n<\/li>\n<\/ul>\n<p><strong>UI: \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441 View<\/strong><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c View\u00a0warehouse-agent-view\u00a0\u0447\u0435\u0440\u0435\u0437 Studio.<\/p>\n<p> \u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440:<\/p>\n<pre><code class=\"xml\">&lt;view\u00a0xmlns=\"http:\/\/jmix.io\/schema\/flowui\/view\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0title=\"msg:\/\/warehouseAgentView.title\"&gt;\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;layout&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;vbox\u00a0padding=\"true\"\u00a0width=\"100%\"\u00a0height=\"100%\"&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;textArea\u00a0id=\"questionField\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0width=\"100%\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0minHeight=\"3em\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0helperText=\"msg:\/\/warehouseAgentView.placeholder\"\/&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;button\u00a0id=\"askButton\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0text=\"msg:\/\/warehouseAgentView.ask\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0icon=\"MAGIC\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0themeNames=\"primary\"\/&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;progressBar\u00a0id=\"progressBar\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0visible=\"false\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0indeterminate=\"true\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0width=\"100%\"\/&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;textArea\u00a0id=\"answerField\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0width=\"100%\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0minHeight=\"20em\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0readOnly=\"true\"\/&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/vbox&gt;\u00a0\u00a0\u00a0\u00a0 &lt;\/layout&gt;\u00a0&lt;\/view&gt;<\/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\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440:<\/p>\n<pre><code class=\"java\">@Route(value\u00a0=\u00a0\"warehouse-agent\",\u00a0layout\u00a0=\u00a0MainView.class)\u00a0@ViewController(\"warehouseAgentView\")\u00a0@ViewDescriptor(\"warehouse-agent-view.xml\")\u00a0public\u00a0class\u00a0WarehouseAgentView\u00a0extends\u00a0StandardView\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Autowired\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0ChatClient\u00a0warehouseAgentClient;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@ViewComponent\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0TextArea\u00a0questionField;\u00a0\u00a0\u00a0\u00a0\u00a0@ViewComponent\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0TextArea\u00a0answerField;\u00a0\u00a0\u00a0\u00a0\u00a0@ViewComponent\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0ProgressBar\u00a0progressBar;\u00a0\u00a0\u00a0\u00a0\u00a0@ViewComponent\u00a0\u00a0\u00a0\u00a0\u00a0private\u00a0JmixButton\u00a0askButton;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Subscribe(id\u00a0=\u00a0\"askButton\",\u00a0subject\u00a0=\u00a0\"clickListener\")\u00a0\u00a0\u00a0\u00a0\u00a0public\u00a0void\u00a0onAskButtonClick(ClickEvent&lt;JmixButton&gt;\u00a0event)\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0String\u00a0question\u00a0=\u00a0questionField.getValue();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if\u00a0(question\u00a0==\u00a0null\u00a0||\u00a0question.isBlank())\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0progressBar.setVisible(true);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0askButton.setEnabled(false);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0answerField.setValue(\"\");\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UI\u00a0ui\u00a0=\u00a0UI.getCurrent();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CompletableFuture.supplyAsync(()\u00a0-&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0warehouseAgentClient.prompt()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.user(question)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.call()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.content()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0).whenComplete((answer,\u00a0ex)\u00a0-&gt;\u00a0ui.access(()\u00a0-&gt;\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0progressBar.setVisible(false);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0askButton.setEnabled(true);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if\u00a0(ex\u00a0!=\u00a0null)\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0answerField.setValue(\"Error: \"\u00a0+\u00a0ex.getMessage());\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0else\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0answerField.setValue(answer);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}));\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0412\u044b\u0437\u043e\u0432\u00a0<em>warehouseAgentClient.prompt().call()<\/em>\u00a0\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f\u00a0&#8212;\u00a0\u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0443\u043d\u0434\u043e\u0432\u00a0<em>tool<\/em>-\u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0443\u0445\u043e\u0434\u0438\u043c \u0432\u00a0<em>CompletableFuture<\/em>\u00a0\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u0432 UI-\u043f\u043e\u0442\u043e\u043a \u0447\u0435\u0440\u0435\u0437\u00a0<em>ui.access(\u2026\u200b).<\/em> \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u043d\u0435\u0442 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u0432\u0435\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><em>ProgressBar<\/em>\u00a0\u0432 \u0440\u0435\u0436\u0438\u043c\u0435\u00a0<em>indeterminate<\/em>\u00a0&#8212;\u00a0\u0434\u0435\u0448\u0435\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433 (<em>Spring AI<\/em> \u044d\u0442\u043e \u0443\u043c\u0435\u0435\u0442), \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0442\u0435\u043c\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441\u00a0<em>Views<\/em>\u00a0&#8212;\u00a0\u0432\u043e\u0442\u00a0<a href=\"https:\/\/docs.jmix.ru\/jmix\/flow-ui\/views.html\">\u0440\u0430\u0437\u0434\u0435\u043b Views \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441<\/a>.<\/p>\n<\/li>\n<\/ul>\n<h2>\u0427\u0442\u043e \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c<\/h2>\n<p>\u041d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 <em>&#171;What\u00a0dark\u00a0roast\u00a0coffee\u00a0do\u00a0we\u00a0have\u00a0in\u00a0Hamburg?&#187;<\/em> \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043b\u043e\u0433\u00a0tool-\u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a (\u0444\u043e\u0440\u043c\u0430\u0442\u00a0warehouse=available\/quantity, \u0433\u0434\u0435\u00a0available\u00a0=\u00a0quantity\u00a0&#8212;\u00a0reserved):<\/p>\n<pre><code class=\"bash\">13:45:29\u00a0 &gt;&gt;&gt;\u00a0listWarehouses()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;&lt;&lt; 3\u00a0warehouse(s): [Hamburg\u00a0DC,\u00a0Rotterdam\u00a0DC,\u00a0Antwerp\u00a0DC]\u00a0\u00a013:45:40\u00a0 &gt;&gt;&gt;\u00a0findProducts(keyword=\"dark\u00a0roast\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;&lt;&lt; 2\u00a0match(es): [Colombia\u00a0Supremo\u00a01kg,\u00a0Espresso\u00a0blend\u00a0dark\u00a0roast\u00a01kg]\u00a0\u00a013:46:02\u00a0 &gt;&gt;&gt;\u00a0getStock(productId=\"...Colombia\u00a0Supremo...\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;&lt;&lt;\u00a0Hamburg\u00a0DC=0\/0,\u00a0Rotterdam\u00a0DC=24\/30\u00a0\u00a013:46:32\u00a0 &gt;&gt;&gt;\u00a0getStock(productId=\"...Espresso\u00a0blend...\")\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;&lt;&lt;\u00a0Rotterdam\u00a0DC=30\/40,\u00a0Hamburg\u00a0DC=15\/18<\/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 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0431\u0440\u0430\u043b\u0430 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c:<\/p>\n<blockquote>\n<p>We\u00a0have\u00a0Espresso\u00a0blend\u00a0dark\u00a0roast\u00a01kg\u00a0in\u00a0Hamburg\u00a0DC: 15\u00a0units\u00a0available\u00a0out\u00a0of\u00a018\u00a0in\u00a0stock.\u00a0Colombia\u00a0Supremo\u00a01kg\u00a0is\u00a0currently\u00a0out\u00a0of\u00a0stock\u00a0at\u00a0Hamburg\u00a0DC (available\u00a0in\u00a0Rotterdam\u00a0DC: 24\u00a0out\u00a0of\u00a030).<\/p>\n<\/blockquote>\n<p>\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435: \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u044f\u0432\u043d\u043e. \u0426\u0438\u043a\u043b &#171;\u0432\u044b\u0437\u043e\u0432\u0438\u00a0<em>tool<\/em>\u00a0&#8212;\u00a0\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u00a0&#8212;\u00a0\u0440\u0435\u0448\u0438, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435&#187; \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0441\u0430\u043c\u0438\u043c <em>Spring AI<\/em> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u0422\u0430\u0439\u043c\u0438\u043d\u0433\u0438 \u0432 \u044d\u0442\u043e\u043c\u00a0\u0432\u044b\u0437\u043e\u0432\u0435\u00a0&#8212;\u00a063 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0434\u043e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 <em>CPU<\/em> \u0431\u0435\u0437 <em>GPU \u0432\u043e\u043e\u0431\u0449\u0435<\/em>, \u0437\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0443\u043d\u0434\u0430 \u043a \u043c\u043e\u0434\u0435\u043b\u0438, \u043a\u0430\u0436\u0434\u044b\u0439 10-30 \u0441\u0435\u043a\u0443\u043d\u0434 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0434\u043b\u0438\u043d\u044b \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. (\u042d\u0442\u043e\u0442\u00a0<em>trace<\/em>\u00a0\u0441\u043d\u044f\u0442 \u043d\u0430\u00a0qwen2.5:7b;\u00a0qwen3:8b, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435, \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u00a0&#8212;\u00a0\u0443\u0437\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432\u00a0<em>inference<\/em>\u00a0\u043d\u0430 <em>CPU<\/em>, \u0430 \u043d\u0435 \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438.) \u0411\u0414 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e (\u0434\u0435\u0441\u044f\u0442\u043a\u0438\u00a0ms\u00a0\u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439\u00a0<em>tool<\/em>). \u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0441 <em>GPU<\/em> \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 <em>API<\/em> \u044d\u0442\u0438 63 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0441\u0442\u0430\u043b\u0438 \u0431\u044b\u00a05-10. \u042d\u0442\u043e \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u043e \u0442\u043e\u043c, \u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u0433\u0434\u0435 \u043d\u0435\u0442\u00a0&#8212;\u00a0\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u043d\u0438\u0436\u0435.<\/p>\n<h2>\u0413\u0434\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f<\/h2>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u0442\u0435\u0441\u044c, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0430\u0437\u0435. \u041f\u0435\u0440\u0432\u0430\u044f \u0438\u0437 \u043d\u0438\u0445\u00a0&#8212;\u00a0\u043d\u0435 \u0438\u0437 \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u0430, \u0430 \u0438\u0437 \u0447\u0435\u0441\u0442\u043d\u043e\u0433\u043e &#171;\u043f\u043e\u0434\u043d\u044f\u043b \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0432\u043e\u0442 \u044d\u0442\u043e&#187;.<\/p>\n<p><strong>\u041c\u043e\u0434\u0435\u043b\u044c \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442\u00a0<em>tool<\/em>-\u0432\u044b\u0437\u043e\u0432 \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442 \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0430<\/strong><\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043c\u043e \u0431\u044b\u043b \u043d\u0430\u00a0<em>llama3.1:8b<\/em>. \u041d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 &#171;\u0435\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u043a\u043e\u0444\u0435 \u043d\u0430 \u0441\u043a\u043b\u0430\u0434\u0430\u0445?&#187; \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u0430:<\/p>\n<blockquote>\n<p>Since\u00a0the\u00a0question\u00a0is\u00a0in\u00a0Russian\u00a0and\u00a0does\u00a0not\u00a0specify\u00a0a\u00a0city\u00a0or\u00a0product\u00a0description,\u00a0<br \/>I\u00a0will\u00a0assume\u00a0it&#8217;s\u00a0asking\u00a0for\u00a0a\u00a0general\u00a0availability\u00a0of\u00a0coffee\u00a0products.\u00a0<br \/>\u00a0<br \/>To\u00a0answer\u00a0this\u00a0question,\u00a0we\u00a0need\u00a0to\u00a0call\u00a0<code>findProducts<\/code>\u00a0with\u00a0a\u00a0keyword\u00a0&#171;\u043a\u043e\u0444\u0435&#187; (coffee)\u00a0<br \/>to\u00a0find\u00a0matching\u00a0product\u00a0IDs.\u00a0<br \/>\u00a0<br \/>{&#171;name&#187;: &#171;findProducts&#187;, &#171;parameters&#187;: {&#171;keyword&#187;: &#171;\u043a\u043e\u0444\u0435&#187;}}<\/p>\n<\/blockquote>\n<p>\u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e\u00a0tool\u00a0\u043d\u0435 \u0432\u044b\u0437\u0432\u0430\u043b\u043e\u0441\u044c. \u0421\u044b\u0440\u043e\u0439 JSON \u0443\u0448\u0451\u043b \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/p>\n<p>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e: \u043c\u043e\u0434\u0435\u043b\u044c\u00a0\u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u00a0\u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e\u00a0<em>tools<\/em>, \u043d\u043e \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c\u00a0<em>protocol<\/em>-\u0444\u043e\u0440\u043c\u0430\u0442\u0435 (<em>tool_calls<\/em>\u00a0\u0432\u00a0<em>metadata<\/em>\u00a0\u043e\u0442\u0432\u0435\u0442\u0430). <em>Spring AI<\/em> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439\u00a0<em>assistant-message<\/em>\u00a0\u0431\u0435\u0437\u00a0<em>tool-calls-\u043c\u0435\u0442\u044b<\/em> \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u042d\u0442\u043e \u043d\u0435 \u0431\u0430\u0433 <em>Spring AI<\/em> \u0438 \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u00a0\u043f\u0440\u043e\u043c\u043f\u0442\u0435. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u0430\u0431\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c:\u00a0<em>llama3.1:8b<\/em>\u00a0\u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u00a0<em>native\u00a0tool\u00a0calls<\/em>\u00a0\u0432\u00a0<em>Ollama<\/em>.<\/p>\n<p>\u041b\u0435\u0447\u0438\u0442\u0441\u044f \u0441\u043c\u0435\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438. \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u043c\u00a0<em>tool\u00a0calling<\/em>\u00a0(<em>qwen2.5:7b<\/em>\u00a0\u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442; \u0432 \u0434\u0435\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441\u00a0<em>qwen3:8b, <\/em>\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435) \u0442\u043e\u0442 \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0442\u043e\u0439 \u0436\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0447\u0430\u043b \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e: \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0437\u0432\u0430\u043b\u0430\u00a0<em>findProducts<\/em>, \u043f\u043e\u0442\u043e\u043c\u00a0<em>getStock<\/em>\u00a0\u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u043e\u0432\u0430\u0440\u043e\u0432, \u0438 \u0441\u043e\u0431\u0440\u0430\u043b\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e &#171;\u043b\u0435\u0447\u0435\u043d\u0438\u044f\u00a0\u043f\u0440\u043e\u043c\u043f\u0442\u043e\u043c&#187; \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c, \u0434\u0430 \u043e\u043d\u043e \u0431\u044b \u0438 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u0432 \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.<\/p>\n<p><strong>\u0423\u0440\u043e\u043a:<\/strong>\u00a0\u0432\u044b\u0431\u043e\u0440 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0430\u0436\u043d\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430\u00a0\u043f\u0440\u043e\u043c\u043f\u0442\u0430. \u0412 \u0434\u0435\u043c\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u00a0<em>ChatClient<\/em>\u00a0+\u00a0<em>tools<\/em>\u00a0\u0438 \u0437\u0430\u0431\u044b\u0442\u044c, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0451 \u0441\u043b\u043e\u043c\u0430\u0442\u044c \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u043e\u0434\u0435. \u0414\u043b\u044f\u00a0<em>production<\/em>\u00a0&#8212;\u00a0\u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0439\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 (OpenAI,\u00a0Anthropic, \u0445\u0430-\u0445\u0430) \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0441 \u044f\u0432\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439\u00a0<em>tool\u00a0calling<\/em>\u00a0(<em>qwen2.5,\u00a0qwen3<\/em>,\u00a0<em>llama3.x<\/em>\u00a0\u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438\u00a0<em>chat-template\u2019\u0430\u043c\u0438<\/em>). \u041e\u0431\u0449\u0430\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0438\u0437 \u043e\u043f\u044b\u0442\u0430\u00a0&#8212;\u00a0\u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043c\u043d\u043e\u0433\u043e VRAM: \u0434\u043b\u044f \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u044d\u0442\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u0438, \u0430 \u0441\u043a\u043e\u0440\u0435\u0435 &#8212; \u0441\u043e\u0442\u043d\u0438 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442.<\/p>\n<p>\u0410\u043d\u0435\u043a\u0434\u043e\u0442 \u0432\u044b\u0448\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u00a0<em>llama3.1:8b<\/em>\u00a0&#8212;\u00a0\u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b (<em>llama3.2, llama3.3<\/em>) \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443\u00a0<em>tool\u00a0calling<\/em>\u00a0\u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439. \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u0442 \u0436\u0435: \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0442\u0435\u0433\u00a0tools\u00a0\u0432\u00a0<em>Ollama<\/em>\u00a0registry\u00a0\u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<p><strong>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u0433\u0440\u0430\u0431\u043b\u0438<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u041c\u043e\u0434\u0435\u043b\u044c \u043f\u0443\u0442\u0430\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u00a0<em>tools<\/em>.<\/strong>\u00a0\u041b\u0435\u0447\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u0438\u043a\u043e\u0439 \u0432\u00a0<em>description<\/em>\u00a0\u0438 \u044f\u0432\u043d\u044b\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0432\u00a0<em>system\u00a0prompt<\/em>.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u043e\u0434\u0435\u043b\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0435\u00a0<em>ID<\/em>.<\/strong>\u00a0\u041f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0432 \u0441\u0430\u043c\u0438\u0445\u00a0<em>tool<\/em>-\u043c\u0435\u0442\u043e\u0434\u0430\u0445 (<em>UUID.fromString(productId)<\/em>\u00a0\u0431\u0440\u043e\u0441\u0438\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043c\u0443\u0441\u043e\u0440\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440) \u0438 \u044f\u0432\u043d\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0432\u00a0<em>system\u00a0prompt: &#171;Only\u00a0use\u00a0ids\u00a0returned\u00a0by\u00a0previous\u00a0tool\u00a0calls&#187;.<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0438.<\/strong> \u041c\u0435\u0442\u043e\u0434\u00a0findProducts\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 20 \u0442\u043e\u0432\u0430\u0440\u043e\u0432\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442. \u0415\u0441\u043b\u0438 \u043e\u0442\u0434\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438 500 \u0441\u0442\u0440\u043e\u043a, \u043e\u043d\u0430 \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0438\/\u0438\u043b\u0438 \u0441\u044a\u0435\u0441\u0442 \u0432\u0435\u0441\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0438 &#171;\u043f\u043e\u043f\u043b\u044b\u0432\u0451\u0442&#187;.<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 \u043d\u0430 CPU.<\/strong>\u00a0\u041c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 7-8B \u043d\u0430 <em>CPU<\/em>\u00a0&#8212;\u00a0\u043e\u0434\u0438\u043d \u043e\u0442\u0432\u0435\u0442 \u044d\u0442\u043e\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0441\u0435\u043a\u0443\u043d\u0434. \u042d\u0442\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043e\u043f\u044b\u0442. \u041c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430\u00a0&#8212;\u00a0<em>GPU<\/em> \u0441 <em>16 GB VRAM<\/em>, \u0442\u0430\u043a\u0438\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 &#171;\u0434\u0435\u0448\u0451\u0432\u044b\u043c\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430\u043c\u0438&#187;. \u0414\u043b\u044f \u043f\u0440\u043e\u0434\u0430\u00a0&#8212;\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 <em>API<\/em> \u0438\u043b\u0438 \u043c\u043d\u043e\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430 \u0443 \u0432\u0430\u0441.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0435 \u043d\u0430 \u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435.<\/strong>\u00a0\u041b\u0435\u0447\u0438\u0442\u0441\u044f \u044f\u0432\u043d\u044b\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0432\u00a0\u043f\u0440\u043e\u043c\u043f\u0442\u0435, \u043a\u0430\u043a \u043c\u044b \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438. \u041d\u0435 \u043f\u0430\u043d\u0430\u0446\u0435\u044f, \u0438\u0435\u0440\u043e\u0433\u043b\u0438\u0444\u044b \u0434\u0430\u0436\u0435 \u0443 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 &#8212; \u043d\u0435 \u0440\u0435\u0434\u043a\u043e\u0441\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<h2>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0438\u0442\u043e\u0433<\/h2>\n<p>\u041a \u043a\u043e\u043d\u0446\u0443 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u0434\u0430\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u043e \u0441\u043a\u043b\u0430\u0434 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 <em>\u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0435<\/em> \u043e\u0442\u0432\u0435\u0442\u044b. \u041d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e <em>REST<\/em>-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430, \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u044f\u0432\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u044b \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438\u00a0&#8212;\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u043d\u0430\u0431\u043e\u0440\u00a0<em>tool<\/em>-\u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<p>\u042d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 <em>CRUD<\/em> \u043d\u0435 \u043d\u0443\u0436\u0435\u043d. \u0421\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0441 \u043c\u043e\u0434\u0435\u043b\u044c\u044e, \u0434\u0430 \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c. \u041d\u043e \u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u0441 \u043c\u043d\u043e\u0433\u043e\u043c\u0435\u0440\u043d\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c (\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u0432, \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0438)\u00a0\u0430\u0433\u0435\u043d\u0442\u043d\u044b\u0439\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438:<\/p>\n<ul>\n<li>\n<p>\u0414\u0430\u0434\u0438\u043c \u0430\u0433\u0435\u043d\u0442\u0443 \u043f\u0440\u0430\u0432\u043e\u00a0<em>\u043c\u0435\u043d\u044f\u0442\u044c<\/em>\u00a0\u0434\u0430\u043d\u043d\u044b\u0435: \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u0442\u043a\u0438, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u0430\u044f\u0432\u043a\u0438 \u043d\u0430 \u043f\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c, \u043f\u043e\u0434 \u043a\u0430\u043a\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f\u00a0<em>tool<\/em>, \u043a\u043e\u0433\u0434\u0430 \u0438 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u00a0<em>SystemAuthenticator<\/em>, \u0438 \u043a\u0430\u043a\u00a0\u0430\u0443\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00a0\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043b \u0430\u0433\u0435\u043d\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0435\u0440\u0435\u043c\u00a0<em>metadata-aware<\/em>\u00a0\u043f\u0440\u043e\u043c\u043f\u0442, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u0437\u043d\u0430\u043b\u0430 \u0432\u0430\u0448\u0443 \u0434\u043e\u043c\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0431\u0435\u0437 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u0441\u0443\u0434\u0438\u043c, \u043a\u0430\u043a \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <em>LLM<\/em>, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u00a0<em>DataManager<\/em>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u00a0&#8212;\u00a0\u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b &#171;\u043a\u043e\u0433\u0434\u0430 AI-\u0430\u0433\u0435\u043d\u0442 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d&#187;, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u043d\u0435 \u0437\u0430\u0431\u0438\u0432\u0430\u0442\u044c \u0433\u0432\u043e\u0437\u0434\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c.<\/p>\n<p><strong>\u0427\u0442\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/jmix-edu\/ai-warehouse\">github.com\/jmix-edu\/ai-warehouse<\/a>\u00a0&#8212;\u00a0\u043f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0434\u0435\u043c\u043e \u043a \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><a href=\"https:\/\/docs.spring.io\/spring-ai\/reference\/\">Spring AI Reference<\/a>\u00a0&#8212;\u00a0\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Spring AI.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.infoworld.com\/article\/4150199\/spring-ai-tutorial-building-ai-agents-with-spring-ai.html\">Building AI agents with Spring AI<\/a>\u00a0&#8212;\u00a0\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f, \u0431\u0435\u0437 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.jmix.ru\/jmix\/data-access\/data-manager.html\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441: DataManager<\/a>\u00a0&#8212;\u00a0\u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0435 \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u043b\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.jmix.ru\/jmix\/security\/index.html\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441: Security<\/a>\u00a0&#8212;\u00a0\u043a\u0430\u043a \u0438 \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u00a0DataManager.<\/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\/1046868\/\">https:\/\/habr.com\/ru\/articles\/1046868\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041e\u0441\u043d\u043e\u0432\u044b\u00a0\u0438\u00a0tool-\u0432\u044b\u0437\u043e\u0432\u044b\u042d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 AI-\u0430\u0433\u0435\u043d\u0442\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441 (\u0438\u043b\u0438 Jmix, ex. CUBA) &#8212; \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 Java, \u0430\u0432\u0442\u043e\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u0432 \u043d\u0435\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f, \u0432 \u043d\u0430\u0448\u0435 \u0432\u0440\u0435\u043c\u044f \u043b\u044e\u0431\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a AI \u0434\u0430\u0441\u0442 \u0412\u0430\u043c \u0432\u0441\u044e \u043d\u0443\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u0434\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0430 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0430\u0433\u0435\u043d\u0442 \u0440\u0435\u0448\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043d\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u0435, \u0434\u0435\u0440\u0433\u0430\u0435\u0442 \u0438\u0445 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0441\u043a\u043b\u0430\u0434\u00a0&#8212;\u00a0\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439,\u00a0\u0443\u0437\u043d\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0448\u0438\u0440\u043e\u043a\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u0443\u0436\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435, \u043d\u043e \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c,\u00a0fetch\u00a0plans\u00a0\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435.\u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u043e? \u0414\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0436\u0438\u0432\u0443\u0442 \u0437\u0430 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0438 \u0444\u043e\u0440\u043c\u0430\u043c\u0438 \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438. \u042d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u043d\u0430\u0435\u0442, \u043f\u043e \u043a\u0430\u043a\u0438\u043c \u043f\u043e\u043b\u044f\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c\u00a0&#8212;\u00a0\u0438 \u043f\u043b\u043e\u0445\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u044b\u0442\u044b\u0445, \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 &#171;\u0433\u0434\u0435 \u0443 \u043d\u0430\u0441 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0444\u0435 \u0442\u0451\u043c\u043d\u043e\u0439 \u043e\u0431\u0436\u0430\u0440\u043a\u0438 \u043f\u043e \u0441\u0435\u0432\u0435\u0440\u043d\u044b\u043c \u0441\u043a\u043b\u0430\u0434\u0430\u043c?&#187;. \u041a\u043e\u0433\u0434\u0430 \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u0438 \u0440\u0443\u043a\u0430\u043c\u0438 \u0441\u0432\u0435\u0441\u0442\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, AI-\u0430\u0433\u0435\u043d\u0442\u00a0\u0434\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c\u00a0&#8212;\u00a0\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u0438\u0437 \u0431\u044d\u043a\u0435\u043d\u0434-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c.\u041f\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c? \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441\u0430 \u0430\u0433\u0435\u043d\u0442 \u0435\u0434\u0435\u0442 \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435, \u0435\u0433\u043e\u00a0tools\u00a0\u0438\u0434\u0443\u0442 \u0447\u0435\u0440\u0435\u0437\u00a0DataManager, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d \u0432\u0438\u0434\u0438\u0442 \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e\u00a0&#8212;\u00a0\u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043a \u0434\u0430\u043d\u043d\u044b\u043c, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u0445\u043e\u0434\u0430 \u043f\u0440\u0430\u0432. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0430\u0433\u0435\u043d\u0442\u0430 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u043c \u0432\u00a0enterprise-\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435, \u0438 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u00a0&#8212;\u00a0\u0441\u043a\u0432\u043e\u0437\u043d\u0430\u044f \u043d\u0438\u0442\u044c \u043e\u0431\u0435\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439.\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f\u00a0&#8212;\u00a0\u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e \u0441 Java \u0438 Spring, \u0438 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0441\u043b\u043e\u0439 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0430 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \u041c\u044b \u043d\u0435 \u0441\u043f\u043e\u0440\u0438\u043c, \u043d\u0443\u0436\u0435\u043d \u043b\u0438 \u0430\u0433\u0435\u043d\u0442 \u0432\u043e\u043e\u0431\u0449\u0435\u00a0&#8212;\u00a0\u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0431\u0443\u0434\u0435\u0442 \u0447\u0435\u0441\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b &#171;\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d&#187;\u00a0&#8212;\u00a0\u0438 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u0437\u043e\u0440 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430\u00a0\u0430\u0433\u0435\u043d\u0442\u043d\u044b\u0445\u00a0\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0437\u0430 \u0434\u0435\u043b\u043e.\u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u00a0Spring AI tutorial: Building AI agents with Spring AI\u00a0\u0438\u0437\u00a0InfoWorld. \u0422\u0430\u043c \u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Spring \u0431\u0435\u0437 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441\u00a0&#8212;\u00a0\u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c.\u041f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0434\u0435\u043c\u043e \u043b\u0435\u0436\u0438\u0442 \u0437\u0434\u0435\u0441\u044c:\u00a0https:\/\/github.com\/jmix-edu\/ai-warehouse\u00a0&#8212;\u00a0\u043c\u043e\u0436\u043d\u043e \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c.\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435\u00a0agent\u00a0loop\u00a0\u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043d\u0435 \u0447\u0430\u0442-\u0431\u043e\u0442\u0427\u0430\u0442-\u0431\u043e\u0442\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u044f: \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434, \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434. \u0412\u0441\u0435, \u0447\u0442\u043e \u043e\u043d \u0437\u043d\u0430\u0435\u0442\u00a0&#8212;\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u043e\u043c\u043f\u0442\u0435\u00a0(prompt) \u0438 \u0432 \u0432\u0435\u0441\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u0438. \u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043a \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u00a0&#8212;\u00a0\u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0447\u0430\u0442-\u0431\u043e\u0442 \u0435\u0435 \u043d\u0435 \u0440\u0435\u0448\u0438\u0442.AI-\u0430\u0433\u0435\u043d\u0442 \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0438\u043d\u0430\u0447\u0435. \u042d\u0442\u043e \u0446\u0438\u043a\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442, \u0430\u00a0\u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u00a0\u0438\u0437 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430. \u041a\u0430\u0436\u0434\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u0439 Java-\u043c\u0435\u0442\u043e\u0434, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0439 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439\u00a0@Tool\u00a0\u0438\u0437 Spring AI. \u041c\u043e\u0434\u0435\u043b\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 (tool) \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u044d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u0438 \u0446\u0438\u043a\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u0441\u043e\u0447\u0442\u0435\u0442, \u0447\u0442\u043e \u0443 \u043d\u0435\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430.\u0412 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:loop:     response = model.call(messages + system_prompt + tools_spec)     if response is final_answer:         return response.text     for tool_call in response.tool_calls:         result = invoke(tool_call.name, tool_call.arguments)         messages += tool_result(result)     if iterations &gt; MAX:         return &#171;could not finish&#187;\u042d\u0442\u043e\u0442 \u0446\u0438\u043a\u043b \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438\u00a0&#8212;\u00a0\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u00a0\u0443\u0432\u0438\u0434\u0435\u0442\u044c\u00a0\u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e Spring AI \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u00a0ChatClient.call(\u2026\u200b). \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043a\u043e\u0434.\u0426\u0438\u043a\u043b \u0440\u0443\u043a\u0430\u043c\u0438: \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430\u00a0agent\u00a0loop\u00a0\u0431\u0435\u0437 Spring AI, \u0432 \u043d\u0451\u043c \u0432\u0441\u0435\u0433\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438:Messages\u00a0&#8212;\u00a0\u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430. \u0418\u0445 \u043e\u0431\u044b\u0447\u043d\u043e \u0442\u0440\u0438 \u0442\u0438\u043f\u0430:\u00a0SystemMessage\u00a0(\u0440\u043e\u043b\u044c \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438),\u00a0UserMessage\u00a0(\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f),\u00a0AssistantMessage\u00a0(\u043e\u0442\u0432\u0435\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438; \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u00a0tool-\u0432\u044b\u0437\u043e\u0432\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u0430). \u041f\u043b\u044e\u0441\u00a0ToolMessage\u00a0&#8212;\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u00a0tool, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043a\u043b\u0430\u0434\u0451\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u0435\u0433\u043e \u0432\u0438\u0434\u0435\u043b\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438.Tools\u00a0spec\u00a0&#8212;\u00a0JSON-\u0441\u0445\u0435\u043c\u0430 \u0432\u0441\u0435\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445\u00a0tools\u00a0(\u0438\u043c\u0435\u043d\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u0442\u0438\u043f\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0445\u043e\u0434\u0438\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435.Decision\u00a0&#8212;\u00a0\u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442 \u043c\u043e\u0434\u0435\u043b\u0438: \u043b\u0438\u0431\u043e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442, \u043b\u0438\u0431\u043e \u0432\u044b\u0437\u043e\u0432\u00a0tool\u00a0\u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438.Loop\u00a0\u0441 \u043b\u0438\u043c\u0438\u0442\u043e\u043c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439\u00a0&#8212;\u00a0\u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u0430.\u0413\u0440\u0443\u0431\u043e \u0432 \u043a\u043e\u0434\u0435:record\u00a0AgentDecision(String\u00a0action,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ &#171;tool&#187; \u0438\u043b\u0438 &#171;done&#187;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0String\u00a0toolName,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Map&lt;String,\u00a0Object&gt;\u00a0arguments,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0String\u00a0finalAnswer)\u00a0{}\u00a0\u00a0public\u00a0String\u00a0run(String\u00a0userQuestion)\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0List&lt;Message&gt;\u00a0messages\u00a0=\u00a0new\u00a0ArrayList&lt;&gt;();\u00a0\u00a0\u00a0\u00a0\u00a0messages.add(new\u00a0SystemMessage(SYSTEM_PROMPT));\u00a0\u00a0\u00a0\u00a0\u00a0messages.add(new\u00a0UserMessage(userQuestion));\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for\u00a0(int\u00a0i\u00a0=\u00a00;\u00a0i\u00a0&lt;\u00a0MAX_ITERATIONS;\u00a0i++)\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ 1.\u00a0ask\u00a0the\u00a0model\u00a0with\u00a0current\u00a0history\u00a0and\u00a0tools\u00a0spec\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ChatResponse\u00a0response\u00a0=\u00a0chatModel.call(new\u00a0Prompt(messages,\u00a0withTools(toolsSpec)));\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0AssistantMessage\u00a0assistantMsg\u00a0=\u00a0response.getResult().getOutput();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0messages.add(assistantMsg);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0AgentDecision\u00a0decision\u00a0=\u00a0parseDecision(assistantMsg.getText());\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ 2. \u0413\u043e\u0442\u043e\u0432 \u043e\u0442\u0432\u0435\u0442?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if\u00a0(&#171;done&#187;.equals(decision.action()))\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0decision.finalAnswer();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ 3. \u0418\u043d\u0430\u0447\u0435\u00a0&#8212;\u00a0\u043e\u0442\u0434\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Object\u00a0result\u00a0=\u00a0invokeTool(decision.toolName(),\u00a0decision.arguments());\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0messages.add(new\u00a0ToolMessage(result.toString(),\u00a0decision.toolName()));\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0&#171;Could\u00a0not\u00a0finish\u00a0within\u00a0&#187;\u00a0+\u00a0MAX_ITERATIONS\u00a0+\u00a0&#187;\u00a0iterations.&#187;;\u00a0}\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043c\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c\u00a0&#8212;\u00a0Spring AI \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u0451 \u044d\u0442\u043e \u0441\u0430\u043c. \u041d\u043e \u0442\u0440\u0438 \u0434\u0435\u0442\u0430\u043b\u0438 \u0438\u0437 \u043d\u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0441\u0430\u043c\u044b\u0445 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0431\u0430\u0433\u0430\u0445:\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0440\u0430\u0441\u0442\u0451\u0442.\u00a0\u0412\u00a0messages\u00a0\u043a\u043e\u043f\u0438\u0442\u0441\u044f \u0432\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u0441\u0435\u0445\u00a0tools. \u0414\u043b\u0438\u043d\u043d\u044b\u0439 \u0434\u0438\u0430\u043b\u043e\u0433 \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u0438\u043c\u0438\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u0438.MAX_ITERATIONS\u00a0\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d.\u00a0\u0418\u043d\u0430\u0447\u0435 \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c. \u0423 Spring AI \u043b\u0438\u043c\u0438\u0442 \u0437\u0430\u0448\u0438\u0442 \u0432\u00a0default-\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445, \u043d\u043e \u043e\u0441\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e.\u041f\u0430\u0440\u0441\u0438\u043d\u0433\u00a0decision\u00a0\u0445\u0440\u0443\u043f\u043a\u0438\u0439.\u00a0\u0415\u0441\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u0438 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u00a0tool-\u0432\u044b\u0437\u043e\u0432 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 (\u0430 \u0441\u043b\u0430\u0431\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043b\u044e\u0431\u044f\u0442 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c JSON \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430), \u0432\u0441\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041a \u044d\u0442\u043e\u043c\u0443 \u0435\u0449\u0451 \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 &#171;\u0413\u0434\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f&#187;.\u041f\u043e\u043b\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u00a0&#8212;\u00a0\u0432\u00a0\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 Spring AI \u043d\u0430 InfoWorld. \u0414\u0430\u043b\u044c\u0448\u0435 \u0443 \u043d\u0430\u0441\u00a0&#8212;\u00a0\u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0447\u0435\u0440\u0435\u0437\u00a0ChatClient.\u0427\u0442\u043e \u043c\u044b \u0441\u0442\u0440\u043e\u0438\u043c\u0411\u0438\u0437\u043d\u0435\u0441-\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439: \u0441\u043a\u043b\u0430\u0434\u0441\u043a\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044f \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u044d\u043a\u0440\u0430\u043d\u044b \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438, \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435:&#187;Do\u00a0we\u00a0have\u00a0any\u00a0dark-roast\u00a0coffee\u00a0available\u00a0in\u00a0Hamburg?&#187;&#187;Which\u00a0warehouses\u00a0are\u00a0running\u00a0low\u00a0on\u00a0Espresso\u00a0blend?\u00a0Less\u00a0than\u00a0five\u00a0units.&#187;&#187;Show\u00a0me\u00a0products\u00a0in\u00a0the\u00a0accessories\u00a0category\u00a0that\u00a0are\u00a0out\u00a0of\u00a0stock\u00a0everywhere.&#187;\u041f\u0440\u043e \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e\u00a0\u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430\u00a0\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0442\u0432\u0435\u0442\u0430\u00a0&#8212;\u00a0\u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u043a\u043e\u043b\u043e 7B \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438 \u0432 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430\u0445 \u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f.\u0410\u0433\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d:\u041f\u043e\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441.\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u00a0tool\u00a0(\u043f\u043e\u0438\u0441\u043a \u0442\u043e\u0432\u0430\u0440\u0430 \u043f\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u043a\u043b\u0430\u0434\u043e\u0432).\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e\u00a0tools\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e.\u0421\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.UI\u00a0&#8212;\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441 View \u0441 \u043f\u043e\u043b\u0435\u043c \u0432\u0432\u043e\u0434\u0430, \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438 \u043f\u043e\u043b\u0435\u043c \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e REST-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430: \u0430\u0433\u0435\u043d\u0442 \u0434\u0435\u0440\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0438\u0437 Java \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 View.\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f\u00a0read-only\u00a0\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438. \u0417\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u044f\u0432\u043e\u043a \u043d\u0430 \u043f\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u0432\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u0435\u0442 \u0446\u0435\u043b\u044b\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u043c (\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c, \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0430\u0443\u0434\u0438\u0442), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u00a0read-only\u00a0\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0437\u0432\u0443\u0447\u0430\u0442 \u043d\u0435 \u0442\u0430\u043a \u0433\u0440\u043e\u043c\u043a\u043e.\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043f\u0440\u0435\u043a\u0442\u0430\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441-\u043f\u0440\u043e\u0435\u043a\u0442. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442\u00a0&#8212;\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441 Studio \u0447\u0435\u0440\u0435\u0437\u00a0File \u2192 New \u2192 Project \u2192\u00a0Jmix\u00a0Project; \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430\u0441 \u0442\u0443\u0442 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442. \u041d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e Full-stack\u00a0\u0414\u0436\u0435\u0439\u043c\u0438\u043a\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0421\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0435\u0441\u0442\u044c \u0432\u00a0\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.Spring AI \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 Spring Boot\u00a0starter. \u0412\u00a0build.gradle:ext\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0set(&#8216;springAiVersion&#8217;,\u00a0&#171;1.0.0&#187;)\u00a0}\u00a0\u00a0dependencies\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0implementation\u00a0&#8216;org.springframework.ai:spring-ai-starter-model-ollama&#8217;\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ &#8230; \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435\u00a0jmix-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438\u00a0}\u00a0\u00a0dependencyManagement\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0imports\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mavenBom\u00a0&#171;org.springframework.ai:spring-ai-bom:${springAiVersion}&#187;\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0}\u0417\u0434\u0435\u0441\u044c \u0441\u0442\u0430\u0440\u0442\u0435\u0440\u00a0ollama, \u0430 \u043d\u0435\u00a0openai\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440. \u0414\u043b\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0447\u0435\u0440\u0435\u0437\u00a0Ollama\u00a0\u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438 \u0438 \u0442\u043e\u043a\u0435\u043d\u044b. \u0415\u0441\u043b\u0438 \u043f\u043e\u0437\u0436\u0435 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 OpenAI,\u00a0Anthropic\u00a0\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u00a0&#8212;\u00a0\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f\u00a0starter\u00a0\u0438 \u0431\u043b\u043e\u043a\u00a0spring.ai.*\u00a0\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u0434 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u042d\u0442\u043e, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u0435\u0441\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0441\u043c\u044b\u0441\u043b Spring AI \u043a\u0430\u043a \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438.\u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e: \u043d\u0435 \u0432\u0441\u044f\u043a\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0443\u043c\u0435\u0435\u0442\u00a0\u0432 native\u00a0tool\u00a0calling, \u0438 \u0441\u043b\u0430\u0431\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0442\u0435\u0441\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c. \u041a \u043c\u043e\u043c\u0435\u043d\u0442\u0443, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0432\u044b \u0443\u0436\u0435 \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0431\u0430\u0433 \u0432 \u043a\u043e\u0434\u0435. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c\u00a0&#8212;\u00a0\u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 &#171;\u0413\u0434\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f&#187;. \u0417\u0434\u0435\u0441\u044c \u0432\u043e\u0437\u044c\u043c\u0451\u043c\u00a0qwen3:8b\u00a0&#8212;\u00a0\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u00a0tools\u00a0\u0432\u00a0Ollama, \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 5 \u0413\u0411, \u043d\u0430 CPU \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e \u0434\u043b\u044f \u0434\u0435\u043c\u043e. \u041f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0442\u0435\u0433\u00a0tools\u00a0\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u00a0Ollama\u00a0registry\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u044f\u0432\u043d\u044b\u0439 \u043c\u0430\u0440\u043a\u0435\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438\u00a0native\u00a0tool\u00a0calling, \u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u0441\u0442\u043e\u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u044b\u0439.\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u00a0application.properties:spring.ai.ollama.base-url=http:\/\/localhost:11434\u00a0spring.ai.ollama.chat.options.model=qwen3:8b\u00a0spring.ai.ollama.chat.options.think=false\u00a0spring.ai.ollama.chat.options.temperature=0.2\u041d\u0438\u0437\u043a\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0430. \u0414\u043b\u044f\u00a0\u0430\u0433\u0435\u043d\u0442\u043d\u043e\u0433\u043e\u00a0\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c\u00a0\u0432\u044b\u0431\u0438\u0440\u0430\u043b\u0430\u00a0tool\u00a0\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, \u0430 \u043d\u0435 &#171;\u043a\u0440\u0435\u0430\u0442\u0438\u0432\u0438\u043b\u0430&#187;. \u041a\u0440\u0435\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430, \u043d\u0435 \u0432 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432.\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u00a0Ollama\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e:ollama\u00a0pull\u00a0qwen3:8b\u00a0ollama\u00a0serve\u0414\u043e\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439:Product\u00a0&#8212;\u00a0\u0430\u0440\u0442\u0438\u043a\u0443\u043b, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435,&#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-483427","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/483427","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=483427"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/483427\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=483427"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=483427"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=483427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}