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
这个项目我重点锻炼了什么
- AI 接口集成能力(流式协议、模型输入结构)
- 异步架构设计(MQ 解耦 + 后台处理)
- 稳定性治理(线程隔离、超时、降级)
- 成本控制(上下文预算管理)
- 工程化思维(日志可观测、模块化设计、可开源交付)
当前已实现功能点
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届求职交流#
