PageSourceSearch

https://java2ai.com/assets/js/a35ff939.a765b621.js

js java2ai.com collected 2026-10-03 21:35:01 UTC 38,084 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkspring_ai_alibaba_website=self.webpackChunkspring_ai_alibaba_website||[]).push([[3981],{28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>l});var r=t(96540);const a={},i=r.createContext(a);function s(e){const n=r.useContext(i);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(i.Provider,{value:n},e.children)}},39243:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"assistantagent/secondary-development","title":"\u4e8c\u6b21\u5f00\u53d1\u8be6\u7ec6\u6307\u5357","description":"Assistant Agent \u4e8c\u6b21\u5f00\u53d1\u7684\u8be6\u7ec6\u914d\u7f6e\u65b9\u5f0f\u3001\u5404\u6a21\u5757\u4f7f\u7528\u65b9\u6cd5\u548c\u9ad8\u7ea7\u5b9a\u5236\u6307\u5357","source":"@site/agents-docs/assistantagent/secondary-development.md","sourceDirName":"assistantagent","slug":"/assistantagent/secondary-development","permalink":"/agents/assistantagent/secondary-development","draft":false,"unlisted":false,"editUrl":"https://github.com/spring-ai-alibaba/website/tree/main/agents-docs/assistantagent/secondary-development.md","tags":[],"version":"current","lastUpdatedBy":"Ken Liu","lastUpdatedAt":1768271906000,"frontMatter":{"title":"\u4e8c\u6b21\u5f00\u53d1\u8be6\u7ec6\u6307\u5357","description":"Assistant Agent \u4e8c\u6b21\u5f00\u53d1\u7684\u8be6\u7ec6\u914d\u7f6e\u65b9\u5f0f\u3001\u5404\u6a21\u5757\u4f7f\u7528\u65b9\u6cd5\u548c\u9ad8\u7ea7\u5b9a\u5236\u6307\u5357","keywords":["Assistant Agent","\u4e8c\u6b21\u5f00\u53d1","\u914d\u7f6e","SPI","\u6269\u5c55"]},"sidebar":"agentsSidebar","previous":{"title":"AssistantAgent \u5feb\u901f\u5f00\u59cb","permalink":"/agents/assistantagent/quick-start"},"next":{"title":"\u5feb\u901f\u5f00\u59cb","permalink":"/agents/assistantagent/features/evaluation/quickstart"}}');var a=t(74848),i=t(28453);const s={title:"\u4e8c\u6b21\u5f00\u53d1\u8be6\u7ec6\u6307\u5357",description:"Assistant Agent \u4e8c\u6b21\u5f00\u53d1\u7684\u8be6\u7ec6\u914d\u7f6e\u65b9\u5f0f\u3001\u5404\u6a21\u5757\u4f7f\u7528\u65b9\u6cd5\u548c\u9ad8\u7ea7\u5b9a\u5236\u6307\u5357",keywords:["Assistant Agent","\u4e8c\u6b21\u5f00\u53d1","\u914d\u7f6e","SPI","\u6269\u5c55"]},l="\u4e8c\u6b21\u5f00\u53d1\u8be6\u7ec6\u6307\u5357",o={},c=[{value:"\u76ee\u5f55",id:"\u76ee\u5f55",level:2},{value:"\u9879\u76ee\u7ed3\u6784",id:"\u9879\u76ee\u7ed3\u6784",level:2},{value:"\u914d\u7f6e\u6587\u4ef6",id:"\u914d\u7f6e\u6587\u4ef6",level:2},{value:"\u6838\u5fc3\u914d\u7f6e\u6587\u4ef6\u4f4d\u7f6e",id:"\u6838\u5fc3\u914d\u7f6e\u6587\u4ef6\u4f4d\u7f6e",level:3},{value:"\u57fa\u7840\u914d\u7f6e\u793a\u4f8b",id:"\u57fa\u7840\u914d\u7f6e\u793a\u4f8b",level:3},{value:"\u6a21\u5757\u8be6\u7ec6\u914d\u7f6e",id:"\u6a21\u5757\u8be6\u7ec6\u914d\u7f6e",level:2},{value:"\u77e5\u8bc6\u68c0\u7d22\u6a21\u5757",id:"\u77e5\u8bc6\u68c0\u7d22\u6a21\u5757",level:3},{value:"\u914d\u7f6e\u9879",id:"\u914d\u7f6e\u9879",level:4},{value:"\u5b9e\u73b0\u81ea\u5b9a\u4e49 SearchProvider",id:"\u5b9e\u73b0\u81ea\u5b9a\u4e49-searchprovider",level:4},{value:"\u5de5\u5177\u6269\u5c55",id:"\u5de5\u5177\u6269\u5c55",level:3},{value:"\u65b9\u5f0f\u4e00\uff1a\u81ea\u5b9a\u4e49 CodeactTool",id:"\u65b9\u5f0f\u4e00\u81ea\u5b9a\u4e49-codeacttool",level:4},{value:"\u65b9\u5f0f\u4e8c\uff1aMCP \u5de5\u5177",id:"\u65b9\u5f0f\u4e8cmcp-\u5de5\u5177",level:4},{value:"\u65b9\u5f0f\u4e09\uff1aHTTP API \u5de5\u5177",id:"\u65b9\u5f0f\u4e09http-api-\u5de5\u5177",level:4},{value:"\u56de\u590d\u6e20\u9053",id:"\u56de\u590d\u6e20\u9053",level:3},{value:"\u914d\u7f6e\u9879",id:"\u914d\u7f6e\u9879-1",level:4},{value:"\u5b9e\u73b0\u81ea\u5b9a\u4e49\u6e20\u9053",id:"\u5b9e\u73b0\u81ea\u5b9a\u4e49\u6e20\u9053",level:4},{value:"\u8bc4\u4f30\u6a21\u5757",id:"\u8bc4\u4f30\u6a21\u5757",level:3},{value:"\u914d\u7f6e\u9879",id:"\u914d\u7f6e\u9879-2",level:4},{value:"\u8bc4\u4f30\u5957\u4ef6\u914d\u7f6e",id:"\u8bc4\u4f30\u5957\u4ef6\u914d\u7f6e",level:4},{value:"Prompt Builder",id:"prompt-builder",level:3},{value:"\u5b9e\u73b0\u81ea\u5b9a\u4e49 PromptBuilder",id:"\u5b9e\u73b0\u81ea\u5b9a\u4e49-promptbuilder",level:4},{value:"\u7ecf\u9a8c\u6a21\u5757",id:"\u7ecf\u9a8c\u6a21\u5757",level:3},{value:"\u914d\u7f6e\u9879",id:"\u914d\u7f6e\u9879-3",level:4},{value:"\u5b9e\u73b0\u81ea\u5b9a\u4e49 ExperienceProvider",id:"\u5b9e\u73b0\u81ea\u5b9a\u4e49-experienceprovider",level:4},{value:"\u5b66\u4e60\u6a21\u5757",id:"\u5b66\u4e60\u6a21\u5757",level:3},{value:"\u914d\u7f6e\u9879",id:"\u914d\u7f6e\u9879-4",level:4},{value:"\u5b9e\u73b0\u81ea\u5b9a\u4e49 LearningExtractor",id:"\u5b9e\u73b0\u81ea\u5b9a\u4e49-learningextractor",level:4},{value:"\u89e6\u53d1\u5668\u6a21\u5757",id:"\u89e6\u53d1\u5668\u6a21\u5757",level:3},{value:"\u914d\u7f6e\u9879",id:"\u914d\u7f6e\u9879-5",level:4},{value:"\u89e6\u53d1\u5668\u4f7f\u7528",id:"\u89e6\u53d1\u5668\u4f7f\u7528",level:4},{value:"\u9ad8\u7ea7\u5b9a\u5236",id:"\u9ad8\u7ea7\u5b9a\u5236",level:2},{value:"\u66ff\u6362\u6838\u5fc3\u7ec4\u4ef6",id:"\u66ff\u6362\u6838\u5fc3\u7ec4\u4ef6",level:3},{value:"\u6a21\u578b\u914d\u7f6e",id:"\u6a21\u578b\u914d\u7f6e",level:3},{value:"\u65e5\u5fd7\u914d\u7f6e",id:"\u65e5\u5fd7\u914d\u7f6e",level:3},{value:"\u5e38\u89c1\u95ee\u9898",id:"\u5e38\u89c1\u95ee\u9898",level:2},{value:"1. \u5982\u4f55\u8c03\u8bd5 Agent \u6267\u884c\u8fc7\u7a0b\uff1f",id:"1-\u5982\u4f55\u8c03\u8bd5-agent-\u6267\u884c\u8fc7\u7a0b",level:3},{value:"2. \u5982\u4f55\u9650\u5236\u4ee3\u7801\u6267\u884c\u65f6\u95f4\uff1f",id:"2-\u5982\u4f55\u9650\u5236\u4ee3\u7801\u6267\u884c\u65f6\u95f4",level:3}
1,{value:"3. \u5982\u4f55\u67e5\u770b\u53ef\u7528\u5de5\u5177\uff1f",id:"3-\u5982\u4f55\u67e5\u770b\u53ef\u7528\u5de5\u5177",level:3},{value:"\u53c2\u8003\u8d44\u6e90",id:"\u53c2\u8003\u8d44\u6e90",level:2}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"\u4e8c\u6b21\u5f00\u53d1\u8be6\u7ec6\u6307\u5357",children:"\u4e8c\u6b21\u5f00\u53d1\u8be6\u7ec6\u6307\u5357"})}),"\n",(0,a.jsxs)(n.p,{children:["\u672c\u6587\u6863\u8be6\u7ec6\u4ecb\u7ecd Assistant Agent \u5404\u6a21\u5757\u7684\u914d\u7f6e\u65b9\u5f0f\u548c\u4e8c\u6b21\u5f00\u53d1\u65b9\u6cd5\u3002\u5982\u679c\u4f60\u662f\u7b2c\u4e00\u6b21\u63a5\u89e6\u672c\u9879\u76ee\uff0c\u5efa\u8bae\u5148\u9605\u8bfb ",(0,a.jsx)(n.a,{href:"/agents/assistantagent/quick-start",children:"\u5feb\u901f\u5f00\u59cb"}),"\u3002"]}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h2,{id:"\u76ee\u5f55",children:"\u76ee\u5f55"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84",children:"\u9879\u76ee\u7ed3\u6784"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6",children:"\u914d\u7f6e\u6587\u4ef6"})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"#%E6%A8%A1%E5%9D%97%E8%AF%A6%E7%BB%86%E9%85%8D%E7%BD%AE",children:"\u6a21\u5757\u8be6\u7ec6\u914d\u7f6e"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#%E7%9F%A5%E8%AF%86%E6%A3%80%E7%B4%A2%E6%A8%A1%E5%9D%97",children:"\u77e5\u8bc6\u68c0\u7d22\u6a21\u5757"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#%E5%B7%A5%E5%85%B7%E6%89%A9%E5%B1%95",children:"\u5de5\u5177\u6269\u5c55"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#%E5%9B%9E%E5%A4%8D%E6%B8%A0%E9%81%93",children:"\u56de\u590d\u6e20\u9053"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#%E8%AF%84%E4%BC%B0%E6%A8%A1%E5%9D%97",children:"\u8bc4\u4f30\u6a21\u5757"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#prompt-builder",children:"Prompt Builder"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#%E7%BB%8F%E9%AA%8C%E6%A8%A1%E5%9D%97",children:"\u7ecf\u9a8c\u6a21\u5757"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#%E5%AD%A6%E4%B9%A0%E6%A8%A1%E5%9D%97",children:"\u5b66\u4e60\u6a21\u5757"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#%E8%A7%A6%E5%8F%91%E5%99%A8%E6%A8%A1%E5%9D%97",children:"\u89e6\u53d1\u5668\u6a21\u5757"})}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#%E9%AB%98%E7%BA%A7%E5%AE%9A%E5%88%B6",children:"\u9ad8\u7ea7\u5b9a\u5236"})}),"\n"]}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h2,{id:"\u9879\u76ee\u7ed3\u6784",children:"\u9879\u76ee\u7ed3\u6784"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"assistant-agent/\n\u251c\u2500\u2500 assistant-agent-common          # \u901a\u7528\u5de5\u5177\u3001\u679a\u4e3e\u3001\u5e38\u91cf\n\u251c\u2500\u2500 assistant-agent-core            # \u6838\u5fc3\u5f15\u64ce\uff1aGraalVM \u6267\u884c\u5668\u3001\u5de5\u5177\u6ce8\u518c\u8868\n\u251c\u2500\u2500 assistant-agent-extensions      # \u6269\u5c55\u6a21\u5757\n\u2502   \u251c\u2500\u2500 dynamic/               #   - \u52a8\u6001\u5de5\u5177\uff08MCP\u3001HTTP API\uff09\n\u2502   \u251c\u2500\u2500 experience/            #   - \u7ecf\u9a8c\u7ba1\u7406\u4e0e\u5feb\u901f\u610f\u56fe\u914d\u7f6e\n\u2502   \u251c\u2500\u2500 learning/              #   - \u5b66\u4e60\u63d0\u53d6\u4e0e\u5b58\u50a8\n\u2502   \u251c\u2500\u2500 search/                #   - \u7edf\u4e00\u641c\u7d22\u80fd\u529b\n\u2502   \u251c\u2500\u2500 reply/                 #   - \u591a\u6e20\u9053\u56de\u590d\n\u2502   \u251c\u2500\u2500 trigger/               #   - \u89e6\u53d1\u5668\u673a\u5236\n\u2502   \u2514\u2500\u2500 evaluation/            #   - \u8bc4\u4f30\u96c6\u6210\n\u251c\u2500\u2500 assistant-agent-prompt-builder  # Prompt \u52a8\u6001\u7ec4\u88c5\n\u251c\u2500\u2500 assistant-agent-evaluation      # \u8bc4\u4f30\u5f15\u64ce\n\u251c\u2500\u2500 assistant-agent-autoconfigure   # Spring Boot \u81ea\u52a8\u914d\u7f6e\n\u2514\u2500\u2500 assistant-agent-start           # \u542f\u52a8\u
16a21\u5757\uff08\u4e8c\u6b21\u5f00\u53d1\u57fa\u7840\uff09\n"})}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h2,{id:"\u914d\u7f6e\u6587\u4ef6",children:"\u914d\u7f6e\u6587\u4ef6"}),"\n",(0,a.jsx)(n.h3,{id:"\u6838\u5fc3\u914d\u7f6e\u6587\u4ef6\u4f4d\u7f6e",children:"\u6838\u5fc3\u914d\u7f6e\u6587\u4ef6\u4f4d\u7f6e"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"assistant-agent-start/src/main/resources/\n\u251c\u2500\u2500 application.yml                 # \u4e3b\u914d\u7f6e\u6587\u4ef6\n\u251c\u2500\u2500 application-reference.yml       # \u5b8c\u6574\u914d\u7f6e\u53c2\u8003\n\u251c\u2500\u2500 mcp-servers.json               # MCP \u670d\u52a1\u914d\u7f6e\n\u2514\u2500\u2500 mcp-servers.json.example       # MCP \u914d\u7f6e\u793a\u4f8b\n"})}),"\n",(0,a.jsx)(n.h3,{id:"\u57fa\u7840\u914d\u7f6e\u793a\u4f8b",children:"\u57fa\u7840\u914d\u7f6e\u793a\u4f8b"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"spring:\n  ai:\n    dashscope:\n      api-key: ${DASHSCOPE_API_KEY}\n      chat:\n        options:\n          model: qwen-max\n    alibaba:\n      codeact:\n        # \u6838\u5fc3\u914d\u7f6e\n        max-iterations: 10\n        code-execution-timeout-ms: 30000\n        \n        extension:\n          # \u5404\u6a21\u5757\u5f00\u5173\u548c\u914d\u7f6e\n          search:\n            enabled: true\n          reply:\n            enabled: true\n          trigger:\n            enabled: true\n          learning:\n            enabled: true\n          experience:\n            enabled: true\n"})}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["\ud83d\udcd6 \u5b8c\u6574\u914d\u7f6e\u9879\u8bf7\u53c2\u8003 ",(0,a.jsx)(n.code,{children:"application-reference.yml"})]}),"\n"]}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h2,{id:"\u6a21\u5757\u8be6\u7ec6\u914d\u7f6e",children:"\u6a21\u5757\u8be6\u7ec6\u914d\u7f6e"}),"\n",(0,a.jsx)(n.h3,{id:"\u77e5\u8bc6\u68c0\u7d22\u6a21\u5757",children:"\u77e5\u8bc6\u68c0\u7d22\u6a21\u5757"}),"\n",(0,a.jsxs)(n.p,{children:["\u77e5\u8bc6\u68c0\u7d22\u662f Agent \u56de\u7b54\u4e1a\u52a1\u95ee\u9898\u7684\u6838\u5fc3\u80fd\u529b\uff0c\u901a\u8fc7\u5b9e\u73b0 ",(0,a.jsx)(n.code,{children:"SearchProvider"})," SPI \u63a5\u5165\u5404\u7c7b\u6570\u636e\u6e90\u3002"]}),"\n",(0,a.jsx)(n.h4,{id:"\u914d\u7f6e\u9879",children:"\u914d\u7f6e\u9879"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"spring:\n  ai:\n    alibaba:\n      codeact:\n        extension:\n          search:\n            enabled: true\n            knowledge-search-enabled: true   # \u77e5\u8bc6\u5e93\u641c\u7d22\n            project-search-enabled: false    # \u9879\u76ee\u4ee3\u7801\u641c\u7d22\n            web-search-enabled: false        # Web \u641c\u7d22\n            experience-search-enabled: true  # \u7ecf\u9a8c\u68c0\u7d22\n            default-top-k: 5                 # \u9ed8\u8ba4\u8fd4\u56de\u7ed3\u679c\u6570\n            search-timeout-ms: 5000          # \u641c\u7d22\u8d85\u65f6\u65f6\u95f4\n"})}),"\n",(0,a.jsx)(n.h4,{id:"\u5b9e\u73b0\u81ea\u5b9a\u4e49-searchprovider",children:"\u5b9e\u73b0\u81ea\u5b9a\u4e49 SearchProvider"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-java",children:'import com.alibaba.assistant.agent.extension.search.spi.SearchProvider;\nimport com.alibaba.assistant.agent.extension.search.model.*;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\nimport java.util.stream.Collectors;\n\n@Component\npublic class ElasticsearchSearchProvider implements SearchProvider {\n\n    @Autowired\n    private ElasticsearchClient esClient;\n\n    @Override\n    public boolean supports(SearchSourceType type) {\n        return SearchSourceType.KNOWLEDGE == type;\n    }\n\n    @Override\n    public List<SearchResultItem> search(SearchRequest request) {\n        // 1. \u6784\u5efa ES \u67e5\u8be2\n        SearchResponse response = esClient.search(s -> s\n            .index("knowledge-base")\n            .query(q -> q.match(m -> m\n                .field("content")\n                .query(request.getQuery())\n            ))\n            .size(request.getTopK())\n        );\n        \n        // 2. \u8f6c\u6362\u7ed3\u679c\n        return response.hits().hits().stream()\n            .map(hit -> {\n                SearchResultItem item = new SearchResultItem();\n                item.setId(hit.id());\n                item.setSourceType(SearchSourceType.KNOWLEDGE);\n                item.setTitle(hit.source().getTitle());\n                item.setContent(hit.source().getContent());\n                item.setScore(hit.score());\n                return item;\n            })\n            .collect(Collectors.toList());\n    }\n\n    @Override\n    public String getName() {\n        return "
1ElasticsearchSearchProvider";\n    }\n}\n'})}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["\ud83d\udcd6 \u66f4\u591a\u7ec6\u8282\uff1a",(0,a.jsx)(n.a,{href:"/agents/assistantagent/features/search/quickstart",children:"\u77e5\u8bc6\u68c0\u7d22\u6a21\u5757\u6587\u6863"})]}),"\n"]}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h3,{id:"\u5de5\u5177\u6269\u5c55",children:"\u5de5\u5177\u6269\u5c55"}),"\n",(0,a.jsx)(n.p,{children:"Agent \u901a\u8fc7\u5de5\u5177\u6267\u884c\u5404\u7c7b\u64cd\u4f5c\u3002\u6846\u67b6\u652f\u6301\u4e09\u79cd\u5de5\u5177\u63a5\u5165\u65b9\u5f0f\uff1a"}),"\n",(0,a.jsx)(n.h4,{id:"\u65b9\u5f0f\u4e00\u81ea\u5b9a\u4e49-codeacttool",children:"\u65b9\u5f0f\u4e00\uff1a\u81ea\u5b9a\u4e49 CodeactTool"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-java",children:'import com.alibaba.assistant.agent.common.tools.CodeactTool;\nimport com.alibaba.assistant.agent.common.tools.CodeactToolMetadata;\nimport com.alibaba.assistant.agent.common.tools.DefaultCodeactToolMetadata;\nimport com.alibaba.assistant.agent.common.tools.definition.CodeactToolDefinition;\nimport com.alibaba.assistant.agent.common.tools.definition.DefaultCodeactToolDefinition;\nimport com.alibaba.assistant.agent.common.tools.definition.ParameterTree;\nimport com.alibaba.assistant.agent.common.tools.definition.ParameterNode;\nimport com.alibaba.assistant.agent.common.tools.definition.ParameterType;\nimport com.alibaba.assistant.agent.common.enums.Language;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport org.springframework.ai.tool.definition.ToolDefinition;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\nimport java.util.Map;\n\n@Component\npublic class OrderQueryTool implements CodeactTool {\n\n    private final ObjectMapper objectMapper = new ObjectMapper();\n\n    @Override\n    public String call(String toolInput) {\n        try {\n            // toolInput \u662f JSON \u683c\u5f0f\u7684\u53c2\u6570\n            Map<String, Object> params = objectMapper.readValue(toolInput, Map.class);\n            String orderId = (String) params.get("orderId");\n            \n            // \u6267\u884c\u4e1a\u52a1\u903b\u8f91\n            Order order = orderService.query(orderId);\n            return objectMapper.writeValueAsString(order);\n        } catch (Exception e) {\n            return "{\\"error\\": \\"" + e.getMessage() + "\\"}";\n        }\n    }\n\n    @Override\n    public CodeactToolDefinition getCodeactDefinition() {\n        return DefaultCodeactToolDefinition.builder()\n            .name("query_order")\n            .description("\u67e5\u8be2\u8ba2\u5355\u4fe1\u606f")\n            .parameterTree(ParameterTree.builder()\n                .addParameter(ParameterNode.builder()\n                    .name("orderId")\n                    .type(ParameterType.STRING)\n                    .description("\u8ba2\u5355ID")\n                    .required(true)\n                    .build())\n                .build())\n            .build();\n    }\n\n    @Override\n    public CodeactToolMetadata getCodeactMetadata() {\
1n        return DefaultCodeactToolMetadata.builder()\n            .targetClassName("order")\n            .targetClassDescription("\u8ba2\u5355\u67e5\u8be2\u5de5\u5177")\n            .supportedLanguages(List.of(Language.PYTHON))\n            .build();\n    }\n\n    @Override\n    public ToolDefinition getToolDefinition() {\n        // CodeactToolDefinition \u7ee7\u627f\u81ea ToolDefinition\uff0c\u53ef\u76f4\u63a5\u8fd4\u56de\n        return getCodeactDefinition();\n    }\n}\n'})}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["\ud83d\udcd6 \u66f4\u591a\u7ec6\u8282\uff1a",(0,a.jsx)(n.a,{href:"/agents/assistantagent/features/custom-codeact-tool/quickstart",children:"\u81ea\u5b9a\u4e49 CodeAct \u5de5\u5177"})]}),"\n"]}),"\n",(0,a.jsx)(n.h4,{id:"\u65b9\u5f0f\u4e8cmcp-\u5de5\u5177",children:"\u65b9\u5f0f\u4e8c\uff1aMCP \u5de5\u5177"}),"\n",(0,a.jsxs)(n.p,{children:["\u901a\u8fc7\u914d\u7f6e ",(0,a.jsx)(n.code,{children:"mcp-servers.json"})," \u63a5\u5165 MCP \u534f\u8bae\u5de5\u5177\uff1a"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n  "mcpServers": {\n    "weather-server": {\n      "command": "npx",\n      "args": ["-y", "@anthropic/weather-mcp-server"],\n      "env": {\n        "API_KEY": "your-api-key"\n      }\n    }\n  }\n}\n'})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"spring:\n  ai:\n    alibaba:\n      codeact:\n        extension:\n          mcp:\n            enabled: true\n            config-path: classpath:mcp-servers.json\n"})}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["\ud83d\udcd6 \u66f4\u591a\u7ec6\u8282\uff1a",(0,a.jsx)(n.a,{href:"/agents/assistantagent/features/mcp/quickstart",children:"MCP \u5de5\u5177\u6a21\u5757"})]}),"\n"]}),"\n",(0,a.jsx)(n.h4,{id:"\u65b9\u5f0f\u4e09http-api-\u5de5\u5177",children:"\u65b9\u5f0f\u4e09\uff1aHTTP API \u5de5\u5177"}),"\n",(0,a.jsx)(n.p,{children:"\u901a\u8fc7 OpenAPI \u89c4\u8303\u81ea\u52a8\u751f\u6210\u5de5\u5177\uff1a"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"spring:\n  ai:\n    alibaba:\n      codeact:\n        extension:\n          http:\n            enabled: true\n            specs:\n              - name: petstore\n                url: https://petstore.swagger.io/v2/swagger.json\n                base-url: https://petstore.swagger.io/v2\n                endpoints:\n                  - method: GET\n                    path: /pet/{petId}\n                  - method: POST\n                    path: /pet\n"})}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["\ud83d\udcd6 \u66f4\u591a\u7ec6\u8282\uff1a",(0,a.jsx)(n.a,{href:"/agents/assistantagent/features/dynamic-http/quickstart",children:"\u52a8\u6001 HTTP \u5de5\u5177\u6a21\u5757"})]}),"\n"]}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h3,{id:"\u56de\u590d\u6e20\u9053",children:"\u56de\u590d\u6e20\u9053"}),"\n",(0,a.jsx)(n.p,{children:"\u56de\u590d\u6e20\u9053\u51b3\u5b9a Agent \u5982\u4f55\u5411\u7528\u6237\u53d1\u9001\u6d88\u606f\u3002"}),"\n",(0,a.jsx)(n.h4,{id:"\u914d\u7f6e\u9879-1",children:"\u914d\u7f6e\u9879"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"spring:\n  ai:\n    alibaba:\n      codeact:\n        extension:\n          reply:\n            enabled: true\n            tools:\n              - name: send_message\n                description: \u53d1\u9001\u6587\u672c\u6d88\u606f\u7ed9\u7528\u6237\n                channel-code: IDE_TEXT\n                params:\n                  - name: text\n                    type: string\n                    description: \u6d88\u606f\u5185\u5bb9\n                    required: true\n"})}),"\n",(0,a.jsx)(n.h4,{id:"\u5b9e\u73b0\u81ea\u5b9a\u4e49\u6e20\u9053",children:"\u5b9e\u73b0\u81ea\u5b9a\u4e49\u6e20\u9053"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-java",children:'import com.alibaba.assistant.agent.extension.reply.spi.ReplyChannelDefinition;\nimport com.alibaba.assistant.agent.extension.reply.model.ChannelExecutionContext;\nimport com.alibaba.assistant.agent.extension.reply.model.ParameterSchema;\nimport com.alibaba.assistant.agent.extension.reply.model.ReplyResult;\nimport org.springframework.stereotype.Component;\n\nimport java.util.Map;\n\n@Component\npublic class DingTalkChannelDefinition implements ReplyChannelDefinition {\n\n    @Override\n    public String getChannelCode() {\n        return "DINGTALK";\n    }
1\n\n    @Override\n    public String getDescription() {\n        return "\u53d1\u9001\u9489\u9489\u6d88\u606f\u901a\u77e5";\n    }\n\n    @Override\n    public ParameterSchema getSupportedParameters() {\n        // \u8fd4\u56de null \u8868\u793a\u63a5\u53d7\u4efb\u610f\u53c2\u6570\uff08\u7075\u6d3b\u6a21\u5f0f\uff09\n        return null;\n    }\n\n    @Override\n    public ReplyResult execute(ChannelExecutionContext context, Map<String, Object> params) {\n        String text = (String) params.get("text");\n        String sessionId = context.getSessionId();\n        \n        // \u8c03\u7528\u9489\u9489 API \u53d1\u9001\u6d88\u606f\n        dingTalkClient.sendMessage(sessionId, text);\n        \n        return ReplyResult.success("\u6d88\u606f\u5df2\u53d1\u9001");\n    }\n}\n'})}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["\ud83d\udcd6 \u66f4\u591a\u7ec6\u8282\uff1a",(0,a.jsx)(n.a,{href:"/agents/assistantagent/features/reply/quickstart",children:"\u56de\u590d\u6e20\u9053\u6a21\u5757"})]}),"\n"]}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h3,{id:"\u8bc4\u4f30\u6a21\u5757",children:"\u8bc4\u4f30\u6a21\u5757"}),"\n",(0,a.jsx)(n.p,{children:"\u8bc4\u4f30\u6a21\u5757\u7528\u4e8e\u591a\u7ef4\u5ea6\u610f\u56fe\u8bc6\u522b\uff0c\u6307\u5bfc Agent \u884c\u4e3a\u3002"}),"\n",(0,a.jsx)(n.h4,{id:"\u914d\u7f6e\u9879-2",children:"\u914d\u7f6e\u9879"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"spring:\n  ai:\n    alibaba:\n      codeact:\n        extension:\n          evaluation:\n            enabled: true\n            suite-config-path: classpath:evaluation-suite.yml\n"})}),"\n",(0,a.jsx)(n.h4,{id:"\u8bc4\u4f30\u5957\u4ef6\u914d\u7f6e",children:"\u8bc4\u4f30\u5957\u4ef6\u914d\u7f6e"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"# evaluation-suite.yml\nname: default-suite\ndescription: \u9ed8\u8ba4\u8bc4\u4f30\u5957\u4ef6\ncriteria:\n  - name: is_ambiguous\n    type: LLM\n    description: \u5224\u65ad\u7528\u6237\u8f93\u5165\u662f\u5426\u6a21\u7cca\n    resultType: BOOLEAN\n    \n  - name: has_experience\n    type: RULE\n    description: \u68c0\u67e5\u662f\u5426\u6709\u76f8\u5173\u7ecf\u9a8c\n    resultType: BOOLEAN\n    ruleFunction: experienceCheckFunction\n    \n  - name: intent_type\n    type: LLM\n    description: \u8bc6\u522b\u7528\u6237\u610f\u56fe\u7c7b\u578b\n    resultType: ENUM\n    enumValues: [QUERY, ACTION, CHAT]\n    dependsOn: [is_ambiguous]\n"})}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["\ud83d\udcd6 \u66f4\u591a\u7ec6\u8282\uff1a",(0,a.jsx)(n.a,{href:"/agents/assistantagent/features/evaluation/quickstart",children:"\u8bc4\u4f30\u6a21\u5757"})]}),"\n"]}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h3,{id:"prompt-builder",children:"Prompt Builder"}),"\n",(0,a.jsx)(n.p,{children:"Prompt Builder \u6839\u636e\u8bc4\u4f30\u7ed3\u679c\u52a8\u6001\u7ec4\u88c5 Prompt\u3002"}),"\n",(0,a.jsx)(n.h4,{id:"\u5b9e\u73b0\u81ea\u5b9a\u4e49-promptbuilder",children:"\u5b9e\u73b0\u81ea\u5b9a\u4e49 PromptBuilder"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-java",children:'import com.alibaba.assistant.agent.prompt.PromptBuilder;\nimport com.alibaba.assistant.agent.prompt.PromptContribution;\nimport com.alibaba.assistant.agent.extension.experience.spi.ExperienceProvider;\nimport com.alibaba.assistant.agent.extension.experience.model.Experience;\nimport com.alibaba.assistant.agent.extension.experience.model.ExperienceQuery;\nimport com.alibaba.cloud.ai.graph.agent.interceptor.ModelRequest;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\nimport java.util.stream.Collectors;\n\n@Component\npublic class ExperiencePromptBuilder implements PromptBuilder {\n\n    private final ExperienceProvider experienceProvider;\n\n    public ExperiencePromptBuilder(ExperienceProvider experienceProvider) {\n        this.experienceProvider = experienceProvider;\n    }\n\n    @Override\n    public boolean match(ModelRequest request) {\n        // \u6839\u636e\u8bc4\u4f30\u7ed3\u679c\u5224\u65ad\u662f\u5426\u6ce8\u5165\u7ecf\u9a8c\n        Object hasExperience = request.getState().get("has_experience");\n        return Boolean.TRUE.equals(hasExperience);\n    }\n\n    @Override\n    public PromptContribution build(ModelRequest request) {\n        // \u6784\u5efa\u67e5\u8be2\u6761\u4ef6\n        ExperienceQuery query = new ExperienceQuery();\n        query.setText(extractUserInput(request));\n        query.setLimit(5);\n        \n        List<Experience> experiences = experienceProvider.query(query, null);\n        \n        String experienceText = experiences.stream()\n            .map(e -> "- " + e.getContent())\n            .collect(Collectors.joining("\\n"));\n            \n        return PromptContribution.builder()\n            .systemTextToAppend("\u4ee5\u4e0b\u662f\u76f8\u5173\u7ecf\u9a8c\u4f9b\u53c2\u8003\uff1a\\n" + experienceText)\n            .build();\n    }\n\n    @Override\n    public int priority() {\n        return 10; // \u6267\u884c\u987a\u5e8f\uff0c\u6570\u503c\u8d8a\u5c0f\u8d8a\u5148\u6267\u884c\n    }\n    \n    private String extractUserInput(ModelRequest request) {\n        // \u4ece\u8bf7\u6c42\u4e2d\u63d0\u53d6\u7528\u6237\u8f93\u5165\n        return request.getMessages().stream()\n            .filter(m -> m instanceof org.springframework.ai.chat.messages.UserMessage)\n            .map(m -> m.getText())\n            .reduce((a, b) -> b)\n            .orElse("");\n    }\n}\n'})}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["\ud83d\udcd6 \u66f4\u591a\u7ec6\u8282\uff1a",(0,a.jsx)(n.a,{href:"/agents/assistantagent/features/prompt-builder/quickstart",children:"Prompt Builder \u6a21\u5757"})]}),"\n"]}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h3,{id:"\u7ecf\u9a8c\u6a21\u5757",children:"\u7ecf\u9a8c\u6a21\u5757"}),"\n",(0,a.jsx)(n.p,{children:"\u7ecf\u9a8c\u6a21\u5757\u7528\u4e8e\u5b58\u50a8\u548c\u590d\u7528\u5386\u53f2\u6210\u529f\u7ecf\u9a8c\u3002"}),"\n",(0,a.jsx)(n.h4,{id:"\u914d\u7f6e\u9879-3",children:"\u914d\u7f6e\u9879"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"spring:\n  ai:\n    alibaba:\n      codeact:\n        extension:\n          experience:\n            enabled: true\n            fast-intent:\n              enabled: true  # \u542f\u7528\u5feb\u901f\u610f\u56fe\u5339\u914d\n"})}),"\n",(0,a.jsx)(n.h4,{id:"\u5b9e\u73b0\u81ea\u5b9a\u4e49-experienceprovider",children:"\u5b9e\u73b0\u81ea\u5b9a\u4e49 ExperienceProvider"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-java",children:"import 
1com.alibaba.assistant.agent.extension.experience.spi.ExperienceProvider;\nimport com.alibaba.assistant.agent.extension.experience.model.Experience;\nimport com.alibaba.assistant.agent.extension.experience.model.ExperienceQuery;\nimport com.alibaba.assistant.agent.extension.experience.model.ExperienceQueryContext;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n@Component\npublic class DatabaseExperienceProvider implements ExperienceProvider {\n\n    @Override\n    public List<Experience> query(ExperienceQuery query, ExperienceQueryContext context) {\n        // \u4ece\u6570\u636e\u5e93\u68c0\u7d22\u76f8\u5173\u7ecf\u9a8c\n        return experienceRepository.findByQuery(query);\n    }\n}\n"})}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["\ud83d\udcd6 \u66f4\u591a\u7ec6\u8282\uff1a",(0,a.jsx)(n.a,{href:"/agents/assistantagent/features/experience/quickstart",children:"\u7ecf\u9a8c\u6a21\u5757"})]}),"\n"]}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h3,{id:"\u5b66\u4e60\u6a21\u5757",children:"\u5b66\u4e60\u6a21\u5757"}),"\n",(0,a.jsx)(n.p,{children:"\u5b66\u4e60\u6a21\u5757\u4ece Agent \u6267\u884c\u8fc7\u7a0b\u4e2d\u81ea\u52a8\u63d0\u53d6\u7ecf\u9a8c\u3002"}),"\n",(0,a.jsx)(n.h4,{id:"\u914d\u7f6e\u9879-4",children:"\u914d\u7f6e\u9879"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"spring:\n  ai:\n    alibaba:\n      codeact:\n        extension:\n          learning:\n            enabled: true\n            online:\n              after-agent:\n                enabled: true   # Agent \u6267\u884c\u540e\u5b66\u4e60\n              after-model:\n                enabled: false  # \u6a21\u578b\u8c03\u7528\u540e\u5b66\u4e60\n              tool-interceptor:\n                enabled: false  # \u5de5\u5177\u8c03\u7528\u540e\u5b66\u4e60\n            offline:\n              enabled: false    # \u79bb\u7ebf\u6279\u91cf\u5b66\u4e60\n"})}),"\n",(0,a.jsx)(n.h4,{id:"\u5b9e\u73b0\u81ea\u5b9a\u4e49-learningextractor",children:"\u5b9e\u73b0\u81ea\u5b9a\u4e49 LearningExtractor"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-java",children:'import com.alibaba.assistant.agent.extension.learning.spi.LearningExtractor;\nimport com.alibaba.assistant.agent.extension.learning.model.LearningContext;\nimport com.alibaba.assistant.agent.extension.experience.model.Experience;\nimport com.alibaba.assistant.agent.extension.experience.model.ExperienceType;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\nimport java.util.ArrayList;\n\n@Component\npublic class SuccessPatternExtractor implements LearningExtractor<Experience> {\n\n    @Override\n    public boolean shouldLearn(LearningContext context) {\n        // \u6839\u636e\u81ea\u5b9a\u4e49\u6570\u636e\u5224\u65ad\u662f\u5426\u9700\u8981\u5b66\u4e60\n        Object isSuccess = context.getCustomData().get("success");\n        return Boolean.TRUE.equals(isSuccess) && \n               !context.getToolCallRecords().isEmpty();\n    }\n\n    @Override\n    public List<Experience> extract(LearningContext context) {\n        List<Experience> experiences = new ArrayList<>();\n        \n        // \u4ece\u6267\u884c\u4e0a\u4e0b\u6587\u4e2d\u63d0\u53d6\u7ecf\u9a8c\n        Experience exp = new Experience();\n        exp.setType(ExperienceType.CODE);\n        exp.setTitle("\u6210\u529f\u6a21\u5f0f\u63d0\u53d6");\n        exp.setContent("\u4ece\u6267\u884c\u8bb0\u5f55\u4e2d\u63d0\u53d6\u7684\u7ecf\u9a8c\u5185\u5bb9...");\n        \n        experiences.add(exp);\n        return experiences;\n    }\n\n    @Override\n    public String getSupportedLearningType() {\n        return "experience";\n    }\n\n    @Override\n    public Class<Experience> getRecordType() {\n        return Experience.class;\n    }\n}\n'})}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["\ud83d\udcd6 \u66f4\u591a\u7ec6\u8282\uff1a",(0,a.jsx)(n.a,{href:"/agents/assistantagent/features/learning/quickstart",children:"\u5b66\u4e60\u6a21\u5757"})]}),"\n"]}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h3,{id:"\u89e6\u53d1\u5668\u6a21\u5757",children:"\u89e6\u53d1\u5668\u6a21\u5757"}),"\n",(0,a.jsx)(n.p,{children:"\u89e6\u53d1\u5668\u6a21\u5757\u652f\u6301\u5b9a\u65f6\u4efb\u52a1\u548c\u4e8b\u4ef6\u89e6\u53d1\u3002"}),"\n",(0,a.jsx)(n.h4,{id:"\u914d\u7f6e\u9879-5",children:"\u914d\u7f6e\u9879"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"spring:\n  ai:\n    alibaba:\n      codeact:\n        extension:\n          trigger:\n            enabled: true\n            max-triggers-per-user: 10\n            default-timezone: Asia/Shanghai\n"})}),"\n",(0,a.jsx)(n.h4,{id:"\u89e6\u53d1\u5668\u4f7f\u7528",children:"\u89e6\u53d1\u5668\u4f7f\u7528"}),"\n",(0,a.jsx)(n.p,{children:"Agent \u53ef\u4ee5\u901a\u8fc7\u5185\u7f6e\u5de5\u5177\u521b\u5efa\u89e6\u53d1\u5668\uff1a"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-python",children:'# Agent \u751f\u6210\u7684\u4ee3\u7801\u793a\u4f8b\ntrigger.create_trigger(\n    name="daily_report",\n    schedule_mode="CRON",\n    schedule_value="
10 9 * * *",\n    task="\u751f\u6210\u5e76\u53d1\u9001\u6bcf\u65e5\u9500\u552e\u62a5\u544a"\n)\n'})}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["\ud83d\udcd6 \u66f4\u591a\u7ec6\u8282\uff1a",(0,a.jsx)(n.a,{href:"/agents/assistantagent/features/trigger/quickstart",children:"\u89e6\u53d1\u5668\u6a21\u5757"})]}),"\n"]}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h2,{id:"\u9ad8\u7ea7\u5b9a\u5236",children:"\u9ad8\u7ea7\u5b9a\u5236"}),"\n",(0,a.jsx)(n.h3,{id:"\u66ff\u6362\u6838\u5fc3\u7ec4\u4ef6",children:"\u66ff\u6362\u6838\u5fc3\u7ec4\u4ef6"}),"\n",(0,a.jsx)(n.p,{children:"\u901a\u8fc7 Spring Bean \u8986\u76d6\u9ed8\u8ba4\u5b9e\u73b0\uff1a"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-java",children:"@Configuration\npublic class CustomConfiguration {\n\n    @Bean\n    @Primary\n    public CodeExecutor customCodeExecutor() {\n        // \u81ea\u5b9a\u4e49\u4ee3\u7801\u6267\u884c\u5668\n        return new MyCodeExecutor();\n    }\n}\n"})}),"\n",(0,a.jsx)(n.h3,{id:"\u6a21\u578b\u914d\u7f6e",children:"\u6a21\u578b\u914d\u7f6e"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"spring:\n  ai:\n    dashscope:\n      chat:\n        options:\n          model: qwen-max\n          temperature: 0.7\n          max-tokens: 4096\n          top-p: 0.9\n"})}),"\n",(0,a.jsx)(n.h3,{id:"\u65e5\u5fd7\u914d\u7f6e",children:"\u65e5\u5fd7\u914d\u7f6e"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"logging:\n  level:\n    com.alibaba.assistant.agent: DEBUG\n    com.alibaba.assistant.agent.core.executor: INFO\n"})}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h2,{id:"\u5e38\u89c1\u95ee\u9898",children:"\u5e38\u89c1\u95ee\u9898"}),"\n",(0,a.jsx)(n.h3,{id:"1-\u5982\u4f55\u8c03\u8bd5-agent-\u6267\u884c\u8fc7\u7a0b",children:"1. \u5982\u4f55\u8c03\u8bd5 Agent \u6267\u884c\u8fc7\u7a0b\uff1f"}),"\n",(0,a.jsx)(n.p,{children:"\u542f\u7528 DEBUG \u65e5\u5fd7\u67e5\u770b\u8be6\u7ec6\u6267\u884c\u8fc7\u7a0b\uff1a"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"logging:\n  level:\n    com.alibaba.assistant.agent: DEBUG\n"})}),"\n",(0,a.jsx)(n.h3,{id:"2-\u5982\u4f55\u9650\u5236\u4ee3\u7801\u6267\u884c\u65f6\u95f4",children:"2. \u5982\u4f55\u9650\u5236\u4ee3\u7801\u6267\u884c\u65f6\u95f4\uff1f"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"spring:\n  ai:\n    alibaba:\n      codeact:\n        code-execution-timeout-ms: 30000  # 30\u79d2\u8d85\u65f6\n"})}),"\n",(0,a.jsx)(n.h3,{id:"3-\u5982\u4f55\u67e5\u770b\u53ef\u7528\u5de5\u5177",children:"3. \u5982\u4f55\u67e5\u770b\u53ef\u7528\u5de5\u5177\uff1f"}),"\n",(0,a.jsxs)(n.p,{children:["\u542f\u52a8\u540e\u8bbf\u95ee ",(0,a.jsx)(n.code,{children:"/actuator/codeact/tools"})," \u67e5\u770b\u5df2\u6ce8\u518c\u7684\u5de5\u5177\u5217\u8868\u3002"]}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h2,{id:"\u53c2\u8003\u8d44\u6e90",children:"\u53c2\u8003\u8d44\u6e90"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://github.com/spring-ai-alibaba/AssistantAgent/blob/main/assistant-agent-start/src/main/resources/application-reference.yml",children:"\u5b8c\u6574\u914d\u7f6e\u53c2\u8003"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"./features/evaluation/quickstart",children:"Feature \u8be6\u7ec6\u6587\u6863"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://github.com/alibaba/spring-ai-alibaba",children:"Spring AI Alibaba \u6587\u6863"})}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.