springAiDemo/README.md
kennethcheng 710fe14d7f feat: 新增 RAG 智能问答 POST 接口与 ChatService
- 新增 ChatService 实现 RAG 核心逻辑(向量检索 + 上下文构建 + LLM 生成)
- 新增 ChatRequest/ChatResponse DTO 支持结构化请求响应
- 新增 ApiResponse 统一响应封装
- ChatController 新增 POST /api/chat RAG 问答接口(支持引用溯源)
- 流式接口 GET /api/chat/ai/stream 保持不变
2026-04-19 22:27:44 +08:00

9.2 KiB
Raw Blame History

Spring AI Demo

🤖 一个简洁优雅的 Spring AI 对话演示项目,基于 Spring Boot 3.2.0 与 Spring AI 1.0.0-M3 构建支持流式响应、Markdown 渲染与 RAG 智能问答。

Spring Boot Spring AI JDK License

特性

  • 🌐 AI 智能对话 - 基于 Ollama 的自然语言交互
  • 📡 流式响应 - 实时逐字输出,体验流畅
  • 📝 Markdown 支持 - 完整渲染代码块、表格、列表等格式
  • 👨‍💻 代码高亮 - Highlight.js 自动语言检测与语法着色
  • 📚 RAG 智能问答 - 基于向量检索的上下文感知回答
  • 🔍 语义检索 - Milvus 向量数据库相似度搜索
  • 🔗 引用溯源 - 回答附带文档来源引用
  • 🗃️ 向量数据库 - Milvus 分布式向量数据库
  • 🔍 Embedding 服务 - SiliconFlow BAAI/bge-large-zh-v1.5
  • 🎨 精美界面 - 深色主题响应式设计

🚀 快速开始

环境要求

  • JDK 17+
  • Maven 3.8+
  • Ollama 本地服务
  • Milvus 向量数据库

1. 安装 Ollama

# macOS/Linux
curl -fsSL https://ollama.ai/install.sh | sh

# 拉取模型
ollama pull gpt-oss:120b-cloud

# 启动服务 (默认端口 11434)
ollama serve

2. 启动项目

mvn spring-boot:run

3. 访问应用

🔧 技术栈

后端

组件 技术 版本
基础框架 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 智能问答:

curl -X POST http://localhost:8080/api/chat \
  -H "Content-Type: application/json" \
  -d '{"question": "Apache Doris 是什么?"}'

流式对话:

curl "http://localhost:8080/api/chat/ai/stream?msg=讲一个故事"

导入 RAG 文档:

curl http://localhost:8080/api/documents/import

响应格式

POST /api/chat 响应:

{
  "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 提问

文档处理配置

document:
  data-path: data              # 文档目录
  chunk-size: 400             # 分割块大小 (tokens)
  min-chunk-size: 200         # 最小块大小
  max-num-chunk: 10000        # 最大块数量

🛠️ 配置说明

AI 对话配置

spring:
  ai:
    openai:
      base-url: http://localhost:11434
      chat:
        options:
          model: gpt-oss:120b-cloud
          temperature: 0.7

Embedding 配置

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

向量数据库配置

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