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届求职交流#
全部评论
厉害诶!
点赞 回复 分享
发布于 昨天 18:26 北京
做得非常简陋 轻喷
点赞 回复 分享
发布于 03-08 21:41 新疆

相关推荐

有一点标题党 不过心仪的岗位应该是可以找到的!主包是非典型强技术人,没啥经验,没实习,没啥比赛,不过面试的时候几乎也不问校园经历,代码比较多的时候都是在刷算法,最近在复盘整个找工作的过程和注意点,感觉和找到实习前的想法不太一样,或许没有想象的那么难,也有一定的邪修成分在,希望能给到大家一些启示(注:全为个人想法和感受,完全没有权威性 可参考或不参考首先是写简历,我认为这是相当重要的一环,一开始找实习的时候确实没啥好写的,啥乱七八糟的大创都往里写,口语化句子也上来了,冗余的个人信息到处都是,不管对不对口各种项目都往里写 实则课设玩具。。然后投,然后进行八股随机复习。但是面试几次之后感觉简历是很重要的,我认为这是一个自己出的考点题单,专业的面试官都会在简历中找问题问,还有一个是如果项目经历和岗位高度匹配确实会吸引相当一部分火力,不会漫无目的的都是八股!那没有啥项目经历咋整呢?编!(bushi)既然项目经历是你的经历,那你完全可以先写结果再经历这里有一点是可以先挑选心仪的岗位,然后把岗位要求给ai,让ai给你写最适配这个岗位的项目和技术栈,然后可以让它推荐点开源代码,这就是你项目的来源了(怎么学习?:开源代码! 其实个人来看的话,基本简历主要两个部分就是技术栈和项目经历,其他的怀疑面试官都没看过如果时间紧的话不看开源代码也行,但是一定项目要有代码可看,这里可以让ai给你整一个几千上万行的代码项目,然后开始一个文件一个文件开始读,最好是能把项目都通读一遍或者理解整个框架(完全手搓项目的大神可忽略。)甚至完全有可能根据这个项目开始学习、入门这个领域当经历极其匹配的时候,面试官就会深层次挖你的经历了,但是这样答上来也有很大的通过率。甚至面试可能不会考正常的算法,可能会考项目介绍中可能有的数据结构/项目简单函数实现,不过也不用太担心,就把你两个项目学透即可,也不会有太复杂的实现,我认为字节的算法有可能不按常理出牌,极其看重数据结构的抽象逻辑,所以可能有的时候算法该刷还是要刷 要有一些归纳总结能力,感觉tx基本是hot100除了琢磨不透的算法 八股应该都会取自于项目里了可以边学边约面,这样有ddl威胁自己效率特高(嗯),最重要的是敢于尝试!上面这种出来的极其匹配的简历一投应该就能约面,要勇敢面试!我一般有面试焦虑,三天内只能有一个面试,所以每个面试基本都针对性预想过好几遍了 (这可能是焦虑人的唯一优点在面试前可以让ai给你出一下关于简历和岗位的题单,命中率蛮高的面试挂了千万不要害怕停止,可能会有更好的机会,并且成为宝贵的经验!暂时就想到这么多,之后可能随机更点landing过程其实也需要准备挺长时间的,也是有要脚踏实地学的,不过可能有针对性的学习会轻松一些,在学习的路上多亏了牛客上兄弟姐妹们的经验分享,希望个人的经验也能给大家带来点启示祝大家早日拿到心仪的offer!
27届求职交流
点赞 评论 收藏
分享
刚刷到字节跳动官方发的消息,确实被这波阵仗吓了一跳。在大家还在纠结今年行情是不是又“寒冬”的时候,字节直接甩出了史上规模最大的转正实习计划——ByteIntern。咱们直接看几个最硬的数,别被花里胡哨的宣传词绕晕了。首先是“量大”。全球招7000多人是什么概念?这几乎是把很多中型互联网公司的总人数都给招进来了。最关键的是,这次的资源分配非常精准:研发岗给了4800多个Offer,占比直接超过六成。说白了,字节今年还是要死磕技术,尤其是产品和AI领域,这对于咱们写代码的同学来说,绝对是今年最厚的一块肥肉。其次是大家最关心的“转正率”。官方直接白纸黑字写了:整体转正率超过50%。这意味着只要你进去了,不划水、正常干,每两个人里就有一个能直接拿校招Offer。对于2027届(2026年9月到2027年8月毕业)的同学来说,这不仅是实习,这简直就是通往大厂的快捷通道。不过,我也得泼盆冷水。坑位多,不代表门槛低。字节的实习面试出了名的爱考算法和工程实操,尤其是今年重点倾斜AI方向,如果你简历里有和AI相关的项目,优势还是有的。而且,转正率50%也意味着剩下那50%的人是陪跑的,进去之后的考核压力肯定不小。一句话总结: 27届的兄弟们,别犹豫了。今年字节这是铁了心要抢提前批的人才,现在投递就是占坑。与其等到明年秋招去千军万马挤独木桥,不如现在进去先占个工位,把转正名额攥在手里。
喵_coding:别逗了 50%转正率 仔细想想 就是转正与不转正
哪些公司开暑期实习了?
点赞 评论 收藏
分享
评论
7
7
分享

创作者周榜

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