全栈 RAG 问答系统 — 基于 React 19 + NestJS 的检索增强生成技术
兼容 OpenAI API(OpenAI、DeepSeek、Claude 等)+ Google Gemini 原生 SDK,可配置 LLM、Embedding 和 Rerank 模型。
快速模式通过 Apache Tika 提取文本,高精度模式通过视觉管线处理图文混合文档。
基于 Elasticsearch 的向量 + 关键词混合搜索,支持来源引用、相似度评分,可配置分块大小与重叠。
JWT 认证 + 每用户独立知识库,数据与配置完全隔离,保障隐私安全。
基于 Server-Sent Events (SSE) 的实时流式输出,提供流畅低延迟的对话体验。
界面支持日语、中文和英文,错误信息和 API 响应消息全面国际化。
快速文本提取,无 API 调用成本
保留原始排版、图表和图片信息
| 服务 | 端口 | 用途 |
|---|---|---|
| Elasticsearch | 9200 | 向量存储与混合检索 |
| Apache Tika | 9998 | 文档文本提取 |
| LibreOffice Server | 8100 | 文档格式转换 |
| 后端 API | 3001 | NestJS REST API |
| 前端(开发) | 13001 | Vite 开发服务器 |
| 前端(生产) | 80 / 443 | Nginx 反向代理 |
关键环境变量,配置于 server/.env
| 变量名 | 默认值 | 说明 |
|---|---|---|
| OPENAI_API_KEY | — | OpenAI 兼容 API 密钥 |
| GEMINI_API_KEY | — | Google Gemini API 密钥 |
| ELASTICSEARCH_HOST | http://localhost:9200 | Elasticsearch 地址 |
| TIKA_HOST | http://localhost:9998 | Apache Tika 地址 |
| LIBREOFFICE_URL | http://localhost:8100 | LibreOffice 服务器地址 |
| JWT_SECRET | — | JWT 签名密钥 |
cd server && yarn formatcd server && yarn lintserver/src/ 对应模块下创建 Controller*.spec.ts 文件中添加测试web/components/ 下创建组件web/types.ts 中添加 TypeScript 接口web/services/ 中连接后端服务检查 docker-compose.yml 中的内存限制配置
确保 uploads/ 和 temp/ 目录存在且具有正确的读写权限
确认 LibreOffice 服务正在运行且 8100 端口可访问
检查 server/.env 中的环境变量配置
删除 server/data/metadata.db 及 Elasticsearch 数据卷