logo
0
0
WeChat Login
项目一

RAG 知识库应用项目

📋 项目背景

在前面的课程中,我们已经:

  • ✅ 学习了 RAG 的基础理论和技术背景
  • ✅ 从 0 到 1 动手实现了一个 RAG 知识库

而本项目阶段的目标是:将 RAG 知识库与 LangGraph 结合,应用到真实场景中

我们将直接调用 CNB 知识库 API(基于 CNB 知识库,只需上传 markdown 到指定 Git 仓库,即可自动构建知识库并提供 API 接口)

本项目还将使用 LangGraph 作为核心工作流引擎:

  • LangGraph:用于构建复杂的 AI 工作流和状态管理
  • 优势:支持多步骤推理、条件分支、循环处理等复杂逻辑
  • 应用:非常适合实现 RAG 检索、多轮对话、深度研究等场景

🎯 项目任务

你将得到什么

我会提供一个基础 Demo,包含:

  • ✅ 前端:基础的 Chat 对话 UI 界面(React)
  • ✅ 后端:Python + LangGraph 工作流
  • ✅ 集成:CNB 知识库 API 调用示例
  • ✅ 功能:简单的一问一答对话

你需要做什么

在 Demo 基础上,选择以下场景之一(或多个)进行开发:


🚀 应用场景选择

难度表示,⭐ 越多表示难度越大。

场景 1:基于当前的 Demo 仓库增强对话功能 ⭐⭐

要求: 在 Demo 基础上增强对话功能

核心功能:

  • 支持前端切换知识库(也就是不同的 Git 仓库 ,如 cnb/docs , 或者是你自己的仓库),可以先查阅 CNB 知识库 API 文档 了解如何使用 API 获取知识库列表和内容。
    • 建议可以简单搞成一个输入框可以输入不同的仓库名字即可。
  • 引用来源角标展示,点击角标可以跳转到对应的文档页面 (CNB知识库接口支持返回元数据metadata包含文档标题、path、url 等)
引用.png

场景 2:基于知识库的 DeepResearch 网页对话 ⭐⭐⭐

要求: 在 Demo 基础上实现深度研究功能

核心功能:

  • 多轮检索和推理(不是简单的一问一答)
  • 结构化输出研究报告
  • 实时流式输出
  • 支持显示当前步骤(可选,加分项,例如: Searching 等)
  • 支持不同的模型做不同事情,例如 query 生成使用一个模型,Reflection 使用一个模型,最终 Answer 使用一个模型 (可选,加分项)
  • 引用来源和溯源能力 (可选,加分项)

与普通对话的区别:

  • 普通对话:问一次 → 检索一次 → 回答
  • DeepResearch:问一次 → 拆解问题 → 多次检索 → 整合信息 → 生成报告
Deep Research

资料:


场景 3:企业微信 Bot / 客服号 ⭐⭐⭐⭐

要求: 接入企业微信,实现自动问答机器人

核心功能:

  • 接入企业微信 API
  • 处理用户消息回调
  • 保持多轮对话的上下文
  • 支持文本、图片等多种消息类型

场景 4:VuePress 等文档站点的插件 ⭐⭐⭐⭐

要求: 将 CNB 知识库嵌入到文档站点中(如 VuePress 等)

核心功能:

  • 使用 CNB 知识库插件,扫描当前使用 VuePress 仓库搭建的文档站点,自动构建知识库
  • 在 VuePress 文档页面中添加问答组件
  • VuePress 插件请求业务后台(需要开发)进行 Chat,业务后台调用 CNB 知识库 API 进行问答, P.S. LLM 可使用本地 ollama

场景 5:语音对话知识库 ⭐⭐⭐⭐⭐

要求: 实现语音交互的知识库问答

核心功能:

  • 可以使用语音对话方式与知识库进行问答

技术方案参考:

  • 简单方案:Whisper (STT) + 本地 ollama LLM + TTS
  • 高级方案:集成 VITA 等多模态模型

