# Spring AI Demo > ๐Ÿค– ไธ€ไธช็ฎ€ๆดไผ˜้›…็š„ Spring AI ๅฏน่ฏๆผ”็คบ้กน็›ฎ๏ผŒๅŸบไบŽ Spring Boot 3.2.0 ไธŽ Spring AI 1.0.0-M3 ๆž„ๅปบ๏ผŒๆ”ฏๆŒๆตๅผๅ“ๅบ”ใ€Markdown ๆธฒๆŸ“ไธŽ RAG ๆ™บ่ƒฝ้—ฎ็ญ”ใ€‚ [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.2.0-brightgreen)](https://spring.io/projects/spring-boot) [![Spring AI](https://img.shields.io/badge/Spring%20AI-1.0.0--M3-blue)](https://spring.io/projects/spring-ai) [![JDK](https://img.shields.io/badge/JDK-17%2B-orange)](https://openjdk.org/) [![License](https://img.shields.io/badge/License-MIT-yellow)](LICENSE) ## โœจ ็‰นๆ€ง - ๐ŸŒ **AI ๆ™บ่ƒฝๅฏน่ฏ** - ๅŸบไบŽ Ollama ็š„่‡ช็„ถ่ฏญ่จ€ไบคไบ’ - ๐Ÿ“ก **ๆตๅผๅ“ๅบ”** - ๅฎžๆ—ถ้€ๅญ—่พ“ๅ‡บ๏ผŒไฝ“้ชŒๆต็•… - ๐Ÿ“ **Markdown ๆ”ฏๆŒ** - ๅฎŒๆ•ดๆธฒๆŸ“ไปฃ็ ๅ—ใ€่กจๆ ผใ€ๅˆ—่กจ็ญ‰ๆ ผๅผ - ๐Ÿ‘จโ€๐Ÿ’ป **ไปฃ็ ้ซ˜ไบฎ** - Highlight.js ่‡ชๅŠจ่ฏญ่จ€ๆฃ€ๆต‹ไธŽ่ฏญๆณ•็€่‰ฒ - ๐Ÿ“š **RAG ๆ™บ่ƒฝ้—ฎ็ญ”** - ๅŸบไบŽๅ‘้‡ๆฃ€็ดข็š„ไธŠไธ‹ๆ–‡ๆ„Ÿ็Ÿฅๅ›ž็ญ” - ๐Ÿ” **่ฏญไน‰ๆฃ€็ดข** - Milvus ๅ‘้‡ๆ•ฐๆฎๅบ“็›ธไผผๅบฆๆœ็ดข - ๐Ÿ”— **ๅผ•็”จๆบฏๆบ** - ๅ›ž็ญ”้™„ๅธฆๆ–‡ๆกฃๆฅๆบๅผ•็”จ - ๐Ÿ—ƒ๏ธ **ๅ‘้‡ๆ•ฐๆฎๅบ“** - Milvus ๅˆ†ๅธƒๅผๅ‘้‡ๆ•ฐๆฎๅบ“ - ๐Ÿ” **Embedding ๆœๅŠก** - SiliconFlow BAAI/bge-large-zh-v1.5 - ๐ŸŽจ **็ฒพ็พŽ็•Œ้ข** - ๆทฑ่‰ฒไธป้ข˜ๅ“ๅบ”ๅผ่ฎพ่ฎก ## ๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹ ### ็Žฏๅขƒ่ฆๆฑ‚ - JDK 17+ - Maven 3.8+ - [Ollama](https://ollama.ai/) ๆœฌๅœฐๆœๅŠก - Milvus ๅ‘้‡ๆ•ฐๆฎๅบ“ ### 1. ๅฎ‰่ฃ… Ollama ```bash # macOS/Linux curl -fsSL https://ollama.ai/install.sh | sh # ๆ‹‰ๅ–ๆจกๅž‹ ollama pull gpt-oss:120b-cloud # ๅฏๅŠจๆœๅŠก (้ป˜่ฎค็ซฏๅฃ 11434) ollama serve ``` ### 2. ๅฏๅŠจ้กน็›ฎ ```bash mvn spring-boot:run ``` ### 3. ่ฎฟ้—ฎๅบ”็”จ - **Web ็•Œ้ข**: http://localhost:8080 - **ๅฅๅบทๆฃ€ๆŸฅ**: http://localhost:8080/api/chat/test ## ๐Ÿ”ง ๆŠ€ๆœฏๆ ˆ ### ๅŽ็ซฏ | ็ป„ไปถ | ๆŠ€ๆœฏ | ็‰ˆๆœฌ | |:---|:---|:---| | ๅŸบ็ก€ๆก†ๆžถ | Spring Boot | 3.2.0 | | AI ๆก†ๆžถ | Spring AI | 1.0.0-M3 | | AI ๆจกๅž‹ | OpenAI/Ollama | - | | Embedding | SiliconFlow BAAI/bge-large-zh-v1.5 | - | | ๅ‘้‡ๆ•ฐๆฎๅบ“ | Milvus | 2.3.4 | | ๅ“ๅบ”ๅผ็ผ–็จ‹ | Spring WebFlux | 3.2.0 | ### ๅ‰็ซฏ | ๆŠ€ๆœฏ | ็”จ้€” | |:---|:---| | HTML5 + CSS3 | ้กต้ข็ป“ๆž„ไธŽๆ ทๅผ | | Marked.js | Markdown ่งฃๆžๆธฒๆŸ“ | | Highlight.js | ไปฃ็ ่ฏญๆณ•้ซ˜ไบฎ | ## ๐Ÿ“ ้กน็›ฎ็ป“ๆž„ ``` springAiDemo/ โ”œโ”€โ”€ src/main/java/com/demo/ โ”‚ โ”œโ”€โ”€ MyApplication.java # Spring Boot ๅฏๅŠจๅ…ฅๅฃ โ”‚ โ”œโ”€โ”€ config/ โ”‚ โ”‚ โ””โ”€โ”€ RagConfig.java # RAG ้…็ฝฎ็ฑป โ”‚ โ”œโ”€โ”€ controller/ โ”‚ โ”‚ โ”œโ”€โ”€ ChatController.java # AI ่Šๅคฉ API โ”‚ โ”‚ โ””โ”€โ”€ DocumentController.java # ๆ–‡ๆกฃๅฏผๅ…ฅ API โ”‚ โ”œโ”€โ”€ dto/ โ”‚ โ”‚ โ”œโ”€โ”€ ApiResponse.java # ้€š็”จๅ“ๅบ”ๅฐ่ฃ… โ”‚ โ”‚ โ”œโ”€โ”€ ChatRequest.java # ่Šๅคฉ่ฏทๆฑ‚ DTO โ”‚ โ”‚ โ””โ”€โ”€ ChatResponse.java # ่Šๅคฉๅ“ๅบ” DTO โ”‚ โ””โ”€โ”€ service/ โ”‚ โ”œโ”€โ”€ ChatService.java # RAG ่ŠๅคฉๆœๅŠก โ”‚ โ””โ”€โ”€ DocumentService.java # ๆ–‡ๆกฃๅค„็†ๆœๅŠก โ”œโ”€โ”€ data/ โ”‚ โ””โ”€โ”€ doris_intro.md # RAG ็คบไพ‹ๆ–‡ๆกฃ โ””โ”€โ”€ src/main/resources/ โ”œโ”€โ”€ application.yaml # ๅบ”็”จ้…็ฝฎ โ””โ”€โ”€ static/ # ๅ‰็ซฏ่ต„ๆบ ``` ## ๐Ÿ’ฌ API ๆ–‡ๆกฃ ### ่ŠๅคฉๆŽฅๅฃ | ๆ–นๆณ• | ็ซฏ็‚น | ๆ่ฟฐ | ๅ‚ๆ•ฐ | |:---|:---|:---|:---| | GET | `/api/chat/test` | ๅฅๅบทๆฃ€ๆŸฅ | - | | GET | `/api/chat/ai` | ๆตๅผ AI ๅฏน่ฏ | `msg` | | POST | `/api/chat` | RAG ๆ™บ่ƒฝ้—ฎ็ญ” | `{ "question": "..." }` | ### ๆ–‡ๆกฃๆŽฅๅฃ | ๆ–นๆณ• | ็ซฏ็‚น | ๆ่ฟฐ | |:---|:---|:---| | GET | `/api/documents/import` | ๅฏผๅ…ฅๆ–‡ๆกฃๅˆฐๅ‘้‡ๅบ“ | ### ่ฏทๆฑ‚็คบไพ‹ **RAG ๆ™บ่ƒฝ้—ฎ็ญ”๏ผš** ```bash curl -X POST http://localhost:8080/api/chat \ -H "Content-Type: application/json" \ -d '{"question": "Apache Doris ๆ˜ฏไป€ไนˆ๏ผŸ"}' ``` **ๆตๅผๅฏน่ฏ๏ผš** ```bash curl "http://localhost:8080/api/chat/ai/stream?msg=่ฎฒไธ€ไธชๆ•…ไบ‹" ``` **ๅฏผๅ…ฅ RAG ๆ–‡ๆกฃ๏ผš** ```bash curl http://localhost:8080/api/documents/import ``` ### ๅ“ๅบ”ๆ ผๅผ **POST /api/chat ๅ“ๅบ”๏ผš** ```json { "code": 200, "message": "success", "data": { "answer": "Apache Doris ๆ˜ฏไธ€ไธช...", "references": ["data/doris_intro.md"], "timestamp": 1713000000000 } } ``` ## ๐Ÿ“š RAG ๆ–‡ๆกฃ้—ฎ็ญ” ### ๅทฅไฝœๅŽŸ็† ``` ็”จๆˆท้—ฎ้ข˜ โ†’ Embedding โ†’ ๅ‘้‡ๆฃ€็ดข โ†’ ๆž„ๅปบไธŠไธ‹ๆ–‡ โ†’ LLM ็”Ÿๆˆๅ›ž็ญ” โ†’ ่ฟ”ๅ›ž็ญ”ๆกˆ+ๅผ•็”จ ``` 1. **ๆ–‡ๆกฃๅฏผๅ…ฅ** - ๅฐ† `.md` / `.txt` ๆ–‡ๆกฃ่ฏปๅ–ๅนถๅˆ‡ๅ‰ฒๆˆ chunks 2. **ๅ‘้‡ๅŒ–** - ไฝฟ็”จ BAAI/bge-large-zh-v1.5 ็”Ÿๆˆ 1024 ็ปดๅ‘้‡ 3. **ๅญ˜ๅ‚จๆฃ€็ดข** -ๅญ˜ๅ…ฅ Milvus๏ผŒๅ‘้‡็›ธไผผๅบฆๆœ็ดข top-K ็ป“ๆžœ 4. **็”Ÿๆˆๅ›ž็ญ”** - ๅฐ†ๆฃ€็ดข็ป“ๆžœไฝœไธบไธŠไธ‹ๆ–‡๏ผŒLLM ็”Ÿๆˆ็ญ”ๆกˆ ### ไฝฟ็”จๆญฅ้ชค 1. ๅฐ†ๆ–‡ๆกฃๆ”พๅ…ฅ `data/` ็›ฎๅฝ• 2. ่ฐƒ็”จๅฏผๅ…ฅๆŽฅๅฃ๏ผš`curl http://localhost:8080/api/documents/import` 3. ้€š่ฟ‡ POST `/api/chat` ๆ้—ฎ ### ๆ–‡ๆกฃๅค„็†้…็ฝฎ ```yaml document: data-path: data # ๆ–‡ๆกฃ็›ฎๅฝ• chunk-size: 400 # ๅˆ†ๅ‰ฒๅ—ๅคงๅฐ (tokens) min-chunk-size: 200 # ๆœ€ๅฐๅ—ๅคงๅฐ max-num-chunk: 10000 # ๆœ€ๅคงๅ—ๆ•ฐ้‡ ``` ## ๐Ÿ› ๏ธ ้…็ฝฎ่ฏดๆ˜Ž ### AI ๅฏน่ฏ้…็ฝฎ ```yaml spring: ai: openai: base-url: http://localhost:11434 chat: options: model: gpt-oss:120b-cloud temperature: 0.7 ``` ### Embedding ้…็ฝฎ ```yaml spring: ai: openai: embedding: api-key: your-siliconflow-api-key base-url: https://api.siliconflow.cn model: BAAI/bge-large-zh-v1.5 dimensions: 1024 ``` ### ๅ‘้‡ๆ•ฐๆฎๅบ“้…็ฝฎ ```yaml spring: ai: vectorstore: milvus: client: host: 192.168.50.103 port: 19530 databaseName: doris_docs collectionName: vector_store ``` ## ๐ŸŽฌ ๆžถๆž„ๅ›พ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Client โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚ โ”‚ โ”‚ Web UI โ”‚ โ”‚ POST /api/chat โ”‚โ”‚ โ”‚ โ”‚ (ๆตๅผ/้žๆตๅผ) โ”‚โ”€โ”€โ”€โ”€โ–ถโ”‚ { question: "..." } โ”‚โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ChatController โ”‚ โ”‚ POST /api/chat โ†’ ChatService โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ–ผ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ VectorStore โ”‚ โ”‚ ChatClient โ”‚ โ”‚ (Milvus ่ฏญไน‰ๆฃ€็ดข) โ”‚ โ”‚ (Ollama LLM) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ–ผ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ DocumentService โ”‚ โ”‚ SiliconFlow API โ”‚ โ”‚ (ๆ–‡ๆกฃๅˆ‡ๅ‰ฒ/ๅ‘้‡ๅŒ–) โ”‚ โ”‚ (Embedding) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## ๐Ÿ“– ๆ›ดๆ–ฐๆ—ฅๅฟ— ### v1.0.0 (2026-04-19) - ๐ŸŽ‰ ๅˆๅง‹็‰ˆๆœฌๅ‘ๅธƒ - ๆ”ฏๆŒๆตๅผ AI ๅฏน่ฏ - Markdown ๆธฒๆŸ“ไธŽไปฃ็ ้ซ˜ไบฎ - ๆทฑ่‰ฒไธป้ข˜ Web ็•Œ้ข ### v1.1.0 (2026-04-19) - โœจ ๆ–ฐๅขž RAG ๆ–‡ๆกฃ้—ฎ็ญ”ๅŠŸ่ƒฝ - โœจ ๆ–ฐๅขž DocumentController ๆ–‡ๆกฃๅฏผๅ…ฅ API - โœจ ้…็ฝฎ SiliconFlow Embedding ๆœๅŠก - โœจ ้›†ๆˆ Milvus ๅ‘้‡ๆ•ฐๆฎๅบ“ ### v1.2.0 (2026-04-19) - โœจ ๆ–ฐๅขž POST /api/chat RAG ๆ™บ่ƒฝ้—ฎ็ญ”ๆŽฅๅฃ - โœจ ๆ–ฐๅขž ChatService RAG ๆ ธๅฟƒๆœๅŠก - โœจ ๆ–ฐๅขž ChatRequest/ChatResponse/ApiResponse DTO - โœจ ๆ–ฐๅขžๅผ•็”จๆบฏๆบๅŠŸ่ƒฝ๏ผŒ่ฟ”ๅ›žๆ–‡ๆกฃๆฅๆบ ## ๐Ÿ“— License MIT ยฉ 2026 Spring AI Demo --- ๐Ÿš€ **Made with Spring AI**