Skip to content

zxh123456-source/Trace-Back

Repository files navigation

English | 中文

TraceBack - 溯源智能体

基于 RAG + LangGraph Agent 的苏格拉底式智能错题学习系统

TraceBack 是一个面向学习场景的 AI 智能体系统,核心理念是不直接给答案,而是通过苏格拉底式反问引导学生自主思考。系统基于 RAG(检索增强生成)技术从知识库中精准检索知识点,再由 LangGraph 编排的 Agent 结合对话上下文进行多轮引导,帮助学生深刻理解错题背后的知识本质。


核心特性

  • RAG 全链路 — 文档上传 → 智能切片 → 向量化 → Milvus 存储 → 混合检索 → 重排序 → LLM 生成,完整覆盖
  • LangGraph 双模式 Agent — 普通问答模式直接回答,苏格拉底引导模式通过反问法多轮推导,均由 StateGraph 流程编排
  • 向量知识库 — Milvus 1024 维向量存储,18 字段 Schema,支持权限隔离(私有/公共)、元数据筛选、按 knowledge_id 管理
  • SSE 流式输出 — 逐 token 实时推送,基于 astream_events 从 LangGraph 内部提取流式片段
  • 错题本闭环 — 对话过程中自动提取错题信息,引导模式从缓存保存,普通模式由 Python 后端直接写入,支持复习状态管理

系统架构

┌─────────────────────────────────────────────────────────────────────┐
│                        Vue 3 前端 (Port 5173)                        │
│         Element Plus · Pinia · Vue Router · SSE Fetch               │
└───────────────────────────┬─────────────────────────────────────────┘
                            │ Vite Proxy
            ┌───────────────┼───────────────┐
            ▼                               ▼
┌─────────────────────┐         ┌─────────────────────────┐
│  Java 后端 (8081)     │         │  Python 后端 (8000)       │
│  Spring Boot 3.2.5   │◄────────│  FastAPI + LangGraph     │
│  · 用户/会话/消息管理  │  HTTP   │  · RAG 检索与知识管理      │
│  · 错题本 CRUD        │  调用   │  · Agent 对话编排         │
│  · 文件存储           │         │  · LLM 生成 (SSE)        │
│  · 统计分析           │         │  · 向量化/重排/OCR        │
└─────────┬───────────┘         └──────────┬──────────────┘
          │                                │
          ▼                                ▼
   ┌────────────┐               ┌─────────────────────┐
   │  MySQL 8.0  │               │  Milvus v2.6 (向量库) │
   │  关系型数据   │               │  + MinIO (对象存储)    │
   └────────────┘               └─────────────────────┘

请求路由规则(Vite Proxy):

  • /api/users, /api/sessions, /api/messages, /api/mistakes, /api/files, /api/statistics → Java 后端
  • /api/chat, /api/knowledge → Python 后端

RAG 技术栈详解

文档解析

格式 解析器 备注
PDF PyMuPDFReader 按 10 页分组合并,扫描件回退 PaddleOCR
DOCX LlamaIndex DocxReader 按 10 页分组
TXT/Markdown 直接读取

文本切片

  • 切片器:LlamaIndex SentenceSplitter
  • chunk_size:2048 字符
  • chunk_overlap:200 字符
  • 段落分隔符\n\n
  • 元数据提取:从 Markdown 标题自动提取 chapter(二级标题)、tags(三级标题),关键词匹配检测 difficulty

向量化与存储

  • Embedding 模型:DashScope text-embedding-v4,1024 维
  • 向量数据库:Milvus v2.6.12 Standalone
  • 索引类型IVF_FLAT,度量 IP(内积),nlist=128
  • Collection Schema:18 个字段,含 vector(1024)textknowledge_iduser_idis_privatechapterdifficultytags
  • 写入方式:原生 PyMilvus API 直接 insert,完全控制字段映射

检索

  1. 权限过滤(user_id == '{uid}' || is_private == false) 确保用户仅可见自己的私有知识 + 公共知识
  2. 向量检索:LlamaIndex Retriever,similarity_top_k 可配
  3. 重排序:DashScope gte-rerank-v2 精排
  4. 冗余去重SentenceEmbeddingOptimizer 基于 Embedding 相似度去除冗余段落

生成

  • LLM:通义千问 qwen3-max,通过 langchain_community.ChatTongyi 调用
  • temperature:0.7 | max_tokens:2048
  • 流式:LangGraph astream_events(version="v1") 提取 on_chat_model_stream 事件,逐 token 推送 SSE

LangGraph Agent 工作流

普通模式(normal)

                  ┌──────────────┐
   User Query ──▶│ normal_answer │──▶ RAG 检索 ──▶ 构建知识上下文 ──▶ LLM 生成 ──▶ Response
                  └──────────────┘

单节点流程:检索知识库 → 拼装 Prompt → 生成回答,自动保存错题。

