# project-1-knowledge-base **Repository Path**: sumumm/project-1-knowledge-base ## Basic Information - **Project Name**: project-1-knowledge-base - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-25 - **Last Updated**: 2025-11-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RAG 知识库应用项目 ## 📋 项目背景 在前面的课程中,我们已经: - ✅ 学习了 RAG 的基础理论和技术背景 - ✅ 从 0 到 1 动手实现了一个 RAG 知识库 而本项目阶段的目标是:**将 RAG 知识库与 LangGraph 结合,应用到真实场景中** 我们将直接调用 **CNB 知识库 API**(基于 [CNB 知识库](https://docs.cnb.cool/zh/ai/knowledge-base.html),只需上传 markdown 到指定 Git 仓库,即可自动构建知识库并提供 API 接口) 本项目还将使用 **LangGraph** 作为核心工作流引擎: - **LangGraph**:用于构建复杂的 AI 工作流和状态管理 - **优势**:支持多步骤推理、条件分支、循环处理等复杂逻辑 - **应用**:非常适合实现 RAG 检索、多轮对话、深度研究等场景 --- ## 🎯 项目任务 ### 你将得到什么 **我会提供一个基础 Demo,包含:** - ✅ 前端:基础的 Chat 对话 UI 界面(React) - ✅ 后端:Python + LangGraph 工作流 - ✅ 集成:CNB 知识库 API 调用示例 - ✅ 功能:简单的一问一答对话 ### 你需要做什么 **在 Demo 基础上,选择以下场景之一(或多个)进行开发:** --- ## 🚀 应用场景选择 难度表示,⭐ 越多表示难度越大。 ### 场景 1:基于当前的 Demo 仓库增强对话功能 ⭐⭐ **要求:** 在 Demo 基础上增强对话功能 **核心功能:** - 支持前端切换知识库(也就是不同的 Git 仓库 ,如 cnb/docs , 或者是你自己的仓库),可以先查阅 [CNB 知识库 API 文档](https://docs.cnb.cool/zh/ai/knowledge-base.html) 了解如何使用 API 获取知识库列表和内容。 - 建议可以简单搞成一个输入框可以输入不同的仓库名字即可。 - 引用来源角标展示,点击角标可以跳转到对应的文档页面 (CNB知识库接口支持返回元数据metadata包含文档标题、path、url 等) 引用.png --- ### 场景 2:基于知识库的 DeepResearch 网页对话 ⭐⭐⭐ **要求:** 在 Demo 基础上实现深度研究功能 **核心功能:** - 多轮检索和推理(不是简单的一问一答) - 结构化输出研究报告 - 实时流式输出 - 支持显示当前步骤(可选,加分项,例如: Searching 等) - 支持不同的模型做不同事情,例如 query 生成使用一个模型,Reflection 使用一个模型,最终 Answer 使用一个模型 (可选,加分项) - 引用来源和溯源能力 (可选,加分项) **与普通对话的区别:** - 普通对话:问一次 → 检索一次 → 回答 - DeepResearch:问一次 → 拆解问题 → 多次检索 → 整合信息 → 生成报告 Deep Research **资料:** - [LangGraph DeepResearch 示例](https://academy.langchain.com/courses/deep-research-with-langgraph) ```mermaid flowchart TD A([问题]) --> B[生成查询] B --> C[检索知识库] C --> D[检索结果] D --> E[反思] E -->|需要更多研究| C E -->|上下文充足| F[生成答案] F --> G([答案]) ``` --- ### 场景 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. 演示 - 可通过 CNB 云原生开发环境运行的在线 Demo 或演示视频 (showcase : https://cnb.cool/examples/ecosystem/code-sandbox-in-cnb) - 核心功能展示 (录制视频) - 特色功能亮点说明 (文字说明) --- ## 📚 你会得到的资源 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 接口即可查询。 [链接更多👉](https://docs.cnb.cool/zh/ai/knowledge-base.html#bu-zhou-2-shi-yong-zhi-shi-ku) **Q: 必须用本地 ollama 吗?** A: 建议使用本地 ollama,因为 CNB 云原生开发环境带 GPU 资源,可以快速启动模型。 **Q: Docker Compose 不熟悉怎么办?** A: Demo 会提供完整的 `docker-compose.yml` 配置,你只需要按需修改即可。 --- ## 🎓 学习目标 完成本项目后,你将掌握: ✅ 真实企业级项目中 RAG 的应用方式 ✅ LangGraph 工作流编排能力 ✅ 前后端分离架构设计 ✅ API 集成和调用最佳实践 ✅ 云原生应用开发 ✅ 复杂 AI 应用的产品化思维 --- ## 🚀 开始你的项目吧! **先让它跑起来,再让它跑得好!** 如有任何问题,随时在训练营群里提问。祝你项目顺利!🎉 ## 📚 参考资料 - [CNB 知识库 API 文档](https://docs.cnb.cool/zh/ai/knowledge-base.html) - [CNB 文档](https://docs.cnb.cool/zh/) - [CNB 云原生开发](https://docs.cnb.cool/zh/workspaces/intro.html) - [Next.js 官方文档](https://nextjs.org/docs) - [LangGraph 官方文档](https://docs.langchain.com/oss/python/langgraph/overview) -------------------------------- ## Docker compose 快速体验 (适合在云原生开发快速体验) ### 1. 前置要求 - 需要注册 LangSmith 账号,并获取 API Key,打开 https://smith.langchain.com ,点击 API Keys -> API Key 生成 API Key - 需要在环境变量增加 `LANGSMITH_API_KEY` (注意是 export 到 环境变量上) ```bash export LANGSMITH_API_KEY=your_api_key ``` ### 2. 启动 Docker Compose ```bash docker compose up ``` ### 3. 在远程开发端口转发中,添加 8123 端口,并且访问即可, 例如: 在远程开发端口转发中,添加 8123 端口,并且访问即可 ```bash # 如果是远程开发, 注意 XXX 是转发后会在端口 Tab 中展示 https://xxx-8123.cnb.run/app/ # 如果是本地 http://localhost:8123/app/ ``` ## 本地开发 (适合开发) ### 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. 安装依赖 **后端:** ```bash cd backend pip install . ``` **前端:** ```bash cd frontend npm install ``` ### 3. 运行开发服务器 **后端和前端:** ```bash 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 可用。 ## Demo 代码运作方式说明 基本上和 [CNB 知识库](https://docs.cnb.cool/zh/ai/knowledge-base.html) 一致,前端收到用户的 Query 后,会调用后端 API 进行查询,后端 API 会调用 CNB 知识库 API 进行查询,然后交给 LLM 结合 Prompt 生成答案。