├── .github ├── ISSUE_TEMPLATE │ ├── documentation.yaml │ └── website.yaml ├── pull_request_template.md └── workflows │ └── linter.yml ├── .gitignore ├── Makefile ├── README.md ├── README.zh.md ├── animateSupport.js ├── astro.config.mjs ├── build-ebook.js ├── fix-markdownName.js ├── goat.config.ts ├── package-lock.json ├── package.json ├── postcss.config.cjs ├── public ├── assets │ ├── 2-1.jpg │ ├── 2-2.jpg │ ├── 2-3.jpg │ ├── 2-4.jpg │ ├── 2-5.jpg │ ├── 2-6.jpg │ ├── 2-7.jpg │ └── houston.webp ├── ec2d832080b0454587d03f309ced1085.txt ├── favicon.svg ├── houston-happy.webp ├── img │ ├── blog │ │ ├── a2a │ │ │ ├── a2a-announce.png │ │ │ ├── a2a-arch1.png │ │ │ ├── a2a-arch2.png │ │ │ └── a2a-parterners.png │ │ ├── agent-agentic-patterns │ │ │ ├── Autonomous agent .png │ │ │ ├── High-level flow of a coding agent .png │ │ │ ├── The augmented LLM.png │ │ │ ├── The-evaluator-optimizer-workflow.png │ │ │ ├── The-orchestrator-workers-workflow.png │ │ │ ├── The-parallelization-workflow.png │ │ │ ├── The-prompt-chaining-workflow.png │ │ │ └── The-routing-workflow.png │ │ ├── deepseek │ │ │ ├── ollama-deepseek-r1-distill.png │ │ │ ├── ollama-deepseek-r1.png │ │ │ └── ollama-homepage.png │ │ ├── graph-preview │ │ │ ├── openmanus.png │ │ │ ├── react.png │ │ │ └── workflow-comment-review.png │ │ ├── image.png │ │ ├── intro │ │ │ ├── spring-ai-alibaba-introduction-1.png │ │ │ ├── spring-ai-alibaba-introduction-10.png │ │ │ ├── spring-ai-alibaba-introduction-11.png │ │ │ ├── spring-ai-alibaba-introduction-12.png │ │ │ ├── spring-ai-alibaba-introduction-13.png │ │ │ ├── spring-ai-alibaba-introduction-14.png │ │ │ ├── spring-ai-alibaba-introduction-15.png │ │ │ ├── spring-ai-alibaba-introduction-16.png │ │ │ ├── spring-ai-alibaba-introduction-2.png │ │ │ ├── spring-ai-alibaba-introduction-3.png │ │ │ ├── spring-ai-alibaba-introduction-4.png │ │ │ ├── spring-ai-alibaba-introduction-5.png │ │ │ ├── spring-ai-alibaba-introduction-6.png │ │ │ ├── spring-ai-alibaba-introduction-7.png │ │ │ ├── spring-ai-alibaba-introduction-8.png │ │ │ └── spring-ai-alibaba-introduction-9.png │ │ ├── manus │ │ │ ├── arch.png │ │ │ ├── case1.png │ │ │ ├── case2.png │ │ │ ├── case3.png │ │ │ └── design.png │ │ ├── mcp-desc │ │ │ ├── initialize.png │ │ │ ├── interactive.png │ │ │ ├── overall.PNG │ │ │ ├── stdio-example.png │ │ │ ├── stdio-jar.png │ │ │ └── webflux-example.png │ │ ├── mcp-filesystem │ │ │ └── spring-ai-mcp-architecture.png │ │ ├── mcp-gateway │ │ │ ├── mcp-inspector.png │ │ │ └── spring-ai-alibaba-mcp-gateway.png │ │ ├── mcp-marketplace │ │ │ └── marketplace-screenshot.png │ │ ├── mcp-nacos │ │ │ ├── img.png │ │ │ ├── img_1.png │ │ │ ├── img_2.png │ │ │ ├── img_3.png │ │ │ ├── img_4.png │ │ │ ├── img_5.png │ │ │ ├── img_6.png │ │ │ └── saa-mcp-proxy.png │ │ ├── mcp-streamable-http │ │ │ └── img.png │ │ ├── mcp │ │ │ ├── 1.png │ │ │ ├── 10.png │ │ │ ├── 11.png │ │ │ ├── 12.png │ │ │ ├── 13.jpeg │ │ │ ├── 14.png │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ ├── 4.png │ │ │ ├── 5.png │ │ │ ├── 6.png │ │ │ ├── 7.png │ │ │ ├── 8.png │ │ │ └── 9.png │ │ ├── module-rag │ │ │ └── module-rag.png │ │ ├── nacos │ │ │ ├── spring-ai-dynamic-prompt-nacos-1.png │ │ │ ├── spring-ai-dynamic-prompt-nacos-2.png │ │ │ ├── spring-ai-dynamic-prompt-nacos-3.png │ │ │ ├── spring-ai-dynamic-prompt-nacos-4.png │ │ │ ├── spring-ai-dynamic-prompt-nacos-6.png │ │ │ ├── spring-ai-dynamic-prompt-nacos-7.png │ │ │ ├── spring-ai-dynamic-prompt-nacos-8.png │ │ │ └── spring-ai-dynamic-prompt-nacos-9.png │ │ ├── nl2sql │ │ │ ├── demo.png │ │ │ └── img.png │ │ ├── observability-arms │ │ │ ├── tracing-detail-events.png │ │ │ ├── tracing-detail.png │ │ │ └── tracing.png │ │ ├── rag-ollama │ │ │ ├── open-webui.png │ │ │ └── result.png │ │ ├── spring-ai-alibaba-ga │ │ │ ├── img.png │ │ │ ├── img_1.png │ │ │ ├── img_2.png │ │ │ ├── img_3.png │ │ │ ├── img_4.png │ │ │ ├── img_5.png │ │ │ ├── img_6.png │ │ │ └── img_7.png │ │ ├── spring-ai-output-structure │ │ │ ├── convert_base.png │ │ │ ├── data_flow.png │ │ │ ├── json_inter.png │ │ │ ├── json_none.png │ │ │ ├── list_convert.png │ │ │ ├── map_convert.png │ │ │ ├── serialize_client_format.png │ │ │ ├── serialize_model_format.png │ │ │ └── serialize_no_format.png │ │ ├── spring-ai-rag │ │ │ └── rag.png │ │ ├── spring-ai-tool-calling │ │ │ ├── flow.png │ │ │ ├── time-function.png │ │ │ ├── time-method.png │ │ │ ├── time.png │ │ │ ├── toolcalling-overall.png │ │ │ ├── translate-function.png │ │ │ ├── translate-method.png │ │ │ ├── translate.png │ │ │ ├── weather-function.png │ │ │ ├── weather-method.png │ │ │ └── weather.png │ │ ├── spring-ai │ │ │ ├── 1.png │ │ │ └── 2.png │ │ └── springai-ga │ │ │ └── augmented-llm-concept.png │ ├── community │ │ └── developer │ │ │ ├── image0.png │ │ │ ├── image1.png │ │ │ ├── image10.png │ │ │ ├── image11.png │ │ │ ├── image2.png │ │ │ ├── image3.png │ │ │ ├── image4.png │ │ │ ├── image5.png │ │ │ ├── image6.png │ │ │ ├── image7.png │ │ │ ├── image8.png │ │ │ └── image9.png │ ├── dingtalk-group.png │ ├── favicon.png │ └── user │ │ └── ai │ │ ├── concepts │ │ ├── spring-ai-concepts-model-types.png │ │ ├── spring-ai-concepts-tokens.png │ │ ├── spring-ai-embeddings.png │ │ ├── spring-ai-function-calling.png │ │ ├── spring-ai-prompt-stuffing.png │ │ ├── spring-ai-rag.png │ │ └── structured-output-architecture.png │ │ ├── etl-pipeline.png │ │ ├── get-started │ │ ├── workflow-customer-service.png │ │ ├── workflow-dify-dsl-to-graph-export.png │ │ ├── workflow-dify-dsl-to-graph.png │ │ └── workflow-graph-plantuml.png │ │ ├── overview │ │ ├── 1.0.0 │ │ │ ├── chatbot.png │ │ │ ├── deepresearch.png │ │ │ ├── jmanus.png │ │ │ ├── multi-agent.png │ │ │ ├── playground.png │ │ │ ├── spring-ai-alibaba-architecture.png │ │ │ ├── spring-ai-alibaba-ecosystem.png │ │ │ └── workflow.png │ │ ├── intro.png │ │ └── spring-ai-alibaba-arch.png │ │ ├── practices │ │ ├── bailian-agent │ │ │ ├── agent-architecture.png │ │ │ ├── bailian-app-id.png │ │ │ ├── bailian-app-new.png │ │ │ ├── bailian-app-publish.png │ │ │ └── bailian-app-workspace.png │ │ ├── bailian-knowledge │ │ │ ├── architecture.png │ │ │ ├── embedding-data.png │ │ │ └── import-data.png │ │ ├── dify │ │ │ ├── dify-base-rps.png │ │ │ ├── dify-extreme-rps.png │ │ │ ├── spring-ai-alibaba-base-rps.png │ │ │ └── spring-ai-alibaba-extreme-rps.png │ │ ├── flight-booking │ │ │ ├── architecture.png │ │ │ ├── demo.png │ │ │ ├── step1-llm.png │ │ │ ├── step2-rag.png │ │ │ ├── step3-tool.png │ │ │ └── step4-memory.png │ │ ├── observability │ │ │ ├── image-20250604212605930.png │ │ │ ├── image-20250604212858047.png │ │ │ ├── image-20250604213730393.png │ │ │ ├── image-20250604213822311.png │ │ │ └── image-20250604213913992.png │ │ └── playground │ │ │ ├── image-20250607164742879.png │ │ │ ├── image-20250607171739807.png │ │ │ └── image-20250607190058038.png │ │ ├── sca-ai-example-front.gif │ │ ├── spring-ai-alibaba-arch.png │ │ ├── spring-ai-explained-sourcecode │ │ ├── 3da352d7-3fa4-4af3-8b27-d31889a37e1c.png │ │ ├── APyjbCBm2o9qmixFY8dcBpKYnEg.png │ │ ├── AlkVb6xPSombAmxM5MDcBOJon2b.png │ │ ├── AoQkbxgh7olAVTx2neVcpihgnIh.png │ │ ├── BEvabUgF1oRF5ixk2lHcoodYnfh.png │ │ ├── BuynbEf4CoEgrpxZsDQcJFGanPg.png │ │ ├── C8OrbhbjMoMXtPxUG37cRVw0nUc.png │ │ ├── CKYLb6pU1o5QZSxAKR7cB2KonoW.png │ │ ├── Cdbzbt9NxoODIIxqMDCceoJYnbd.png │ │ ├── Dhk1bOFozoLh1nx8O8XcBBMxnjf.png │ │ ├── Dl3Qbhex5oca2AxXfoacXAWSnde.png │ │ ├── ERkDbhGU3oWYJZxX7Ssc5fR2nMg.png │ │ ├── ESn9bs6ohodvP9x69nXciSEpnXy.png │ │ ├── EpMVbD15Doxyzax0tzrcIR0Bnue.png │ │ ├── FsVQbhh8pozpejxLYPUcc8YynLc.png │ │ ├── GXXnbbB5voLcAWxRzmwcywwZnng.png │ │ ├── Gnqkb2uUMoY10pxgsG9cF1Ucn5c.png │ │ ├── HwcbbwbpaoJ2JtxrZyocj1Ytnfe.png │ │ ├── I36Mb8pTHovOonx5s6DcpP0Encb.png │ │ ├── IDvDbZlpoov8HGxuxG1c4nu9nMd.png │ │ ├── IEW6bwFVUofWMBxF6nRcIDv6nCb.png │ │ ├── IMS3b5g5KoGHZTxkny7covrpnCc.png │ │ ├── IYlsbQN6LoNL8hxzWz3ceJCFnQf.png │ │ ├── IpT9bWvSoopqH8xi5rtcLOwqnmK.png │ │ ├── Iw5gbB01XoaEzixFoiAcgMGEnc3.png │ │ ├── JFjTbe86EoGAwwx0UQ1cbJTTnNh.png │ │ ├── KAXabu18SoUDnvxLQmYcfnRAnvh.png │ │ ├── KBoobHai0oeyr1xUkhGcsnvRnJI.png │ │ ├── KjlsbekV9ocAv2xqgL7chb6tnib.png │ │ ├── Kl3jbSDOWoZuTLxB6ckcPTGrnUg.png │ │ ├── LLr8bbI5FozdDwxJ2KXcfNKNnK9.png │ │ ├── LcaTbI65YozRJdx4AhpcaDI0nf5.png │ │ ├── Le65bQU7qoviLyxc5T3c10M0nxf.png │ │ ├── LrWBb5iafoCJMNxYhZhcPgPCn5c.png │ │ ├── M1C7b3UBpoVd9dxDoyqc3EtNnJc.png │ │ ├── MbEgbmWWpoRgCUxGyoVcJJ7SnXg.png │ │ ├── MhfubcxL0ovyyhxoa1yckO7inVd.png │ │ ├── MrtZbJjnoo9b73xuLoSceQmNnjb.png │ │ ├── N0FTbkho8ozPNPxqAr4cKHpQnWb.png │ │ ├── NHdVbwKdpoy241xqWsTcbNDqn8c.png │ │ ├── Npo0b5sLaorTEzxzRFTczLo2nWb.png │ │ ├── OER3bxN4DoiFnjxTI4IcmsWsnQf.png │ │ ├── OKuGbaedFoPKCmxLbmNc03yHnDg.png │ │ ├── OkRmbADN6oWkAOxj6o4cvTSpnBe.png │ │ ├── P7VubwKbGoqTg4xlTbXc0KZunpf.png │ │ ├── Pq9HbrBe8oKMgyxN6hFcaxGPnpR.png │ │ ├── QHmfbObZOoSjsxxDzREcVEq0nVd.png │ │ ├── QSmXbeYKHotZS4xzsskcHaQ8ntg.png │ │ ├── QYnIbXx1jovwXRxfvL7cK1k3nKd.png │ │ ├── QqOxbKnAsoUBABxHUkkcwotEn1f.png │ │ ├── R3zxb8SUCoxeA5x97ZicHatnnie.png │ │ ├── R63jbv3k6oOJZQxBWHRcBJxwnAc.png │ │ ├── RFMrbs2AKo6vrgxg85scD8XQnbh.png │ │ ├── RSnmbujXSomQIyxAeSwcbRsBnHh.png │ │ ├── RUJhb5LCAoSREVxOwRacjWjKnld.png │ │ ├── S7WAbLYZioWVVhxRncwciIyMnye.png │ │ ├── SP1hbvmh0oz97hxvEb4ceXddnWg.png │ │ ├── SPDdb11MhoD6HGx8lmCc3MPfnbz.png │ │ ├── SQjdbEKhAo72oIxh3CQcpHqenNh.png │ │ ├── ShudbZE1eoGDb9xmIsOcnHTVnXd.png │ │ ├── SpringAI下的MCP.png │ │ ├── TW7Qb3N7posrKYxC1eHcSEdWnkb.png │ │ ├── TZcNb2hCYoe44Sx5EJacJOFNnjh.png │ │ ├── TwJzbsGYmo6oMUxOJXRcR7a5n0c.png │ │ ├── UFJbbMvMbowwHBxYDracNCPcnNb.png │ │ ├── UNqwb8wy7oOlR9xHoIzcbzfanxh.png │ │ ├── V9ylbKbhoo9gdjxpFrOcUWRWnah.png │ │ ├── VGlCbtPntodJ08xBChbcsY3gnPd.png │ │ ├── VNYnbYyJloNQv1xXNLAcPRyTnog.png │ │ ├── VR2JboLW4oQgAKxSULFclN0jnJm.png │ │ ├── VUPDbcm5eopLoexL6hAcsHHDnuo.png │ │ ├── VjaTbASptoYByTxbcmQcZ0U0nrh.png │ │ ├── WMjpbffGuoTegkxc12Uc6zOAnKb.png │ │ ├── WlSGblismo4r8Ax1fQbcd4NxnUe.png │ │ ├── WslIbBAXvoJnUExk37vcYtulnMg.png │ │ ├── XfCmb7eL4o6iCyx1tPXcGAUCnpc.png │ │ ├── XhBHbSvfgoQvaJxjQZ6ckjW4ntd.png │ │ ├── XrYYbGKYQoNENCxhT6HciyOAnUd.png │ │ ├── XsSibkFouoCa6zx5UC8cD0xIn0c.png │ │ ├── YFNubwl4Posj9Qxy181ch0qunhf.png │ │ ├── YdBwbHRCxoYcMWxRBIYcsFArnye.png │ │ ├── Ymhebi1KLofWIzxcO1rcjJLYn5f.png │ │ ├── YwaabAMpzoTHGkxeuRwcAckjnzg.png │ │ ├── Yx4ibHOjIofHuUxUwhBcK4pln7g.png │ │ ├── ZYBabH4B1oUzxrxiXkecelyhnuc.png │ │ ├── ZcRIbE9BCoYVlxxr95Zc4bABn8b.png │ │ ├── advisor基础-架构图.png │ │ ├── chatClient自动注入.png │ │ ├── mcp-源码解读.png │ │ ├── rag-模块化.png │ │ ├── tool-工具链路触发.png │ │ ├── tool源码-工具各类说明.png │ │ └── 观测篇.png │ │ └── tutorials │ │ ├── basics │ │ ├── ETL-document.png │ │ ├── ETL-instance.png │ │ ├── ETL.png │ │ ├── MCP-client.png │ │ ├── MCP-server.png │ │ ├── MCP.png │ │ ├── advisor-chain-and-chat-model.png │ │ ├── core-components.png │ │ ├── img.png │ │ ├── img_1.png │ │ ├── img_10.png │ │ ├── img_11.png │ │ ├── img_12.png │ │ ├── img_13.png │ │ ├── img_14.png │ │ ├── img_15.png │ │ ├── img_16.png │ │ ├── img_2.png │ │ ├── img_3.png │ │ ├── img_4.png │ │ ├── img_5.png │ │ ├── img_6.png │ │ ├── img_7.png │ │ ├── img_8.png │ │ ├── img_9.png │ │ └── non-streaming-and-streaming.png │ │ ├── graph │ │ ├── HD8hbyfCyomfSvx0NMcceVthnZc.png │ │ ├── HPNUbeoWioKO3px26yccElXWnre.png │ │ ├── KHSBb6HzYogFBkx433jc4vfvnHh.png │ │ ├── LMPkbZ5heoHs2Qx604kcdiplnlc.png │ │ ├── NivBbKqXooFsgexeeRrcIV0rnEf.png │ │ ├── PoNhbwWV0oa0QixIMsHcsdYFn8f.png │ │ ├── X9yHbGypQoTzvixzyA6cNNwkn7d.png │ │ ├── advanced-features │ │ │ ├── interrupt-resume │ │ │ │ └── interrupt.svg │ │ │ ├── parallel │ │ │ │ └── parallel.svg │ │ │ ├── streaming │ │ │ │ └── streaming.svg │ │ │ └── subgraph-nodes │ │ │ │ └── flow.svg │ │ ├── architecture │ │ │ ├── async-execution-model.svg │ │ │ ├── asyncnodegenerator-statemachine.svg │ │ │ ├── complete-data-flow.svg │ │ │ ├── core-components-relationship.svg │ │ │ ├── core-execution-sequence.svg │ │ │ ├── spring-boot-integration.svg │ │ │ ├── state-management-flow.svg │ │ │ ├── stategraph-to-compiledgraph.svg │ │ │ └── system-overview.svg │ │ ├── core-concepts │ │ │ ├── compiled-graph │ │ │ │ ├── compile.svg │ │ │ │ ├── generator.svg │ │ │ │ └── sequence.svg │ │ │ ├── edge │ │ │ │ └── condition.svg │ │ │ ├── node │ │ │ │ └── nodeaction.svg │ │ │ ├── overall-state │ │ │ │ └── update.svg │ │ │ └── state-graph │ │ │ │ ├── edge.svg │ │ │ │ ├── life-cycle.svg │ │ │ │ ├── node.svg │ │ │ │ └── validate.svg │ │ └── introduction │ │ │ └── customer-service-workflow.svg │ │ ├── model │ │ └── chat-model-flow.png │ │ ├── multimodality │ │ ├── message-api.jpg │ │ └── multimodal.test.png │ │ ├── outputparser │ │ ├── structured-output-api-flow.png │ │ ├── structured-output-class-hierarchy.png │ │ └── structured-output-flow.png │ │ ├── practices │ │ └── rag_diagram.png │ │ ├── prompt │ │ ├── chat-options.png │ │ └── message.png │ │ └── tool │ │ └── function-calling-flow.png ├── logo_white.svg ├── saa_logo.png └── sca-icon.svg ├── runtime.js ├── src ├── components │ ├── ai │ │ ├── AiButton.astro │ │ ├── ArchitectureDiagram.astro │ │ ├── CoreFeature.astro │ │ ├── Footer.astro │ │ └── HomeIntroduce.astro │ ├── common │ │ ├── BaseContainer.astro │ │ ├── BlogCardContainer.astro │ │ ├── Button.astro │ │ ├── CardMenu.astro │ │ ├── EbookLock.astro │ │ ├── Footer.astro │ │ ├── Header │ │ │ ├── Alert.astro │ │ │ ├── CommunityMenu.astro │ │ │ ├── DocsMenu.astro │ │ │ ├── LearnMenu.astro │ │ │ ├── SolutionsMenu.astro │ │ │ ├── index.astro │ │ │ ├── navbar.ts │ │ │ └── searchComp │ │ │ │ ├── index.astro │ │ │ │ └── variables.css │ │ ├── LanguageToggle.astro │ │ ├── MenuContainer.astro │ │ ├── MenuList.astro │ │ ├── Message │ │ │ ├── Message.jsx │ │ │ ├── index.css │ │ │ └── index.jsx │ │ ├── MobileNavbar.astro │ │ ├── MobileNavbarSublist.astro │ │ ├── Navbar.astro │ │ ├── Paginate │ │ │ ├── Pagination.astro │ │ │ └── paginate.ts │ │ ├── ReactComponents │ │ │ ├── Button.jsx │ │ │ ├── Fork.jsx │ │ │ ├── Jump.jsx │ │ │ ├── Star.jsx │ │ │ └── Start.jsx │ │ ├── Toggle.astro │ │ ├── Tooltip │ │ │ ├── index.css │ │ │ └── index.jsx │ │ └── UIString.astro │ ├── home │ │ ├── Carousel.astro │ │ ├── ChooseReason.astro │ │ ├── CompaniesFeedback.astro │ │ ├── HomeIntroduce.astro │ │ ├── HomeSolutionsCard.astro │ │ ├── OverViewImage │ │ │ ├── components │ │ │ │ ├── ControlPanel.jsx │ │ │ │ ├── DataPanel.jsx │ │ │ │ ├── GovernancePanel.jsx │ │ │ │ ├── OpsPanel.jsx │ │ │ │ ├── TelemetryPanel.jsx │ │ │ │ └── common │ │ │ │ │ ├── Arrow.jsx │ │ │ │ │ ├── Panel.jsx │ │ │ │ │ ├── PopupContent.jsx │ │ │ │ │ ├── Product.jsx │ │ │ │ │ ├── ProductPanel.jsx │ │ │ │ │ └── sendFetch.jsx │ │ │ ├── context.ts │ │ │ ├── index.astro │ │ │ ├── index.jsx │ │ │ ├── style.css │ │ │ ├── types.d.ts │ │ │ └── utils.ts │ │ ├── ProductDisplayCard.astro │ │ ├── Solution.astro │ │ └── StarAndForkV2 │ │ │ ├── Button.jsx │ │ │ ├── Fork.jsx │ │ │ ├── Jump.jsx │ │ │ ├── Star.jsx │ │ │ ├── Video.jsx │ │ │ └── index.tsx │ ├── icon │ │ ├── Adaptive.astro │ │ ├── Aibook.astro │ │ ├── Aibox.astro │ │ ├── Aicen.astro │ │ ├── Arrow.astro │ │ ├── Ding.astro │ │ ├── Easy.astro │ │ ├── Email.astro │ │ ├── Flames.astro │ │ ├── Fork.astro │ │ ├── Github.astro │ │ ├── Lock.astro │ │ ├── Star.astro │ │ ├── TimeTested.astro │ │ ├── UpDown.astro │ │ ├── UpRight.astro │ │ ├── Variety.astro │ │ └── index.jsx │ ├── markdownSet │ │ ├── BlogButton.astro │ │ ├── BlogContent.astro │ │ ├── BlogTop.astro │ │ ├── Card.astro │ │ ├── MarkdownDetail.astro │ │ ├── NewCard.astro │ │ ├── SimpleCard.astro │ │ ├── SimpleContainer.astro │ │ └── TocComponents │ │ │ ├── TocComponent.astro │ │ │ ├── markdown-toc.ts │ │ │ └── style.css │ ├── plugin │ │ ├── McpHub │ │ │ ├── Check.jsx │ │ │ ├── Close.jsx │ │ │ ├── Down.jsx │ │ │ ├── Dropdown.jsx │ │ │ ├── Filter.jsx │ │ │ ├── PluginCard.jsx │ │ │ ├── PluginEnum.js │ │ │ └── index.jsx │ │ ├── McpIntroduce.astro │ │ ├── PluginHub │ │ │ ├── Check.jsx │ │ │ ├── Close.jsx │ │ │ ├── Down.jsx │ │ │ ├── Dropdown.jsx │ │ │ ├── Filter.jsx │ │ │ ├── PluginCard.jsx │ │ │ ├── PluginEnum.js │ │ │ └── index.jsx │ │ └── PluginIntroduce.astro │ └── starlight │ │ ├── Badge.astro │ │ ├── Banner.astro │ │ ├── ContentPanel.astro │ │ ├── Head.astro │ │ ├── Header.astro │ │ ├── MobileMenuToggle.astro │ │ ├── PageFrame.astro │ │ ├── PageSidebar.astro │ │ ├── PageTitle.astro │ │ ├── Pagination.astro │ │ ├── Sidebar.astro │ │ ├── SidebarSublist.astro │ │ ├── SkipLink.astro │ │ ├── TableOfContents │ │ ├── CommunityMenu.astro │ │ ├── ContributeMenu.astro │ │ ├── TableOfContentsList.astro │ │ └── index.astro │ │ ├── TwoColumnContent.astro │ │ └── style.css ├── config.yaml ├── constant.ts ├── content │ ├── blog │ │ ├── agent-agentic-patterns.md │ │ ├── google-a2a-protocol.md │ │ ├── news │ │ │ ├── attend-a-meeting.md │ │ │ ├── meetup-2024-11-26-shanghai.md │ │ │ └── spring-ai-alibaba-atom-programming-contest.md │ │ ├── spring-ai-100-ga-released.md │ │ ├── spring-ai-alibaba-1.0-ga-release.md │ │ ├── spring-ai-alibaba-graph-preview.md │ │ ├── spring-ai-alibaba-introduction.md │ │ ├── spring-ai-alibaba-mcp-filesystem.md │ │ ├── spring-ai-alibaba-mcp-gateway.md │ │ ├── spring-ai-alibaba-mcp-nacos.md │ │ ├── spring-ai-alibaba-mcp-streamable-http.md │ │ ├── spring-ai-alibaba-mcp.md │ │ ├── spring-ai-alibaba-module-rag.md │ │ ├── spring-ai-alibaba-nl2sql.md │ │ ├── spring-ai-alibaba-observability-arms.md │ │ ├── spring-ai-alibaba-ollama-deepseek.md │ │ ├── spring-ai-alibaba-ollama-rag.md │ │ ├── spring-ai-alibaba-openmanus.md │ │ ├── spring-ai-alibaba-plugin.md │ │ ├── spring-ai-alibaba-rag-ollama.md │ │ ├── spring-ai-dynamic-prompt-nacos.md │ │ ├── spring-ai-mcp-desc.md │ │ ├── spring-ai-mcp-marketplace.md │ │ ├── spring-ai-output-structure.md │ │ └── spring-ai-toolcalling.md │ ├── config.ts │ └── docs │ │ ├── 1.0.0-M3.2 │ │ ├── _sidebar.json │ │ ├── en │ │ │ ├── concepts.md │ │ │ ├── get-started.md │ │ │ ├── overview.md │ │ │ ├── practices │ │ │ │ ├── playground-flight-booking.md │ │ │ │ └── rag.md │ │ │ └── tutorials │ │ │ │ ├── chat-client.md │ │ │ │ ├── chat-model.md │ │ │ │ ├── embedding.md │ │ │ │ ├── function-calling.md │ │ │ │ ├── memory.md │ │ │ │ ├── prompt.md │ │ │ │ ├── retriever.md │ │ │ │ ├── structured-output.md │ │ │ │ └── vectorstore.md │ │ └── zh-cn │ │ │ ├── concepts.md │ │ │ ├── get-started.md │ │ │ ├── overview.md │ │ │ ├── practices │ │ │ ├── memory.md │ │ │ ├── playground-flight-booking.md │ │ │ └── rag.md │ │ │ └── tutorials │ │ │ ├── chat-client.md │ │ │ ├── chat-model.md │ │ │ ├── embedding.md │ │ │ ├── function-calling.md │ │ │ ├── memory.md │ │ │ ├── prompt.md │ │ │ ├── retriever.md │ │ │ ├── structured-output.md │ │ │ └── vectorstore.md │ │ ├── 1.0.0-M5.1 │ │ ├── _sidebar.json │ │ ├── en │ │ │ ├── concepts.md │ │ │ ├── get-started.md │ │ │ ├── models │ │ │ │ ├── dashScope.md │ │ │ │ ├── deepseek.md │ │ │ │ ├── like-openAI.md │ │ │ │ ├── ollama.md │ │ │ │ └── openAI.md │ │ │ ├── overview.md │ │ │ ├── practices │ │ │ │ ├── playground-flight-booking.md │ │ │ │ └── rag.md │ │ │ └── tutorials │ │ │ │ ├── chat-client.md │ │ │ │ ├── chat-model.md │ │ │ │ ├── embedding.md │ │ │ │ ├── function-calling.md │ │ │ │ ├── mcp.md │ │ │ │ ├── memory.md │ │ │ │ ├── prompt.md │ │ │ │ ├── rag.md │ │ │ │ ├── retriever.md │ │ │ │ ├── structured-output.md │ │ │ │ └── vectorstore.md │ │ └── zh-cn │ │ │ ├── concepts.md │ │ │ ├── get-started.md │ │ │ ├── integrations │ │ │ ├── analyticdb.md │ │ │ ├── documentreader.md │ │ │ ├── tools.md │ │ │ └── vectorstore.md │ │ │ ├── models │ │ │ ├── dashScope.md │ │ │ ├── deepseek.md │ │ │ ├── like-openAI.md │ │ │ ├── ollama.md │ │ │ └── openAI.md │ │ │ ├── overview.md │ │ │ ├── practices │ │ │ ├── bailian │ │ │ │ ├── rag-agent.md │ │ │ │ └── rag-knowledge.md │ │ │ ├── memory.md │ │ │ ├── playground-flight-booking.md │ │ │ ├── rag.md │ │ │ └── usecase │ │ │ │ └── playground-flight-booking.md │ │ │ └── tutorials │ │ │ ├── agent-agentic-patterns.md │ │ │ ├── chat-client.md │ │ │ ├── chat-model.md │ │ │ ├── embedding.md │ │ │ ├── function-calling.md │ │ │ ├── mcp.md │ │ │ ├── memory.md │ │ │ ├── prompt.md │ │ │ ├── rag.md │ │ │ ├── retriever.md │ │ │ ├── structured-output.md │ │ │ └── vectorstore.md │ │ ├── 1.0.0-M6.1 │ │ ├── _sidebar.json │ │ ├── en │ │ │ ├── concepts.md │ │ │ ├── get-started.md │ │ │ ├── models │ │ │ │ ├── dashScope.md │ │ │ │ ├── deepseek.md │ │ │ │ ├── like-openAI.md │ │ │ │ ├── ollama.md │ │ │ │ └── openAI.md │ │ │ ├── overview.md │ │ │ ├── practices │ │ │ │ ├── playground-flight-booking.md │ │ │ │ └── rag.md │ │ │ └── tutorials │ │ │ │ ├── chat-client.md │ │ │ │ ├── chat-model.md │ │ │ │ ├── embedding.md │ │ │ │ ├── function-calling.md │ │ │ │ ├── mcp.md │ │ │ │ ├── memory.md │ │ │ │ ├── prompt.md │ │ │ │ ├── rag.md │ │ │ │ ├── retriever.md │ │ │ │ ├── structured-output.md │ │ │ │ └── vectorstore.md │ │ └── zh-cn │ │ │ ├── concepts.md │ │ │ ├── get-started.md │ │ │ ├── integrations │ │ │ ├── analyticdb.md │ │ │ ├── documentreader.md │ │ │ ├── tools.md │ │ │ └── vectorstore.md │ │ │ ├── models │ │ │ ├── dashScope.md │ │ │ ├── deepseek.md │ │ │ ├── like-openAI.md │ │ │ ├── ollama.md │ │ │ ├── openAI.md │ │ │ └── qwq.md │ │ │ ├── overview.md │ │ │ ├── practices │ │ │ ├── bailian │ │ │ │ ├── rag-agent.md │ │ │ │ └── rag-knowledge.md │ │ │ ├── memory.md │ │ │ ├── playground-flight-booking.md │ │ │ ├── rag.md │ │ │ └── usecase │ │ │ │ └── playground-flight-booking.md │ │ │ └── tutorials │ │ │ ├── agent-agentic-patterns.md │ │ │ ├── chat-client.md │ │ │ ├── chat-model.md │ │ │ ├── embedding.md │ │ │ ├── function-calling.md │ │ │ ├── mcp.md │ │ │ ├── memory.md │ │ │ ├── prompt.md │ │ │ ├── rag.md │ │ │ ├── retriever.md │ │ │ ├── structured-output.md │ │ │ └── vectorstore.md │ │ ├── 1.0.0.2 │ │ ├── _sidebar.json │ │ ├── en │ │ │ ├── faq.md │ │ │ ├── get-started │ │ │ │ ├── agent.md │ │ │ │ ├── chatbot.md │ │ │ │ └── workflow.md │ │ │ ├── overview.md │ │ │ ├── practices │ │ │ │ ├── bailian │ │ │ │ │ ├── rag-agent.md │ │ │ │ │ └── rag-knowledge.md │ │ │ │ ├── dify-dsl-to-graph.md │ │ │ │ ├── dynamic-prompt │ │ │ │ │ └── dynamic-prompt.md │ │ │ │ ├── integrations │ │ │ │ │ ├── analyticdb.md │ │ │ │ │ ├── documentreader.md │ │ │ │ │ ├── tool-calling.md │ │ │ │ │ └── vectorstore.md │ │ │ │ ├── mcp │ │ │ │ │ ├── spring-ai-mcp-local-file.md │ │ │ │ │ ├── spring-ai-mcp-sqlite.md │ │ │ │ │ ├── spring-ai-mcp-starter-client.md │ │ │ │ │ └── spring-ai-mcp-starter-server.md │ │ │ │ └── usecase │ │ │ │ │ └── playground-flight-booking.md │ │ │ └── tutorials │ │ │ │ ├── graph │ │ │ │ ├── human-in-the-loop.md │ │ │ │ ├── mcp-node.md │ │ │ │ ├── parallel-node.md │ │ │ │ ├── quick-guide.md │ │ │ │ ├── streaming.md │ │ │ │ └── whats-spring-ai-alibaba-graph.md │ │ │ │ └── starters-and-quick-guide.md │ │ └── zh-cn │ │ │ ├── faq.md │ │ │ ├── get-started │ │ │ ├── agent.md │ │ │ ├── chatbot.md │ │ │ └── workflow.md │ │ │ ├── overview.md │ │ │ ├── practices │ │ │ ├── bailian │ │ │ │ ├── rag-agent.md │ │ │ │ └── rag-knowledge.md │ │ │ ├── dify-dsl-to-graph.md │ │ │ ├── dynamic-prompt │ │ │ │ └── dynamic-prompt.md │ │ │ ├── graph │ │ │ │ ├── human-in-the-loop.md │ │ │ │ ├── mcp-node.md │ │ │ │ ├── parallel-node.md │ │ │ │ ├── quick-guide.md │ │ │ │ └── streaming.md │ │ │ ├── integrations │ │ │ │ ├── analyticdb.md │ │ │ │ ├── documentreader.md │ │ │ │ ├── tool-calling.md │ │ │ │ └── vectorstore.md │ │ │ ├── mcp │ │ │ │ ├── spring-ai-mcp-local-file.md │ │ │ │ ├── spring-ai-mcp-sqlite.md │ │ │ │ ├── spring-ai-mcp-starter-client.md │ │ │ │ └── spring-ai-mcp-starter-server.md │ │ │ ├── observability │ │ │ │ └── observability.md │ │ │ └── usecase │ │ │ │ ├── playground-flight-booking.md │ │ │ │ └── playground.md │ │ │ ├── spring-ai-sourcecode-explained │ │ │ ├── chapter-1-chat-first-experience.md │ │ │ ├── chapter-2-advisor-enhancement.md │ │ │ ├── chapter-3-tool-integration.md │ │ │ ├── chapter-4-structured-output.md │ │ │ ├── chapter-5-vector-database.md │ │ │ ├── chapter-6-rag-enhanced-qa.md │ │ │ ├── chapter-7-mcp-usage-paradigm.md │ │ │ ├── chapter-8-model-evaluation.md │ │ │ └── chapter-9-observability.md │ │ │ └── tutorials │ │ │ ├── basics │ │ │ ├── ETL.md │ │ │ ├── MCP-client.md │ │ │ ├── MCP-server.md │ │ │ ├── MCP-tool.md │ │ │ ├── MCP.md │ │ │ ├── RAG.md │ │ │ ├── advisors.md │ │ │ ├── chat-client.md │ │ │ ├── chat-model.md │ │ │ ├── concepts.md │ │ │ ├── docker-compose.md │ │ │ ├── embedding.md │ │ │ ├── memory.md │ │ │ ├── model-context-protocol.md │ │ │ ├── model-evaluation.md │ │ │ ├── multimodality.md │ │ │ ├── observability.md │ │ │ ├── prompt-engineering-patterns.md │ │ │ ├── prompt.md │ │ │ ├── retriever.md │ │ │ ├── spring-ai-alibaba-mcp-nacos-introduce.md │ │ │ ├── structured-output.md │ │ │ ├── test.md │ │ │ ├── tool-calling.md │ │ │ └── vectorstore.md │ │ │ ├── graph │ │ │ ├── advanced-features │ │ │ │ ├── interrupt-resume.md │ │ │ │ ├── parallel-processing.md │ │ │ │ ├── streaming.md │ │ │ │ └── subgraph-nodes.md │ │ │ ├── architecture.md │ │ │ ├── components │ │ │ │ ├── agent-patterns.md │ │ │ │ └── predefined-nodes.md │ │ │ ├── core-concepts │ │ │ │ ├── compiled-graph.md │ │ │ │ ├── edge.md │ │ │ │ ├── node.md │ │ │ │ ├── overall-state.md │ │ │ │ └── state-graph.md │ │ │ └── whats-spring-ai-alibaba-graph.md │ │ │ ├── models │ │ │ ├── dashScope.md │ │ │ ├── deepseek.md │ │ │ ├── like-openAI.md │ │ │ ├── ollama.md │ │ │ ├── openAI.md │ │ │ └── qwq.md │ │ │ └── starters-and-quick-guide.md │ │ └── developer │ │ ├── _sidebar.json │ │ ├── en │ │ ├── contributor-guide │ │ │ ├── file-write-guide_dev.md │ │ │ ├── new-contributor-guide_dev.md │ │ │ └── reporting-security-issues_dev.md │ │ └── developers_dev.md │ │ └── zh-cn │ │ ├── contributor-guide │ │ ├── code-style-guide_dev.md │ │ ├── file-write-guide_dev.md │ │ ├── new-contributor-guide_dev.md │ │ └── reporting-security-issues_dev.md │ │ ├── developers_dev.md │ │ └── member_role_dev.md ├── env.d.ts ├── i18n │ ├── en │ │ └── ui.ts │ ├── languages.ts │ ├── translation-checkers.ts │ ├── util.ts │ └── zh-cn │ │ └── ui.ts ├── layouts │ └── BaseLayout.astro ├── pages │ ├── blog │ │ ├── [...page].astro │ │ ├── [...slug].astro │ │ ├── article │ │ │ └── [...page].astro │ │ ├── case │ │ │ └── [...page].astro │ │ └── ecosystem │ │ │ └── [...page].astro │ ├── cloud │ │ ├── Top.astro │ │ └── index.astro │ ├── en │ │ ├── blog │ │ │ ├── [...page].astro │ │ │ ├── [...slug].astro │ │ │ ├── article │ │ │ │ └── [...page].astro │ │ │ ├── case │ │ │ │ └── [...page].astro │ │ │ └── ecosystem │ │ │ │ └── [...page].astro │ │ ├── cloud │ │ │ └── index.astro │ │ └── index.astro │ ├── index.astro │ ├── initializer │ │ └── index.astro │ └── mcp │ │ ├── Top.astro │ │ └── index.astro ├── style │ ├── fonts.css │ ├── global.css │ └── markdown.css ├── types.d.ts └── utils │ ├── config.ts │ ├── frontmatter.mjs │ ├── sendFetch.ts │ ├── useCustomSWR.jsx │ └── util.ts ├── tailwind.config.mjs ├── template ├── 404.startlight.tpl └── index.startlight.tpl ├── tools ├── github-actions │ └── setup-deps │ │ └── action.yml ├── linter │ ├── codespell │ │ ├── .codespell.ignorewords │ │ └── .codespell.skip │ ├── markdownlint │ │ └── markdown_lint_config.yaml │ └── yamllint │ │ └── .yamllint ├── make │ ├── common.mk │ ├── docs.mk │ ├── linter.mk │ └── tools.mk └── scripts │ └── newline-check.py ├── tsconfig.json └── virtual.d.ts /.github/ISSUE_TEMPLATE/documentation.yaml: -------------------------------------------------------------------------------- 1 | name: 📄 Documentation Issue 2 | description: File an issue/update related to documentation 3 | title: "[Docs]: " 4 | labels: ["documentation"] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Thank you for taking the time to file this documentation issue! 10 | - type: textarea 11 | id: "current-state" 12 | attributes: 13 | label: Current State 14 | description: Current state of the documentation page with possible links and screenshots 15 | placeholder: The "Getting Started" page does not fully explain... 16 | value: | 17 | **Description of the current state/issue**: 18 | **Link to the page**: 19 | **Screenshots (if relevant)**: 20 | - type: textarea 21 | id: "desired-state" 22 | attributes: 23 | label: Desired State 24 | description: How should the docs look like instead? 25 | placeholder: The page should instead explain... 26 | value: | 27 | **Description of the change you are proposing**: 28 | - type: dropdown 29 | id: "is-working" 30 | attributes: 31 | label: Would you like to fix this issue? 32 | description: You can choose to fix this issue yourself or let other contributors in the community fix it 33 | options: ["Yes! Count me in", "No. Please assign another contributor"] 34 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/website.yaml: -------------------------------------------------------------------------------- 1 | name: 🖥 Website Issue 2 | description: File an issue to update the website 3 | title: "[Site]: " 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thank you for taking the time to fill out this site update! 9 | - type: textarea 10 | id: "current-state" 11 | attributes: 12 | label: Current State 13 | description: Current state of the website with possible links and screenshots 14 | placeholder: The image in the homepage is not aligned properly... 15 | value: | 16 | **Description of the current state/issue**: 17 | **Link to the page**: 18 | **Screenshots (if relevant)**: 19 | - type: textarea 20 | id: "desired-state" 21 | attributes: 22 | label: Desired State 23 | description: How should the site look like instead? 24 | placeholder: The image should instead be aligned... 25 | value: | 26 | **Description of the change you are proposing**: 27 | - type: dropdown 28 | id: "is-working" 29 | attributes: 30 | label: Would you like to fix this issue? 31 | description: You can choose to fix this issue yourself or let other contributors in the community fix it 32 | options: ["Yes! Count me in", "No. Please assign another contributor"] 33 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ### Fixes: #[Add issue number here] 2 | 3 | ### Changes: 4 | 5 | ### Screenshots of the change: 6 | -------------------------------------------------------------------------------- /.github/workflows/linter.yml: -------------------------------------------------------------------------------- 1 | name: 👀 Linter 2 | on: 3 | pull_request: 4 | branches: 5 | - "main" 6 | push: 7 | branches: 8 | - "main" 9 | concurrency: 10 | group: ${{ github.workflow }}-${{ github.ref }} 11 | cancel-in-progress: true 12 | jobs: 13 | lint-check: 14 | name: Lint Checks 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 18 | - uses: ./tools/github-actions/setup-deps 19 | - name: Checkout LFS objects 20 | run: git lfs checkout 21 | - name: Lint Checks 22 | run: make tools && make lint 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | node_modules 3 | 4 | # production 5 | build 6 | dist 7 | .astro 8 | .idea 9 | 10 | # misc 11 | .DS_Store 12 | .env.local 13 | .env.development.local 14 | .env.test.local 15 | .env.production.local 16 | .idea 17 | .iml 18 | 19 | # Log files 20 | npm-debug.log* 21 | yarn-debug.log* 22 | yarn-error.log* 23 | pnpm-debug.log* 24 | 25 | # Editor directories and files 26 | .docusaurus 27 | /**/*/.cache-loader 28 | -------------------------------------------------------------------------------- /animateSupport.js: -------------------------------------------------------------------------------- 1 | import fs from "fs/promises"; 2 | import path from "path"; 3 | import { fileURLToPath } from "url"; 4 | const curFilename = fileURLToPath(import.meta.url); 5 | const curDirname = path.dirname(curFilename); 6 | 7 | const indexFile = path.join(curDirname, "dist/index.html"); 8 | fs.readFile(indexFile, "utf-8").then((data) => { 9 | //在第一个var script = document.createElement('script');script.src = 'https://cdnjs.cloudflare.com/ajax/libs/web-animations/2.3.2/web-animations-next.min.js';script.onload=function(){document.getAnimations=window.Element.prototype.getAnimations;};document.head.appendChild(script); 13 | -------------------------------------------------------------------------------- /src/components/starlight/PageTitle.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const PAGE_TITLE_ID = "_top"; 3 | --- 4 | 5 |

