基于 LangGraph + DeepSeek 的 AI Agent 图书管理系统
独立开发:基于 LangGraph + DeepSeek 的 AI Agent 图书管理系统(附 RAG 知识库 + NL2SQL)
基于 LangGraph 编排框架 + DeepSeek V4 Pro,封装 16 个 Function Calling 工具,实现了一个能用自然语言对话操作全部业务的 AI Agent 系统。后端 Spring Boot、前端 Vue3、向量库 Milvus、嵌入模型 BGE-M3,六个微服务独立开发。
项目名片
| 维度 | 详情 |
|---|---|
| 项目类型 | 全栈独立开发(从需求到部署) |
| 开发周期 | 2026.06 — 2026.08(约两个月) |
| 代码规模 | 60 个源码文件,Java / Python / Vue3 三语言 |
| 架构 | 前后端分离 + 微服务(6 个独立服务) |
| 数据库 | MySQL 8.0,4 张核心表,外键关联,27 本种子图书 |
| 核心亮点 | AI Agent 对话操作、本地 RAG 知识库、NL2SQL 智能统计 |
一、系统能做什么
这不是一个传统的"增删改查"系统。你可以直接在聊天框里用自然语言操作:
“帮我查一下三体还有几本可借”
→ Agent 自动调search_books→ 返回库存信息
“帮张伟借一本算法导论,借 15 天”
→ Agent 先查读者 → 查图书 → 显示确认信息 → 用户确认 → 扣库存 + 写借阅记录
“最近哪些书逾期了”
→ Agent 调list_borrows(status=2)→ 返回逾期清单
“知识库里关于借阅规则怎么说的”
→ Agent 调search_knowledge_base→ 语义检索 → 返回相关文档片段
所有操作都是 Agent 自动选择工具、自动执行,不需要手动点按钮。
核心功能模块:
图书管理(CRUD + Excel批量导入)
│
借阅流转(借书/还书/逾期自动检测/库存事务)
│
AI Agent(16个工具 / 自然语言对话 / 写操作确认机制)
│
知识库 RAG(29种文件格式 / 语义检索 / 智能问答)
│
NL2SQL 统计(自然语言转 SQL / 安全校验 / 结果润色)
│
数据看板(分类分布 / 借阅状态 / 热门图书 / 活跃读者 / 逾期详情)
二、技术架构

