{"id":74621,"date":"2026-02-10T09:25:22","date_gmt":"2026-02-10T01:25:22","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/74621.html"},"modified":"2026-02-10T09:25:22","modified_gmt":"2026-02-10T01:25:22","slug":"%e9%ab%98%e7%ba%a7java%e6%af%8f%e6%97%a5%e4%b8%80%e9%81%93%e9%9d%a2%e8%af%95%e9%a2%98-2025%e5%b9%b46%e6%9c%8825%e6%97%a5-%e5%9f%ba%e7%a1%80%e7%af%87langchain4j-%e8%af%b7%e6%8f%8f%e8%bf%b0-langchain4","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/74621.html","title":{"rendered":"\u9ad8\u7ea7java\u6bcf\u65e5\u4e00\u9053\u9762\u8bd5\u9898-2025\u5e746\u670825\u65e5-\u57fa\u7840\u7bc7[LangChain4j]-\u8bf7\u63cf\u8ff0 LangChain4j \u4e2d Tool (\u5de5\u5177) \u7684\u5b9a\u4e49\u65b9\u5f0f\uff0c@Tool \u6ce8\u89e3\u6709\u54ea\u4e9b\u6838\u5fc3\u53c2\u6570\uff1f"},"content":{"rendered":"<h2>LangChain4j \u4e2d Tool \u7684\u5b9a\u4e49\u65b9\u5f0f\u4e0e &#064;Tool \u6ce8\u89e3\u8be6\u89e3<\/h2>\n<p>\u5728 LangChain4j \u4e2d&#xff0c;Tool&#xff08;\u5de5\u5177&#xff09;\u5141\u8bb8\u5927\u8bed\u8a00\u6a21\u578b\u901a\u8fc7\u51fd\u6570\u8c03\u7528\u65b9\u5f0f\u4e0e\u5916\u90e8\u7cfb\u7edf\u3001API \u6216\u4e1a\u52a1\u903b\u8f91\u8fdb\u884c\u4ea4\u4e92&#xff0c;\u8fd9\u662f\u5b9e\u73b0 AI Agent \u529f\u80fd\u7684\u5173\u952e\u7ec4\u4ef6\u3002<\/p>\n<h3>&#x1f6e0;\ufe0f Tool \u7684\u5b9a\u4e49\u65b9\u5f0f<\/h3>\n<h4>\u65b9\u5f0f1&#xff1a;\u4f7f\u7528 &#064;Tool \u6ce8\u89e3&#xff08;\u6700\u5e38\u7528&#xff09;<\/h4>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token namespace\">dev<span class=\"token punctuation\">.<\/span>langchain4j<span class=\"token punctuation\">.<\/span>agent<span class=\"token punctuation\">.<\/span>tool<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Tool<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token namespace\">org<span class=\"token punctuation\">.<\/span>springframework<span class=\"token punctuation\">.<\/span>stereotype<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Component<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token annotation punctuation\">&#064;Component<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">CalculatorTool<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;calculator&#034;<\/span><span class=\"token punctuation\">,<\/span> description <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u6267\u884c\u6570\u5b66\u8ba1\u7b97&#xff0c;\u652f\u6301\u52a0\u3001\u51cf\u3001\u4e58\u3001\u9664\u3001\u5e42\u8fd0\u7b97&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">double<\/span> <span class=\"token function\">calculate<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;Tool.Memory<\/span> <span class=\"token class-name\">String<\/span> expression<span class=\"token punctuation\">,<\/span>  <span class=\"token comment\">\/\/ \u4ece\u4e0a\u4e0b\u6587\u83b7\u53d6\u8868\u8fbe\u5f0f<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;Tool.P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8fd0\u7b97\u7c7b\u578b&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> operation<span class=\"token punctuation\">,<\/span>  <span class=\"token comment\">\/\/ \u6307\u5b9a\u53c2\u6570\u63cf\u8ff0<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;Tool.P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7b2c\u4e00\u4e2a\u6570\u5b57&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">double<\/span> num1<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;Tool.P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7b2c\u4e8c\u4e2a\u6570\u5b57&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">double<\/span> num2<br \/>\n    <span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token keyword\">switch<\/span> <span class=\"token punctuation\">(<\/span>operation<span class=\"token punctuation\">.<\/span><span class=\"token function\">toLowerCase<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">case<\/span> <span class=\"token string\">&#034;add&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#043;&#034;<\/span> <span class=\"token operator\">-&gt;<\/span> num1 <span class=\"token operator\">&#043;<\/span> num2<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">case<\/span> <span class=\"token string\">&#034;subtract&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;-&#034;<\/span> <span class=\"token operator\">-&gt;<\/span> num1 <span class=\"token operator\">&#8211;<\/span> num2<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">case<\/span> <span class=\"token string\">&#034;multiply&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;*&#034;<\/span> <span class=\"token operator\">-&gt;<\/span> num1 <span class=\"token operator\">*<\/span> num2<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">case<\/span> <span class=\"token string\">&#034;divide&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\/&#034;<\/span> <span class=\"token operator\">-&gt;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>num2 <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">throw<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">IllegalArgumentException<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u9664\u6570\u4e0d\u80fd\u4e3a\u96f6&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">yield<\/span> num1 <span class=\"token operator\">\/<\/span> num2<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token keyword\">case<\/span> <span class=\"token string\">&#034;power&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;^&#034;<\/span> <span class=\"token operator\">-&gt;<\/span> <span class=\"token class-name\">Math<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">pow<\/span><span class=\"token punctuation\">(<\/span>num1<span class=\"token punctuation\">,<\/span> num2<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">default<\/span> <span class=\"token operator\">-&gt;<\/span> <span class=\"token keyword\">throw<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">IllegalArgumentException<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u4e0d\u652f\u6301\u7684\u64cd\u4f5c: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> operation<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>\u65b9\u5f0f2&#xff1a;\u5b9e\u73b0 Tool \u63a5\u53e3&#xff08;\u66f4\u7075\u6d3b&#xff09;<\/h4>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token namespace\">dev<span class=\"token punctuation\">.<\/span>langchain4j<span class=\"token punctuation\">.<\/span>agent<span class=\"token punctuation\">.<\/span>tool<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Tool<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token namespace\">dev<span class=\"token punctuation\">.<\/span>langchain4j<span class=\"token punctuation\">.<\/span>agent<span class=\"token punctuation\">.<\/span>tool<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">ToolExecutionRequest<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token namespace\">dev<span class=\"token punctuation\">.<\/span>langchain4j<span class=\"token punctuation\">.<\/span>agent<span class=\"token punctuation\">.<\/span>tool<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">ToolSpecification<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Optional<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">WeatherTool<\/span> <span class=\"token keyword\">implements<\/span> <span class=\"token class-name\">Tool<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Override<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">String<\/span> <span class=\"token function\">id<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;weather-tool&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Override<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">ToolSpecification<\/span> <span class=\"token function\">specification<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">ToolSpecification<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">builder<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">name<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;getWeather&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">description<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u83b7\u53d6\u6307\u5b9a\u57ce\u5e02\u7684\u5929\u6c14\u4fe1\u606f&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">addParameter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;city&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;string&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u57ce\u5e02\u540d\u79f0&#xff0c;\u5982&#xff1a;\u5317\u4eac\u3001\u4e0a\u6d77&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">addParameter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;date&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;string&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u65e5\u671f&#xff0c;\u683c\u5f0f&#xff1a;YYYY-MM-DD&#xff0c;\u9ed8\u8ba4\u4e3a\u4eca\u5929&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">build<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Override<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">Optional<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> <span class=\"token function\">execute<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">ToolExecutionRequest<\/span> request<span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">Object<\/span> memoryId<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u89e3\u6790\u8bf7\u6c42\u53c2\u6570<\/span><br \/>\n        <span class=\"token class-name\">String<\/span> city <span class=\"token operator\">&#061;<\/span> request<span class=\"token punctuation\">.<\/span><span class=\"token function\">arguments<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;city&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">String<\/span> date <span class=\"token operator\">&#061;<\/span> request<span class=\"token punctuation\">.<\/span><span class=\"token function\">arguments<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getOrDefault<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;date&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;today&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u8c03\u7528\u5929\u6c14API<\/span><br \/>\n        <span class=\"token class-name\">String<\/span> weather <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">fetchWeatherFromAPI<\/span><span class=\"token punctuation\">(<\/span>city<span class=\"token punctuation\">,<\/span> date<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">Optional<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">of<\/span><span class=\"token punctuation\">(<\/span>weather<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">private<\/span> <span class=\"token class-name\">String<\/span> <span class=\"token function\">fetchWeatherFromAPI<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span> city<span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">String<\/span> date<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u5b9e\u9645\u8c03\u7528\u5929\u6c14API\u7684\u903b\u8f91<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">String<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">format<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;%s\u5728%s\u7684\u5929\u6c14&#xff1a;\u6674&#xff0c;\u6e29\u5ea620-25\u00b0C&#034;<\/span><span class=\"token punctuation\">,<\/span> city<span class=\"token punctuation\">,<\/span> date<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>\u65b9\u5f0f3&#xff1a;\u4f7f\u7528 ToolBuilder&#xff08;\u7f16\u7a0b\u5f0f\u6784\u5efa&#xff09;<\/h4>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token namespace\">dev<span class=\"token punctuation\">.<\/span>langchain4j<span class=\"token punctuation\">.<\/span>agent<span class=\"token punctuation\">.<\/span>tool<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">ToolBuilder<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>function<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Function<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">StockTool<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">Tool<\/span> <span class=\"token function\">createStockTool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">ToolBuilder<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">builder<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">name<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;getStockPrice&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">description<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u83b7\u53d6\u80a1\u7968\u5b9e\u65f6\u4ef7\u683c&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">parameter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;symbol&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;string&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u80a1\u7968\u4ee3\u7801&#xff0c;\u5982&#xff1a;AAPL, TSLA&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">execute<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>request<span class=\"token punctuation\">,<\/span> memoryId<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-&gt;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token class-name\">String<\/span> symbol <span class=\"token operator\">&#061;<\/span> request<span class=\"token punctuation\">.<\/span><span class=\"token function\">arguments<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;symbol&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">double<\/span> price <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">fetchStockPrice<\/span><span class=\"token punctuation\">(<\/span>symbol<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">Optional<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">of<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">format<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;%s\u7684\u5f53\u524d\u4ef7\u683c\u662f&#xff1a;$%.2f&#034;<\/span><span class=\"token punctuation\">,<\/span> symbol<span class=\"token punctuation\">,<\/span> price<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">build<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">double<\/span> <span class=\"token function\">fetchStockPrice<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span> symbol<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u8c03\u7528\u80a1\u7968API<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token number\">150.75<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u793a\u4f8b\u6570\u636e<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h3>&#x1f4dd; &#064;Tool \u6ce8\u89e3\u7684\u6838\u5fc3\u53c2\u6570\u8be6\u89e3<\/h3>\n<h4>1. \u57fa\u672c\u53c2\u6570<\/h4>\n<table>\n<tr>\u53c2\u6570\u7c7b\u578b\u5fc5\u586b\u9ed8\u8ba4\u503c\u63cf\u8ff0<\/tr>\n<tbody>\n<tr>\n<td>name<\/td>\n<td>String<\/td>\n<td>\u5426<\/td>\n<td>\u65b9\u6cd5\u540d<\/td>\n<td>\u5de5\u5177\u7684\u552f\u4e00\u6807\u8bc6\u7b26&#xff0c;AI \u6839\u636e\u6b64\u540d\u79f0\u8c03\u7528<\/td>\n<\/tr>\n<tr>\n<td>value<\/td>\n<td>String<\/td>\n<td>\u5426<\/td>\n<td>\u65b9\u6cd5\u540d<\/td>\n<td>name \u7684\u522b\u540d&#xff0c;\u4e0e name \u4f5c\u7528\u76f8\u540c<\/td>\n<\/tr>\n<tr>\n<td>description<\/td>\n<td>String<\/td>\n<td>\u662f<\/td>\n<td>\u65e0<\/td>\n<td>\u5de5\u5177\u529f\u80fd\u7684\u8be6\u7ec6\u63cf\u8ff0&#xff0c;AI \u6839\u636e\u63cf\u8ff0\u51b3\u5b9a\u662f\u5426\u8c03\u7528<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>2. \u65b9\u6cd5\u53c2\u6570\u6ce8\u89e3<\/h4>\n<p><span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;orderTool&#034;<\/span><span class=\"token punctuation\">,<\/span> description <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u5904\u7406\u5546\u54c1\u8ba2\u5355&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token class-name\">String<\/span> <span class=\"token function\">placeOrder<\/span><span class=\"token punctuation\">(<\/span><br \/>\n    <span class=\"token comment\">\/\/ &#064;P \u6ce8\u89e3&#xff1a;\u63d0\u4f9b\u53c2\u6570\u63cf\u8ff0<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5546\u54c1ID&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> productId<span class=\"token punctuation\">,<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ &#064;P \u6ce8\u89e3&#xff1a;\u53ef\u6307\u5b9a\u66f4\u8be6\u7ec6\u7684\u63cf\u8ff0<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u8d2d\u4e70\u6570\u91cf&#034;<\/span><span class=\"token punctuation\">,<\/span> required <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">int<\/span> quantity<span class=\"token punctuation\">,<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ &#064;Tool.Memory&#xff1a;\u4ece\u4e0a\u4e0b\u6587\u4e2d\u83b7\u53d6\u503c<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;Tool.Memory<\/span> <span class=\"token class-name\">String<\/span> customerId<span class=\"token punctuation\">,<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u9ed8\u8ba4\u503c\u5904\u7406<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u914d\u9001\u5730\u5740&#034;<\/span><span class=\"token punctuation\">,<\/span> defaultValue <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u9ed8\u8ba4\u5730\u5740&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> address<span class=\"token punctuation\">,<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u590d\u6742\u53c2\u6570\u7c7b\u578b<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8ba2\u5355\u5907\u6ce8&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">List<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> notes<br \/>\n<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u4e1a\u52a1\u903b\u8f91<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">String<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">format<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8ba2\u5355\u521b\u5efa\u6210\u529f&#xff1a;%s x %d&#034;<\/span><span class=\"token punctuation\">,<\/span> productId<span class=\"token punctuation\">,<\/span> quantity<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>3. \u9ad8\u7ea7\u914d\u7f6e\u53c2\u6570<\/h4>\n<p><span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span><br \/>\n    name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;advanced_tool&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    description <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u8fd9\u662f\u4e00\u4e2a\u9ad8\u7ea7\u5de5\u5177\u793a\u4f8b&#034;<\/span><span class=\"token punctuation\">,<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6267\u884c\u914d\u7f6e<\/span><br \/>\n    executeAsync <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span>           <span class=\"token comment\">\/\/ \u662f\u5426\u5f02\u6b65\u6267\u884c&#xff0c;\u9ed8\u8ba4false<\/span><br \/>\n    timeout <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">5000<\/span><span class=\"token punctuation\">,<\/span>                 <span class=\"token comment\">\/\/ \u8d85\u65f6\u65f6\u95f4&#xff08;\u6beb\u79d2&#xff09;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u5143\u6570\u636e<\/span><br \/>\n    tags <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;critical&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;finance&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token comment\">\/\/ \u6807\u7b7e&#xff0c;\u7528\u4e8e\u5206\u7c7b\u548c\u8fc7\u6ee4<\/span><br \/>\n    version <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;1.0.0&#034;<\/span><span class=\"token punctuation\">,<\/span>              <span class=\"token comment\">\/\/ \u7248\u672c\u53f7<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u8fd4\u56de\u7c7b\u578b\u63d0\u793a<\/span><br \/>\n    returnType <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">ReturnType<\/span><span class=\"token punctuation\">.<\/span>STRING  <span class=\"token comment\">\/\/ \u8fd4\u56de\u7c7b\u578b\u63d0\u793a<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6743\u9650\u63a7\u5236<\/span><br \/>\n    requiredPermissions <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;READ&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;WRITE&#034;<\/span><span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token class-name\">String<\/span> <span class=\"token function\">advancedOperation<\/span><span class=\"token punctuation\">(<\/span><span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8f93\u5165\u6570\u636e&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> input<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;\u5904\u7406\u7ed3\u679c: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> input<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h3>&#x1f527; Tool \u7684\u6ce8\u518c\u4e0e\u914d\u7f6e<\/h3>\n<h4>1. Spring Boot \u81ea\u52a8\u88c5\u914d<\/h4>\n<p><span class=\"token annotation punctuation\">&#064;Configuration<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ToolConfig<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Bean<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">ToolExecutor<\/span> <span class=\"token function\">toolExecutor<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token class-name\">List<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">Tool<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> tools<span class=\"token punctuation\">,<\/span>  <span class=\"token comment\">\/\/ \u81ea\u52a8\u6536\u96c6\u6240\u6709 &#064;Tool \u6ce8\u89e3\u7684 Bean<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;Value<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;${ai.tool.timeout:30000}&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">long<\/span> timeout<br \/>\n    <span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">ToolExecutor<\/span> executor <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">ToolExecutor<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">builder<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">tools<\/span><span class=\"token punctuation\">(<\/span>tools<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">timeout<\/span><span class=\"token punctuation\">(<\/span>timeout<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">build<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u6dfb\u52a0\u81ea\u5b9a\u4e49\u5de5\u5177\u5904\u7406\u5668<\/span><br \/>\n        executor<span class=\"token punctuation\">.<\/span><span class=\"token function\">addToolExecutionListener<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ToolExecutionListener<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token annotation punctuation\">&#064;Override<\/span><br \/>\n            <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">onToolExecuted<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">ToolExecutionEvent<\/span> event<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                log<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5de5\u5177 {} \u6267\u884c\u5b8c\u6210&#xff0c;\u8017\u65f6 {}ms&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    event<span class=\"token punctuation\">.<\/span><span class=\"token function\">getToolName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    event<span class=\"token punctuation\">.<\/span><span class=\"token function\">getExecutionTime<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> executor<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>2. \u624b\u52a8\u6ce8\u518c\u5de5\u5177<\/h4>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ManualToolRegistration<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">AiServices<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">Assistant<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> <span class=\"token function\">createAssistant<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">CalculatorTool<\/span> calculator <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">CalculatorTool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">WeatherTool<\/span> weather <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">WeatherTool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">AiServices<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">builder<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Assistant<\/span><span class=\"token punctuation\">.<\/span><span class=\"token keyword\">class<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">chatLanguageModel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">createChatModel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">tools<\/span><span class=\"token punctuation\">(<\/span>calculator<span class=\"token punctuation\">,<\/span> weather<span class=\"token punctuation\">)<\/span>  <span class=\"token comment\">\/\/ \u6ce8\u518c\u591a\u4e2a\u5de5\u5177<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">toolExecutor<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">createToolExecutor<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">build<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">private<\/span> <span class=\"token class-name\">ToolExecutor<\/span> <span class=\"token function\">createToolExecutor<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">ToolExecutor<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">builder<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">toolSpecificationParser<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">JsonToolSpecificationParser<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">argumentExtractor<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ReflectionArgumentExtractor<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">build<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h3>&#x1f3af; \u5b9e\u9645\u5e94\u7528\u793a\u4f8b<\/h3>\n<h4>\u793a\u4f8b1&#xff1a;\u7535\u5546\u5ba2\u670d Agent<\/h4>\n<p><span class=\"token annotation punctuation\">&#064;Service<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">CustomerServiceTools<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token class-name\">OrderRepository<\/span> orderRepository<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token class-name\">ProductService<\/span> productService<span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u67e5\u627e\u8ba2\u5355&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n          description <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u6839\u636e\u8ba2\u5355\u53f7\u6216\u5ba2\u6237\u4fe1\u606f\u67e5\u627e\u8ba2\u5355\u8be6\u60c5&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n          tags <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;order&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;customer-service&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">OrderInfo<\/span> <span class=\"token function\">findOrder<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u8ba2\u5355\u53f7&#034;<\/span><span class=\"token punctuation\">,<\/span> required <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> orderId<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u5ba2\u6237\u624b\u673a\u53f7&#034;<\/span><span class=\"token punctuation\">,<\/span> required <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> phone<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u5ba2\u6237\u90ae\u7bb1&#034;<\/span><span class=\"token punctuation\">,<\/span> required <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> email<br \/>\n    <span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u9a8c\u8bc1\u53c2\u6570<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>orderId <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">null<\/span> <span class=\"token operator\">&amp;&amp;<\/span> phone <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">null<\/span> <span class=\"token operator\">&amp;&amp;<\/span> email <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">throw<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">IllegalArgumentException<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u81f3\u5c11\u63d0\u4f9b\u4e00\u4e2a\u67e5\u8be2\u6761\u4ef6&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u67e5\u8be2\u903b\u8f91<\/span><br \/>\n        <span class=\"token class-name\">Order<\/span> order <span class=\"token operator\">&#061;<\/span> orderRepository<span class=\"token punctuation\">.<\/span><span class=\"token function\">findByCriteria<\/span><span class=\"token punctuation\">(<\/span>orderId<span class=\"token punctuation\">,<\/span> phone<span class=\"token punctuation\">,<\/span> email<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token function\">convertToOrderInfo<\/span><span class=\"token punctuation\">(<\/span>order<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u68c0\u67e5\u5e93\u5b58&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n          description <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u68c0\u67e5\u5546\u54c1\u5e93\u5b58\u72b6\u6001&#xff0c;\u8fd4\u56de\u5e93\u5b58\u6570\u91cf&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n          timeout <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">3000<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">StockInfo<\/span> <span class=\"token function\">checkStock<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5546\u54c1SKU&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> sku<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u4ed3\u5e93\u4ee3\u7801&#034;<\/span><span class=\"token punctuation\">,<\/span> defaultValue <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;WH001&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> warehouseCode<br \/>\n    <span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> quantity <span class=\"token operator\">&#061;<\/span> productService<span class=\"token punctuation\">.<\/span><span class=\"token function\">getStockQuantity<\/span><span class=\"token punctuation\">(<\/span>sku<span class=\"token punctuation\">,<\/span> warehouseCode<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">boolean<\/span> inStock <span class=\"token operator\">&#061;<\/span> quantity <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">StockInfo<\/span><span class=\"token punctuation\">(<\/span>sku<span class=\"token punctuation\">,<\/span> warehouseCode<span class=\"token punctuation\">,<\/span> quantity<span class=\"token punctuation\">,<\/span> inStock<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u5904\u7406\u9000\u8d27&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n          description <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u5904\u7406\u5ba2\u6237\u9000\u8d27\u7533\u8bf7&#xff0c;\u751f\u6210\u9000\u8d27\u5355&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">ReturnResult<\/span> <span class=\"token function\">processReturn<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8ba2\u5355\u53f7&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> orderId<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u9000\u8d27\u539f\u56e0&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">ReturnReason<\/span> reason<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5546\u54c1\u5217\u8868&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">List<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">ReturnItem<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> items<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;Tool.Memory<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;customerId&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> customerId  <span class=\"token comment\">\/\/ \u4ece\u5bf9\u8bdd\u8bb0\u5fc6\u83b7\u53d6<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u9a8c\u8bc1\u9000\u8d27\u8d44\u683c<\/span><br \/>\n        <span class=\"token function\">validateReturnEligibility<\/span><span class=\"token punctuation\">(<\/span>orderId<span class=\"token punctuation\">,<\/span> customerId<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u521b\u5efa\u9000\u8d27\u5355<\/span><br \/>\n        <span class=\"token class-name\">String<\/span> returnId <span class=\"token operator\">&#061;<\/span> returnService<span class=\"token punctuation\">.<\/span><span class=\"token function\">createReturn<\/span><span class=\"token punctuation\">(<\/span>orderId<span class=\"token punctuation\">,<\/span> reason<span class=\"token punctuation\">,<\/span> items<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ReturnResult<\/span><span class=\"token punctuation\">(<\/span>returnId<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u9000\u8d27\u7533\u8bf7\u5df2\u53d7\u7406&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>\u793a\u4f8b2&#xff1a;\u6570\u636e\u5206\u6790\u5de5\u5177<\/h4>\n<p><span class=\"token annotation punctuation\">&#064;Component<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">DataAnalysisTools<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u6570\u636e\u7edf\u8ba1&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n          description <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u5bf9\u6570\u636e\u96c6\u8fdb\u884c\u7edf\u8ba1\u5206\u6790&#xff0c;\u8fd4\u56de\u7edf\u8ba1\u6307\u6807&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">StatisticsResult<\/span> <span class=\"token function\">analyzeData<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6570\u636e\u96c6&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">List<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">Double<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> dataset<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u7edf\u8ba1\u65b9\u6cd5&#034;<\/span><span class=\"token punctuation\">,<\/span> defaultValue <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;basic&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">AnalysisMethod<\/span> method<br \/>\n    <span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">StatisticsResult<\/span> result <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">StatisticsResult<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        result<span class=\"token punctuation\">.<\/span><span class=\"token function\">setCount<\/span><span class=\"token punctuation\">(<\/span>dataset<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        result<span class=\"token punctuation\">.<\/span><span class=\"token function\">setMean<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">calculateMean<\/span><span class=\"token punctuation\">(<\/span>dataset<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        result<span class=\"token punctuation\">.<\/span><span class=\"token function\">setStdDev<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">calculateStdDev<\/span><span class=\"token punctuation\">(<\/span>dataset<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>method <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token class-name\">AnalysisMethod<\/span><span class=\"token punctuation\">.<\/span>ADVANCED<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            result<span class=\"token punctuation\">.<\/span><span class=\"token function\">setMedian<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">calculateMedian<\/span><span class=\"token punctuation\">(<\/span>dataset<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            result<span class=\"token punctuation\">.<\/span><span class=\"token function\">setPercentiles<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">calculatePercentiles<\/span><span class=\"token punctuation\">(<\/span>dataset<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> result<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u6570\u636e\u53ef\u89c6\u5316&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n          description <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u751f\u6210\u6570\u636e\u53ef\u89c6\u5316\u56fe\u8868&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n          executeAsync <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token comment\">\/\/ \u5f02\u6b65\u6267\u884c&#xff0c;\u907f\u514d\u963b\u585e<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">VisualizationResult<\/span> <span class=\"token function\">visualize<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6570\u636e\u96c6&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">Map<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">Object<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> data<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u56fe\u8868\u7c7b\u578b&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">ChartType<\/span> chartType<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u6837\u5f0f\u914d\u7f6e&#034;<\/span><span class=\"token punctuation\">,<\/span> required <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">StyleConfig<\/span> style<br \/>\n    <span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u5f02\u6b65\u751f\u6210\u56fe\u8868<\/span><br \/>\n        <span class=\"token class-name\">CompletableFuture<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> chartFuture <span class=\"token operator\">&#061;<\/span> chartService<span class=\"token punctuation\">.<\/span><span class=\"token function\">generateAsync<\/span><span class=\"token punctuation\">(<\/span><br \/>\n            data<span class=\"token punctuation\">,<\/span> chartType<span class=\"token punctuation\">,<\/span> style<br \/>\n        <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u8fd4\u56de\u4efb\u52a1ID&#xff0c;\u652f\u6301\u67e5\u8be2\u8fdb\u5ea6<\/span><br \/>\n        <span class=\"token class-name\">String<\/span> taskId <span class=\"token operator\">&#061;<\/span> taskManager<span class=\"token punctuation\">.<\/span><span class=\"token function\">createTask<\/span><span class=\"token punctuation\">(<\/span>chartFuture<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">VisualizationResult<\/span><span class=\"token punctuation\">(<\/span>taskId<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u56fe\u8868\u751f\u6210\u4efb\u52a1\u5df2\u63d0\u4ea4&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>\u793a\u4f8b3&#xff1a;\u591a\u6b65\u9aa4\u590d\u6742\u5de5\u5177<\/h4>\n<p><span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u65c5\u884c\u89c4\u5212&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n      description <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u89c4\u5212\u5b8c\u6574\u7684\u65c5\u884c\u884c\u7a0b&#xff0c;\u5305\u62ec\u4ea4\u901a\u3001\u4f4f\u5bbf\u3001\u666f\u70b9&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token class-name\">TravelPlan<\/span> <span class=\"token function\">planTravel<\/span><span class=\"token punctuation\">(<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u76ee\u7684\u5730&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> destination<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u51fa\u53d1\u65e5\u671f&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">LocalDate<\/span> startDate<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7ed3\u675f\u65e5\u671f&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">LocalDate<\/span> endDate<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u65c5\u884c\u4eba\u6570&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">int<\/span> travelers<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u9884\u7b97&#034;<\/span><span class=\"token punctuation\">,<\/span> defaultValue <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;10000&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">double<\/span> budget<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u504f\u597d&#034;<\/span><span class=\"token punctuation\">,<\/span> required <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">TravelPreference<\/span> preference<br \/>\n<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u7b2c\u4e00\u6b65&#xff1a;\u83b7\u53d6\u76ee\u7684\u5730\u4fe1\u606f<\/span><br \/>\n    <span class=\"token class-name\">DestinationInfo<\/span> destInfo <span class=\"token operator\">&#061;<\/span> destinationService<span class=\"token punctuation\">.<\/span><span class=\"token function\">getInfo<\/span><span class=\"token punctuation\">(<\/span>destination<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7b2c\u4e8c\u6b65&#xff1a;\u67e5\u627e\u822a\u73ed<\/span><br \/>\n    <span class=\"token class-name\">List<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">FlightOption<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> flights <span class=\"token operator\">&#061;<\/span> flightService<span class=\"token punctuation\">.<\/span><span class=\"token function\">searchFlights<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token string\">&#034;current_city&#034;<\/span><span class=\"token punctuation\">,<\/span> destination<span class=\"token punctuation\">,<\/span> startDate<span class=\"token punctuation\">,<\/span> travelers<br \/>\n    <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7b2c\u4e09\u6b65&#xff1a;\u67e5\u627e\u9152\u5e97<\/span><br \/>\n    <span class=\"token class-name\">List<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">HotelOption<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> hotels <span class=\"token operator\">&#061;<\/span> hotelService<span class=\"token punctuation\">.<\/span><span class=\"token function\">searchHotels<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        destination<span class=\"token punctuation\">,<\/span> startDate<span class=\"token punctuation\">,<\/span> endDate<span class=\"token punctuation\">,<\/span> travelers<span class=\"token punctuation\">,<\/span> budget<span class=\"token operator\">\/<\/span><span class=\"token number\">3<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7b2c\u56db\u6b65&#xff1a;\u751f\u6210\u666f\u70b9\u63a8\u8350<\/span><br \/>\n    <span class=\"token class-name\">List<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">Attraction<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> attractions <span class=\"token operator\">&#061;<\/span> attractionService<span class=\"token punctuation\">.<\/span><span class=\"token function\">recommend<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        destination<span class=\"token punctuation\">,<\/span> preference<br \/>\n    <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7b2c\u4e94\u6b65&#xff1a;\u751f\u6210\u6bcf\u65e5\u884c\u7a0b<\/span><br \/>\n    <span class=\"token class-name\">List<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">DailySchedule<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> schedule <span class=\"token operator\">&#061;<\/span> itineraryPlanner<span class=\"token punctuation\">.<\/span><span class=\"token function\">createSchedule<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        attractions<span class=\"token punctuation\">,<\/span> startDate<span class=\"token punctuation\">,<\/span> endDate<br \/>\n    <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7b2c\u516d\u6b65&#xff1a;\u8ba1\u7b97\u603b\u8d39\u7528<\/span><br \/>\n    <span class=\"token keyword\">double<\/span> totalCost <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">calculateTotalCost<\/span><span class=\"token punctuation\">(<\/span>flights<span class=\"token punctuation\">,<\/span> hotels<span class=\"token punctuation\">,<\/span> attractions<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">TravelPlan<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">builder<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token function\">destination<\/span><span class=\"token punctuation\">(<\/span>destination<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token function\">duration<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Duration<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">between<\/span><span class=\"token punctuation\">(<\/span>startDate<span class=\"token punctuation\">,<\/span> endDate<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token function\">flights<\/span><span class=\"token punctuation\">(<\/span>flights<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token function\">hotels<\/span><span class=\"token punctuation\">(<\/span>hotels<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token function\">attractions<\/span><span class=\"token punctuation\">(<\/span>attractions<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token function\">dailySchedules<\/span><span class=\"token punctuation\">(<\/span>schedule<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token function\">totalCost<\/span><span class=\"token punctuation\">(<\/span>totalCost<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token function\">budgetStatus<\/span><span class=\"token punctuation\">(<\/span>totalCost <span class=\"token operator\">&lt;&#061;<\/span> budget <span class=\"token operator\">?<\/span> <span class=\"token string\">&#034;\u5728\u9884\u7b97\u5185&#034;<\/span> <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;\u8d85\u51fa\u9884\u7b97&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token function\">build<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h3>\u2699\ufe0f \u914d\u7f6e\u4e0e\u4f18\u5316<\/h3>\n<h4>1. \u5168\u5c40\u914d\u7f6e<\/h4>\n<p><span class=\"token comment\"># application.yml<\/span><br \/>\n<span class=\"token key atrule\">langchain4j<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token key atrule\">tools<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">enabled<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span><br \/>\n    <span class=\"token key atrule\">auto-registration<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span><br \/>\n    <span class=\"token key atrule\">execution<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">timeout<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">10000<\/span>  <span class=\"token comment\"># 10\u79d2\u8d85\u65f6<\/span><br \/>\n      <span class=\"token key atrule\">max-retries<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">3<\/span><br \/>\n      <span class=\"token key atrule\">retry-delay<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">1000<\/span><br \/>\n    <span class=\"token key atrule\">security<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">enable-whitelist<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span><br \/>\n      <span class=\"token key atrule\">allowed-tools<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token punctuation\">&#8211;<\/span> calculator<br \/>\n        <span class=\"token punctuation\">&#8211;<\/span> weather<br \/>\n        <span class=\"token punctuation\">&#8211;<\/span> stock<\/p>\n<h4>2. \u6027\u80fd\u4f18\u5316\u914d\u7f6e<\/h4>\n<p><span class=\"token annotation punctuation\">&#064;Configuration<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ToolPerformanceConfig<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Bean<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;Primary<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">ToolExecutor<\/span> <span class=\"token function\">toolExecutor<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">ToolExecutor<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">builder<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">cacheManager<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">createCacheManager<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token comment\">\/\/ \u6dfb\u52a0\u7f13\u5b58<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">rateLimiter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">createRateLimiter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>    <span class=\"token comment\">\/\/ \u6dfb\u52a0\u9650\u6d41<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">circuitBreaker<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">createCircuitBreaker<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token comment\">\/\/ \u6dfb\u52a0\u7194\u65ad<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">monitor<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">createMonitor<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>            <span class=\"token comment\">\/\/ \u6dfb\u52a0\u76d1\u63a7<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">build<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">private<\/span> <span class=\"token class-name\">CacheManager<\/span> <span class=\"token function\">createCacheManager<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">CacheManager<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">builder<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">maximumSize<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1000<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">expireAfterWrite<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">TimeUnit<\/span><span class=\"token punctuation\">.<\/span>MINUTES<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">recordStats<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">.<\/span><span class=\"token function\">build<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">private<\/span> <span class=\"token class-name\">RateLimiter<\/span> <span class=\"token function\">createRateLimiter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">RateLimiter<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">create<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>  <span class=\"token comment\">\/\/ \u6bcf\u79d2100\u4e2a\u8bf7\u6c42<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>3. \u9519\u8bef\u5904\u7406<\/h4>\n<p><span class=\"token annotation punctuation\">&#064;Slf4j<\/span><br \/>\n<span class=\"token annotation punctuation\">&#064;Component<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">GlobalToolErrorHandler<\/span> <span class=\"token keyword\">implements<\/span> <span class=\"token class-name\">ToolExecutionErrorHandler<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Override<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">Optional<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> <span class=\"token function\">handleError<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">ToolExecutionRequest<\/span> request<span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">Throwable<\/span> error<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        log<span class=\"token punctuation\">.<\/span><span class=\"token function\">error<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5de5\u5177\u6267\u884c\u5931\u8d25: {}&#034;<\/span><span class=\"token punctuation\">,<\/span> request<span class=\"token punctuation\">.<\/span><span class=\"token function\">name<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> error<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u6839\u636e\u9519\u8bef\u7c7b\u578b\u8fd4\u56de\u4e0d\u540c\u7684\u63d0\u793a<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>error <span class=\"token keyword\">instanceof<\/span> <span class=\"token class-name\">IllegalArgumentException<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">Optional<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">of<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u53c2\u6570\u9519\u8bef: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> error<span class=\"token punctuation\">.<\/span><span class=\"token function\">getMessage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>error <span class=\"token keyword\">instanceof<\/span> <span class=\"token class-name\">TimeoutException<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">Optional<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">of<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5de5\u5177\u6267\u884c\u8d85\u65f6&#xff0c;\u8bf7\u7a0d\u540e\u91cd\u8bd5&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>error <span class=\"token keyword\">instanceof<\/span> <span class=\"token class-name\">RateLimitExceededException<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">Optional<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">of<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8bf7\u6c42\u8fc7\u4e8e\u9891\u7e41&#xff0c;\u8bf7\u7a0d\u540e\u518d\u8bd5&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u751f\u4ea7\u73af\u5883\u9690\u85cf\u5177\u4f53\u9519\u8bef<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">Optional<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">of<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7cfb\u7edf\u7e41\u5fd9&#xff0c;\u8bf7\u7a0d\u540e\u91cd\u8bd5&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h3>&#x1f50d; \u6700\u4f73\u5b9e\u8df5<\/h3>\n<h4>1. \u5de5\u5177\u8bbe\u8ba1\u539f\u5219<\/h4>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ToolDesignPrinciples<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u539f\u52191&#xff1a;\u5355\u4e00\u804c\u8d23<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u5355\u4e00\u529f\u80fd\u5de5\u5177&#034;<\/span><span class=\"token punctuation\">,<\/span> description <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u6bcf\u4e2a\u5de5\u5177\u53ea\u505a\u4e00\u4ef6\u4e8b&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">String<\/span> <span class=\"token function\">doOneThingWell<\/span><span class=\"token punctuation\">(<\/span><span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8f93\u5165&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> input<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ &#8230;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u539f\u52192&#xff1a;\u53c2\u6570\u9a8c\u8bc1<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u5e26\u9a8c\u8bc1\u7684\u5de5\u5177&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">Result<\/span> <span class=\"token function\">validatedTool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7528\u6237ID&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> userId<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">StringUtils<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">isBlank<\/span><span class=\"token punctuation\">(<\/span>userId<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">throw<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ValidationException<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7528\u6237ID\u4e0d\u80fd\u4e3a\u7a7a&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token comment\">\/\/ &#8230;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u539f\u52193&#xff1a;\u6587\u6863\u5b8c\u6574<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;well_documented&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        description <span class=\"token operator\">&#061;<\/span> <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;<br \/>\n            \u8fd9\u662f\u4e00\u4e2a\u6587\u6863\u5b8c\u6574\u7684\u5de5\u5177\u3002<br \/>\n            \u529f\u80fd&#xff1a;\u8ba1\u7b97\u4e24\u4e2a\u6570\u7684\u548c\u3002<br \/>\n            \u6ce8\u610f&#xff1a;\u4ec5\u652f\u6301\u6574\u6570\u8fd0\u7b97\u3002<br \/>\n            \u793a\u4f8b&#xff1a;\u8f93\u5165(5, 3)\u8fd4\u56de8\u3002<br \/>\n            &#034;&#034;&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        tags <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;math&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;basic&#034;<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">int<\/span> <span class=\"token function\">add<\/span><span class=\"token punctuation\">(<\/span><span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7b2c\u4e00\u4e2a\u52a0\u6570&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">int<\/span> a<span class=\"token punctuation\">,<\/span> <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7b2c\u4e8c\u4e2a\u52a0\u6570&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">int<\/span> b<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> a <span class=\"token operator\">&#043;<\/span> b<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>2. \u5b89\u5168\u6027\u8003\u8651<\/h4>\n<p><span class=\"token annotation punctuation\">&#064;Component<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">SecureTools<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;PreAuthorize<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;hasRole(&#039;USER&#039;)&#034;<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token comment\">\/\/ Spring Security \u96c6\u6210<\/span><br \/>\n    <span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u654f\u611f\u64cd\u4f5c&#034;<\/span><span class=\"token punctuation\">,<\/span> description <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u9700\u8981\u6743\u9650\u9a8c\u8bc1\u7684\u64cd\u4f5c&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">String<\/span> <span class=\"token function\">sensitiveOperation<\/span><span class=\"token punctuation\">(<\/span><span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6570\u636e&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token class-name\">String<\/span> data<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u9700\u8981\u7528\u6237\u8ba4\u8bc1<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;\u64cd\u4f5c\u6210\u529f&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Tool<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u8f93\u5165\u51c0\u5316\u5de5\u5177&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">String<\/span> <span class=\"token function\">sanitizedOperation<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;P<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7528\u6237\u8f93\u5165&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token annotation punctuation\">&#064;Sanitize<\/span><span class=\"token punctuation\">(<\/span>type <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">SanitizeType<\/span><span class=\"token punctuation\">.<\/span>HTML<span class=\"token punctuation\">)<\/span>  <span class=\"token comment\">\/\/ \u9632\u6b62XSS<\/span><br \/>\n        <span class=\"token class-name\">String<\/span> userInput<br \/>\n    <span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u8f93\u5165\u5df2\u81ea\u52a8\u51c0\u5316<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token function\">process<\/span><span class=\"token punctuation\">(<\/span>userInput<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h3>&#x1f4ca; \u8c03\u8bd5\u4e0e\u76d1\u63a7<\/h3>\n<h4>1. \u5de5\u5177\u8c03\u7528\u65e5\u5fd7<\/h4>\n<p><span class=\"token annotation punctuation\">&#064;Aspect<\/span><br \/>\n<span class=\"token annotation punctuation\">&#064;Component<\/span><br \/>\n<span class=\"token annotation punctuation\">&#064;Slf4j<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ToolLoggingAspect<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Around<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#064;annotation(dev.langchain4j.agent.tool.Tool)&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">Object<\/span> <span class=\"token function\">logToolExecution<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">ProceedingJoinPoint<\/span> joinPoint<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">throws<\/span> <span class=\"token class-name\">Throwable<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">Method<\/span> method <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">MethodSignature<\/span><span class=\"token punctuation\">)<\/span> joinPoint<span class=\"token punctuation\">.<\/span><span class=\"token function\">getSignature<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getMethod<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">Tool<\/span> toolAnnotation <span class=\"token operator\">&#061;<\/span> method<span class=\"token punctuation\">.<\/span><span class=\"token function\">getAnnotation<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Tool<\/span><span class=\"token punctuation\">.<\/span><span class=\"token keyword\">class<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">long<\/span> startTime <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">currentTimeMillis<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">try<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token class-name\">Object<\/span> result <span class=\"token operator\">&#061;<\/span> joinPoint<span class=\"token punctuation\">.<\/span><span class=\"token function\">proceed<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">long<\/span> duration <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">currentTimeMillis<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> startTime<span class=\"token punctuation\">;<\/span><\/p>\n<p>            log<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5de5\u5177\u6267\u884c\u6210\u529f &#8211; \u5de5\u5177: {}, \u8017\u65f6: {}ms&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                toolAnnotation<span class=\"token punctuation\">.<\/span><span class=\"token function\">name<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> duration<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>            <span class=\"token keyword\">return<\/span> result<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">catch<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Exception<\/span> e<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            log<span class=\"token punctuation\">.<\/span><span class=\"token function\">error<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5de5\u5177\u6267\u884c\u5931\u8d25 &#8211; \u5de5\u5177: {}&#034;<\/span><span class=\"token punctuation\">,<\/span> toolAnnotation<span class=\"token punctuation\">.<\/span><span class=\"token function\">name<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">throw<\/span> e<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>2. \u76d1\u63a7\u6307\u6807<\/h4>\n<p><span class=\"token annotation punctuation\">&#064;Component<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ToolMetrics<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token class-name\">MeterRegistry<\/span> meterRegistry<span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;EventListener<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">handleToolExecution<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">ToolExecutionEvent<\/span> event<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u8bb0\u5f55\u6267\u884c\u65f6\u95f4<\/span><br \/>\n        meterRegistry<span class=\"token punctuation\">.<\/span><span class=\"token function\">timer<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;tool.execution.time&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;tool&#034;<\/span><span class=\"token punctuation\">,<\/span> event<span class=\"token punctuation\">.<\/span><span class=\"token function\">getToolName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">,<\/span> event<span class=\"token punctuation\">.<\/span><span class=\"token function\">isSuccess<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">?<\/span> <span class=\"token string\">&#034;success&#034;<\/span> <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;error&#034;<\/span><br \/>\n        <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token keyword\">record<\/span><span class=\"token punctuation\">(<\/span>event<span class=\"token punctuation\">.<\/span><span class=\"token function\">getExecutionTime<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">TimeUnit<\/span><span class=\"token punctuation\">.<\/span>MILLISECONDS<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u8bb0\u5f55\u8c03\u7528\u6b21\u6570<\/span><br \/>\n        meterRegistry<span class=\"token punctuation\">.<\/span><span class=\"token function\">counter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;tool.execution.count&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;tool&#034;<\/span><span class=\"token punctuation\">,<\/span> event<span class=\"token punctuation\">.<\/span><span class=\"token function\">getToolName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">increment<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h3>&#x1f3af; \u603b\u7ed3<\/h3>\n<h4>&#064;Tool \u6ce8\u89e3\u6838\u5fc3\u53c2\u6570\u56de\u987e<\/h4>\n<li>name\/value &#8211; \u5de5\u5177\u6807\u8bc6\u7b26<\/li>\n<li>description &#8211; \u529f\u80fd\u63cf\u8ff0&#xff08;\u6700\u91cd\u8981\u7684\u53c2\u6570&#xff09;<\/li>\n<li>tags &#8211; \u5206\u7c7b\u6807\u7b7e<\/li>\n<li>executeAsync &#8211; \u5f02\u6b65\u6267\u884c\u5f00\u5173<\/li>\n<li>timeout &#8211; \u8d85\u65f6\u8bbe\u7f6e<\/li>\n<li>returnType &#8211; \u8fd4\u56de\u7c7b\u578b\u63d0\u793a<\/li>\n<h4>\u5de5\u5177\u8bbe\u8ba1\u8981\u70b9<\/h4>\n<li>\u6e05\u6670\u7684\u63cf\u8ff0&#xff1a;AI \u4f9d\u8d56\u63cf\u8ff0\u7406\u89e3\u5de5\u5177\u529f\u80fd<\/li>\n<li>\u5408\u7406\u7684\u53c2\u6570\u8bbe\u8ba1&#xff1a;\u4f7f\u7528 &#064;P \u6ce8\u89e3\u63d0\u4f9b\u53c2\u6570\u8bf4\u660e<\/li>\n<li>\u9519\u8bef\u5904\u7406&#xff1a;\u4f18\u96c5\u5904\u7406\u5f02\u5e38\u5e76\u63d0\u4f9b\u6709\u7528\u53cd\u9988<\/li>\n<li>\u6027\u80fd\u8003\u8651&#xff1a;\u8bbe\u7f6e\u9002\u5f53\u7684\u8d85\u65f6\u548c\u5f02\u6b65\u6267\u884c<\/li>\n<li>\u5b89\u5168\u6027&#xff1a;\u9a8c\u8bc1\u8f93\u5165&#xff0c;\u63a7\u5236\u8bbf\u95ee\u6743\u9650<\/li>\n<p>\u901a\u8fc7\u5408\u7406\u4f7f\u7528 Tool \u548c &#064;Tool \u6ce8\u89e3&#xff0c;\u4f60\u53ef\u4ee5\u8ba9 AI \u6a21\u578b\u5177\u5907\u8c03\u7528\u5916\u90e8\u670d\u52a1\u3001\u6267\u884c\u4e1a\u52a1\u903b\u8f91\u7684\u80fd\u529b&#xff0c;\u4ece\u800c\u6784\u5efa\u51fa\u529f\u80fd\u5f3a\u5927\u7684 AI Agent \u5e94\u7528\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>LangChain4j \u4e2d Tool \u7684\u5b9a\u4e49\u65b9\u5f0f\u4e0e Tool \u6ce8\u89e3\u8be6\u89e3<br \/>\n\u5728 LangChain4j \u4e2d&#xff0c;Tool&#xff08;\u5de5\u5177&#xff09;\u5141\u8bb8\u5927\u8bed\u8a00\u6a21\u578b\u901a\u8fc7\u51fd\u6570\u8c03\u7528\u65b9\u5f0f\u4e0e\u5916\u90e8\u7cfb\u7edf\u3001API \u6216\u4e1a\u52a1\u903b\u8f91\u8fdb\u884c\u4ea4\u4e92&#xff0c;\u8fd9\u662f\u5b9e\u73b0 AI Agent \u529f\u80fd\u7684\u5173\u952e\u7ec4\u4ef6\u3002<br \/>\n&#x1f6e0;\ufe0f Tool \u7684\u5b9a\u4e49\u65b9\u5f0f<br \/>\n\u65b9\u5f0f1&#xff1a;\u4f7f\u7528 Tool \u6ce8\u89e3&#xff08;\u6700\u5e38\u7528&#xff09;<br \/>\nimport dev.langchain4j.agen<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[7900,7899,7903,7901,7904,7902,99],"topic":[],"class_list":{"0":"post-74621","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"hentry","6":"category-server","7":"tag-tool-","10":"tag-toolbuilder","11":"tag-7904","12":"tag-7902","13":"tag-java"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u9ad8\u7ea7java\u6bcf\u65e5\u4e00\u9053\u9762\u8bd5\u9898-2025\u5e746\u670825\u65e5-\u57fa\u7840\u7bc7[LangChain4j]-\u8bf7\u63cf\u8ff0 LangChain4j \u4e2d Tool (\u5de5\u5177) \u7684\u5b9a\u4e49\u65b9\u5f0f\uff0c@Tool \u6ce8\u89e3\u6709\u54ea\u4e9b\u6838\u5fc3\u53c2\u6570\uff1f - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/74621.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u9ad8\u7ea7java\u6bcf\u65e5\u4e00\u9053\u9762\u8bd5\u9898-2025\u5e746\u670825\u65e5-\u57fa\u7840\u7bc7[LangChain4j]-\u8bf7\u63cf\u8ff0 LangChain4j \u4e2d Tool (\u5de5\u5177) \u7684\u5b9a\u4e49\u65b9\u5f0f\uff0c@Tool \u6ce8\u89e3\u6709\u54ea\u4e9b\u6838\u5fc3\u53c2\u6570\uff1f - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"LangChain4j \u4e2d Tool \u7684\u5b9a\u4e49\u65b9\u5f0f\u4e0e Tool \u6ce8\u89e3\u8be6\u89e3 \u5728 LangChain4j \u4e2d&#xff0c;Tool&#xff08;\u5de5\u5177&#xff09;\u5141\u8bb8\u5927\u8bed\u8a00\u6a21\u578b\u901a\u8fc7\u51fd\u6570\u8c03\u7528\u65b9\u5f0f\u4e0e\u5916\u90e8\u7cfb\u7edf\u3001API \u6216\u4e1a\u52a1\u903b\u8f91\u8fdb\u884c\u4ea4\u4e92&#xff0c;\u8fd9\u662f\u5b9e\u73b0 AI Agent \u529f\u80fd\u7684\u5173\u952e\u7ec4\u4ef6\u3002 &#x1f6e0;\ufe0f Tool \u7684\u5b9a\u4e49\u65b9\u5f0f \u65b9\u5f0f1&#xff1a;\u4f7f\u7528 Tool \u6ce8\u89e3&#xff08;\u6700\u5e38\u7528&#xff09; import dev.langchain4j.agen\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/74621.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-10T01:25:22+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/74621.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/74621.html\",\"name\":\"\u9ad8\u7ea7java\u6bcf\u65e5\u4e00\u9053\u9762\u8bd5\u9898-2025\u5e746\u670825\u65e5-\u57fa\u7840\u7bc7[LangChain4j]-\u8bf7\u63cf\u8ff0 LangChain4j \u4e2d Tool (\u5de5\u5177) \u7684\u5b9a\u4e49\u65b9\u5f0f\uff0c@Tool \u6ce8\u89e3\u6709\u54ea\u4e9b\u6838\u5fc3\u53c2\u6570\uff1f - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-02-10T01:25:22+00:00\",\"dateModified\":\"2026-02-10T01:25:22+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/74621.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/74621.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/74621.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u9ad8\u7ea7java\u6bcf\u65e5\u4e00\u9053\u9762\u8bd5\u9898-2025\u5e746\u670825\u65e5-\u57fa\u7840\u7bc7[LangChain4j]-\u8bf7\u63cf\u8ff0 LangChain4j \u4e2d Tool (\u5de5\u5177) \u7684\u5b9a\u4e49\u65b9\u5f0f\uff0c@Tool \u6ce8\u89e3\u6709\u54ea\u4e9b\u6838\u5fc3\u53c2\u6570\uff1f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u9ad8\u7ea7java\u6bcf\u65e5\u4e00\u9053\u9762\u8bd5\u9898-2025\u5e746\u670825\u65e5-\u57fa\u7840\u7bc7[LangChain4j]-\u8bf7\u63cf\u8ff0 LangChain4j \u4e2d Tool (\u5de5\u5177) \u7684\u5b9a\u4e49\u65b9\u5f0f\uff0c@Tool \u6ce8\u89e3\u6709\u54ea\u4e9b\u6838\u5fc3\u53c2\u6570\uff1f - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/74621.html","og_locale":"zh_CN","og_type":"article","og_title":"\u9ad8\u7ea7java\u6bcf\u65e5\u4e00\u9053\u9762\u8bd5\u9898-2025\u5e746\u670825\u65e5-\u57fa\u7840\u7bc7[LangChain4j]-\u8bf7\u63cf\u8ff0 LangChain4j \u4e2d Tool (\u5de5\u5177) \u7684\u5b9a\u4e49\u65b9\u5f0f\uff0c@Tool \u6ce8\u89e3\u6709\u54ea\u4e9b\u6838\u5fc3\u53c2\u6570\uff1f - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"LangChain4j \u4e2d Tool \u7684\u5b9a\u4e49\u65b9\u5f0f\u4e0e Tool \u6ce8\u89e3\u8be6\u89e3 \u5728 LangChain4j \u4e2d&#xff0c;Tool&#xff08;\u5de5\u5177&#xff09;\u5141\u8bb8\u5927\u8bed\u8a00\u6a21\u578b\u901a\u8fc7\u51fd\u6570\u8c03\u7528\u65b9\u5f0f\u4e0e\u5916\u90e8\u7cfb\u7edf\u3001API \u6216\u4e1a\u52a1\u903b\u8f91\u8fdb\u884c\u4ea4\u4e92&#xff0c;\u8fd9\u662f\u5b9e\u73b0 AI Agent \u529f\u80fd\u7684\u5173\u952e\u7ec4\u4ef6\u3002 &#x1f6e0;\ufe0f Tool \u7684\u5b9a\u4e49\u65b9\u5f0f \u65b9\u5f0f1&#xff1a;\u4f7f\u7528 Tool \u6ce8\u89e3&#xff08;\u6700\u5e38\u7528&#xff09; import dev.langchain4j.agen","og_url":"https:\/\/www.wsisp.com\/helps\/74621.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-02-10T01:25:22+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"6 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/74621.html","url":"https:\/\/www.wsisp.com\/helps\/74621.html","name":"\u9ad8\u7ea7java\u6bcf\u65e5\u4e00\u9053\u9762\u8bd5\u9898-2025\u5e746\u670825\u65e5-\u57fa\u7840\u7bc7[LangChain4j]-\u8bf7\u63cf\u8ff0 LangChain4j \u4e2d Tool (\u5de5\u5177) \u7684\u5b9a\u4e49\u65b9\u5f0f\uff0c@Tool \u6ce8\u89e3\u6709\u54ea\u4e9b\u6838\u5fc3\u53c2\u6570\uff1f - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-02-10T01:25:22+00:00","dateModified":"2026-02-10T01:25:22+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/74621.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/74621.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/74621.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"\u9ad8\u7ea7java\u6bcf\u65e5\u4e00\u9053\u9762\u8bd5\u9898-2025\u5e746\u670825\u65e5-\u57fa\u7840\u7bc7[LangChain4j]-\u8bf7\u63cf\u8ff0 LangChain4j \u4e2d Tool (\u5de5\u5177) \u7684\u5b9a\u4e49\u65b9\u5f0f\uff0c@Tool \u6ce8\u89e3\u6709\u54ea\u4e9b\u6838\u5fc3\u53c2\u6570\uff1f"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/74621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=74621"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/74621\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=74621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=74621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=74621"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=74621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}