6 | {Astro.props.entry.data.title} 7 |

8 | 9 | 18 | -------------------------------------------------------------------------------- /src/components/starlight/SkipLink.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const PAGE_TITLE_ID = "_top"; 3 | const { labels } = Astro.props; 4 | --- 5 | 6 | {labels["skipLink.label"]} 9 | 10 | 28 | -------------------------------------------------------------------------------- /src/components/starlight/TableOfContents/CommunityMenu.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { HeadLinkList as LinkList} from "@serverless-cd/goat-ui"; 3 | import { getCommunityLinkList } from "@/constant"; 4 | import { useTranslations } from "@i18n/util"; 5 | const t = useTranslations(Astro); 6 | --- 7 | 8 | 13 | -------------------------------------------------------------------------------- /src/components/starlight/TableOfContents/ContributeMenu.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { getLanguageFromURL } from "@/utils/util"; 3 | import { HeadLinkList as LinkList} from "@serverless-cd/goat-ui"; 4 | import { getContributeLinkList } from "@/constant"; 5 | import { useTranslations } from "@i18n/util"; 6 | const t = useTranslations(Astro); 7 | 8 | export interface Props { 9 | editHref: string; 10 | title?: string; 11 | } 12 | 13 | const { editHref, title = "" } = Astro.props as Props; 14 | 15 | const lang = getLanguageFromURL(Astro.url.pathname); 16 | 17 | const regex = /^https?:\/\/github\.com\/[^/]+\/[^/]+/; 18 | const originGit = editHref.match(regex)[0]; 19 | 20 | // TODO: 提交pr模板 21 | const feedbackBody = ` 22 | [在此处输入反馈] 23 | 24 | 25 | --- 26 | #### 文档详细信息 27 | 28 | ⚠ *请勿编辑此部分。sca.aliyun.com ➟ GitHub 问题链接必须具有此部分。* 29 | 30 | * Version ID: 2bac3769-2613-f739-4796-0737c7cd8919 31 | * Content: [${title}](${Astro.url.href}) 32 | * Content Source: ${editHref} 33 | * Service: **用户指南/开发指南/运维指南** 34 | `; 35 | 36 | const encodedBody = encodeURIComponent(feedbackBody); 37 | 38 | const feedbackUrl = 39 | originGit + 40 | `/issues/new?title=关于文档【${title}】的反馈&body=${encodedBody}`; 41 | 42 | const linkItems = getContributeLinkList(lang, editHref, feedbackUrl, t); 43 | --- 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/components/starlight/TableOfContents/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import TableOfContentsList from "./TableOfContentsList.astro"; 3 | import ContributeMenu from "./ContributeMenu.astro"; 4 | import CommunityMenu from "./CommunityMenu.astro"; 5 | import type { Props } from "@astrojs/starlight/props"; 6 | import "../style.css"; 7 | import { useTranslations } from "@i18n/util"; 8 | const t = useTranslations(Astro); 9 | const { locale, toc, editUrl, entry } = Astro.props; 10 | --- 11 | 12 | { 13 | toc && ( 14 | 18 | 31 | 32 | 33 | ) 34 | } 35 | -------------------------------------------------------------------------------- /src/components/starlight/TwoColumnContent.astro: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | --- 4 | 5 |
6 | { 7 | Astro.props.toc && ( 8 | 13 | ) 14 | } 15 |
16 |
17 | 18 | 61 | -------------------------------------------------------------------------------- /src/content/blog/news/attend-a-meeting.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 参与社区周会 3 | keywords: [Spring AI Alibaba,Weekly Meeting] 4 | description: 参与社区周会 5 | author: 刘军 6 | date: "2024-12-09" 7 | category: news 8 | --- 9 | 10 | ## Spring AI Alibaba 社区双周会 11 | 12 | 有兴趣参与社区周会讨论,和其他用户一起讨论关于 Spring AI Alibaba 的下一步发展计划和已有问题的解决方案。这是一个用于讨论最佳实践,提出问题和解决问题的会议。快来与其他用户一起参与到周会讨论中吧! 13 | 14 | 15 | **时间:** 16 | 17 | 每隔一周的周四晚上 **20:00~21:00** 举行,截止本文档编写时的最新一次周会举办在2024年12月05日。 18 | 19 | **钉钉会议码:** 20 | 21 | 您可以通过打开钉钉,在会议中输入如下的会议码参与社区周会讨论! 22 | 23 | > 会议码:**_780 208 611_** 24 | 25 | **电话接入方式:** 26 | 27 | 您也可以通过钉钉电话的方式接入社区周会: 28 | 29 | - +862281944252(China) 30 | - +862281944292(China) 31 | 32 | 更多电话接入方式参见: 33 | 34 | - https://meeting.dingtalk.com/dialin/?corpId=dingd8e1123006514592 35 | 36 | **钉钉接入方式:** 37 | 38 | 您也可以通过在浏览器中点击[此连接](https://meeting.dingtalk.com/j/B3q8eK5zZVk)参与周会! 39 | 40 | **Spring AI Alibaba交流群:** 41 | 如您有更多讨论需求,欢迎通过搜索以下编号加入钉钉讨论群:**_105120009405_** 42 | -------------------------------------------------------------------------------- /src/content/blog/news/meetup-2024-11-26-shanghai.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: AI 原生实战营活动上海站,2024年12月26日! 3 | keywords: [Spring AI Alibaba,AI原生实战营活动上海站] 4 | description: Spring AI Alibaba 线下分享上海站! 5 | author: 刘军 6 | date: "2024-12-09" 7 | category: news 8 | --- 9 | 10 | AI 原生实战营活动上海站来袭,为您带来关于 AI 应用开发的最新资料分享。 11 | 12 | **活动时间:** 12月26日 14:00—18:00 13 | **活动地点:** 阿里巴巴徐汇滨江园区X区-X7-301 龙门书院 14 | 15 | 活动完整日程将于近期发布,请留意网站更新或加入以下群聊了解详情。 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/content/blog/news/spring-ai-alibaba-atom-programming-contest.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Spring AI Alibaba 2024 编程之夏报名已启动! 3 | keywords: [Spring AI Alibaba,开放原子基金会,编程挑战赛] 4 | description: Spring AI Alibaba 开放原子基金会编程挑战赛报名启动! 5 | author: 刘军 6 | date: "2024-11-07" 7 | category: news 8 | --- 9 | 10 | 截止 2024-11-07,Spring AI Alibaba 开放原子基金会编程挑战赛报名启动!请关注 [编程挑战赛官网](https://competition.atomgit.com/competitionInfo?id=31af3f40b11051dac71194a0c25c302a) 关注 Spring AI Alibaba 项目并了解最新进展。 11 | -------------------------------------------------------------------------------- /src/content/docs/1.0.0-M3.2/_sidebar.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "label": "概览", 4 | "translations": { 5 | "en": "Introduction" 6 | }, 7 | "link": "docs/1.0.0-M3.2/overview/" 8 | }, 9 | { 10 | "label": "核心概念", 11 | "translations": { 12 | "en": "Concepts" 13 | }, 14 | "link": "docs/1.0.0-M3.2/concepts/" 15 | }, 16 | { 17 | "label": "快速开始", 18 | "translations": { 19 | "en": "Quick Start" 20 | }, 21 | "link": "docs/1.0.0-M3.2/get-started/" 22 | }, 23 | { 24 | "label": "使用教程", 25 | "translations": { 26 | "en": "Tutorials" 27 | }, 28 | "autogenerate": { 29 | "directory": "tutorials" 30 | }, 31 | "items": [] 32 | }, 33 | { 34 | "label": "最佳实践", 35 | "translations": { 36 | "en": "practices" 37 | }, 38 | "autogenerate": { 39 | "directory": "practices" 40 | }, 41 | "items": [] 42 | } 43 | 44 | ] 45 | -------------------------------------------------------------------------------- /src/content/docs/1.0.0-M3.2/zh-cn/practices/memory.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 对话记忆 3 | keywords: [Spring AI, 通义千问, 百炼, 智能体应用] 4 | description: "Spring AI 与通义千问集成,使用 Spring AI 开发 Java AI 应用。" 5 | --- 6 | 7 | Doc has been moved to [tutorials/memory](../tutorials/memory) 8 | -------------------------------------------------------------------------------- /src/content/docs/1.0.0-M5.1/zh-cn/integrations/vectorstore.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Vector Store 向量数据库集成 3 | keywords: [Spring Ai Alibaba, 向量数据库, vector database, vector store] 4 | description: "Spring Ai Alibaba插件与工具生态,本文档主要涵盖向量数据库的集成适配于使用方法。" 5 | --- 6 | 7 | ## 基本使用方法 8 | 9 | 以下是 Spring AI Alibaba 集成的阿里云向量数据库产品实现。关于更多向量数据库(Vector Store)的扩展实现使用方法,请参考 spring ai 官方或者我们的示例仓库。 10 | 11 | ## 社区实现列表 12 | 13 | | 名称(代码引用名) | application.yml 配置 | Maven 依赖 | 说明 | 14 | | --- | --- | --- | --- | 15 | | Aliyun OpenSearch | ```yaml spring: ai: vectorstore: aliyun-opensearch: index-name: spring-ai-document-index ``` | ```xml com.alibaba.cloud.ai spring-ai-alibaba-analyticdb-store ${spring.ai.alibaba.version} ``` | 阿里云OpenSearch向量检索版适配。

