企业知识库智能问答 Agent(React + Nest)

企业知识库智能问答 Agent(React + Nest)

资料获取

百度网盘(本文档及配套资料)

网盘内另有 代码仓库地址.md,用于克隆前后端源码。建议先读本文了解项目,再按该文档拉代码。


一、项目是什么

这是一套企业知识库智能问答 演示系统:员工登录后,可针对已授权的知识库提问(差旅报销、制度条款等),系统通过 RAG(检索增强生成) 从文档片段中找依据再回答,并展示引用来源;查不到依据时会拒答,不瞎编。

在 RAG 之外,系统还演示了 Agent 工程里常见的进阶能力:

  • LangGraph 意图分叉:制度问题走检索问答,工单/订单走 Tool
  • SSE 流式输出:回答逐字显示
  • 多轮会话:左侧会话列表,历史落 Postgres
  • Redis 限流:同一用户每分钟最多 20 次提问
  • HITL 人机审核:「关闭工单」类高风险写操作需人工点同意后才执行

整体定位是简历 / 面试可演示的完整链路,而不是只调一次大模型 API。


二、架构概览

text 复制代码
浏览器  React + Vite  :5173
    │  fetch + Cookie(Vite 代理 /api → Nest)
    ▼
Nest.js  :8787
    ├── JwtGuard 登录鉴权、KbGrant 知识库授权
    ├── 知识库 CRUD、文档上传、分块索引
    ├── AgentService(LangGraph 图 + SSE 流式)
    ├── Postgres + pgvector(用户、库、文档、向量、会话)
    └── Redis(限流计数;图 checkpoint 用 MemorySaver)
    ▼
外部 API
    ├── DeepSeek(聊天,deepseek-v4-flash)
    └── 通义 / OpenAI 兼容(Embedding,如 text-embedding-v3 1024 维)

前后端两个独立工程、两个终端进程 :前端只写页面,后端写接口与 AI 逻辑;模型 Key 只放在后端 .env,不进前端。


三、技术栈

层级 技术
前端 React 19、Vite 6、TypeScript、Ant Design 6、React Router
后端 Nest.js 11、tsx 热重载、Prisma 7 + @prisma/adapter-pg
AI LangChain、LangGraph、ChatOpenAI(DeepSeek 兼容)
数据库 PostgreSQL 16 + pgvector(业务表与向量同库)
缓存 Redis 7(限流)
容器 Docker Compose(postgres、redis)

四、已实现功能(Demo 清单)

阶段 能力 简要说明
登录 Cookie + JWT admin / staff 角色,知识库按授权过滤
知识库 CRUD 建库、改名、删除
文档 上传 md/txt 预览、抽屉全文
索引 分块 + Embedding + pgvector 建立索引、debug-search 调试检索
RAG retrieve → generate 引用片段、无依据拒答
会话 左右布局 新建 / 改名 / 删除会话,消息落库
SSE 流式问答 逐 token 渲染,Vite 代理关闭 SSE 缓冲
Tool 意图分叉 查工单 T-1001、订单 O-9001
Redis 限流 超限返回 429
HITL 关闭工单审批 先 pending,点同意再执行关闭

未做完或可选:Compose 一键部署、trace 与评测表等。


五、LangGraph 意图图(核心逻辑)

text 复制代码
START → route(识别 rag / tool / hitl)
          ├─ rag  → retrieve → generate → END
          ├─ tool → lookup   → summarize → END
          └─ hitl → hitl(待审批提示)→ END

关闭工单:用户点「同意」→ 调用 resume 接口 → 真正关闭工单

路由规则示例:

  • 含「关闭工单」+ T-xxxxhitl(不直接改数据)
  • 含「工单 / 订单 / T- / O-」→ tool
  • 其余 → rag(向量检索 + 生成)

克隆前端工程后,可在其 docs/demo-LangGraph-编排写法.md 查看 StateGraph 写法说明。


六、目录结构

text 复制代码
knowledge-base-agent-node-nest/          # 后端
  src/
    agent/          AgentService、LangGraph、Tool、SSE
    auth/           登录、JWT Guard、KbGrant
    knowledge-base/ 知识库、上传、ingest、pgvector
    prisma/         schema、migrate、seed
  docker-compose.yml
  .env.example

knowledge-base-agent-react-web/          # 前端
  src/pages/
    LoginPage/      登录
    ChatPage/       对话台(会话 + SSE + HITL 按钮)
    KbPage/         知识库与文档、索引、debug-search
  docs/             按 Demo 顺序的逐步开发文档
  vite.config.ts    /api 代理到 :8787