场景 6:其他创新应用 ⭐⭐⭐ ~ ⭐⭐⭐⭐⭐

自由发挥,但需要包含知识库检索能力,并且具有创新性,例如:

  • 智能音箱
  • 小程序
  • 移动端 App
  • VSCode 插件(在 IDE 中直接问答)
  • ...(其他你能想到的场景)

🛠 技术栈

必须使用

  • 前端: Next.js
  • 后端: Python + LangGraph
  • 知识库: CNB API(只需调用 query 接口)
  • LLM: 本地 ollama(或远程 API)
  • 开发环境:
    • CNB 云原生开发环境 (一键启动模型、开发环境等)
    • Docker Compose

技术说明

LangGraph 的作用:

  • 编排复杂的工作流(检索 → 判断 → 再检索 → 整合)
  • 管理对话状态和上下文
  • 实现条件分支和循环逻辑

CNB 知识库 API:

  • 你只需在指定 Git 仓库上传 markdown 文档
  • CNB 自动构建知识库并提供 API
  • 调用 API 的 query 接口即可检索知识

CNB 云原生环境 - 一键启动开发

  • 打开浏览器即可开发,无需本地配置
  • 前后端项目、大模型服务,一键启动
  • 配合 GPU 资源,可以直接使用 Ollama 运行开源大模型

🎁 加分项(可选)

如果你想获得更高分数,可以实现:

  • 多知识库切换:支持在多个知识库之间切换查询
  • 对话历史管理:保存和查看历史对话记录
  • 用户认证系统:登录、权限管理

📦 交付要求

1. 代码

  • 完整的项目代码(基于 Demo 扩展)
  • 代码规范,有必要的注释

2. 启动方式

  • docker-compose.yml 配置文件
  • 一键启动脚本
  • 启动文档说明

3. 文档

  • README.md:快速开始指南
  • 架构设计说明
  • API 使用文档
  • 功能演示说明(配截图或视频)

4. 演示


📚 你会得到的资源

  1. Demo 源码仓库(包含前后端基础代码)
  2. CNB 知识库 API 文档和调用示例
  3. LangGraph 使用示例和最佳实践
  4. 常见问题解答

⏰ 建议时间安排(4 周)

  • Week 1:熟悉 Demo,理解 LangGraph 工作流,确定场景选择
  • Week 2-3:核心功能开发
  • Week 4:优化用户体验,完善细节

💡 常见问题

Q: 我必须做 DeepResearch 吗?
A: 不是。5 个场景任选其一即可

Q: 可以同时做多个场景吗?
A: 可以!建议先完成一个场景,再扩展其他场景。

Q: LangGraph 是什么?为什么要用它?
A: LangGraph 是用于构建复杂 AI 工作流的框架,它可以帮你编排多步骤的推理和检索流程。是当前最流行的 AI 工作流框架之一。

Q: CNB 知识库怎么用?
A: 你会得到一个 Git 仓库地址,上传 markdown 文件后,系统自动构建知识库。然后调用提供的 API 接口即可查询。 链接更多👉

Q: 必须用本地 ollama 吗?
A: 建议使用本地 ollama,因为 CNB 云原生开发环境带 GPU 资源,可以快速启动模型。


✨ 新增高级功能详细说明

🔄 多知识库切换功能

技术实现:

  • 后端:RepoManager 类管理多个知识库
  • API:/api/repos 端点获取知识库列表
  • 前端:RepoSelector 组件提供用户界面

使用方式:

  1. 点击界面右上角的知识库选择器
  2. 选择预定义的 CNB 知识库(cnb/docs, cnb/examples, cnb/tutorials)
  3. 或添加自定义知识库:输入 owner/repository 格式的 slug
  4. 系统自动验证访问权限并显示状态

应用场景:

  • 多团队/项目文档切换
  • 不同主题知识库查询(技术文档、API 文档、教程等)
  • 个人和企业知识库并行使用