示例地址(如有) | 16 | | Aliyun AnalyticDB | | | | 17 | | Aliyun Tair | | | | 18 | -------------------------------------------------------------------------------- /src/content/docs/1.0.0-M5.1/zh-cn/practices/memory.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 对话记忆 3 | keywords: [Spring AI, 通义千问, 百炼, 智能体应用] 4 | description: "Spring AI 与通义千问集成,使用 Spring AI 开发 Java AI 应用。" 5 | --- 6 | 7 | Doc has been moved to [tutorials/memory](../tutorials/memory) 8 | -------------------------------------------------------------------------------- /src/content/docs/1.0.0-M5.1/zh-cn/practices/playground-flight-booking.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 智能机票助手 3 | keywords: [Spring AI,通义千问,百炼,智能体应用] 4 | description: "Spring AI 与通义千问集成,使用 Spring AI 开发 Java AI 应用。" 5 | --- 6 | 7 | Doc has been moved to [usecase/playground-flight-booking](./usecase/playground-flight-booking/) 8 | -------------------------------------------------------------------------------- /src/content/docs/1.0.0-M5.1/zh-cn/practices/rag.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: RAG 3 | keywords: [Spring AI,通义千问,百炼,智能体应用] 4 | description: "Spring AI 与通义千问集成,使用 Spring AI 开发 Java AI 应用。" 5 | --- 6 | 7 | This doc has been moved to [bailian/rag-knowledge](./bailian/rag-knowledge/) 8 | -------------------------------------------------------------------------------- /src/content/docs/1.0.0-M6.1/zh-cn/integrations/vectorstore.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Vector Store 向量数据库集成 3 | keywords: [Spring Ai Alibaba, 向量数据库, vector database, vector store] 4 | description: "Spring Ai Alibaba插件与工具生态,本文档主要涵盖向量数据库的集成适配于使用方法。" 5 | --- 6 | 7 | ## 基本使用方法 8 | 9 | 以下是 Spring AI Alibaba 集成的阿里云向量数据库产品实现。关于更多向量数据库(Vector Store)的扩展实现使用方法,请参考 spring ai 官方或者我们的示例仓库。 10 | 11 | ## 社区实现列表 12 | 13 | | 名称(代码引用名) | application.yml 配置 | Maven 依赖 | 说明 | 14 | | --- | --- | --- | --- | 15 | | Aliyun OpenSearch | ```yaml spring: ai: vectorstore: aliyun-opensearch: index-name: spring-ai-document-index ``` | ```xml com.alibaba.cloud.ai spring-ai-alibaba-analyticdb-store ${spring.ai.alibaba.version} ``` | 阿里云OpenSearch向量检索版适配。