| 层级 | 技术选型 | 我的工作 |
|------|---------|---------|
| 后端 | Spring Boot 3.2 + MyBatis-Plus | 四张表的 CRUD API、借还书事务、Excel 导入、逾期自动检测、全局异常处理 |
| AI Agent | LangGraph + DeepSeek V4 Pro + FastAPI | 16 个 Function Calling 工具定义、Agent 图编排、确认机制、RateLimiter |
| 知识库 | BGE-M3 + Milvus Lite + Sklearn | 多格式文件切分、稠密+稀疏混合检索、RRF 融合、RAG 问答 |
| 统计 | DeepSeek + FastAPI | NL2SQL Prompt 设计、SQL 安全校验、结果自然语言润色 |
| 看板 | FastAPI + Chart.js | 直连 MySQL 聚合查询、6 个可视化面板、单文件部署 |
| 前端 | Vue3 + Element Plus + Vite | 9 个功能页面、Agent 流式对话 UI、知识库上传管理 |
---
## 三、核心模块实现
### 3.1 AI Agent:16 个工具,自然语言驱动业务
**技术方案:LangGraph 图编排 + DeepSeek V4 Pro Function Calling**
Agent 的执行流程是:用户输入 → LLM 分析意图 → 决定调用哪个工具 → 执行工具(调用后端 API)→ LLM 根据结果决定下一步 → 循环直到给出最终回答。
```python
# agent_graph.py — LangGraph 工作流定义
workflow = StateGraph(AgentState)
workflow.add_node("agent", agent_node) # LLM 思考节点
workflow.add_node("tools", tool_node) # 工具执行节点
workflow.set_entry_point("agent")
workflow.add_conditional_edges("agent", should_continue, {"tools": "tools", END: END})
workflow.add_edge("tools", "agent") # 工具结果反馈给 LLM
graph = workflow.compile(checkpointer=MemorySaver()) # 保持对话上下文
16 个工具覆盖全部业务操作:
| 模块 | 工具列表 | 数量 |
|---|---|---|
| 图书 | search_books · get_book · add_book · update_book | 4 |
| 分类 | list_categories · add_category · update_category | 3 |
| 读者 | search_members · get_member · add_member · update_member | 4 |
| 借阅 | list_borrows · borrow_book · return_book | 3 |
| 统计 | smart_query(NL2SQL) | 1 |
| 知识库 | search_knowledge_base(语义检索) | 1 |
安全设计:
- 所有写操作(借书/还书/新增/修改)必须用户二次确认后才执行
- RateLimiter 限制单会话操作上限:图书 5 本、读者 5 人、分类 3 个

3.2 RAG 知识库:上传文档 → 语义检索 → 智能问答
技术方案:BGE-M3 嵌入模型(1024维)+ Milvus Lite 向量库
核心链路:文件上传 → 按类型切分(文本/代码/Markdown 各有策略)→ BGE-M3 生成向量 → 存入 Milvus → 用户提问 → 向量检索 → LLM 结合检索结果生成回答。
支持 29 种文件格式(.txt .md .json .py .java .js .sql .yaml 等),每种格式有专门的切分策略。
混合检索方案:
纯向量检索对精确关键词不敏感。我的方案:稠密向量搜索 + TF-IDF 关键词搜索 → RRF(Reciprocal Rank Fusion)融合排序。
# kb_server.py — 混合检索
# 1. BGE-M3 稠密向量检索(语义匹配)
dense = milvus_client.search(collection="kb_chunks", data=[embedding], limit=top_k*3)
# 2. TF-IDF 稀疏检索(关键词精确匹配)
tfidf = TfidfVectorizer().fit_transform([query] + all_texts)
sparse = cosine_similarity(tfidf[0:1], tfidf[1:])
# 3. RRF 融合
def rrf_fusion(dense_ranked, sparse_ranked, k=60):
scores = {}
for rank, item in enumerate(dense_ranked):
scores[item.id] = scores.get(item.id, 0) + 1/(k+rank+1)
for rank, item in enumerate(sparse_ranked):
scores[item.id] = scores.get(item.id, 0) + 1/(k+rank+1)
return sorted(scores.items(), key=lambda x: x[1], reverse=True)

3.3 NL2SQL 智能统计
技术方案:DeepSeek 生成 SQL → SQL Guard 安全拦截 → 执行 → LLM 润色结果
用户输入"借阅次数最多的 5 本书是什么"→ LLM 生成 SELECT ... FROM borrow_records JOIN books ... ORDER BY ... LIMIT 5 → SQL Guard 校验(只放行 SELECT)→ 执行 → 将原始结果喂给 LLM 润色成人话。
# sql_guard.py — 安全拦截
FORBIDDEN = ["DROP","DELETE","UPDATE","INSERT","ALTER","CREATE","TRUNCATE"]
def check_sql(sql):
for kw in FORBIDDEN:
if re.search(r'\b'+kw+r'\b', sql.upper()):
return False # 拦截危险操作
return True
3.4 后端业务层
技术方案:Spring Boot 3.2 + MyBatis-Plus + MySQL 8.0
完成了四个模块的完整 CRUD 及业务逻辑:
- 借还书事务一致性:借书时原子性地扣减
available并创建借阅记录;还书时恢复库存 - 逾期自动检测:每次查询借阅列表时扫描所有借出中的记录,
due_date < 今天的自动标记为逾期 - Excel 批量导入:支持 .xlsx/.xls,逐行校验(ISBN 去重、分类名称匹配、日期格式解析、总册数有效性),某行失败不影响其他行,提供导入模板下载
- 全局异常处理:统一的异常拦截和错误响应格式
3.5 数据看板
技术方案:FastAPI + Chart.js,单文件部署
看板服务是一个独立的 Python 文件:FastAPI 提供 7 个统计 API,前端 HTML 内嵌在同一个文件里,Chart.js 渲染图表。python main.py 即可运行,零额外配置。
提供六个可视化面板:总览卡片、分类藏书分布(柱状图)、借阅状态分布(环形图)、热门图书 TOP10、活跃读者 TOP10、逾期详情表。
四、这项能力对应什么岗位技能
| 我做了什么 | 体现的能力 | 对应岗位要求 |
|---|---|---|
| LangGraph Agent 编排 + 16 个 Function Calling 工具 | LLM 应用开发、Agent 架构设计、Prompt Engineering | AI Agent 开发(核心) |
| BGE-M3 + Milvus + 稠密/稀疏混合检索 + RRF 融合 | Embedding 模型应用、向量数据库、RAG 检索增强 | RAG 开发 / AI 工程(核心) |
| DeepSeek NL2SQL + SQL Guard 安全校验 | 大模型 Prompt 设计、防御性编程、安全意识 | AI 应用开发 |
| Python FastAPI 构建 3 个 AI 微服务 | Python Web 开发、API 设计、异步处理 | AI 后端开发 |
| Spring Boot + MyBatis-Plus 后端 CRUD + 借还书事务 | Java Web 开发、RESTful API、事务管理 | 后端开发 |
| MySQL 表设计 + 复杂 SQL(JOIN/聚合/子查询) | 数据库设计、SQL 编写与优化 | 数据开发 |
| Vue3 + Element Plus 9 个功能页面 | 前端组件化开发、响应式布局、Axios 通信 | 全栈开发 |
| 6 个独立服务 + Java ↔ Python 跨语言调用 | 微服务架构设计、异构系统集成 | 架构能力 |
| 60 个源码文件独立完成 + 58 条测试用例 | 项目规划、工程质量、独立交付 | 综合工程素养 |
五、项目数据
| 指标 | 数值 |
|---|---|
| 源码文件 | 60 个 |
| 编程语言 | Java / Python / JavaScript |
| 微服务数 | 6 个(后端 + Agent + KB + SmartQuery + Dashboard + 前端) |
| API 端点 | 30+ 个 RESTful 接口 |
| Agent 工具 | 16 个 Function Calling 工具 |
| 知识库格式 | 29 种文件格式支持 |
| 前端页面 | 9 个功能页面 |
| 数据库表 | 4 张核心表 + 外键关联 |
| 测试用例 | 58 条 Agent 测试用例(覆盖全部 16 个工具) |
| 文档 | FAQ / 借阅规则 / 分类标准 / 增删改查示例 / 知识库样例 |
六、最后
从画数据库 E-R 图到写出能对话的 Agent,从"后端调通第一个接口"到"六个服务互相调用不出错",这个项目让我真正理解了:软件设计不是凑代码量,是验证你能不能独立把一件事做成。
如果你也在找软件设计思路,或者想看看一个学生独立能做出什么样的全栈项目——这就是答案。
项目完整源码、数据库初始化脚本、测试用例均已整理。如有需要,欢迎联系。
更多推荐



所有评论(0)