七、本地快速启动

7.1 环境要求

  • Node.js 20+
  • Docker Desktop(Postgres + Redis)
  • yarn

7.2 第一次初始化(做过可跳过)

按网盘内《代码仓库地址.md》克隆代码后:

powershell 复制代码
cd knowledge-base-agent-node-nest
copy .env.example .env
# 编辑 .env:DATABASE_URL、AUTH_SECRET、DEEPSEEK_API_KEY、EMBEDDING_* 等

docker compose up -d postgres redis
yarn install
yarn prisma:migrate
yarn prisma:seed

.env 要点:

  • 聊天DEEPSEEK_API_KEYDEEPSEEK_BASE_URL(DeepSeek 仅 chat,不能当 embedding)
  • 向量EMBEDDING_API_KEYEMBEDDING_MODEL(如通义 text-embedding-v3,1024 维);入库与检索必须用同一模型和维度

7.3 日常启动(四个步骤)

  1. 打开 Docker Desktop
  2. 在后端目录执行 docker compose up -d postgres redis
  3. 两个终端分别在后端、前端目录 yarn start(:8787、:5173)
  4. 浏览器打开 http://localhost:5173/login
账号 密码 用途
staff@corp.com staff123 对话台 /chat
admin@corp.com admin123 知识库 /admin/kb

健康检查:http://localhost:5173/api/health"ok": true

7.4 演示验收建议

  1. 上传 docs/samples/差旅报销.md,建立索引
  2. 问「一线城市住宿上限」→ 有引用、能答
  3. 问「查工单 T-1001」→ 笔记本 / 张三
  4. 问「关闭工单 T-1001」→ 待审批 → 点同意 → 再查 status 为 closed
  5. 同一账号连续提问 20+ 次 → 出现「太频繁」

八、主要 API(节选)

方法 路径 说明
POST /api/auth/login 登录,Set-Cookie
GET /api/kb 知识库列表
POST /api/kb/:id/documents 上传文档
POST /api/kb/:id/index 建立向量索引
GET /api/agent/sessions 会话列表
POST /api/agent/stream SSE 流式问答
POST /api/agent/resume HITL 审批关闭工单

前端一律 fetch(..., { credentials: "include" }),经 Vite 代理访问 Nest。


九、与「对照仓」的差异

同类项目 kb-agent-platform 采用 Next.js 网关 + 独立 Agent 进程 。本系统刻意做成 React + Nest 两个工程:鉴权、数据库、LangGraph 都在 Nest 里,少一层 HTTP 转发,更适合按 Demo 文档从零手写、面试时讲清每一层职责。


十、延伸阅读(克隆前端后,见 docs/ 目录)

文档 内容
demo开发手册.md 总路线与验收清单
快捷启动.md 每次开项目的四步
postgres使用手册.md 库、Prisma、pgvector
demo-05-RAG问答.md RAG 图与拒答
demo-06-SSE多轮.md 流式与代理配置
demo-07-意图与Tool.md 工单 / 订单分叉
demo-08-Redis.md 限流与 MemorySaver
demo-10-HITL.md 关闭工单人机审核

本文档随项目迭代更新;源码请按网盘内《代码仓库地址.md》获取。

相关推荐
神奇霸王龙41 分钟前
Codex MCP GA 实测:Qwen / GLM / Kimi / DeepSeek / MiniMax 调度 Codex 沙箱的真实成本
人工智能·ai·agent·ai编程·原型模式·mcp
yandong6341 小时前
redis添加到win服务
数据库·redis·缓存
我叫小米粒1 小时前
可维护的智能体协作空间:字段建模、提示约束、测试集和上线检查
数据库·aigc·agent·智能体交付
luckystar513~1 小时前
Hermes 工程化实战专栏:「会自我进化」的开源 AI Agent--Hermes
人工智能·agent·智能体·hermes
攻城有术1 小时前
专项攻克——redis分布式锁-用LUA脚本解决setNX锁不释放问题
redis·分布式·lua
宋哥转AI2 小时前
深入理解 AI Agent · 多 Agent 编排 #02:Agent 之间怎么“说话“——通信、状态与冲突解决
人工智能·agent·ai编程
Dovis(誓平步青云)2 小时前
模拟器横评:电脑上看小说、追短剧用什么模拟器?MuMu、雷电、腾讯手游助手实测
android·java·服务器·前端·javascript·电脑
慕易8352 小时前
HITL 人工介入的并发难题:两个人同时审批一张证书怎么办
agent