1"use strict";(self.webpackChunkspring_ai_alibaba_website=self.webpackChunkspring_ai_alibaba_website||[]).push([[5203],{28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>s});var a=r(96540);const i={},t=a.createContext(i);function o(e){const n=a.useContext(t);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(t.Provider,{value:n},e.children)}},84017:(e,n,r)=>{r.d(n,{A:()=>a});const a=r.p+"assets/images/arch-2cce39943fed5e4fa1ab0a8e241a0f3e.png"},97708:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"admin/quick-start","title":"\u5feb\u901f\u5f00\u59cb","description":"Project Background","source":"@site/ecosystem/admin/quick-start.md","sourceDirName":"admin","slug":"/admin/quick-start","permalink":"/ecosystem/admin/quick-start","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"ken.lj","lastUpdatedAt":1763095030000,"frontMatter":{},"sidebar":"ecosystemSidebar"}');var i=r(74848),t=r(28453);const o={},s="\u5feb\u901f\u5f00\u59cb",l={}
1,c=[{value:"Project Background",id:"project-background",level:2},{value:"Core Features",id:"core-features",level:2},{value:"\ud83e\udd16 Prompt Management",id:"-prompt-management",level:3},{value:"\ud83d\udcca Dataset Management",id:"-dataset-management",level:3},{value:"\u2696\ufe0f Evaluator Management",id:"\ufe0f-evaluator-management",level:3},{value:"\ud83e\uddea Experiment Management",id:"-experiment-management",level:3},{value:"\ud83d\udcc8 Observability",id:"-observability",level:3},{value:"\ud83d\udd27 Model Configuration",id:"-model-configuration",level:3},{value:"System Architecture",id:"system-architecture",level:2},{value:"Overall Architecture",id:"overall-architecture",level:3},{value:"\ud83d\ude80 Quick Start",id:"-quick-start",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Running from Source Code",id:"running-from-source-code",level:3},{value:"1. Clone the Project",id:"1-clone-the-project",level:4},{value:"2. Configure Your API Keys",id:"2-configure-your-api-keys",level:4},{value:"3. Nacos Configuration (Optional)",id:"3-nacos-configuration-optional",level:4},{value:"4. Start SAA Admin",id:"4-start-saa-admin",level:3},{value:"5. Access the Application",id:"5-access-the-application",level:3},{value:"6. Connect Your AI Agent Application",id:"6-connect-your-ai-agent-application",level:3},{value:"License",id:"license",level:2},{value:"Contributing",id:"contributing",level:2}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"\u5feb\u901f\u5f00\u59cb",children:"\u5feb\u901f\u5f00\u59cb"})}),"\n",(0,i.jsx)(n.h2,{id:"project-background",children:"Project Backgroun
1d"}),"\n",(0,i.jsx)(n.p,{children:"Spring AI Alibaba Admin is an AI Agent development and evaluation platform based on Spring AI Alibaba, designed to provide developers and enterprises with a complete AI Agent lifecycle management solution. The platform supports a complete workflow from Prompt engineering, dataset management, evaluator configuration to experiment execution and result analysis, helping users quickly build, test, and optimize AI Agent applications."}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Github repository: ",(0,i.jsx)(n.a,{href:"https://github.com/spring-ai-alibaba/spring-ai-alibaba-admin",children:"https://github.com/spring-ai-alibaba/spring-ai-alibaba-admin"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"core-features",children:"Core Features"}),"\n",(0,i.jsx)(n.h3,{id:"-prompt-management",children:"\ud83e\udd16 Prompt Management"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Prompt Template Management"}),": Create, update, and delete Prompt templates"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Version Control"}),": Support for Prompt version management and history tracking"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Real-time Debugging"}),": Provide online Prompt debugging and streaming responses"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Session Management"}),": Support for multi-turn conversation session management"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"-dataset-management",children:"\ud83d\udcca Dataset Management"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Dataset Creation"}),": Support for importing and creating datasets in multiple formats"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Version Management"}),": Dataset version control and history management"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Data Item Management"}),": Fine-grained data item CRUD operations"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Create from Trace"}),": Support for creating datasets from OpenTelemetry trace data"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"\ufe0f-evaluator-management",children:"\u2696\ufe0f Evaluator Management"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Evaluator Configuration"}),": Support for creating and configuring various evaluators"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Template System"}),": Provide evaluator templates and custom evaluation logic"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Debugging Features"}),": Support for online evaluator debugging and testing"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Version Management"}),": Evaluator version control and release management"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"-experiment-management",children:"\ud83e\uddea Experiment Management"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Experiment Execution"}),": Automated execution of evaluation experiments"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Result Analysis"}),": Detailed experiment result analysis and statistics"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Experiment Control"}),": Support for starting, stopping, restarting, and deleting experiments"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Batch Processing"}),": Support for batch experiment execution and result comparison"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"-observability",children:"\ud83d\udcc8 Observability"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Trace Tracking"}),": Integrated OpenTelemetry providing complete trace tracking"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Service Monitoring"}),": Support for service list and overview statistics"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Trace Analysis"}),": Provide detailed Trace details and Span analysis"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"-model-configuration",children:"\ud83d\udd27 Model Configuration"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Multi-model Support"}),": Support for mainstream AI models including OpenAI, DashScope, DeepSeek"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Configuration Management"}),": Unified configuration and management of model parameters"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Dynamic Switching"}),": Support for dynamic updates of model configuration at runtime"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"system-architecture",children:"System Architecture"}),"\n",(0,i.jsx)(n.h3,{id:"overall-architecture",children:"Overall Architecture"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Overall Architecture",src:r(84017).A+"",width:"2557",height:"1874"})}),"\n",(0,i.jsx)(n.h2,{id:"-quick-start",children:"\ud83d\ude80 Quick Start"}),"\n",(0,i.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\ud83d\udc33 ",(0,i.jsx)(n.strong,{children:"Docker"})," (for containerized deployment) + ",(0,i.jsx)(n.strong,{children:"Docker Compose"}),": 2.0+"]}),"\n",(0,i.jsxs)(n.li,{children:["\u2615 ",(0,i.jsx)(n.strong,{children:"Java 17+"})," (for source code execution) + ",(0,i.jsx)(n.strong,{children:"Maven"}),": 3.8+"]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83c\udf10 ",(0,i.jsx)(n.strong,{children:"AI Model Provider API Keys"}),", supporting OpenAI, DashScope, DeepSeek"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"running-from-source-code",children:"Running from Source Code"}),"\n",(0,i.jsx)(n.h4,{id:"1-clone-the-project",children:"1. Clone the Project"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/spring-ai-alibaba/spring-ai-alibaba-admin.git\ncd admin\n"})}),"\n",(0,i.jsx)(n.h4,{id:"2-configure-your-api-keys",children:"2. Configure Your API Keys"}),"\n",(0,i.jsxs)(n.p,{children:["Modify the model configuration in ",(0,i.jsx)(n.code,{children:"spring-ai-alibaba-admin-server/model-config.yaml"})," according to your model provider."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"If you use DashScope, please refer to the model-config-dashscope.yaml template for configuration"}),"\n",(0,i.jsx)(n.li,{children:"If you use DeepSeek, please refer to the model-config-deepseek.yaml template for configuration"}),"\n",(0,i.jsx)(n.li,{children:"If you use OpenAI, please refer to the model-config-openai.yaml template for configuration"}),"\n"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["\ud83d\udca1 ",(0,i.jsx)(n.strong,{children:"Get Your DashScope API Key"}),": Visit ",(0,i.jsx)(n.a,{href:"https://bailian.console.aliyun.com/?tab=model#/api-key",children:"Alibaba Cloud Bailian Console"})," to get a free API key."]}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"3-nacos-configuration-optional",children:"3. Nacos Configuration (Optional)"}),"\n",(0,i.jsxs)(n.p,{children:["If you need to modify the Nacos address, please update the configuration in the ",(0,i.jsx)(n.code,{children:"spring-ai-alibaba-admin-server/src/main/resources/application.yml"})," file"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"nacos:\n server-addr: ${nacos-address}\n"})}),"\n",(0,i.jsx)(n.h3,{id:"4-start-saa-admin",children:"4. Start SAA Admin"}),"\n",(0,i.jsx)(n.p,{children:"Execute the startup script in the root directory. This script will help you start the database-related services"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sh start.sh\n"})}),"\n",(0,i.jsx)(n.p,{children:"Start the application in the spring-ai-alibaba-admin-server directory"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"mvn spring-boot:run\n"})}),"\n",(0,i.jsx)(n.h3,{id:"5-access-the-application",children:"5. Access the Application"}),"\n",(0,i.jsxs)(n.p,{children:["Open your browser and visit ",(0,i.jsx)(n.a,{href:"http://localhost:8080",children:"http://localhost:8080"})," to use the SAA Admin platform."]}),"\n",(0,i.jsx)(n.p,{children:"At this point, you can already manage, debug, evaluate, and observe prompts on the platform. If you expect your Spring AI Alibaba Agent application to integrate with Nacos for prompt loading and dynamic updates, and observe the online running status, you can refer to step 6 to configure your AI Agent application."}),"\n",(0,i.jsx)(n.h3,{id:"6-connect-your-ai-agent-application",children:"6. Connect Your AI Agent Application"}),"\n",(0,i.jsx)(n.p,{children:"In your Spring AI Alibaba Agent application, add the following dependencies"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-xml",children:"<dependencies>\n \x3c!-- Introduce spring ai alibaba agent nacos proxy module --\x3e\n <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-agent-nacos</artifactId>\n <version>{spring.ai.alibaba.version}</version>\n </dependency>\n\n \x3c!-- Introduce observability module --\x3e\n\n <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-autoconfigure-arms-observation</artifactId>\n <version>{spring.ai.alibaba.version}</version>\n </dependency>\n \n \n \x3c!-- For implementing various OTel related components, such as automatic loading of Tracer, Exporter --\x3e\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>
1spring-boot-starter-actuator</artifactId>\n </dependency>\n \n \x3c!-- For connecting micrometer generated metrics to otlp format --\x3e\n <dependency>\n <groupId>io.micrometer</groupId>\n <artifactId>micrometer-registry-otlp</artifactId>\n </dependency>\n \n \x3c!-- For replacing micrometer underlying trace tracer with OTel tracer --\x3e\n <dependency>\n <groupId>io.micrometer</groupId>\n <artifactId>micrometer-tracing-bridge-otel</artifactId>\n </dependency>\n \n \x3c!-- For reporting spans generated by OTel tracer according to otlp protocol --\x3e\n <dependency>\n <groupId>io.opentelemetry</groupId>\n <artifactId>opentelemetry-exporter-otlp</artifactId>\n </dependency>\n\n <dependency>\n <groupId>org.springframework.ai</groupId>\n <artifactId>spring-ai-autoconfigure-model-tool</artifactId>\n <version>1.0.0</version>\n </dependency>\n</dependencies>\n"})}),"\n",(0,i.jsx)(n.p,{children:"Specify Nacos address and promptKey"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" spring.ai.alibaba.agent.proxy.nacos.serverAddr={replace nacos address, example: 127.0.0.1:8848}\n spring.ai.alibaba.agent.proxy.nacos.username={replace nacos username, example: nacos}\n spring.ai.alibaba.agent.proxy.nacos.password={replace nacos password, example: nacos}\n spring.ai.alibaba.agent.proxy.nacos.promptKey={replace with promptKey, example: mse-nacos-helper} \n"})}),"\n",(0,i.jsx)(n.p,{children:"Set observability parameters"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" management.otlp.tracing.export.enabled=true\n management.tracing.sampling.probability=1.0\n management.otlp.tracing.endpoint=http://{admin address}:4318/v1/traces\n management.otlp.metrics.export.enabled=false\n management.otlp.logging.export.enabled=false\n management.opentelemetry.resource-attributes.service.name=agent-nacos-prompt-test\n management.opentelemetry.resource-attributes.service.version=1.0\n spring.ai.chat.client.observations.log-prompt=true\n spring.ai.chat.observations.log-prompt=true\n spring.ai.chat.observations.log-completion=true\n spring.ai.image.observations.log-prompt=true\n spring.ai.vectorstore.observations.log-query-response=true\n spring.ai.alibaba.arms.enabled=true\n spring.ai.alibaba.arms.tool.enabled=true\n spring.ai.alibaba.arms.model.capture-input=true\
1n spring.ai.alibaba.arms.model.capture-output=true\n"})}),"\n",(0,i.jsx)(n.h2,{id:"license",children:"License"}),"\n",(0,i.jsx)(n.p,{children:"This project is open source under the Apache License 2.0 license."}),"\n",(0,i.jsx)(n.h2,{id:"contributing",children:"Contributing"}),"\n",(0,i.jsx)(n.p,{children:"We welcome submitting Issues and Pull Requests to help improve the project."})]})}function p(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.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.