示例地址(如有) | 16 | | Aliyun AnalyticDB | | | | 17 | | Aliyun Tair | | | | 18 | -------------------------------------------------------------------------------- /src/content/docs/1.0.0-M6.1/zh-cn/practices/memory.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 对话记忆 3 | keywords: [Spring AI, 通义千问, 百炼, 智能体应用] 4 | description: "Spring AI 与通义千问集成,使用 Spring AI 开发 Java AI 应用。" 5 | --- 6 | 7 | Doc has been moved to [tutorials/memory](../tutorials/memory) 8 | -------------------------------------------------------------------------------- /src/content/docs/1.0.0-M6.1/zh-cn/practices/playground-flight-booking.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 智能机票助手 3 | keywords: [Spring AI,通义千问,百炼,智能体应用] 4 | description: "Spring AI 与通义千问集成,使用 Spring AI 开发 Java AI 应用。" 5 | --- 6 | 7 | Doc has been moved to [usecase/playground-flight-booking](./usecase/playground-flight-booking/) 8 | -------------------------------------------------------------------------------- /src/content/docs/1.0.0-M6.1/zh-cn/practices/rag.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: RAG 3 | keywords: [Spring AI,通义千问,百炼,智能体应用] 4 | description: "Spring AI 与通义千问集成,使用 Spring AI 开发 Java AI 应用。" 5 | --- 6 | 7 | This doc has been moved to [bailian/rag-knowledge](./bailian/rag-knowledge/) 8 | -------------------------------------------------------------------------------- /src/content/docs/1.0.0.2/en/practices/integrations/vectorstore.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Vector Store Database Integration 3 | keywords: [Spring Ai Alibaba, vector database, vector store] 4 | description: "Spring Ai Alibaba plugin and tool ecosystem, this document mainly covers vector database integration, adaptation and usage methods." 5 | --- 6 | 7 | ## Basic Usage 8 | 9 | Below are the Alibaba Cloud vector database product implementations integrated with Spring AI Alibaba. For more information about extended vector store implementations and usage methods, please refer to the official Spring AI documentation or our example repository. 10 | 11 | ## Community Implementation List 12 | 13 | | Name (Code Reference) | application.yml Configuration | Maven Dependency | Description | 14 | | --- | --- | --- | --- | 15 | | Aliyun OpenSearch | ```yaml spring: ai: vectorstore: aliyun-opensearch: index-name: spring-ai-document-index ``` | ```xml com.alibaba.cloud.ai spring-ai-alibaba-analyticdb-store ${spring.ai.alibaba.version} ``` | Aliyun OpenSearch vector retrieval version adaptation.

