├── .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 | //在第一个 13 | -------------------------------------------------------------------------------- /src/components/starlight/PageTitle.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const PAGE_TITLE_ID = "_top"; 3 | --- 4 | 5 |