Skip to content

兼容OpenAI Assistants API和Responses API的开源实现,突破原生生态限制,支持灵活切换各大厂商模型,真正实现"一次开发,处处可用"。

License

Notifications You must be signed in to change notification settings

LianjiaTech/bella-assistants

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

121 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bella Assistant API

基于 Spring Boot 的智能助手 API 服务,提供兼容OpenAI Assistants API和Responses API的开源实现,突破原生生态限制,支持灵活切换各大厂商模型,真正实现"一次开发,处处可用"。内置多种工具集成和文件处理功能。

🚀 项目概述

Bella Assistant 是一个企业级的智能助手 API 服务,实现了完整的对话管理、工具调用和流式响应功能。该系统采用先进的执行引擎架构,支持多工具并行执行、智能规划决策和内存管理。

🎯 核心特性

  • OpenAI 兼容 API: 完整覆盖 Assistants API(Assistants/Threads/Messages/Runs)
  • Responses API 支持: 兼容 OpenAI Responses API(创建支持 SSE 流式)
  • 多工具集成: 内置天气、网页搜索、爬虫、图表、RAG/检索、图像生成、语音转写、视觉识别等
  • 流式响应: 支持 Server-Sent Events (SSE) 实时流式输出(Run 与 Response 创建)
  • 智能规划: 基于模板的规划系统,自动决策执行流程
  • 文件处理: S3/MinIO 文件上传存储与引用,支持公共访问 URL
  • 内存管理: 自动管理对话上下文长度,支持长对话
  • 并行执行: 多工具并行调用,提升响应效率

🛠 技术栈

  • 框架: Spring Boot 2.7.18
  • 数据库: MySQL 8.0 + JOOQ
  • 缓存: Redis (Redisson)
  • 存储: AWS S3 / MinIO
  • 模板引擎: Pebble Templates
  • 文档: Swagger/OpenAPI 3
  • 监控: Spring Boot Actuator
  • 配置中心: Apollo (可选)

🔧 快速开始

环境要求

  • Java 17+
  • Maven 3.6+
  • MySQL 8.0+
  • Redis 6.0+

1. 克隆项目

git clone https://github.com/yourusername/bella-assistants.git
cd bella-assistants/api

2. 数据库初始化

# 创建数据库
mysql -u root -p -e "CREATE DATABASE bella_assistant CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

# 执行初始化脚本
mysql -u root -p bella_assistant < sql/01-init-tables.sql

3. 配置文件

修改 src/main/resources/application.yml 中的数据库和 Redis 连接信息:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/bella_assistant?useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: your_password
  redis:
    host: localhost
    port: 6379
bella:
  openapi:
    host: http://localhost:8080
  assistant:
    s3:
      bucket-name: bella-assistant
      endpoint: http://localhost:9000   # MinIO 示例
      access-key: minio
      secret-key: minio123
      path-style-access: true

4. 构建和运行

# 生成 JOOQ 代码
mvn org.jooq:jooq-codegen-maven:generate

# 编译项目
mvn clean compile

# 运行应用
mvn spring-boot:run

应用启动后访问:

📖 API 使用

Responses API(创建与查询)

创建响应(支持 SSE 流式):

curl -X POST http://localhost:8087/v1/responses \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "input": [{"role":"user","content":[{"type":"input_text","text":"你好"}]}],
    "stream": true
  }'

查询响应执行结果:

curl -X GET http://localhost:8087/v1/responses/{response_id}

说明:GET /v1/responses/{response_id} 暂不支持流式返回,创建时 stream=true 可获得 SSE 流。

创建助手

curl -X POST http://localhost:8087/v1/assistants \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4",
    "name": "我的助手",
    "instructions": "你是一个有用的助手",
    "tools": [{"type": "web_search"}]
  }'

创建对话线程

curl -X POST http://localhost:8087/v1/threads \
  -H "Content-Type: application/json" \
  -d '{}'

发送消息并运行

curl -X POST http://localhost:8087/v1/threads/{thread_id}/runs \
  -H "Content-Type: application/json" \
  -d '{
    "assistant_id": "{assistant_id}",
    "additional_messages": [{
      "role": "user",
      "content": "今天天气怎么样?"
    }],
    "stream": true
  }'

🏗 项目架构

核心模块

src/main/java/com/ke/assistant/
├── controller/          # REST API 控制器
├── service/            # 业务逻辑服务层
├── core/               # 核心执行引擎
│   ├── run/            # 运行执行器
│   ├── plan/           # 智能规划系统
│   ├── tools/          # 工具系统
│   ├── ai/             # AI 模型调用
│   ├── memory/         # 内存管理
│   └── file/           # 文件处理
├── db/                 # 数据访问层
└── configuration/      # 配置类