Example address (if available) | 16 | | Aliyun AnalyticDB | | | | 17 | | Aliyun Tair | | | | 18 | -------------------------------------------------------------------------------- /src/content/docs/1.0.0.2/zh-cn/practices/integrations/vectorstore.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Vector Store 向量数据库集成 3 | keywords: [Spring Ai Alibaba, 向量数据库, vector database, vector store] 4 | description: "Spring Ai Alibaba插件与工具生态,本文档主要涵盖向量数据库的集成适配于使用方法。" 5 | --- 6 | 7 | ## 基本使用方法 8 | 9 | 以下是 Spring AI Alibaba 集成的阿里云向量数据库产品实现。关于更多向量数据库(Vector Store)的扩展实现使用方法,请参考 spring ai 官方或者我们的示例仓库。 10 | 11 | ## 社区实现列表 12 | 13 | | 名称(代码引用名) | application.yml 配置 | Maven 依赖 | 说明 | 14 | | --- | --- | --- | --- | 15 | | Aliyun OpenSearch | ```yaml spring: ai: vectorstore: aliyun-opensearch: index-name: spring-ai-document-index ``` | ```xml com.alibaba.cloud.ai spring-ai-alibaba-analyticdb-store ${spring.ai.alibaba.version} ``` | 阿里云OpenSearch向量检索版适配。

