# new-rag-chat-vue **Repository Path**: weh_coder/new-rag-chat-vue ## Basic Information - **Project Name**: new-rag-chat-vue - **Description**: 本项目是一个基于 Vue 3 + Element Plus 的 RAG(检索增强生成)知识问答系统前端应用,并提供用户友好的对话界面与知识库管理功能。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-05 - **Last Updated**: 2026-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: Vue, vite, 知识库问答 ## README # 📖 RAG Knowledge Vue — 开发文档 (Development Documentation) > **项目版本**:1.0.0 > **最后更新**:2026-08-11 > **项目地址**:`rag-knowledge-base/web/rag-knowledge-vue` --- ## 1. 项目概述 本项目是一个基于 **Vue 3 + Element Plus** 的 RAG(检索增强生成)知识问答系统前端应用。提供用户友好的对话界面与知识库管理功能,核心能力包括: - **知识库问答**:基于向量检索 + RAG 模式回答问题,附带来源卡片 - **AI 直接对话**:不经过知识库的纯对话模式 - **多会话管理**:支持会话创建、切换、重命名、删除、收藏 - **文档管理**:知识库文档的上传、版本管理、权限控制 - **用户身份切换**:支持多用户/多租户身份切换 - **流式输出**:支持 SSE 流式输出,打字机效果显示 - **本地持久化**:对话历史、会话状态自动持久化到 localStorage --- ## 2. 技术栈 ### 2.1 前端技术栈 | 技术 | 版本 | 用途 | |------|------|------| | Vue | ^3.5.0 | 核心框架 | | Vue Router | ^4.5.0 | 路由管理 | | Pinia | ^2.3.0 | 状态管理 | | Element Plus | ^2.9.0 | UI 组件库 | | Element Plus Icons | ^2.3.0 | 图标库 | | Axios | ^1.8.0 | HTTP 请求库 | | Vite 5 | ^8.0.16 | 构建工具 | | @vitejs/plugin-vue | ^5.2.0 | Vue 支持插件 | | unplugin-auto-import | ^19.0.0 | API 自动导入 | | unplugin-vue-components | ^28.0.0 | 组件自动导入 | ### 2.2 项目结构 ``` src/ ├── main.js # 入口文件 ├── App.vue # 根组件(布局:侧边栏 + 主内容区) ├── router/ # 路由配置 │ └── index.js ├── stores/ # Pinia 状态管理 │ ├── chat.js # 聊天/对话存储 │ ├── conversation.js # 会话管理存储 │ ├── knowledge.js # 知识库文档存储 │ └── user.js # 用户存储 ├── api/ # API 请求封装 │ ├── auth.js # 认证 API │ ├── chat.js # 聊天 API (RAG 问答 / AI 对话 / SSE 流式) │ ├── document.js # 文档 API │ ├── history.js # 历史 API │ └── index.js # API 索引 ├── components/ # 公共组件 │ ├── Chat/ # 对话组件 │ │ ├── MessageBubble.vue # 消息气泡组件 │ │ ├── PipelineInfo.vue # 检索链路信息组件 │ │ ├── SourceCards.vue # 来源卡片组件 │ │ ├── ThinkingIndicator.vue # 思考指示器 │ │ └── WelcomePanel.vue # 欢迎页组件 │ ├── Sidebar/ # 侧边栏组件 │ │ ├── ConversationList.vue # 会话列表 │ │ ├── DataManager.vue # 数据管理面板 │ │ ├── DocumentList.vue # 文档列表 │ │ ├── DocumentUpload.vue # 文档上传 │ │ ├── GeneralSettings.vue # 通用设置 │ │ └── UserSelector.vue # 用户选择 │ └── index.vue # 侧边栏主组件 ├── composables/ # 组合式函数 │ ├── useSidebar.js # 侧边栏展开/收起 │ └── useTheme.js # 主题管理 ├── utils/ # 工具函数 │ └── msgId.js # 全局消息 ID 生成器 ├── styles/ # 全局样式 │ └── global.css ├── auto-imports.d.ts # 自动导入类型声明(Vite 生成) ├── components.d.ts # 组件类型声明(Vite 生成) └── assets/ # 静态资源 .env # 环境变量配置 vite.config.js # Vite 配置文件 package.json # 项目依赖配置 index.html # HTML 入口 ``` --- ## 3. 快速开始 ### 3.1 环境要求 - Node.js >= 18.0 - npm >= 9.0 或 pnpm >= 8.0 ### 3.2 安装依赖 ```bash npm install # 或 pnpm install ``` ### 3.3 启动开发服务器 ```bash npm run dev ``` 开发服务器启动后,访问 `http://localhost:5173` ### 3.4 构建生产版本 ```bash npm run build ``` 产物输出到 `dist/` 目录。 ### 3.5 预览生产构建 ```bash npm run preview ``` ### 3.6 更新依赖 ```bash npm update ``` --- ## 4. 关键配置说明 ### 4.1 Vite 配置 (vite.config.js) ```js import { defineConfig, resolve } from 'vite' import vue from '@vitejs/plugin-vue' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import { resolve } from 'path' export default defineConfig({ plugins: [ vue(), AutoImport({ resolvers: [ElementPlusResolver()], imports: ['vue', 'vue-router', 'pinia'], dts: 'src/auto-imports.d.ts', }), Components({ resolvers: [ElementPlusResolver()], dts: 'src/components.d.ts', }), ], resolve: { alias: { '@': resolve(__dirname, 'src'), // @ 指向 src 目录 }, }, server: { port: 5173, proxy: { '/api': { target: 'http://127.0.0.1:3000', // 后端 API 地址 changeOrigin: true, }, }, }, }) ``` **路径别名**:`@` 指向 `src` 目录,所有导入使用 `@/xxx` 形式。 **代理配置**:开发模式下,所有 `/api` 请求自动代理到 `http://127.0.0.1:3000`,用于解决开发环境跨域问题。 ### 4.2 环境变量 (.env) | 变量 | 值 | 说明 | |------|-----|------| | `VITE_API_BASE_URL` | `/api` | API 基础路径,通过代理转发 | > ⚠️ 当前 `.env` 中未定义 `VITE_API_BASE_URL`,系统默认使用 `/api` 前缀。 ### 4.3 Element Plus 主题配置 使用 CSS 变量定义主题颜色(通过全局 CSS 文件 `src/styles/global.css` 管理): | CSS 变量 | 用途 | |----------|------| | `--primary-color` | 主色(蓝色系) | | `--primary-bg` | 主色背景 | | `--bg-primary` | 页面主背景 | | `--bg-secondary` | 卡片/面板背景 | | `--text-primary` | 主文本色 | | `--text-secondary` | 次文本色 | | `--border-color` | 边框色 | | `--border-light` | 浅边框色 | | `--success-color` | 成功色 | | `--danger-color` | 错误色 | | `--info-color` | 信息色 | | `--warning-color` | 警告色 | | `--gradient-primary` | 主色渐变 | | `--gradient-bg` | 页面背景渐变 | | `--gradient-secondary` | 次色渐变 | > 完整变量清单请参考 `src/styles/global.css`。 --- ## 5. 开发规范 ### 5.1 代码风格 - 使用 ES 模块语法(`import/export`) - Vue 组件推荐使用 `