📚 对话历史管理功能

技术实现:

  • 存储:ConversationStore 类实现文件系统存储
  • API:完整的 CRUD 操作支持对话管理
  • 前端:ConversationHistory 组件提供丰富交互

核心功能:

  • 📝 会话创建:自动创建和命名新对话
  • 🗂️ 会话加载:加载历史对话继续交流
  • 🔍 智能搜索:支持标题和内容全文搜索
  • 📊 统计信息:显示对话数量、消息统计、活跃时间
  • 🗑️ 会话删除:一键清理不需要的对话

数据存储:

  • 位置:backend/data/conversations/ 目录
  • 格式:JSON 文件,包含完整对话历史
  • 结构:每个对话包含消息、元数据、时间戳等

👤 用户认证系统功能

技术实现:

  • 后端:AuthManager 类处理用户认证和权限
  • 前端:AuthManager 组件提供登录/注册界面
  • 安全:JWT 令牌机制,支持角色权限管理

核心功能:

  • 🔐 用户注册:创建新用户账户
  • 🔑 安全登录:密码哈希存储,JWT 令牌认证
  • 👥 角色管理:支持用户和管理员权限
  • ⚙️ 个人偏好:用户设置和个性化选项
  • 🚪 会话安全:自动令牌过期和刷新机制

安全特性:

  • 密码 SHA-256 哈希存储
  • JWT 令牌 24 小时过期
  • 前端密码显示/隐藏切换
  • 防止暴力破解的登录限制

🚀 新版本启动指南

完整功能启动

# 1. 设置环境变量 export CNB_TOKEN="your_cnb_token_here" export JWT_SECRET="your_jwt_secret_here" # 可选,系统会自动生成 # 2. 确保 Ollama 运行 ollama pull qwen3:32b ollama serve # 3. 启动完整应用 ./start_deepresearch.sh

功能体验地址

Docker 部署

# 构建前端 cd frontend npm run build # 启动完整服务 docker compose up

🎯 API 接口文档

知识库管理

  • GET /api/repos - 获取可用知识库列表
  • POST /api/repos/check - 检查知识库访问权限
  • POST /api/repos/add - 添加自定义知识库

用户认证

  • POST /api/auth/register - 用户注册
  • POST /api/auth/login - 用户登录
  • POST /api/auth/change-password - 修改密码
  • GET /api/users/me - 获取当前用户信息
  • PUT /api/users/preferences - 更新用户偏好

对话管理

  • GET /api/conversations - 获取用户对话列表
  • POST /api/conversations - 创建新对话
  • GET /api/conversations/{id} - 获取特定对话
  • PUT /api/conversations/{id} - 更新对话
  • DELETE /api/conversations/{id} - 删除对话
  • GET /api/users/{user_id}/stats - 获取用户统计

🎪 技术架构图

Q: Docker Compose 不熟悉怎么办?
A: Demo 会提供完整的 docker-compose.yml 配置,你只需要按需修改即可。


🎓 学习目标

完成本项目后,你将掌握:

✅ 真实企业级项目中 RAG 的应用方式
✅ LangGraph 工作流编排能力
✅ 前后端分离架构设计
✅ API 集成和调用最佳实践
✅ 云原生应用开发 ✅ 复杂 AI 应用的产品化思维


🚀 开始你的项目吧!

先让它跑起来,再让它跑得好!

如有任何问题,随时在训练营群里提问。祝你项目顺利!🎉

📚 参考资料


Docker compose 快速体验 (适合在云原生开发快速体验)

1. 前置要求

  • 需要注册 LangSmith 账号,并获取 API Key,打开 https://smith.langchain.com ,点击 API Keys -> API Key 生成 API Key
  • 需要在环境变量增加 LANGSMITH_API_KEY (注意是 export 到 环境变量上)
export LANGSMITH_API_KEY=your_api_key

2. 启动 Docker Compose

docker compose up

3. 在远程开发端口转发中,添加 8123 端口,并且访问即可, 例如:

在远程开发端口转发中,添加 8123 端口,并且访问即可
# 如果是远程开发, 注意 XXX 是转发后会在端口 Tab 中展示 https://xxx-8123.cnb.run/app/ # 如果是本地 http://localhost:8123/app/

🚀 快速启动 DeepResearch (推荐)

使用我们提供的一键启动脚本:

# 1. 设置环境变量 export CNB_TOKEN="your_cnb_token_here" # 2. 确保 Ollama 运行并拉取模型 ollama pull qwen3:32b ollama serve # 3. 启动应用 ./start_deepresearch.sh

这将自动启动后端和前端服务,提供完整的 DeepResearch 体验。

本地开发 (适合开发)

1. 前置要求

  • Node.js 和 npm(或 yarn/pnpm)
  • Python 3.11+
  • CNB_TOKEN:后端 agent 需要 CNB TOKEN。
    • 进入 backend/ 目录
    • 通过复制 backend/.env.example 文件创建一个名为 .env 的文件
    • 打开 .env 文件并添加你的 CNB TOKEN:CNB_TOKEN="YOUR_CNB_TOKEN"

2. 安装依赖

后端:

cd backend pip install .

前端:

cd frontend npm install

3. 运行开发服务器

后端和前端:

make dev

这将运行后端和前端开发服务器。打开浏览器并导航到前端开发服务器 URL(例如,http://localhost:5173/app)。

或者,你可以分别运行后端和前端开发服务器:

  • 后端:在 backend/ 目录中打开一个终端并运行 langgraph dev。后端 API 将在 http://127.0.0.1:2024 可用。它还会打开一个浏览器窗口到 LangGraph UI。
  • 前端:在 frontend/ 目录中打开一个终端并运行 npm run dev。前端将在 http://localhost:5173 可用。

🚀 DeepResearch 功能说明

本项目已实现 DeepResearch 深度研究功能,提供比普通问答更强大的多轮检索和综合分析能力。

✨ 核心特性

  • 🔍 多轮检索和推理 - 自动拆解复杂问题,生成多个搜索查询
  • 📝 结构化报告 - 生成包含执行摘要、详细发现和引用来源的综合报告
  • ⚡ 实时流式输出 - 实时显示研究进度:查询生成 → 知识库搜索 → 结果分析 → 报告生成
  • 📚 引用来源和溯源 - 每个报告都包含完整的引用信息,可点击跳转到原文档
  • 🎯 智能模式切换 - 支持快速问答模式和深度研究模式

🔄 DeepResearch vs 普通对话

特性普通对话DeepResearch
流程问一次 → 检索一次 → 回答问一次 → 拆解问题 → 多次检索 → 整合信息 → 生成报告
深度表面答案深度分析
引用基础引用完整溯源
输出直接答案结构化报告

🎛️ 使用方法

  1. 选择模式: 在欢迎界面选择 "DeepResearch" 或 "Quick Answer" 模式
  2. 输入问题: 输入您想要深度研究的问题
  3. 实时监控: 观察实时进度条,了解当前执行步骤
  4. 查看报告: 获得包含引用来源的完整研究报告

📊 报告结构

每个 DeepResearch 报告包含:

  • Executive Summary - 核心答案概览
  • Detailed Findings - 按主题组织的详细发现
  • Sources - 完整的引用来源列表
  • Recommendations - 进一步研究的建议

Demo 代码运作方式说明

基本上和 CNB 知识库 一致,前端收到用户的 Query 后,会调用后端 API 进行查询,后端 API 会调用 CNB 知识库 API 进行查询,然后交给 LLM 结合 Prompt 生成答案。

DeepResearch 模式下,后端会:

  1. 使用 LLM 生成多个搜索查询
  2. 对每个查询进行多次知识库检索
  3. 分析检索结果的完整性
  4. 生成综合性的结构化报告
  5. 提供完整的引用来源和溯源信息