Mini-Doubao:一个具备 RAG + Agent 能力的 AI 对话系统(已开源)

我自己做了一个 AI 后端项目 Mini-Doubao 。

这个项目不只是“调用大模型接口聊天”,而是围绕真实工程问题做了完整实现,包括:

  • SSE 流式对话
  • RAG 知识库检索
  • Agent 工具调用闭环
  • 多轮会话上下文管理
  • 线程池隔离与异步收尾
  • 邮箱验证码注册/登录/找回密码

项目背景

基于火山引擎(豆包模型)API 构建。

目标是做一个“可对话 + 可检索 + 可扩展工具能力”的系统,并解决 AI 场景中常见的工程问题:

长连接、异步任务、上下文成本控制、服务稳定性等。

核心能力

1)RAG 异步摄入链路

  • 文档上传后通过 RocketMQ 异步处理
  • 完成“解析 -> 切片 -> Embedding -> Milvus 入库”
  • 避免大文件处理阻塞 Web 请求

2)流式响应 + 稳定性优化

  • 使用 SSE 把模型输出实时推送到前端
  • 使用独立线程池隔离模型调用,避免下游波动拖垮业务线程
  • 流结束后异步进行落库与扣费

3)Agent 工具调用

  • 支持天气查询、联网搜索等工具
  • 实现“模型决策 -> 参数解析 -> 工具执行 -> 结果回填 -> 最终回答”的闭环
  • 工具失败可降级,不影响主流程可用性

4)上下文滑动窗口(Token 预算)

  • 多轮对话按 Token 预算做上下文裁剪
  • 预留 system/rag/input 预算,控制调用成本
  • 保证长对话的可持续性与响应质量平衡

5)账号体系

  • 邮箱验证码注册
  • 邮箱密码登录
  • 邮箱验证码找回密码
  • 频控(邮箱/IP)

技术栈

  • 后端:Spring Boot、MyBatis-Plus、Spring AI、JWT、Redis
  • AI 能力:火山引擎豆包 API、SSE
  • RAG:RocketMQ、MinIO、Milvus
  • 前端:Vue3 + TypeScript + Element Plus
  • 数据库:MySQL

这个项目我重点锻炼了什么

  1. AI 接口集成能力(流式协议、模型输入结构)
  2. 异步架构设计(MQ 解耦 + 后台处理)
  3. 稳定性治理(线程隔离、超时、降级)
  4. 成本控制(上下文预算管理)
  5. 工程化思维(日志可观测、模块化设计、可开源交付)

当前已实现功能点

1)账号与权限

  • 邮箱验证码注册
  • 邮箱密码登录
  • 忘记密码(邮箱验证码重置)
  • JWT 鉴权
  • 基础角色区分(管理员/普通用户)

2)对话能力

  • 单轮/多轮文本对话
  • SSE 流式返回(打字机效果)
  • 深度思考开关(按模式切换回答策略)
  • 会话创建、重命名、删除、置顶
  • 历史消息查看与持久化

3)上下文管理

  • 基于 Token 预算的滑动窗口裁剪
  • 可预留 system / RAG / 输入预算
  • 长对话成本控制(避免上下文无限增长)

4)RAG 知识库

  • 文档上传(支持会话关联)
  • 文档异步解析(MQ 解耦)
  • 文本切片 + 向量化
  • Milvus 向量检索召回
  • 检索结果注入对话上下文

5)Agent 工具调用

  • 工具决策(模型输出结构化决策)
  • 本地工具执行(天气查询、联网搜索)
  • 工具调用记录(工具名、参数、状态、耗时、结果)
  • 工具失败降级与结果回填

6)稳定性与工程化

  • 模型调用线程池隔离(避免阻塞业务线程)
  • 异步收尾(消息落库、消耗统计)
  • 请求超时与友好错误返回
  • Redis + MySQL 的会话上下文分级存储(读缓存、miss 回源、回填)
  • 基础限频(邮箱/IP)

7)管理后台(基础)

  • 用户管理
  • 对话记录查看
  • 系统配置项管理
  • 基础运营数据展示

代码地址

GitHub:https://github.com/mknb66/mini-doubao

在线演示(测试环境):http://115.191.64.85/

说明:演示环境资源有限,可能会限流或不定时重启,如果访问异常可以稍后再试。

欢迎提 issue 或交流建议,我会继续慢慢打磨。

#27届求职交流#
全部评论
做得非常简陋 轻喷
点赞 回复 分享
发布于 昨天 21:41 新疆

相关推荐

评论
5
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务