Skip to content

Spring Boot 系统一键接入大模型通信组件,支持通义千问、OpenAI等大模型,提供SSE流式、同步、WebSocket和MQ类型的AI问答能力。

License

Notifications You must be signed in to change notification settings

vikis77/Spring-AI-Chat-Starter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spring AI Chat Starter

🚀 Spring Boot 大语言模型接入 Starter - 一键集成多种AI模型,支持多协议通信

License: MIT Java Spring Boot Spring AI

Spring Boot 系统一键接入大模型通信组件,支持通义千问、OpenAI等大模型,提供SSE流式响应、WebSocket和同步API接口。

✨ 特性

🤖 多模型支持

  • 阿里通义千问 (DashScope) - 完整支持
  • OpenAI GPT - 完整支持
  • 易于扩展 - 支持添加其他大语言模型

🌐 多通信协议

  • HTTP REST API - 同步请求/响应
  • SSE (Server-Sent Events) - 流式响应
  • WebSocket - 双向实时通信
  • RabbitMQ - 异步消息队列

⚙️ 开箱即用

  • Spring Boot 自动配置 - 零配置启动
  • 灵活配置 - 通过配置文件控制所有功能
  • 服务降级 - 内置容错机制
  • 对话记忆 - 支持上下文对话
  • 前端示例 - 提供 HTML/JS 示例页面

📦 构建和部署

作为 Starter 使用(推荐)

(使用示例,我的另一个项目 Digital-Life-Engine 有使用到本 Starter,如果需要参考可以 clone 源码查看)

  1. 注释 Maven Plugin:在 pom.xml 中注释掉 spring-boot-maven-plugin

    <!-- 这个plugin会把starter打包为可运行的springboot包,作为starter,不需要 -->
    <!-- <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        ...
    </plugin> -->
  2. 安装到本地仓库

    mvn clean install
  3. 在业务项目中使用

    <dependency>
        <groupId>com.randb</groupId>
        <artifactId>spring-ai-chat-starter</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

独立运行(开发测试)

  1. 取消注释 Maven Plugin:在 pom.xml 中取消注释 spring-boot-maven-plugin

  2. 运行项目

    mvn spring-boot:run

重要说明

  • 作为 Starter 使用:注释掉 spring-boot-maven-plugin,安装到本地仓库供其他项目使用
  • 独立运行项目:取消注释 spring-boot-maven-plugin,可以直接运行此项目进行开发测试

� 快速开始

1. 添加依赖

<dependency>
    <groupId>com.randb</groupId>
    <artifactId>spring-ai-chat-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

2. 配置应用

复制 src/main/resources/application-template.ymlapplication.yml 并配置:

spring:
  ai:
    # 通义千问配置
    dashscope:
      chat:
        options:
          model: qwen-turbo
      api-key: ${DASHSCOPE_API_KEY:your-api-key-here}
    # 模型配置
    model:
      chat: dashscope
    # Chat Starter 配置
    chat:
      enabled: true
      default-model: qwen
      websocket:
        enabled: true
      controller:
        enabled: true

3. 使用服务

@Autowired
private ChatModelFactory chatModelFactory;

public void chatExample() {
    // 获取聊天服务
    ChatService chatService = chatModelFactory.get("qwen");

    // 创建请求
    ChatRequest request = new ChatRequest();
    request.setPrompt("你好");
    request.setUserId("user123");

    // 同步调用
    ChatResponse response = chatService.syncReply(request);
    System.out.println(response.getContent());
}

📖 使用指南

HTTP REST API

同步聊天

curl -X POST http://localhost:8080/api/chat/sync \
  -H "Content-Type: application/json" \
  -d '{
    "userId": "user123",
    "prompt": "你好,介绍一下自己",
    "model": "qwen",
    "sessionId": "session123"
  }'

SSE 流式响应

curl -N http://localhost:8080/api/chat/sse?userId=user123&prompt=你好&model=qwen

WebSocket

连接地址:ws://localhost:8080/api/chat/ws

发送消息格式:

{
  "userId": "user123",
  "prompt": "你好,介绍一下自己",
  "model": "qwen",
  "sessionId": "session123"
}

编程接口

@Autowired
private ChatModelFactory chatModelFactory;

public void chatExample() {
    // 获取聊天服务
    ChatService chatService = chatModelFactory.get("qwen");

    // 创建请求
    ChatRequest request = new ChatRequest();
    request.setPrompt("你好");
    request.setUserId("user123");
    request.setSessionId("session123");

    // 同步调用
    ChatResponse response = chatService.syncReply(request);
    System.out.println(response.getContent());

    // 流式调用
    chatService.streamReply(request)
        .subscribe(chunk -> System.out.print(chunk.getContent()));
}

⚙️ 配置选项

基础配置

配置项 描述 默认值 必需
spring.ai.chat.enabled 是否启用 AI 聊天功能 true
spring.ai.chat.default-model 默认模型名称 qwen
spring.ai.dashscope.api-key 通义千问 API Key - 是*
spring.ai.openai.api-key OpenAI API Key - 是*

*至少需要配置一个模型的API Key

WebSocket 配置

配置项 描述 默认值
spring.ai.chat.websocket.enabled 是否启用 WebSocket true
spring.ai.chat.websocket.path WebSocket 路径 /api/chat/ws

RabbitMQ 配置

配置项 描述 默认值
spring.ai.chat.rabbitmq.enabled 是否启用 RabbitMQ false
spring.ai.chat.rabbitmq.exchange 交换机名称 chat.exchange
spring.ai.chat.rabbitmq.queue 队列名称 chat.queue

REST API 配置

配置项 描述 默认值
spring.ai.chat.controller.enabled 是否启用 REST 控制器 true
spring.ai.chat.controller.base-path API 基础路径 /api/chat

🔧 开发指南

添加新的AI模型

  1. 实现 ChatService 接口:
@Component("your-model")
public class YourModelChatServiceImpl implements ChatService {
    @Override
    public Flux<ChatResponse> streamReply(ChatRequest request) {
        // 实现流式响应
    }

    @Override
    public ChatResponse syncReply(ChatRequest request) {
        // 实现同步响应
    }
}
  1. 在配置中注册模型,使用 chatModelFactory.get("your-model") 获取服务。

🏗️ 项目架构

spring-ai-chat-starter/
├── src/main/java/com/randb/springaichatstarter/
│   ├── autoconfigure/          # 自动配置类
│   │   ├── SpringAiChatAutoConfiguration.java
│   │   ├── DashScopeModelAutoConfig.java
│   │   ├── WebSocketConfiguration.java
│   │   └── RabbitMQConfiguration.java
│   ├── core/                   # 核心服务
│   │   ├── ChatService.java           # 统一聊天接口
│   │   ├── ChatModelFactory.java      # 模型工厂
│   │   ├── QwenChatServiceImpl.java    # 通义千问实现
│   │   └── DefaultQwenChatServiceImpl.java # 降级实现
│   ├── controller/             # REST API控制器
│   │   └── ChatController.java
│   ├── dto/                    # 数据传输对象
│   │   ├── ChatRequest.java
│   │   └── ChatResponse.java
│   ├── websocket/              # WebSocket处理器
│   │   └── ChatWebSocketHandler.java
│   ├── mq/                     # 消息队列服务
│   │   └── ChatMessageService.java
│   └── util/                   # 工具类
│       └── ChatResponseUtil.java
├── src/main/resources/
│   ├── META-INF/spring/        # 自动配置
│   ├── static/                 # 示例页面
│   └── application-template.yml # 配置模板
└── pom.xml

设计模式

  • 工厂模式ChatModelFactory 动态选择模型实现
  • 适配器模式ChatClientAdapter 适配不同模型接口
  • 策略模式:通过配置选择不同的通信协议
  • 降级模式:提供默认实现确保服务可用性

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

🙏 致谢

📞 联系方式


⭐ 如果这个项目对你有帮助,请给个 Star!

About

Spring Boot 系统一键接入大模型通信组件,支持通义千问、OpenAI等大模型,提供SSE流式、同步、WebSocket和MQ类型的AI问答能力。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published