执行流程

  1. 创建运行: 客户端创建线程和运行请求
  2. 上下文构建: 组装执行上下文(消息、工具、文件)
  3. 智能规划: 规划器决定下一步动作(LLM 调用、工具执行、完成)
  4. 并行执行: 运行执行器协调 AI 服务和工具执行
  5. 流式输出: 实时 SSE 流式响应给客户端
  6. 状态管理: 管理运行状态转换和错误处理

注:Response 的创建同样支持 SSE 流式输出;Response 的 GET 查询目前为非流式。

🔨 开发指南

添加新工具

  1. 实现 ToolHandler 接口:
@Component
public class MyToolHandler implements ToolHandler {
    @Override
    public String getType() {
        return "my_tool";
    }
    
    @Override
    public ToolResult handle(ToolContext context) {
        // 工具逻辑实现
        return ToolResult.success("结果");
    }
}
  1. application.yml 中添加配置:
bella:
  assistant:
    tools:
      my_tool:
        enabled: true
        config:
          api_url: "https://api.example.com"
  1. ToolFetcher 中注册工具处理器

数据库变更

# 1. 修改 MySQL 数据库结构
# 2. 重新生成 JOOQ 代码
mvn org.jooq:jooq-codegen-maven:generate
# 3. 更新相应的 Repository 方法

运行测试

# 运行所有测试
mvn test

# 运行特定测试类
mvn test -Dtest=AssistantControllerTest

🔧 运维部署

Docker 部署

# 构建镜像
docker build -t bella-assistant .

# 运行容器
docker run -d \
  --name bella-assistant \
  -p 8087:8087 \
  -e SPRING_PROFILES_ACTIVE=prod \
  bella-assistant

配置说明

配置项 说明 默认值
server.port 服务端口 8087
bella.assistant.tools.*.enabled 工具开关 true
bella.s3.endpoint S3 存储端点 -
bella.assistant.max-context-length 最大上下文长度 32000

环境变量与常用配置(摘自 api/src/main/resources/application.yml):

  • S3_BUCKET_NAME:S3/MinIO 存储桶名称(默认 bella-assistant
  • S3_REGIONS3_ACCESS_KEYS3_SECRET_KEYS3_ENDPOINTS3_PATH_STYLE_ACCESSS3_PUBLIC_BASE_URL
  • WEB_SEARCH_TAVILY_APIKEY:Tavily 搜索 API Key
  • WEATHER_SEARCH_APIKEY:高德天气 API Key
  • RETRIEVAL_URL:检索服务地址;RAG_TOOL_URL:RAG 服务地址

监控指标

应用提供以下监控端点:

  • /actuator/health - 健康检查
  • /actuator/metrics - 应用指标
  • /actuator/prometheus - Prometheus 格式指标

📝 内置工具

工具类型 功能描述 配置键
web_search_tavily 网页搜索(Tavily) bella.assistant.tools.web-search-tavily.*
web_crawler 站点爬取 bella.assistant.tools.web-crawler.*
weather_search 天气查询(高德) bella.assistant.tools.weather-search.*
rag RAG 检索 bella.assistant.tools.rag.*
retrieval 语义检索 bella.assistant.tools.retrieval.*
image_generate 图像生成(DALL·E 3) bella.assistant.tools.image-generate.*
img_vision 图像理解(Vision) bella.assistant.tools.img-vision.*
bar_tool 柱状图生成 bella.assistant.tools.bar-tool.*
line_tool 折线图生成 bella.assistant.tools.line-tool.*
pie_tool 饼图生成 bella.assistant.tools.pie-tool.*
audio_transcription 语音转写 bella.assistant.tools.audio-transcription.*
read_files 文件读取 bella.assistant.tools.read-files.*

说明:Local Shell 为工具定义事件(服务器不会执行本地命令),用于兼容 Responses API 的工具调用流。

🤝 贡献

欢迎提交 Issue 和 Pull Request!

开发流程

  1. Fork 本项目
  2. 创建特性分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m '添加某个特性')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 创建 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件。

🆘 支持

如果遇到问题,请:

  1. 查看 文档
  2. 搜索已有的 Issues
  3. 创建新的 Issue 描述问题

Built with ❤️ by Bella Team

About

兼容OpenAI Assistants API和Responses API的开源实现,突破原生生态限制,支持灵活切换各大厂商模型,真正实现"一次开发,处处可用"。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages