# AI Robot Core AI中台业务的能力支撑,提供智能客服、RAG知识库检索、LLM对话等核心能力。 ## 项目结构 ``` ai-robot-core/ ├── ai-service/ # Python 后端服务 │ ├── app/ # FastAPI 应用 │ ├── tests/ # 测试用例 │ ├── Dockerfile # 后端镜像 │ └── pyproject.toml # Python 依赖 ├── ai-service-admin/ # Vue 前端管理界面 │ ├── src/ # Vue 源码 │ ├── Dockerfile # 前端镜像 │ ├── nginx.conf # Nginx 配置 │ └── package.json # Node 依赖 ├── docker-compose.yaml # 容器编排 ├── .env.example # 环境变量示例 └── README.md ``` ## 功能特性 - **多租户支持**: 通过 X-Tenant-Id 头实现租户隔离 - **RAG 知识库**: 基于 Qdrant 的向量检索增强生成 - **LLM 集成**: 支持 OpenAI、DeepSeek、Ollama 等多种 LLM 提供商 - **SSE 流式输出**: 支持 Server-Sent Events 实时响应 - **置信度评估**: 自动评估回复质量,低置信度时建议转人工 ## 快速开始 ### 环境要求 - Docker 20.10+ - Docker Compose 2.0+ ### 部署步骤 #### 1. 克隆代码 ```bash git clone http://49.232.209.156:3005/MerCry/ai-robot-core.git cd ai-robot-core ``` #### 2. 配置环境变量 ```bash cp .env.example .env ``` 编辑 `.env` 文件,配置 LLM API: ```env # OpenAI 配置 AI_SERVICE_LLM_PROVIDER=openai AI_SERVICE_LLM_API_KEY=your-openai-api-key AI_SERVICE_LLM_BASE_URL=https://api.openai.com/v1 AI_SERVICE_LLM_MODEL=gpt-4o-mini # 或使用 DeepSeek # AI_SERVICE_LLM_PROVIDER=deepseek # AI_SERVICE_LLM_API_KEY=your-deepseek-api-key # AI_SERVICE_LLM_MODEL=deepseek-chat ``` #### 3. 启动服务 ```bash # Docker Compose V2 (推荐,Docker 内置) docker compose up -d --build # 或 Docker Compose V1 (旧版,需要单独安装) docker-compose up -d --build ``` #### 4. 拉取嵌入模型 服务启动后,需要在 Ollama 容器中拉取嵌入模型。推荐使用 `nomic-embed-text-v2-moe`,对中文支持更好: ```bash # 进入 Ollama 容器拉取模型 docker exec -it ai-ollama ollama pull toshk0/nomic-embed-text-v2-moe:Q6_K ``` **可选模型**: | 模型 | 维度 | 说明 | |------|------|------| | `toshk0/nomic-embed-text-v2-moe:Q6_K` | 768 | 推荐,中文支持好,支持任务前缀 | | `nomic-embed-text:v1.5` | 768 | 原版,支持任务前缀和 Matryoshka | | `bge-large-zh` | 1024 | 中文专用,效果最好 | #### 5. 配置嵌入模型 访问前端管理界面,进入 **嵌入模型配置** 页面: 1. 选择提供者:**Nomic Embed (优化版)** 2. 配置参数: - **API 地址**:`http://ollama:11434`(Docker 环境)或 `http://localhost:11434`(本地开发) - **模型名称**:`toshk0/nomic-embed-text-v2-moe:Q6_K` - **向量维度**:`768` - **Matryoshka 截断**:`true` 3. 点击 **保存配置** > **注意**: > - 使用 Nomic Embed (优化版) provider 可启用完整的 RAG 优化功能:任务前缀、Matryoshka 多向量、两阶段检索。 > - 嵌入模型配置会持久化保存到 `ai-service/config/embedding_config.json`,服务重启后自动加载。 > - **重要**: 切换嵌入模型后,需要删除现有知识库并重新上传文档,因为不同模型生成的向量不兼容。 #### 6. 验证服务 ```bash # 检查服务状态 docker ps # 查看后端日志,找到自动生成的 API Key docker logs -f ai-service | grep "Default API Key" ``` > **重要**: 后端首次启动时会自动生成一个默认 API Key,请从日志中复制该 Key,用于前端配置。 #### 7. 配置前端 API Key ```bash # 创建前端环境变量文件 cd ai-service-admin cp .env.example .env ``` 编辑 `ai-service-admin/.env`,将 `VITE_APP_API_KEY` 设置为后端日志中的 API Key: ```env VITE_APP_BASE_API=/api VITE_APP_API_KEY=<从后端日志复制的API Key> ``` 然后重新构建前端: ```bash cd .. docker compose up -d --build ai-service-admin ``` #### 7. 访问服务 | 服务 | 地址 | 说明 | |------|------|------| | 前端管理界面 | http://服务器IP:8181 | Vue 管理后台 | | 后端 API | http://服务器IP:8182 | FastAPI 服务(Java渠道侧调用) | | API 文档 | http://服务器IP:8182/docs | Swagger UI | | Qdrant 控制台 | http://服务器IP:6333/dashboard | 向量数据库管理 | | Ollama API | http://服务器IP:11434 | 嵌入模型服务 | > **端口说明**: > - `8181`: 前端管理界面,内部代理后端 API > - `8182`: 后端 API,供 Java 渠道侧直接调用 ## 服务架构 ``` ┌─────────────────────────────────────────────────────────┐ │ 用户访问 │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ ai-service-admin (端口8181) │ │ - Nginx 静态文件服务 │ │ - 反向代理 /api/* → ai-service:8080 │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ ai-service (端口8080) │ │ - FastAPI 后端服务 │ │ - RAG / LLM / 知识库管理 │ └─────────────────────────────────────────────────────────┘ │ │ │ ▼ ▼ ▼ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ PostgreSQL │ │ Qdrant │ │ Ollama │ │ (端口5432) │ │ (端口6333) │ │ (端口11434) │ │ - 会话存储 │ │ - 向量存储 │ │ - nomic-embed │ │ - 知识库元数据 │ │ - 文档索引 │ │ - 嵌入模型 │ └──────────────────┘ └──────────────────┘ └──────────────────┘ ``` ## 常用命令 ```bash # 启动所有服务 docker compose up -d # 重新构建并启动 docker compose up -d --build # 查看服务状态 docker compose ps # 查看日志 docker compose logs -f ai-service docker compose logs -f ai-service-admin # 重启服务 docker compose restart ai-service # 停止所有服务 docker compose down # 停止并删除数据卷(清空数据) docker compose down -v ``` ## 宿主机 Nginx 配置(可选) 如果需要通过宿主机 Nginx 统一管理入口(配置域名、SSL证书),可参考 `deploy/nginx.conf.example`: ```bash # 复制配置文件 sudo cp deploy/nginx.conf.example /etc/nginx/conf.d/ai-service.conf # 修改配置中的域名 sudo vim /etc/nginx/conf.d/ai-service.conf # 测试配置 sudo nginx -t # 重载 Nginx sudo nginx -s reload ``` ## 本地开发 ### 后端开发 ```bash cd ai-service # 创建虚拟环境 python -m venv .venv source .venv/bin/activate # Linux/Mac # .venv\Scripts\activate # Windows # 安装依赖 pip install -e ".[dev]" # 启动开发服务器 uvicorn app.main:app --reload --port 8000 ``` ### 前端开发 ```bash cd ai-service-admin # 安装依赖 npm install # 启动开发服务器 npm run dev ``` ## API 接口 ### 核心接口 | 接口 | 方法 | 说明 | |------|------|------| | `/ai/chat` | POST | AI 对话接口 | | `/admin/kb` | GET/POST | 知识库管理 | | `/admin/rag/experiments/run` | POST | RAG 实验室 | | `/admin/llm/config` | GET/PUT | LLM 配置 | | `/admin/embedding/config` | GET/PUT | 嵌入模型配置 | 详细 API 文档请访问 http://服务器IP:8080/docs ## 环境变量说明 | 变量名 | 默认值 | 说明 | |--------|--------|------| | `AI_SERVICE_LLM_PROVIDER` | openai | LLM 提供商 | | `AI_SERVICE_LLM_API_KEY` | - | API 密钥 | | `AI_SERVICE_LLM_BASE_URL` | https://api.openai.com/v1 | API 地址 | | `AI_SERVICE_LLM_MODEL` | gpt-4o-mini | 模型名称 | | `AI_SERVICE_DATABASE_URL` | postgresql+asyncpg://... | 数据库连接 | | `AI_SERVICE_QDRANT_URL` | http://qdrant:6333 | Qdrant 地址 | | `AI_SERVICE_LOG_LEVEL` | INFO | 日志级别 | ## License MIT