引导模式(guide)— 苏格拉底式反问

                  ┌────────────────┐
   User Query ──▶│  route_by_cache │
                  └───┬────────┬───┘
           首次提问 │        │ 追问(有缓存)
                     ▼        ▼
           ┌─────────────┐ ┌───────────────┐
           │guide_with_rag│ │guide_with_cache│
           │ RAG检索+缓存  │ │ 直接使用缓存    │
           └──────┬──────┘ └──────┬────────┘
                  ▼               ▼
            生成引导问题       生成引导问题
            (不给答案)      (根据回答调整)
                               │
                    ┌──────────┴──────────┐
                    ▼                     ▼
              回答正确→深入          回答错误→温和引导
              不完整→补充引导       说不知道→给予提示
                    │
                    ▼
            [完成学习] ──▶ 保存错题到错题本

设计亮点:引导模式仅在首轮执行一次 RAG 检索,将知识缓存在 Session.cache 中,后续追问直接复用缓存,避免重复检索开销。


完整技术栈

层级 技术
前端 Vue 3.5 · Vite 8 · Element Plus · Pinia · Vue Router · Axios · ECharts
Java 后端 Spring Boot 3.2.5 · Spring Security · MyBatis-Plus · Flyway · MySQL Connector
Python 后端 FastAPI · LangGraph · LangChain · LlamaIndex · DashScope · PyMilvus
向量数据库 Milvus v2.6.12 Standalone · MinIO · etcd
关系数据库 MySQL 8.0
AI 模型 LLM: 通义千问 qwen3-max · Embedding: text-embedding-v4 (1024d) · Rerank: gte-rerank-v2
文档处理 PyMuPDF · python-docx · PaddleOCR(扫描件回退)
部署 Docker · Docker Compose · Nginx 反向代理

项目结构

Trace-Back/
├── frontend/                   # Vue 3 前端
│   └── trace-back/
│       └── src/
│           ├── api/            # API 封装(Java / Python 双实例)
│           ├── views/          # 页面组件
│           ├── stores/         # Pinia 状态管理
│           ├── components/     # 公共组件(Markdown渲染器、富文本编辑器等)
│           └── utils/          # 工具函数(请求封装、格式化)
├── java-backend/               # Spring Boot 后端
│   └── trace-back/src/main/java/com/traceback/
│       ├── controller/         # REST 接口
│       ├── service/            # 业务逻辑
│       ├── entity/             # 数据库实体
│       ├── mapper/             # MyBatis-Plus Mapper
│       └── config/             # 安全、CORS、Swagger 配置
├── python-backend/             # FastAPI + RAG 后端
│   └── app/
│       ├── api/                # 路由(chat.py, knowledge.py)
│       ├── services/           # 核心服务(agent、rag、llm、prompts)
│       ├── utils/              # 向量存储、检索器、文本处理
│       ├── models/             # Pydantic 请求/响应模型
│       └── config/             # 配置管理
├── doc/                        # 项目文档(接口、数据库、架构、需求)
├── start.bat                   # 本地一键启动脚本
└── deploy.py                   # 远程部署脚本(.gitignore 已忽略)

快速开始

环境要求

  • Java 17+
  • Python 3.9+
  • Node.js 18+
  • Docker & Docker Compose

本地启动

# 1. 克隆仓库
git clone https://github.com/<your-username>/Trace-Back.git
cd Trace-Back

# 2. 配置环境变量
# python-backend/.env
DASHSCOPE_API_KEY=your_dashscope_api_key

# 3. 一键启动(Windows)
start.bat

# 或手动逐个启动:
# 启动 MySQL(Docker)
docker run -d --name mysql-db -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=traceback -p 3306:3306 mysql:8.0

# 启动 Milvus(Docker Compose)
cd python-backend && docker compose up -d

# 启动 Java 后端
cd java-backend/trace-back && ./mvnw spring-boot:run

# 启动 Python 后端
cd python-backend && uvicorn app.main:app --host 0.0.0.0 --port 8000

# 启动前端
cd frontend/trace-back && npm install && npm run dev

访问

  • 前端页面:http://localhost:5173
  • Java Swagger:http://localhost:8081/swagger-ui.html
  • Milvus Attu:http://localhost:8001

功能模块

AI 对话

  • 普通问答:基于知识库的 RAG 检索问答,自动保存错题
  • 引导学习:苏格拉底式反问,多轮引导后保存错题与知识点总结
  • 支持 SSE 流式输出,逐字显示

错题本

  • 自动保存:引导模式从缓存提取,普通模式 Python 端直接写入
  • 错题详情:题目、错误上下文、知识点总结、知识来源、章节、难度、标签
  • 状态管理:待复习 / 已掌握,支持筛选和搜索

私人知识库

  • 文件上传:PDF / DOCX / TXT / Markdown,支持元数据标注(标题、章节、难度、标签)
  • 向量检索:基于语义相似度的知识搜索
  • 权限隔离:私有知识仅自己可见,公共知识全员可见
  • 支持删除(同步清理 Milvus 向量)

管理后台

  • 数据分析仪表盘(ECharts 可视化)
  • 知识库管理
  • 用户增长趋势、错题标签分布等统计

License

MIT


作者

曾旭辉 — 中南林业科技大学涉外学院 · 软件工程

About

基于 RAG + LangGraph Agent 的苏格拉底式智能错题学习系统

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors