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届求职交流##AI项目实战#
全部评论
大佬泰牛
点赞 回复 分享
发布于 03-21 21:28 广东
对比卖课的那帮,已经很厉害了,我看谁敢喷你
点赞 回复 分享
发布于 03-10 18:23 湖北
开源还带演示?作者是活菩萨🙏
点赞 回复 分享
发布于 03-10 18:23 河南
限频+超时+降级,稳定性三件套齐了
点赞 回复 分享
发布于 03-10 18:23 陕西
邮箱注册+JWT鉴权,连账号都做了,牛的
点赞 回复 分享
发布于 03-10 18:23 浙江
这项目真硬核!
点赞 回复 分享
发布于 03-10 18:22 广东
就佩服手搓的
点赞 回复 分享
发布于 03-10 18:22 甘肃
厉害诶!
点赞 回复 分享
发布于 03-09 18:26 北京
做得非常简陋 轻喷
点赞 回复 分享
发布于 03-08 21:41 新疆

相关推荐

实习 1、展开讲一讲实习里的项目经历。你觉得哪个项目印象最深,就讲哪个> 拷打:包括消息队列异步消费、数据丢失和恢复、吞吐与线程池设计、 补偿与幂等详细可以看:https://yb0os1.github.io/2026/03/12/%E6%9A%91%E6%9C%9F%E5%AE%9E%E4%B9%A0%E8%AE%B0%E5%BD%95八股1、线程间共享与可见性:1. 多线程之间如果要共享数据,一般有什么手段?2. 如果线程 A 修改了一个共享变量,线程 B 怎么看到最新值?3. `volatile` 有什么限制?是不是只要用了它就一定能保证线程可见性?4. 除了 `volatile`,还有其他方式能保证线程之间的可见性吗?5. 为什么加锁也能保证可见性?2、线程私有数据1. 线程里有没有自己独有的内存数据?2. 除了栈这些线程私有的数据,还有别的吗?(这里面试官想要我回答ThreadLocal)3、ThreadLocal1. 你听过 `ThreadLocal` 吗?2. `ThreadLocal` 为什么也算线程独享?3. `ThreadLocal` 是怎么做到线程隔离的?4. `ThreadLocal` 平时一般怎么用?5. 使用 `ThreadLocal` 的时候,有什么需要注意的地方?4、源码阅读情况1. 你平时看过哪些框架源码吗?或者你看过哪些写得比较好的开源代码? (说没有 但是后面问了问hashmap)5、HashMap1. 你看过 `HashMap` 的实现代码吗?2. 你知道为什么 `HashMap` 不是线程安全的吗?3. `HashMap` 的线程安全问题一般会在什么环节触发?算法1、记不太清了,一个dfs的题目,没写出来2、多线程顺序打印1-100,线程数量和每个线程打印的个数 作为参数,还是没写出来,编码掌握的不怎么好感觉g了
查看17道真题和解析
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
16
48
分享

创作者周榜

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