# Agentic RAG 智能问答系统

ReAct Agent 驱动 | 多模态知识库 | MCP 工具扩展 | 边缘/本地部署

--- 基于 **ReAct Agent** 的多模态检索增强生成(RAG)系统,支持文本、图片、音频、视频的统一入库与跨模态检索,提供智能问答、工具调用、MCP 扩展、流式对话、语音交互等完整能力。支持 OpenAI / 本地 OpenAI-compatible 模型,可灵活部署在云端或边缘设备上。 [![Python 3.10+](https://img.shields.io/badge/Python-3.10%2B-blue.svg)](https://www.python.org/downloads/) [![FastAPI](https://img.shields.io/badge/FastAPI-0.115%2B-009688.svg)](https://fastapi.tiangolo.com/) [![React 19](https://img.shields.io/badge/React-19-61DAFB.svg)](https://react.dev/) [![Milvus Lite](https://img.shields.io/badge/Vector%20Store-Milvus%20Lite-orange.svg)](https://milvus.io/) [![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)](LICENSE) > 当前版本:`0.1.0`。部分能力还需要进一步开发验证。 > --- ![alt text](image.png) ![alt text](image-1.png) --- ## 目录 - [项目背景](#项目背景) - [核心特性](#核心特性) - [系统架构](#系统架构) - [快速开始](#快速开始) - [使用方式](#使用方式) - [其他功能](#其他功能) - [多模态知识库](#多模态知识库) - [MCP 工具扩展](#mcp-工具扩展) - [语音与消息网关](#语音与消息网关) - [功能状态](#功能状态) - [AX8850 运行示例](#ax8850-运行示例) --- ## 项目背景 ### 为什么需要 Agentic RAG? 传统 RAG 系统只能被动检索,而现实场景中的问题往往需要多步推理、工具调用和动态决策: - **静态检索局限** — 一次性检索难以回答需要多轮推理的复杂问题。 - **模态割裂** — 文本、图片、音视频分散存储,无法统一检索,大量非文本信息被浪费。 - **工具孤岛** — 检索、计算、外部 API 等能力各自独立,Agent 无法根据上下文自主选择工具。 - **部署复杂** — 多数方案依赖云端服务,存在隐私泄露风险和高昂调用成本。 ### 本项目的解决思路 本项目将 **ReAct Agent** 与 **多模态 RAG** 深度融合,让 Agent 能够"思考→行动→观察→再思考",在推理过程中自主决定何时检索知识库、何时调用外部工具、何时生成最终答案: - 🧠 **Agent 驱动检索** — Agent 根据问题复杂度自主决定检索策略,支持多轮推理和工具链调用。 - 🔗 **MCP 生态接入** — 通过 Model Context Protocol 接入外部工具,Agent 能力可无限扩展。 - 🎨 **多模态统一** — 文本、图片、音频、视频统一向量空间,跨模态语义检索。 - 🏠 **本地优先** — 支持本地 LLM / Embedding 服务,数据不出设备,隐私安全可控。 ### 应用场景 | 领域 | 典型场景 | 核心价值 | |------|----------|----------| | 🏢 **企业知识管理** | 智能客服、内部培训、文档问答 | 多轮对话理解上下文,自动调用内部工具查询数据 | | 🔬 **研发辅助** | 代码库问答、技术文档检索、API 集成 | Agent 自主检索代码示例、调用调试工具、生成修复建议 | | 📚 **教育科研** | 文献综述、课件问答、实验数据分析 | 跨文献多轮推理,自动提取关键信息并生成综述 | | 🎬 **内容创作** | 素材检索、脚本生成、多模态内容理解 | 以文搜图/以图搜视频,Agent 辅助创作全流程 | | 🏥 **专业领域** | 医疗文献问答、法律条文检索、金融报告分析 | 严格的数据隐私要求下本地运行,专业工具链集成 | --- ## 核心特性 ### 🚀 功能特性 - **ReAct Agent 引擎** — 支持 `Thought → Action → Observation → Final Answer` 循环,以及原生 Function Calling,Agent 可自主规划多步推理。 - **多模式智能路由** — 按查询意图动态装配工具集(知识库检索、联网搜索、媒体理解及 MCP 扩展工具),Agent 每轮推理均可自主调用工具。 - **四模态统一检索** — 文本、图片、音频、视频在同一向量空间中表示,支持以文搜图、以图搜视频等跨模态查询。 - **混合检索策略** — 支持 `naive` 纯向量检索和 `hybrid` 向量 + 知识图谱混合检索,提升召回准确率。 - **流式对话体验** — REST SSE 与 WebSocket 双通道流式输出,实时展示 Agent 思考过程和工具调用。 - **多入口灵活接入** — Web UI、REST API、WebSocket、CLI、异步 Python SDK,满足不同场景需求。 ### 🔧 技术特性 - **MCP 工具扩展** — 启动时自动连接外部 MCP Server,将工具注册到 Agent,实现能力热插拔。 - **多提供商 LLM** — 内置 OpenAI、以及任意 OpenAI-compatible 本地服务适配。 - **模块化架构** — Agent 引擎、知识管线、向量存储、LLM 服务、记忆系统分层解耦,可独立替换升级。 - **本地数据持久化** — SQLite 会话存储、Milvus Lite 向量库、JSON 知识图谱,零外部依赖即可运行。 - **可配置预处理** — 文本分块大小、图片处理策略、音频切片参数等均可通过环境变量调节。 --- ## 系统架构 ### 整体架构 ```text ┌─────────────────────────────────────────────────────────────┐ │ 接入层 (Entry Points) │ │ Web UI │ REST API │ WebSocket │ CLI │ Python SDK │ └──────────────────────────┬──────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Agent 路由与引擎层 │ │ AgentRouter (模式路由) + ReActEngine (推理循环) │ │ ↓ Thought → Action → Observation ↑ │ └──────────────────────────┬──────────────────────────────────┘ │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌─────────┐ ┌──────────┐ ┌──────────┐ │ RAG 工具 │ │ MCP 工具 │ │ 媒体工具 │ │(知识库) │ │(外部扩展)│ │(语音/图像)│ └────┬────┘ └──────────┘ └──────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 知识管线 (Knowledge Pipeline) │ │ Parse → Process → Embed → Milvus Lite │ │ └────────→ Knowledge Graph (可选) │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ 数据持久化层 │ │ SQLite (会话/消息) │ Milvus Lite (向量) │ JSON (KG) │ └─────────────────────────────────────────────────────────────┘ ``` ### 知识管线流程 ```text 原始输入 (文本/图片/音频/视频/PDF/Office) │ ▼ ┌───────────────┐ │ 统一解析层 │ → ContentList (统一内容表示) │ Parse │ └───────┬───────┘ │ ▼ ┌───────────────┐ │ 模态处理层 │ → 文本分块 / 图片处理 / 音频切片 / 视频帧提取 │ Process │ └───────┬───────┘ │ ▼ ┌───────────────┐ ┌───────────────┐ │ 向量化层 │ ──→ │ 知识图谱层 │ (可选,enable_kg=true) │ Embed │ │ KG Builder │ └───────┬───────┘ └───────────────┘ │ ▼ ┌───────────────┐ │ 向量存储层 │ → Milvus Lite (本地持久化) │ Vector Store │ └───────────────┘ ``` ### Agent 推理流程 ```text 用户问题 │ ▼ ┌─────────────┐ │ AgentRouter│ └──────┬──────┘ │ ▼ ┌────────────────────────────────────────┐ │ ReAct 推理循环 │ │ ┌─────────┐ ┌─────────┐ ┌────────┐ │ │ │ Thought │ → │ Action │ → │Observe │ │ │ │ (思考) │ │ (行动) │ │ (观察) │ │ │ └─────────┘ └─────────┘ └────────┘ │ │ ↑ │ │ │ └───────────────────────────┘ │ │ (最多 N 轮) │ └────────────────────────────────────────┘ │ ▼ ┌─────────────┐ │ Final Answer │ → 生成最终回答,附来源引用 └─────────────┘ ``` ### 项目结构 ```text Agentic_RAG/ ├── agentic_rag/ # 后端核心代码 │ ├── agent/ # ReAct 引擎、Prompt 模板、模式路由 │ ├── config/ # Pydantic Settings、默认配置 │ ├── core/ # MCP 客户端、多模态处理、STT/TTS │ ├── data/ # 数据模型、SQLite Repository │ ├── entrypoints/ # 接入层 │ │ ├── rest/ # FastAPI REST API │ │ ├── websocket/ # WebSocket 服务 │ │ ├── cli/ # 命令行接口 │ │ ├── sdk/ # Python SDK │ │ └── gateway/ # 消息平台网关 │ ├── orchestration/ # L1 工具、L2 能力编排 │ ├── runtime/ # 运行时上下文、流总线、轮次协调 │ ├── services/ # LLM、知识管线、记忆、会话、向量存储 │ └── utils/ # 通用工具 ├── frontend/ # React 19 + Vite 8 前端 │ ├── src/ │ └── vite.config.js ├── static/ # 前端构建产物(生产模式) ├── tests/ # 测试 │ ├── unit/ # 单元测试 │ ├── integration/ # 集成测试 │ └── dir/ # 测试数据 ├── scripts/ # 辅助脚本(预留) ├── data/ # SQLite 运行时数据 ├── workspace/ # 上传文件、向量库、知识图谱 ├── .env # 环境变量配置(由 .env.example 复制) ├── .env.example # 环境变量模板 ├── mcp_servers.json # MCP 配置(JSON) ├── mcp_servers.yaml # MCP 配置(YAML) ├── pyproject.toml # Python 项目配置 └── README.md ``` --- ## 快速开始 ### 1. 环境要求 - **Python** 3.10+ - **Node.js** 18+(构建 Web UI 需要;生产环境直接使用已构建的 `static/` 产物时可省略) ### 2. 安装 ```bash git clone cd Agentic_RAG python -m venv .venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows PowerShell python -m pip install --upgrade pip pip install -e ".[dev]" # 完整安装:Anthropic、语音、视频、文档解析和消息网关 # pip install -e ".[dev,anthropic,voice,media,documents,gateways]" # 可选:PDF/Office 完整解析 pip install pymupdf # PDF 文本提取及 OCR 页面渲染 # 或按 Docling 官方说明安装 docling ``` ### 3. 配置环境变量 从模板创建 `.env` 文件: ```bash cp .env.example .env ``` 然后按需修改(配置使用**无前缀变量名**): ```bash # ============ LLM 配置 ============ DEFAULT_PROVIDER=local LLM_PROVIDERS__LOCAL__API_BASE=http://localhost:8009/v1 LLM_PROVIDERS__LOCAL__MODEL=your-chat-model LLM_PROVIDERS__LOCAL__API_KEY=not-needed LLM_PROVIDERS__LOCAL__VISION_MODEL=your-vision-model # ============ Embedding 配置 ============ EMBEDDING__PROVIDER=local EMBEDDING__API_BASE=http://localhost:8010/v1 EMBEDDING__API_KEY=not-needed EMBEDDING__MODEL=your-embedding-model EMBEDDING__DIM=768 EMBEDDING__BATCH_SIZE=4 # ============ 向量库配置 ============ MILVUS__DIM=768 # ============ API 服务配置 ============ API__HOST=0.0.0.0 API__PORT=8007 ``` > ⚠️ `EMBEDDING__DIM` 与 `MILVUS__DIM` 必须一致。若需修改已创建集合的维度,请先备份并删除旧的 `workspace/milvus_lite.db`,再重新建库。 **使用官方云服务:** ```bash # OpenAI DEFAULT_PROVIDER=openai LLM_PROVIDERS__OPENAI__API_KEY=your-openai-api-key LLM_PROVIDERS__OPENAI__API_BASE=https://api.openai.com/v1 LLM_PROVIDERS__OPENAI__MODEL=gpt-4o # Anthropic Claude(Embedding 仍需单独配置) DEFAULT_PROVIDER=claude LLM_PROVIDERS__CLAUDE__API_KEY=your-anthropic-api-key LLM_PROVIDERS__CLAUDE__API_BASE=https://api.anthropic.com LLM_PROVIDERS__CLAUDE__MODEL=your-claude-model ``` ### 4. 构建前端 ```bash cd frontend npm run build cd .. ``` Vite 产物输出到 `static/`,FastAPI 挂载 `/static` 并在 `/` 返回 SPA 首页。生产环境只需构建一次;前端源码未改动时无需重复执行。 ### 5. 启动服务 ```bash # 生产模式 python -m agentic_rag serve --host 0.0.0.0 --port 8007 # 开发模式(自动重载) python -m agentic_rag serve --port 8007 --reload # 或 uvicorn agentic_rag.entrypoints.rest.app:app --host 0.0.0.0 --port 8007 --reload ``` ### 6. 验证运行 ```bash curl http://localhost:8007/health curl http://localhost:8007/ready ``` | 地址 | 说明 | |------|------| | `http://localhost:8007/` | Web UI 主界面 | | `http://localhost:8007/docs` | Swagger API 文档 | | `http://localhost:8007/health` | 进程健康检查 | | `http://localhost:8007/ready` | LLM 配置就绪检查 | ✅ 打开 `http://localhost:8007/`,看到聊天界面即部署成功。若页面空白或报资源加载失败,通常是 `static/` 缺失或过期,请回到第 4 步重新执行 `npm run build`。 --- ## 使用方式 系统提供多种使用入口:**Web UI** 是浏览器中的完整交互界面,适合直接使用;CLI / REST API / WebSocket / Python SDK 面向脚本调用与二次开发。 ### Web UI ```bash # 1. 构建前端(首次或前端有更新时执行) cd frontend && npm install && npm run build && cd .. # 2. 启动服务(后端托管 Web UI) python -m agentic_rag serve --port 8007 ``` 启动后在浏览器打开 `http://localhost:8007/`: - **对话交互** — 输入问题即开始问答,流式展示 Agent 的 Thought / Action / Observation 推理过程 - **文件上传** — 上传文本、图片、音频、视频入库,对应 `/api/v1/rag/upload` - **会话管理** — 多会话切换,历史记录持久化在本地 SQLite ### CLI 命令行 ```bash # 普通问答 python -m agentic_rag chat "什么是 RAG?" # 自动路由或指定模式 python -m agentic_rag chat --mode research "深入总结知识库中的检索方法" # 流式输出 python -m agentic_rag chat --stream "解释 ReAct 的执行过程" # 指定已配置的 Provider python -m agentic_rag chat --provider local "你好" # 文本文件入库 python -m agentic_rag ingest --file document.txt --source cli # 查看当前配置信息 python -m agentic_rag info # 查看帮助 python -m agentic_rag --help ``` ### REST API #### 非流式聊天 ```bash curl -X POST http://localhost:8007/api/v1/chat \ -H 'Content-Type: application/json' \ -d '{"message":"什么是 RAG?","mode":"auto"}' ``` #### SSE 流式聊天 ```bash curl -N -X POST http://localhost:8007/api/v1/chat/stream \ -H 'Content-Type: application/json' \ -d '{"message":"检索知识库中的向量数据库资料","mode":"research"}' ``` 主要事件类型:`text_delta`、`tool_call_start`、`tool_call_result`、`error`、`done`。 #### 知识库检索 ```bash curl -X POST http://localhost:8007/api/v1/rag/search \ -H 'Content-Type: application/json' \ -d '{"query":"向量数据库","top_k":5,"mode":"hybrid"}' ``` #### 文本入库 ```bash curl -X POST http://localhost:8007/api/v1/rag/ingest \ -H 'Content-Type: application/json' \ -d '{"content":"Milvus 是一个向量数据库。","source":"manual"}' ``` #### 文件/多模态上传 ```bash curl -X POST http://localhost:8007/api/v1/rag/upload \ -F 'file=@document.pdf' \ -F 'source=manual-upload' \ -F 'ingest_mode=multimodal' \ -F 'mm_method=pure' \ -F 'enable_kg=true' ``` 支持的文件格式: - **文本/文档**:`.txt` `.md` `.json` `.yaml` `.csv` `.py` `.html` `.pdf` `.docx` - **图片**:`.jpg` `.png` `.gif` `.webp` `.bmp` `.svg` - **视频**:`.mp4` `.avi` `.mov` `.mkv` `.webm` - **音频**:`.mp3` `.wav` `.m4a` `.ogg` `.flac` #### 会话管理 ```bash # 创建会话(user_id 是查询参数) curl -X POST 'http://localhost:8007/api/v1/session?user_id=user123' # 获取会话列表 curl 'http://localhost:8007/api/v1/sessions?user_id=user123' # 获取会话消息 curl http://localhost:8007/api/v1/session//messages # 删除会话 curl -X DELETE http://localhost:8007/api/v1/session/ ``` ### WebSocket ```javascript const sessionId = crypto.randomUUID() const ws = new WebSocket(`ws://localhost:8007/ws/${sessionId}`) ws.addEventListener('open', () => { ws.send(JSON.stringify({ type: 'chat', payload: { message: '检索知识库中的 ReAct 资料', mode: 'research', }, })) }) ws.addEventListener('message', (event) => { const message = JSON.parse(event.data) console.log(message.type, message.data) }) ``` ### Python SDK ```python import asyncio from agentic_rag.entrypoints.sdk.client import AgenticRAGClient async def main() -> None: async with AgenticRAGClient("http://localhost:8007") as client: # 非流式聊天 response = await client.chat("什么是 RAG?", mode="auto") print(response["answer"]) # 流式聊天 async for event in client.chat_stream("检索知识库"): print(event) # 文本入库 result = await client.rag_ingest( "这是一段需要写入知识库的文本。", source="sdk", ) print(result) asyncio.run(main()) ``` --- ## 其他功能 ### 多模态知识库 #### 入库模式 `/api/v1/rag/upload` 参数说明: | 参数 | 默认值 | 说明 | |------|--------|------| | `ingest_mode` | `multimodal` | `text` 跳过媒体项;`multimodal` 处理媒体项 | | `mm_method` | `pure` | `pure` / `caption` / `both` | | `chunk_size` | `512` | 文本分块字符数 | | `chunk_overlap` | `50` | 分块重叠字符数 | | `enable_kg` | `false` | 构建并持久化知识图谱 | `mm_method` 说明: - `pure` — 直接构造多模态 Embedding 输入;纯文本 Embedding API 会退化为占位文本 - `caption` — 使用视觉模型生成图片描述,再对描述文本做 Embedding - `both` — 同时使用原始媒体和描述文本 #### 本地数据 运行时产生的数据文件: ```text data/agentic_rag.db # 会话与消息历史 workspace/milvus_lite.db # Milvus Lite 向量数据库 workspace/knowledge_graph.json # 知识图谱(启用 KG 时) workspace/uploads/ # 上传文件缓存 ``` > 🔒 这些文件可能包含用户内容或模型数据,部署时请配置合适的访问控制、备份和清理策略。 ### MCP 工具扩展 项目支持通过 Model Context Protocol (MCP) 接入外部工具,Agent 可自动发现并使用这些工具。 #### 配置方式 按优先级查找配置: 1. `mcp_servers.json` 2. `mcp_servers.yaml` 3. MCP 环境变量 推荐使用不含密钥的配置文件,通过环境变量提供凭据: ```json { "mcpServers": { "example-search": { "command": "npx", "args": ["-y", "example-search-mcp"], "disabled": false } } } ``` ```bash export EXAMPLE_SEARCH_API_KEY='your-key' python -m agentic_rag serve ``` 启动日志会显示每个 MCP Server 的连接结果。连接成功的工具会注册到工具中心,并在所有 Agent 模式中可用。 > ⚠️ 不要把真实 API Key 提交到 Git。若密钥曾进入仓库历史,请立即撤销并轮换。 ### 语音与消息网关 #### 语音 REST 接口 ```bash curl -N -X POST http://localhost:8007/api/v1/chat/voice \ -F 'audio=@recording.wav' \ -F 'sid=voice-demo' \ -F 'tts=true' ``` 响应为 SSE,事件类型:`transcript`、`text_delta`、工具事件、`audio`、`error`、`done`。 支持的配置: - **STT**:`sensevoice`、`whisper`、`openai` - **TTS**:`qwen`、`kokoro`、`edge`、`openai` #### 消息网关 支持企业微信、QQ Bot、钉钉。总开关 `GATEWAY__ENABLED=true`,各平台需单独配置凭据。 > 生产使用前请完成平台签名校验、回调地址、权限和消息发送链路测试。 ### 功能状态 | 能力 | 状态 | 说明 | |------|:----:|------| | 非流式/流式聊天 | ✅ | REST、CLI;WebSocket 支持流式事件 | | `rag_search` | ✅ | Chat API 启动时自动注册 | | 文本与文件入库 | ✅ | REST 与 CLI 均有入口 | | 多模态上传 | ✅ | REST `/api/v1/rag/upload` | | `chat` / `research` 模式 | ✅ | 均可使用 RAG 与已连接的 MCP 工具 | | `rag` 模式 Agent 自主入库 | ⚠️ | 路由声明了 `rag_ingest`,但 Chat API 默认只注册 `rag_search` | | `media` 模式工具 | ⚠️ | 路由已定义,媒体工具未由 Chat API 默认注册 | | MCP | ⚠️ | 取决于本机命令、依赖、网络和环境变量 | | PDF/Office 解析 | ⚠️ | 需要 PaddleOCR-VL 服务、`pymupdf` 或 `docling` | | 语音对话 | ⚠️ | 需要可用的 STT/TTS 服务或本地模型 | | 消息平台网关 | ⚠️ | 企业微信、QQ Bot、钉钉需按平台配置与联调 | --- ## AX8850 运行示例 本节介绍在爱芯(AXERA)AX650N/AX8850 边缘设备上的两种部署方式: - **分离部署** — 仅模型推理服务运行在 NPU 设备上,通过 OpenAI 兼容接口对外提供;Agentic RAG 主机通过 HTTP 连接这些服务。 - **全量部署** (本节默认方式)— 完整的 Agentic RAG 服务也运行在 NPU 设备上,推理与应用同机完成,数据不出设备。 ### 1. 下载模型与运行组件 可从以下官方资源选择适配 AX650N/AX8850 的模型和运行组件: - [AXERA-TECH Hugging Face 模型仓库](https://huggingface.co/AXERA-TECH) - [AXERA-TECH/ax-llm](https://github.com/AXERA-TECH/ax-llm)(LLM/VLM/Embedding 推理及 OpenAI 兼容服务) - [AX650 Community Hub](https://github.com/AXERA-TECH/AX650-Community-Hub)(SDK、部署文档和模型示例) 本项目至少需要以下两类模型: | 服务 | 用途 | 接口要求 | 示例端口 | |------|------|----------|---------:| | Chat LLM/VLM | 对话、Agent 推理、图片理解 | OpenAI 兼容 `/v1/chat/completions` | `8009` | | Embedding | 文本/图片/音视频向量化 | OpenAI 兼容 `/v1/embeddings` | `8010` | 可选模型服务: | 服务 | 用途 | 接口要求 | 示例端口 | |------|------|----------|---------:| | [SenseVoice](https://huggingface.co/AXERA-TECH/SenseVoice_AgenticRAG) | 语音识别 | `/v1/audio/transcriptions` 或 `/asr` | `8011` | | [Kokoro TTS](https://modelscope.cn/models/AXERA-TECH/kokoro.axera) | 语音合成 | `POST /tts`,返回 WAV | `8012` | | PaddleOCR-VL | PDF/图片 OCR | OpenAI 兼容接口 | `8013` | ### 2. 准备运行环境 Agentic RAG 主机安装项目依赖。若启用语音、文档和媒体处理,建议安装完整可选依赖: ```bash python -m venv .venv source .venv/bin/activate pip install -e ".[voice,documents,media]" # 压缩音频解码还需要系统提供 ffmpeg ffmpeg -version ``` 如果只使用文本问答和 RAG,可直接执行: ```bash pip install -e . ``` ### 3. 启动模型服务 以下命令在 **AX8850 设备**上执行。将模型目录替换为实际下载路径: ```bash # LLM/VLM 模型 axllm serve /path/to/llm-or-vlm-model --host 0.0.0.0 --port 8009 # Embedding 模型 axllm serve /path/to/embeddings-model --host 0.0.0.0 --port 8010 # SenseVoice 模型 python /path/to/SenseVoice/python/openai_server.py --port 8011 # Kokoro 模型 python /path/to/kokoro/kokoro_svr.py --port 8012 ``` SenseVoice、Kokoro 和 PaddleOCR-VL 的启动命令以各自模型仓库为准。配置前应确认它们分别满足本项目使用的接口约定: - SenseVoice:优先支持 `POST /v1/audio/transcriptions`,也兼容 `POST /asr` - Kokoro:支持 `POST /tts`,接收 `text`、`language`、`voice`、`speed` 字段并返回音频字节 - PaddleOCR-VL:提供 OpenAI 兼容的视觉模型接口 ### 4. 配置环境变量 在项目根目录创建或修改 `.env`。以下示例假设所有模型服务都运行在 `192.168.1.100`: ```bash # ============ LLM/VLM 服务 ============ DEFAULT_PROVIDER=local LLM_PROVIDERS__LOCAL__API_BASE=http://192.168.1.100:8009/v1 LLM_PROVIDERS__LOCAL__API_KEY=not-needed LLM_PROVIDERS__LOCAL__MODEL=your-chat-model LLM_PROVIDERS__LOCAL__VISION_MODEL=your-vision-model LLM_PROVIDERS__LOCAL__MAX_TOKENS=4096 LLM_PROVIDERS__LOCAL__TEMPERATURE=0.7 # ============ Embedding 服务 ============ EMBEDDING__PROVIDER=local EMBEDDING__API_BASE=http://192.168.1.100:8010/v1 EMBEDDING__API_KEY=not-needed EMBEDDING__MODEL=AXERA-TECH/jina-embeddings-v5-omni-nano-retrieval-AX650-P128-CTX2047 EMBEDDING__MODEL_TYPE=multimodal EMBEDDING__DIM=768 EMBEDDING__BATCH_SIZE=4 # Milvus Lite 的向量维度必须与 Embedding 输出一致 MILVUS__DIM=768 # ============ 可选:SenseVoice STT ============ VOICE__STT_PROVIDER=sensevoice VOICE__STT_MODEL=sensevoice VOICE__STT_API_BASE=http://192.168.1.100:8011 VOICE__STT_LANGUAGE=auto VOICE__SAMPLE_RATE=16000 # ============ 可选:Kokoro TTS ============ VOICE__TTS_PROVIDER=kokoro VOICE__TTS_MODEL=kokoro VOICE__TTS_API_BASE=http://192.168.1.100:8012 VOICE__TTS_LANGUAGE=zh VOICE__TTS_VOICE=zf_xiaoyi VOICE__TTS_SPEED=1.0 VOICE__TTS_RESPONSE_FORMAT=wav # ============ 可选:PaddleOCR-VL ============ OCR__ENABLED=true OCR__API_BASE=http://192.168.1.100:8013/v1 OCR__MODEL=PaddlePaddle/PaddleOCR-VL OCR__API_KEY=not-needed OCR__MAX_PAGES=50 # ============ Agentic RAG Web 服务 ============ API__HOST=0.0.0.0 API__PORT=8007 ``` 注意事项: 1. `LLM_PROVIDERS__LOCAL__MODEL` 必须与模型服务实际暴露的模型名一致。这里使用已注册的 `local` Provider 连接 AX8850 上的 OpenAI 兼容服务,无需新增 Provider 类型。 2. 纯文本模型不支持图片输入时,将 `VISION_MODEL` 配置为单独的 VLM;如果服务中没有视觉模型,请留空并避免使用图片理解功能。 3. `EMBEDDING__DIM` 和 `MILVUS__DIM` 必须一致。更换向量维度后,需要备份并删除旧的 `workspace/milvus_lite.db`,再重新入库。 4. 使用多模态 Embedding 时建议设置 `EMBEDDING__MODEL_TYPE=multimodal`。 5. 如果 AX8850 上只启动了核心的 LLM 和 Embedding 服务,可删除或注释 STT、TTS、OCR 配置。 ### 5. 启动项目 ```bash # 首次运行或前端发生变化时构建 Web UI cd frontend && npm install && npm run build && cd .. # 启动后端及 Web UI python -m agentic_rag serve --host 0.0.0.0 --port 8007 ``` ---