示例地址(如有) | 16 | | Aliyun AnalyticDB | | | | 17 | | Aliyun Tair | | | | 18 | -------------------------------------------------------------------------------- /src/content/docs/developer/zh-cn/contributor-guide/file-write-guide_dev.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 文档编写指南 3 | keywords: [Spring Ai Alibaba, Docs] 4 | description: 这篇向导旨在给正在准备向 Spring Ai Alibaba 文档项目提交贡献的新手提供指导。 5 | --- 6 | 7 | 文档书写参考:[中文技术文档的写作规范](https://github.com/ruanyf/document-style-guide) 8 | 9 | 1. 正式书面文档不要用我们,xxx等人称: 10 | 11 | ![image.png](/img/community/developer/image0.png) 12 | 13 | 2. 一句话说完了,需要添加合适的标点符号: 14 | 15 | ![image.png](/img/community/developer/image1.png) 16 | ![image.png](/img/community/developer/image2.png) 17 | 18 | 3. 注意专有名词,spring ai-> Spring Ai、openai->OpenAi 等等,不知道专有名词请使用相关关键字在搜索引擎中检索,看一般这个单词的大小写形式如何。另外英文需要注意词性,标题不要使用动词,一般为名词。 19 | 20 | ![image.png](/img/community/developer/image3.png) 21 | ![image.png](/img/community/developer/image4.png) 22 | 23 | 4. 模块标题英文注意首字母大写 24 | 25 | ![image.png](/img/community/developer/image5.png) 26 | ![image.png](/img/community/developer/image6.png) 27 | 28 | 5. 修饰符,不同的内容需要适应对应的类型: 29 | 30 | ![image.png](/img/community/developer/image7.png) 31 | ![image.png](/img/community/developer/image8.png) 32 | 33 | 6. 缩略词还是尽量使用前先声明,比如Spring Ai Alibaba(后文简称SAA),不要什么都不说就直接用一些外人不太熟悉的缩略词: 34 | 35 | ![image.png](/img/community/developer/image9.png) 36 | 37 | 7. 关键内容,比如特定配置文件、依赖名称需要使用阴影标记: 38 | 39 | ![image.png](/img/community/developer/image1.png) 40 | ![image.png](/img/community/developer/image11.png) 41 | 42 | 8. 需要回答几个问题,你的功能作用域是什么,就是做到了什么地步? 43 | 9. 你的功能用户使用过程中哪些步骤容易犯错,注意提前提醒? 44 | 10. 最后,写完以后自己至少读一遍,否则大概率有问题!否则大概率有问题!否则大概率有问题! 45 | -------------------------------------------------------------------------------- /src/content/docs/developer/zh-cn/contributor-guide/reporting-security-issues_dev.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 如何汇报安全漏洞 3 | keywords: [Spring Ai Alibaba] 4 | description: Spring Ai Alibaba在消除其软件项目中的安全性问题方面采取严格的立场,对与其功能和特性有关的问题非常敏感并很快提出。 5 | --- 6 | 7 | ## 报告安全问题 8 | 9 | Spring Ai Alibaba 在消除其软件项目中的安全性问题方面采取严格的立场,对与其功能和特性有关的问题非常敏感并很快提出。 10 | 11 | ### 报告漏洞 12 | 13 | 如果您对 Spring Ai Alibaba 的安全性有担心,或者发现漏洞或潜在威胁,请发送电子邮件至[spring-ai-alibaba-security@googlegroups.com](mailto:spring-ai-alibaba-security@googlegroups.com) 14 | 与 Spring Ai Alibaba 安全团队联系。在邮件中,指定问题或潜在威胁的描述。还敦促您推荐重现和复制问题的方法。Spring Ai Alibaba 社区会在评估和分析调查结果之后与您联系。 请先注意在安全电子邮件中报告安全问题,然后再在公共领域公开该问题。 15 | 16 | ### 漏洞处理 17 | 18 | 漏洞处理过程的概述是: 19 | 20 | - 报告者将漏洞秘密报告给 Spring Ai Alibaba; 21 | - 相应项目的安全团队与报告者私下合作来解决漏洞; 22 | - 制作了包含该修复程序的有关 Spring Ai Alibaba 产品的新版本; 23 | - 该漏洞已公开宣布。 24 | -------------------------------------------------------------------------------- /src/content/docs/developer/zh-cn/member_role_dev.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Spring AI Alibaba 社区角色介绍 3 | keywords: [Spring AI Alibaba, 社区角色] 4 | description: Spring AI Alibaba 社区角色 5 | --- 6 | 7 | ## Project Management Committee 8 | 9 | Project Management 作为 Spring AI Alibaba 项目的项目管理委员会,其成员是对 Spring AI Alibaba 项目的演进和发展做出显著贡献的个人,包含以下的标准: 10 | 11 | - 完成多个关键模块或者工程的设计与开发,是项目的核心开发人员; 12 | - 持续的投入和激情,能够积极参与社区、官网、Issue、PR 等项目相关事项的维护; 13 | - 在社区中具有有目共睹的影响力,能够代表 Spring AI Alibaba 参加重要的社区会议和活动; 14 | - 具有培养 Committer 和 Contributor 的意识和能力。 15 | 16 | Project Management Member 在资深 Committer 中产生,由 Project Management 所有成员讨论以及投票产生,需要获得总人数的半数票以上才能当选。 17 | 18 | ## Committer 19 | 20 | Committer 是具有仓库写权限的个人,包含以下的标准: 21 | 22 | - 能够在长时间内做持续贡献 Issue、PR 的个人; 23 | - 对社区做出了重要 Feature 贡献; 24 | = 参与 Issue 列表的维护、重要 Feature 的讨论、社区周会主持与参与社区周会分享等社区活动; 25 | = 参加过至少 1 次的社区季度活跃贡献者计划; 26 | = 参与 code review。 27 | 28 | Committer 由 Steering Committee 成员提名投票产生,至少获得 3 票同意才能当选。 29 | 30 | ## Contributor 31 | 32 | Contributor 是对项目有贡献的个人,标准为: 33 | 34 | 提交过 PR 并被合并。 35 | -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /src/i18n/languages.ts: -------------------------------------------------------------------------------- 1 | export const languages = { 2 | 'en': 'English', 3 | 'zh-cn': '简体中文' 4 | } as const; 5 | 6 | export default { 7 | 'root': { label: '简体中文', lang: 'zh-cn' }, 8 | 'en': { label: 'English', lang: 'en' } 9 | }; 10 | -------------------------------------------------------------------------------- /src/i18n/translation-checkers.ts: -------------------------------------------------------------------------------- 1 | import type zhUI from './zh-cn/ui'; 2 | import type { languages } from './languages'; 3 | 4 | export type UIDictionaryKeys = keyof typeof zhUI; 5 | export type UIDict = Partial; 6 | export type UILanguageKeys = keyof typeof languages; 7 | 8 | /** Helper to type check a dictionary of UI string translations. */ 9 | export const UIDictionary = (dict: Partial) => dict; 10 | -------------------------------------------------------------------------------- /src/pages/cloud/Top.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { useTranslations } from "@i18n/util"; 3 | const t = useTranslations(Astro); 4 | --- 5 | 6 | 9 |
10 |
13 | Welcome to Spring AI Alibaba Plugin Hub 14 |
15 |
18 | {t('plugin.introduction.des')} 19 |
20 |
21 |
22 | 41 | -------------------------------------------------------------------------------- /src/pages/en/cloud/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BaseLayout from "@layouts/BaseLayout.astro"; 3 | import CompaniesFeedback from "@components/home/CompaniesFeedback.astro"; 4 | import CloudFooter from "@components/common/Footer.astro"; 5 | import { useTranslations } from "@i18n/util"; 6 | import HomeFooter from '@components/ai/Footer.astro'; 7 | 8 | const t = useTranslations(Astro); 9 | --- 10 | 11 | 12 |
Page under construction......
13 | 14 |
15 | -------------------------------------------------------------------------------- /src/pages/en/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { useTranslations } from "@i18n/util"; 3 | import BaseLayout from "@layouts/BaseLayout.astro"; 4 | import HomeIntroduce from '@components/home/HomeIntroduce.astro'; 5 | import ChooseReason from '@components/home/ChooseReason.astro'; 6 | import CompaniesFeedback from '@components/home/CompaniesFeedback.astro'; 7 | import OverviewImage from '@components/home/OverViewImage/index.astro'; 8 | import HomeSolutionsCard from '@components/home/HomeSolutionsCard.astro'; 9 | import HomeFooter from '@components/common/Footer.astro'; 10 | 11 | const t = useTranslations(Astro); 12 | 13 | --- 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/pages/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { useTranslations } from "@i18n/util"; 3 | import BaseLayout from "@layouts/BaseLayout.astro"; 4 | import HomeIntroduce from '@components/ai/HomeIntroduce.astro'; 5 | import ChooseReason from '@/components/ai/CoreFeature.astro'; 6 | import ArchitectureDiagram from '@components/ai/ArchitectureDiagram.astro'; 7 | import HomeFooter from '@components/ai/Footer.astro'; 8 | 9 | const t = useTranslations(Astro); 10 | 11 | --- 12 | 13 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/pages/initializer/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BaseLayout from "@layouts/BaseLayout.astro"; 3 | import CompaniesFeedback from "@components/home/CompaniesFeedback.astro"; 4 | import CloudFooter from "@components/common/Footer.astro"; 5 | import { useTranslations } from "@i18n/util"; 6 | import HomeFooter from '@components/ai/Footer.astro'; 7 | 8 | const t = useTranslations(Astro); 9 | --- 10 | 11 | 12 |
Page under construction......
13 | 14 |
15 | -------------------------------------------------------------------------------- /src/pages/mcp/Top.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { useTranslations } from "@i18n/util"; 3 | const t = useTranslations(Astro); 4 | --- 5 | 6 | 9 |
10 |
13 | Welcome to Spring AI Alibaba Plugin Hub 14 |
15 |
18 | {t('mcp.introduction.des')} 19 |
20 |
21 |
22 | 41 | -------------------------------------------------------------------------------- /src/style/global.css: -------------------------------------------------------------------------------- 1 | /* 集成的默认注入的 base.css 文件 */ 2 | @tailwind base; 3 | 4 | .sl-markdown-content img, 5 | .sl-markdown-content picture, 6 | .sl-markdown-content video, 7 | .sl-markdown-content canvas, 8 | .sl-markdown-content svg, 9 | .sl-markdown-content iframe 10 | { 11 | display: block; 12 | max-width: 100%; 13 | height: auto; 14 | } 15 | @tailwind components; 16 | @tailwind utilities; 17 | 18 | 19 | .header { 20 | padding: 0 !important; 21 | border-bottom: none !important; 22 | } 23 | 24 | /* 解决starlight的menu按钮位置问题(daisyui影响) */ 25 | starlight-menu-button button{ 26 | top: 4rem !important; 27 | } 28 | 29 | /* 解决starlight的toc按钮位置问题(daisyui影响) */ 30 | #starlight__mobile-toc{ 31 | #starlight__on-this-page--mobile{ 32 | .toggle{ 33 | width: auto; 34 | height: auto; 35 | border-radius: .5rem; 36 | background-color: transparent; 37 | } 38 | } 39 | .dropdown{ 40 | display: block; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/utils/sendFetch.ts: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * 配置请求 4 | */ 5 | // 导入模块 6 | import qs from 'qs'; 7 | 8 | /** 封装fetch请求 */ 9 | function sendFetch(url, params = null, method = 'GET') { 10 | return new Promise(async (resolve, reject) => { 11 | // 配置的参数 12 | let config = {} 13 | // 判断请求类型 14 | if (method.toUpperCase() === 'GET' || method.toUpperCase() === 'DELETE') { 15 | if (params) { 16 | url += "?" + qs.stringify(params); 17 | } 18 | } 19 | else if (method.toUpperCase() === 'POST' || method.toUpperCase() === 'PUT') { 20 | config = { 21 | method, 22 | headers: { 23 | 'Content-Type': 'application/json', 24 | }, 25 | }; 26 | if (params) { 27 | config = { 28 | ...config, 29 | body: JSON.stringify(params), 30 | }; 31 | } 32 | } 33 | 34 | try { 35 | const response = await fetch(url, { 36 | mode: 'cors', 37 | ...config, 38 | }); 39 | response.json().then(res => { 40 | resolve(res); 41 | }).catch(error => { 42 | error.message === "Unexpected end of JSON input" ? resolve({}) : reject(error); 43 | }); 44 | } catch (error) { 45 | console.dir(error); 46 | reject(error); 47 | } 48 | }); 49 | } 50 | 51 | 52 | // 导出配置好的对象 53 | export default sendFetch; 54 | -------------------------------------------------------------------------------- /src/utils/useCustomSWR.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from "preact/hooks"; 2 | import useSWR from "swr"; 3 | 4 | const fetcher = (...args) => fetch(...args).then((res) => res.json()); 5 | 6 | const useCustomSWR = (api) => { 7 | const [shouldFetch, setShouldFetch] = useState(false); 8 | 9 | const { data, error } = useSWR( 10 | shouldFetch? api: null, 11 | fetcher, { 12 | dedupingInterval: 3600000, // 1h 13 | revalidateOnFocus: false, 14 | } 15 | ); 16 | 17 | const fetchData = () => { 18 | setShouldFetch(true); 19 | }; 20 | 21 | const isLoading = !error && !data; 22 | 23 | return { 24 | swrData: data || {}, 25 | error, 26 | isLoading, 27 | fetchData, 28 | }; 29 | } 30 | 31 | export default useCustomSWR; 32 | -------------------------------------------------------------------------------- /src/utils/util.ts: -------------------------------------------------------------------------------- 1 | import type { CollectionEntry } from 'astro:content'; 2 | 3 | export function getLanguageFromURL(pathname: string) { 4 | // const langCodeMatch = pathname.match(/\/([a-z]{2}-?[a-z]{0,2})\//); 5 | const langCodeMatch = pathname.match(/\/([a-z]{2}-?[a-z]{0,2})/); 6 | return langCodeMatch ? langCodeMatch[1] : 'zh-cn'; 7 | } 8 | 9 | /** Remove \ and / from beginning of string */ 10 | export function removeLeadingSlash(path: string) { 11 | return path.replace(/^[/\\]+/, ''); 12 | } 13 | 14 | /** Remove \ and / from end of string */ 15 | export function removeTrailingSlash(path: string) { 16 | return path.replace(/[/\\]+$/, ''); 17 | } 18 | 19 | /** Get a page’s slug, without the language prefix (e.g. `'en/migrate'` => `'migrate'`). */ 20 | export const stripLangFromSlug = (slug: CollectionEntry<'docs'>['slug']) => 21 | slug.split('/').slice(1).join('/'); 22 | 23 | /** Get a page’s lang tag from its slug (e.g. `'en/migrate'` => `'en'`). */ 24 | export const getLangFromSlug = (slug: CollectionEntry<'docs'>['slug']) => slug.split('/')[0]; 25 | 26 | 27 | // 判断是否为safari浏览器 28 | export const isSafari = () => { 29 | const userAgent = navigator?.userAgent?.toLowerCase(); 30 | return userAgent.includes('safari') && !userAgent.includes('chrome'); 31 | }; 32 | -------------------------------------------------------------------------------- /tools/github-actions/setup-deps/action.yml: -------------------------------------------------------------------------------- 1 | name: setup-deps 2 | description: Install host system dependencies 3 | runs: 4 | using: composite 5 | steps: 6 | - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.0.1 7 | with: 8 | go-version: "1.23" 9 | - uses: actions/setup-python@v5 10 | with: 11 | python-version: "3.13" 12 | - uses: actions/setup-node@v4 13 | with: 14 | node-version: "22" 15 | -------------------------------------------------------------------------------- /tools/linter/codespell/.codespell.ignorewords: -------------------------------------------------------------------------------- 1 | AfterAll 2 | varius 3 | Nam 4 | varius 5 | ot 6 | OT 7 | bu 8 | hda 9 | ue 10 | tRU 11 | tE 12 | Te 13 | te 14 | ND 15 | uE 16 | fo 17 | Bu 18 | oNS 19 | iif 20 | OLL 21 | IST 22 | olY 23 | URE 24 | SMLL 25 | thq 26 | afe 27 | Ue 28 | wOh 29 | cNa 30 | hVE 31 | fO 32 | nAx 33 | woUl 34 | HdA 35 | JOO 36 | MYBE 37 | MYU 38 | SEh 39 | udO 40 | aBl 41 | abd 42 | Yuo 43 | OCe 44 | FoT 45 | acI 46 | OCE 47 | Ans 48 | gud 49 | Tje 50 | wHN 51 | mey 52 | eyT 53 | ist 54 | alle 55 | vEw 56 | ans 57 | ser 58 | NIN 59 | NaX 60 | containg 61 | consition 62 | ois 63 | nd 64 | nD 65 | Nd 66 | joo 67 | oNW 68 | CPPP 69 | NwO 70 | Sie 71 | Whe 72 | heL 73 | 2Rd 74 | bui 75 | Dum 76 | DuM 77 | GeS 78 | ptd 79 | lKe 80 | ANe 81 | ESY 82 | mye 83 | fwe 84 | ONS 85 | hAX 86 | InE 87 | mIs 88 | wel 89 | als 90 | vAI 91 | hEl 92 | htE 93 | dne 94 | oEN 95 | MoT 96 | planText 97 | addresss 98 | commmon 99 | devlop 100 | Meu 101 | trough 102 | dialin 103 | iTerm 104 | -------------------------------------------------------------------------------- /tools/linter/codespell/.codespell.skip: -------------------------------------------------------------------------------- 1 | .git 2 | .idea 3 | -------------------------------------------------------------------------------- /tools/make/common.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2024-2025 the original author or authors. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # https://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | SHELL:=/bin/bash 16 | 17 | DATETIME = $(shell date +"%Y%m%d%H%M%S") 18 | 19 | # Log the running target 20 | LOG_TARGET = echo -e "\033[0;32m==================> Running $@ ============> ... \033[0m" 21 | # Log debugging info 22 | define log 23 | echo -e "\033[36m==================>$1\033[0m" 24 | endef 25 | # Log error info 26 | define errorLog 27 | echo -e "\033[0;31m==================>$1\033[0m" 28 | endef 29 | 30 | .PHONY: help 31 | help: 32 | @echo -e "\033[1;3;34mAgentic AI Framework for Java Developers.\033[0m\n" 33 | @echo -e "Usage:\n make \033[36m\033[0m \033[36m