Doramagic 项目包 · 项目说明书
ragapp 项目
在企业中落地 Agentic RAG 的最简途径
Overview & System Architecture
RAGApp 是一个面向企业的"Agentic RAG"部署平台,旨在以与 OpenAI 自定义 GPT 同样简单的配置方式,让用户能够在自有云基础设施(通过 Docker)内部署和管理基于 LlamaIndex 构建的检索增强生成(RAG)应用。资料来源:[README.md:1-9]() 项目强调"开箱即用",默认容器内置 LlamaIndex 框架与 Admin UI...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
1. 项目定位与目标
RAGApp 是一个面向企业的"Agentic RAG"部署平台,旨在以与 OpenAI 自定义 GPT 同样简单的配置方式,让用户能够在自有云基础设施(通过 Docker)内部署和管理基于 LlamaIndex 构建的检索增强生成(RAG)应用。资料来源:README.md:1-9 项目强调"开箱即用",默认容器内置 LlamaIndex 框架与 Admin UI,提供模型、知识库、代理、聊天配置等可视化编辑能力;用户可选用 OpenAI、Gemini 等托管模型,也可使用 Ollama 等本地模型。资料来源:README.md:13-21
社区讨论反映出当前用户最关心的几个方向:
- OpenAI 兼容 API 接入(Issue #265):希望 RAGApp 暴露
/v1/chat/completions端点,使 Chatbox 等第三方客户端可以直接调用。 - 管理员调试面板(Issue #161):希望仿照 kotaemon 展示检索上下文与相似度距离。
- 检索参数 UI 化(Issue #149):希望将
LLM_TEMPERATURE、TOP_K、VECTOR_STORE_PROVIDER等后端环境变量迁移到 Admin UI。 - 混合检索与查询预处理(Issue #103、#43):受限于 ChromaDB 当前不支持全文检索,以及 LlamaIndex 的查询重写能力。
2. 系统架构总览
RAGApp 采用经典三层结构:浏览器端的 Admin/Chat UI、FastAPI 后端服务、可插拔的模型与向量存储提供者。下方架构图展示了从用户请求到代理工作流的完整数据流。
flowchart LR
User[终端用户/第三方应用] -->|HTTP| ChatUI[Chat UI]
Admin[管理员] -->|HTTP| AdminUI[Admin UI - Next.js]
ChatUI --> API[FastAPI 后端]
AdminUI -->|REST| API
API -->|配置读写| EnvCfg[EnvConfig / ChatConfig / ModelConfig]
API --> Agents[AgentManager]
Agents --> Workflow[Workflows - single / orchestrator]
Workflow --> LLM[LLM Provider - OpenAI / Ollama / T-Systems ...]
Workflow --> VectorDB[Vector Store - ChromaDB / Qdrant]
Workflow --> Tools[Tools - QueryEngine / DuckDuckGo /<br/>Wikipedia / CodeGen / DocGen ...]
LLM -->|响应| Workflow
VectorDB -->|检索片段| Workflow
Tools -->|工具结果| Workflow
Workflow -->|流式响应| ChatUI后端服务启动时加载环境变量并实例化 LLM、Embedding 与 Vector Store;AgentManager 负责加载代理配置,对外暴露 CRUD 接口。资料来源:src/ragapp/backend/routers/management/agents.py:32-58
3. 部署模式
仓库内置两种部署形态,分别覆盖单机试用与多租户管理两种典型场景。
| 部署模式 | 关键组件 | 适用场景 | 状态/数据目录 |
|---|---|---|---|
deployments/single | RAGApp + Ollama + Qdrant | 个人/小团队内部试用 | ollama/ 目录缓存模型;通过 MODEL 环境变量切换模型 |
deployments/multiple-ragapps | RAGApp × N + Manager + Traefik + Keycloak | 多用户/多租户集中管理 | 通过 STATE_DIR 持久化所有服务状态 |
资料来源:deployments/single/README.md:1-19 与 deployments/multiple-ragapps/README.md:1-21 两种部署均支持通过 TRACKING_SCRIPT / TRACKING_SNIPPET 环境变量向 Chat UI 注入第三方埋点脚本(例如 Clarity)以追踪用户会话。资料来源:deployments/single/README.md:21-32
4. 核心模块
4.1 后端模型层
- AgentConfig:包含
role、goal、backstory、tools、system_prompt等字段,构造时若未提供agent_id则调用create_agent_id()生成 UUID;同时使用DEFAULT_SYSTEM_PROMPT_TEMPLATE拼装系统提示。资料来源:src/ragapp/backend/models/agent.py:9-44 - ChatConfig:负责系统提示、对话开场白、下个问题提示、引用提示等会话级配置;提供
suggest_next_questions_enabled与inline_text_citations_enabled的回退逻辑以保持向后兼容。资料来源:src/ragapp/backend/models/chat_config.py:39-60 - 工具模型:所有内置工具继承
BaseModel并通过config_id注册,例如 WikipediaTool、DocumentGeneratorTool 与 CodeGeneratorTool,其custom_prompt字段直接驱动 LLM 何时以及如何调用对应工具。
4.2 管理面 API
/api/management/config 路由负责模型与聊天配置,使用 EnvConfigManager.update 在写入失败时自动回滚。资料来源:src/ragapp/backend/routers/management/config.py:18-44 /api/management/agents 路由则负责代理的列表、创建与多代理模式支持检测(通过 llm.metadata.is_function_calling_model 判断当前 LLM 是否支持多代理协作)。资料来源:src/ragapp/backend/routers/management/agents.py:32-67
4.3 前端 Admin UI
Admin UI 基于 Next.js 14 与 React 18 构建。资料来源:src/ragapp/admin-ui/package.json:1-22 核心抽象在 client/agent.ts 中定义 AgentConfigSchema(使用 Zod 校验)以及默认工具配置 DEFAULT_TOOL_CONFIG,涵盖 ImageGenerator、OpenAPI、Interpreter、DuckDuckGo、Wikipedia、QueryEngine、CodeGenerator、DocumentGenerator 八类工具。资料来源:src/ragapp/admin-ui/client/agent.ts:55-100 模型提供者通过 providers/ 子目录按厂商拆分,例如 T-Systems LLMHub 的必填字段、API Base 校验与默认 embedding 维度。资料来源:src/ragapp/admin-ui/client/providers/t-systems.ts:1-25
4.4 工作流引擎
单代理工作流采用 LlamaIndex 的 Workflow/step 模式:先让 LLM 产出首段响应,若检测到工具调用则进入 handle_tool_calls 步骤,将工具结果以 ChatMessage(role="tool") 形式回填并循环;无工具调用时以 StopEvent 返回生成器供 SSE 流式输出。资料来源:src/ragapp/backend/workflows/single.py:1-80
5. 常见限制与后续方向
- 当前项目尚未直接暴露 OpenAI 兼容的
/v1/chat/completions端点(Issue #265),第三方客户端需要适配 RAGApp 自身 API。 - 检索参数需通过
.env配置,UI 化改造进行中(Issue #149)。 - 混合检索受 ChromaDB 能力限制,参见上游 issue chroma-core/chroma#1686。
- v0.1.5 修复了代码块导致的 UI 崩溃,v0.1.4 增强了多部署模式下文档文件的显示与 LlamaParse 的文件格式支持。
See Also
- Endpoints & API
- Configuration & Environment
- Agent System & Tools
- Deployment Guides
资料来源:deployments/single/README.md:1-19 与 deployments/multiple-ragapps/README.md:1-21 两种部署均支持通过 TRACKING_SCRIPT / TRACKING_SNIPPET 环境变量向 Chat UI 注入第三方埋点脚本(例如 Clarity)以追踪用户会话。资料来源:deployments/single/README.md:21-32
Agent Configuration, Tools & LLM Providers
RAGapp 是一个面向企业的 Agentic RAG 框架,通过 Docker 容器化部署并提供浏览器端管理界面 [README.md:1-15]。Agent(智能体)、Tools(工具)与 LLM Providers(模型提供商) 是构成可配置 RAG 系统的三大支柱:Agent 决定"谁来回答",工具决定"能做什么",LLM 提供商决定"用什么模型思考"。管理员通过访...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
Agent 配置、工具与 LLM 提供商
概述
RAGapp 是一个面向企业的 Agentic RAG 框架,通过 Docker 容器化部署并提供浏览器端管理界面 [README.md:1-15]。Agent(智能体)、Tools(工具)与 LLM Providers(模型提供商) 是构成可配置 RAG 系统的三大支柱:Agent 决定"谁来回答",工具决定"能做什么",LLM 提供商决定"用什么模型思考"。管理员通过访问 http://localhost:8000/admin 完成上述配置 [README.md:11-15]。
Agent 配置模型
后端数据模型
后端使用 Pydantic 定义 Agent 配置结构,核心字段如下 [src/ragapp/backend/models/agent.py:13-44]:
| 字段 | 类型 | 说明 |
|---|---|---|
agent_id | Optional[str] | 由后端生成,UUID 形式 |
name | str | Agent 名称,会被清洗以兼容 OpenAI 命名规范 |
role | str | 必填,Orchestrator 据此挑选 Agent |
goal | str | 必填,任务目标 |
backstory | str | 角色背景故事 |
system_prompt | Optional[str] | 自定义提示,可覆盖默认模板 |
tools | Dict[str, ToolConfig] | 工具配置字典 |
created_at | int | Unix 时间戳 |
默认系统提示模板为 "You are a {role}, {backstory}. Your goal is: {goal}",当 system_prompt 为空时自动套用 [src/ragapp/backend/models/agent.py:9-10]。
客户端 Schema 同步
前端通过 Zod 定义同名校验规则,保证前后端数据一致 [src/ragapp/admin-ui/client/agent.ts:23-35]。前端内置了 DEFAULT_AGENT_CONFIG,默认角色为 "General Assistant",并定义了 8 类工具的默认配置 [src/ragapp/admin-ui/client/agent.ts:60-69]。
系统提示合成
AgentPromptManager.generate_agent_system_prompt 会将基础提示与所有已启用工具的自定义提示拼接 [src/ragapp/backend/controllers/agent_prompt_manager.py:13-21]:
{base_prompt}\n\nYou have access to the following tools:\n{tool_custom_prompts}
每个工具的自定义提示被 ===ToolName=== 包裹,便于 LLM 解析 [src/ragapp/backend/controllers/agent_prompt_manager.py:7-11]。
工具系统
内置工具清单
RAGapp 内置 8 类工具,在前端的 ToolsSchema 中统一注册 [src/ragapp/admin-ui/client/agent.ts:18-21]:
- ImageGenerator — 图像生成
- OpenAPI — 自定义 API 调用
- Interpreter — E2B 代码解释器沙箱
- DuckDuckGo — 联网搜索
- Wikipedia — 维基百科检索 [src/ragapp/backend/models/tools/wikipedia.py:6-14]
- QueryEngine — RAG 检索引擎(Orchestrator 优先调用)
- CodeGenerator — 全栈代码生成 [src/ragapp/backend/models/tools/code_generator.py]
- DocumentGenerator — 文档生成
每个工具模型包含 enabled、config、custom_prompt 等字段 [src/ragapp/backend/models/agent.py:15-18]。
工具加载与优先级
Orchestrator 通过 ToolFactory.load_tools 加载工具实例;对于 QueryEngine 会附加"This is a preferred tool to use"描述以提升其被选中的概率 [src/ragapp/backend/workflows/orchestrator.py:8-14]。
flowchart LR
A[管理员启用工具] --> B[持久化到 agents.yaml]
B --> C[Orchestrator.get_agents]
C --> D{工具类型判断}
D -->|QueryEngine| E[QueryEngineTool + 优先描述]
D -->|其他| F[ToolFactory 加载]
E --> G[FunctionCallingAgent]
F --> GLLM 提供商配置
支持范围
README 明确支持 OpenAI、Gemini 等托管模型,以及本地部署的 Ollama [README.md:13-15]。single 部署模板默认组合为 Ollama + Qdrant,通过 MODEL 环境变量切换模型,缺省为 phi3 [deployments/single/README.md:5-15]。此外还支持企业级 T-Systems LLMHub [src/ragapp/admin-ui/client/providers/t-systems.ts:5-25]。
配置接口
/api/management/config/models 端点负责读写模型配置 [src/ragapp/backend/routers/management/config.py:38-50]。当 model_provider 或 embedding_model 发生变化时,系统会自动重载 LlamaIndex Settings 并调用 reset_index() 重建索引。若处于多 Agent 模式且所选模型不支持函数调用,将返回 400 错误 [src/ragapp/backend/routers/management/config.py:44-54]。
多 Agent 模式约束
/check_supported_model 与 /multi_agent_supported 两个接口会校验模型是否支持多 Agent 协作 [src/ragapp/backend/routers/management/agents.py:16-43]。Orchestrator 会使用正则清洗 Agent 名称,确保符合 OpenAI 的 ^[a-zA-Z0-9_-]+$ 命名约束 [src/ragapp/backend/workflows/orchestrator.py:38-40]。
配置持久化
配置文件路径集中在常量模块 [src/ragapp/backend/constants.py:1-4]:
| 文件 | 用途 |
|---|---|
config/.env | 环境变量与 API 密钥 |
config/tools.yaml | 工具配置 |
config/loaders.yaml | 文档加载器配置 |
config/agents.yaml | Agent 配置 |
社区反馈与已知限制
- OpenAI 兼容 API:#265 议题呼吁实现
/v1/chat/completions端点,以便 Chatbox 等第三方客户端接入。 - 管理面板增强:#161 希望参考 kotaemon 增加信息面板,显示检索上下文与嵌入距离可视化。
- TOP_K 等参数暴露:#149 提出 TOP_K、LLM_TEMPERATURE、VECTOR_STORE_PROVIDER 目前仅能在
.env中调整,应迁移至 UI。 - 混合检索:ChromaDB 暂不支持全文检索,需等待上游进展(#103)。
- 查询预处理:#43 建议先用 LLM 改写用户查询以提升检索精度。
参见
- 索引与文档加载机制
- Chat API 端点(单 Agent / 多 Agent 模式)
- 部署模板(Single / Distributed)
资料来源:src/ragapp/admin-ui/client/agent.ts:18-69, src/ragapp/backend/models/agent.py:9-44, src/ragapp/backend/controllers/agent_prompt_manager.py:7-21, src/ragapp/backend/workflows/orchestrator.py:8-40, src/ragapp/backend/routers/management/agents.py:16-43, src/ragapp/backend/routers/management/config.py:38-54, src/ragapp/backend/constants.py:1-4, src/ragapp/backend/models/tools/wikipedia.py:6-14, src/ragapp/backend/models/tools/code_generator.py, src/ragapp/admin-ui/client/providers/t-systems.ts:5-25, README.md:1-15, deployments/single/README.md:5-15.
资料来源:src/ragapp/admin-ui/client/agent.ts:18-69, src/ragapp/backend/models/agent.py:9-44, src/ragapp/backend/controllers/agent_prompt_manager.py:7-21, src/ragapp/backend/workflows/orchestrator.py:8-40, src/ragapp/backend/routers/management/agents.py:16-43, src/ragapp/backend/routers/management/config.py:38-54, src/ragapp/backend/constants.py:1-4, src/ragapp/backend/models/tools/wikipedia.py:6-14, src/ragapp/backend/models/tools/code_generator.py, src/ragapp/admin-ui/client/providers/t-systems.ts:5-25, README.md:1-15, deployments/single/README.md:5-15.
Knowledge Management, Vector Stores & Retrieval
ragapp 的核心定位是「在自有云基础设施中可部署的 Agentic RAG 框架」,其知识管理子系统负责把企业文档、网页与第三方数据源转化为可被 LLM 检索的语义化资产,并由代理(Agent)按需调用以增强生成效果。整个栈在底层依赖 LlamaIndex(README.md 明确说明 Built using llamaindex),并通过 Docker 镜像对外暴露端...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
知识管理、向量存储与检索
一、概述与设计目标
ragapp 的核心定位是「在自有云基础设施中可部署的 Agentic RAG 框架」,其知识管理子系统负责把企业文档、网页与第三方数据源转化为可被 LLM 检索的语义化资产,并由代理(Agent)按需调用以增强生成效果。整个栈在底层依赖 LlamaIndex(README.md 明确说明 Built using llama_index),并通过 Docker 镜像对外暴露端口 8000。
知识管理子系统的设计目标是:
- 可配置:模型、温度、Top-K、向量库提供者等关键参数均可由管理员修改。
- 可观测:在管理 UI 中以结构化方式呈现检索配置与代理配置。
- 可扩展:通过统一的
ToolConfig抽象接入不同检索与生成工具(Wikipedia、QueryEngine、CodeGenerator 等)。
二、代理与工具抽象:检索的执行单元
2.1 Agent 与 Tool 的结构
在 ragapp 中,检索并不是一个孤立的 REST 接口,而是代理可以动态选择的一个工具。代理配置在前后端通过 Zod 与 Pydantic 双重校验:
- 后端
AgentConfig模型定义字段role、goal、backstory、system_prompt与tools: Dict[str, ToolConfig](src/ragapp/backend/models/agent.py),并通过DEFAULT_SYSTEM_PROMPT_TEMPLATE = "You are a {role}, {backstory}. Your goal is: {goal}"合成系统提示。 - 前端
ToolsSchema把所有可用工具统一挂载到代理上:ImageGenerator、OpenAPI、Interpreter、DuckDuckGo、Wikipedia、QueryEngine、CodeGenerator、DocumentGenerator(src/ragapp/admin-ui/client/agent.ts)。
其中 QueryEngine 就是知识库检索的入口:代理根据用户问题决定是否调用 QueryEngine 工具,再由该工具触发底层的向量检索与重排。
2.2 工具注册与执行流程
后端在 agents.py 路由中提供 GET /api/management/agents、POST 等管理接口(src/ragapp/backend/routers/management/agents.py),并通过 check_supported_model 验证当前模型是否支持函数调用(多代理模式的前置条件)。
执行阶段在 single.py 工作流中实现:代理对 LLM 响应做流式消费,当首个 token 指示为工具调用时,进入 handle_tool_calls 步骤查找 tools_by_name[tool_call.tool_name] 并安全调用(src/ragapp/backend/workflows/single.py)。这意味着检索结果最终会作为 ChatMessage(role="tool", content=..., additional_kwargs={"tool_call_id": ...}) 回填到对话上下文,再由 LLM 综合生成回答。
三、配置模型与环境变量
知识检索的可调参数集中在 ChatConfig 与 ModelConfig 中。ChatConfig 通过 BaseEnvConfig 从环境变量加载 CUSTOM_PROMPT 等字段,并提供 DEFAULT_NEXT_QUESTION_PROMPT 与 DEFAULT_SYSTEM_CITATION_PROMPT 模板——后者要求 LLM 在引用节点时输出 citation:<node_id> 格式,从而把检索片段与回答句子绑定(src/ragapp/backend/models/chat_config.py)。
管理接口 config.py 暴露:
| 端点 | 用途 | 备注 |
|---|---|---|
GET /is_configured | 判断模型是否已配置 | 由 ModelConfig.configured 控制 |
GET/POST /chat | 读写对话配置 | 支持回滚 rollback_on_failure=True |
GET/POST /models | 读写模型配置 | 切换后会触发 reset_index(src/ragapp/backend/routers/management/config.py) |
社区长期关注 TOP_K、LLM_TEMPERATURE、VECTOR_STORE_PROVIDER 等参数目前只能通过 .env 修改——这正是 Issue #149 提议把它们迁入 Admin UI 的背景。
四、部署形态与默认向量库
deployments/single/README.md 描述了单机部署使用 Ollama + Qdrant 的组合:通过 MODEL 环境变量选择模型(默认 phi3,可换为 llama3),setup 容器负责预拉模型。deployments/multiple-ragapps/README.md 则通过 Traefik + Keycloak 实现多租户管理,并把 STATE_DIR 持久化到磁盘。
在 ChromaDB 被引入作为内嵌默认库的早期版本中(参见 Issue #105),检索完全依赖向量相似度。QueryEngine 工具在前端的默认配置位于 DEFAULT_QUERY_ENGINE_TOOL_CONFIG,与其他工具(Wikipedia 等)共享 priority 与 enabled 字段(src/ragapp/admin-ui/client/tools/wikipedia.ts 的字段结构可作为参考)。
五、社区关注点与演进方向
flowchart LR
A[用户问题] --> B{代理路由}
B -- 工具调用 --> C[QueryEngine 工具]
C --> D[向量库检索<br/>Qdrant / ChromaDB]
D --> E[节点返回 + citation]
E --> F[LLM 综合生成]
F --> G[带引用的回答]
B -- 直接回答 --> F围绕本页主题,社区主要诉求有:
- 混合检索(Issue #103):希望叠加全文检索,目前因 ChromaDB 限制被阻塞。
- 查询预处理(Issue #43):建议先由 LLM 重写用户问题再送入向量库以提升命中率。
- 检索可视化面板(Issue #161):借鉴 kotaemon,在 Admin UI 展示检索到的上下文与嵌入距离图。
- OpenAI 兼容接口(Issue #265):暴露
/v1/chat/completions,使外部 Chatbox、IDE 插件能直接对接现有知识库。
这些诉求都指向同一目标——把「黑盒的向量相似度」升级为「可解释、可调参、可插拔的检索管线」,这也是 ragapp 在 0.1.3 之后持续引入 CodeGenerator、DocumentGenerator 等工具的同一条主线(release notes #0.1.3)。
See Also
来源:https://github.com/ragapp/ragapp / 项目说明书
Deployment, Manager UI & Operations
RAGApp 提供两套开箱即用的容器化部署方案,分别面向单实例快速体验与企业级多租户管理。README.md 明确将官方分发形态划分为两条路径:最简单的 docker run ragapp/ragapp 镜像方式,以及位于 deployments/ 目录下的两份 Docker Compose 工程 资料来源:README.md。deployments/single 面向单机...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
1. 概览
RAGApp 提供两套开箱即用的容器化部署方案,分别面向单实例快速体验与企业级多租户管理。README.md 明确将官方分发形态划分为两条路径:最简单的 docker run ragapp/ragapp 镜像方式,以及位于 deployments/ 目录下的两份 Docker Compose 工程 资料来源:README.md。deployments/single 面向单机自托管(自带 Ollama 与 Qdrant),deployments/multiple-ragapps 则在 Traefik + Keycloak 反向代理与认证层之上提供 Manager UI,可集中启停多套 RAGApp 实例 资料来源:deployments/multiple-ragapps/README.md。运维层面的核心接口则由 src/ragapp/backend/routers/management/agents.py 暴露的 REST 端点与 src/ragapp/backend/controllers/loader.py 中的 LoaderManager 共同构成,辅以 Admin UI(src/ragapp/admin-ui/)进行可视化操作。
2. 部署模式
2.1 单实例部署(单机自托管)
deployments/single/README.md 描述的是一条零依赖的本地化路线:setup 容器会在 ollama 数据卷中预拉取 MODEL 环境变量指定的模型,默认值为 phi3(下载更快、但能力弱于 llama3) 资料来源:deployments/single/README.md。除了 MODEL,该部署还支持:
TRACKING_SCRIPT/TRACKING_SNIPPET:在 Chat UI 中注入第三方会话埋点(README 给出 Microsoft Clarity 的示例脚本) 资料来源:deployments/single/README.md。OLLAMA_HOST:指向自定义 Ollama 服务地址,便于复用已有本地推理节点 资料来源:deployments/single/README.md。
该模式适合开发验证、PoC 或小型内部使用,Qdrant 与 Ollama 都与 RAGApp 容器同栈运行。
2.2 多实例 + Manager UI 部署
deployments/multiple-ragapps/README.md 给出了面向多租户/多 Agent 场景的部署方案,特性包括:Manager UI 启停多个 RAGApp 容器、Traefik 路由分发、Keycloak 身份认证、所有服务状态落盘到 STATE_DIR 目录 资料来源:deployments/multiple-ragapps/README.md。启动流程为:在目录下 docker pull ragapp/ragapp → docker compose pull → 创建 ragapp-network → docker compose up,会从 Docker Hub 拉取发布镜像,而非从源码构建。该部署同样支持 TRACKING_SCRIPT 用于在每个 Chat UI 中嵌入追踪脚本 资料来源:deployments/multiple-ragapps/README.md。Windows 平台需要注意 STATE_DIR 必须为绝对路径,因为 Docker Compose 不支持相对路径 资料来源:deployments/multiple-ragapps/README.md。
3. 配置与运维
RAGApp 的运行时配置以 YAML 与 .env 双轨存放,入口常量在 src/ragapp/backend/constants.py 中统一定义:ENV_FILE_PATH = "config/.env"、TOOL_CONFIG_FILE = "config/tools.yaml"、LOADER_CONFIG_FILE = "config/loaders.yaml"、AGENT_CONFIG_FILE = "config/agents.yaml" 资料来源:src/ragapp/backend/constants.py。这意味着在多实例模式下,只要把 STATE_DIR 指向同一份持久化目录,所有实例的 Agent、Tool、Loader 配置即可统一。
3.1 Loader 管理
LoaderManager 负责 loaders.yaml 的读取、内存缓存与写回。当用户通过 API 修改某个文件加载器时,update_loader() 会同时把配置写回 YAML,并调用 update_env_api_key() 将密钥同步到环境变量,从而让 LlamaParse 等外部服务在后续请求中立即生效 资料来源:src/ragapp/backend/controllers/loader.py。get_loader(loader_name="file") 返回经过 FileLoader 强类型校验的对象,避免下游出现脏数据 资料来源:src/ragapp/backend/controllers/loader.py。
3.2 Agent 管理 API
src/ragapp/backend/routers/management/agents.py 暴露的端点可视为"控制平面",关键路由包括:
GET /api/management/agents:返回全部已配置的AgentConfig列表 资料来源:src/ragapp/backend/routers/management/agents.py。GET /api/management/agents/check_supported_model:基于MODEL_PROVIDER/MODEL判断当前模型是否兼容多 Agent(函数调用)模式 资料来源:src/ragapp/backend/routers/management/agents.py。GET /api/management/agents/multi_agent_supported:通过Settings.llm.metadata.is_function_calling_model直接探测 LLM 是否支持工具调用 资料来源:src/ragapp/backend/routers/management/agents.py。
AgentConfig 模型对 role 与 goal 设置了 min_length=1 的强校验,因为编排器(orchestrator)需要依据角色与目标来选择合适的子任务 资料来源:src/ragapp/backend/models/agent.py。若启用工具,CodeGeneratorTool.validate_config() 还会在启用时强制要求 api_key 非空,避免运行时才暴露缺失 资料来源:src/ragapp/backend/models/tools/code_generator.py。
4. 管理界面构建
src/ragapp/admin-ui/package.json(name: "ragbox-admin")是 Manager UI 的前端工程,基于 Next.js 14.2.1、React 18 与 Radix UI 组件库,提供 dev/build/start/lint/format 等标准脚本 资料来源:src/ragapp/admin-ui/package.json。README.md 指出,前端源码部分会从上游 create-llama 仓库动态拉取,因此在本地开发提交前需先执行 make build-frontends 同步 资料来源:README.md。日常开发命令为 poetry install --no-root → make build-frontends → make dev,Admin UI 默认监听 http://localhost:3000/admin 资料来源:README.md。
flowchart LR User[运维/管理员] --> AdminUI[Admin UI<br/>Next.js 3000] AdminUI -- REST --> FastAPI[FastAPI 后端<br/>8000] FastAPI -- 读写 --> YAML[(config/*.yaml<br/>agents/tools/loaders)] FastAPI -- .env --> Env[config/.env] FastAPI --> Ollama[(Ollama<br/>本地 LLM)] FastAPI --> Qdrant[(Qdrant<br/>向量库)] MultiMgr[Manager UI<br/>多实例模式] --> Traefik[Traefik + Keycloak] Traefik --> R1[RAGApp 实例 1] Traefik --> R2[RAGApp 实例 2] R1 --> STATE[(STATE_DIR 持久化)] R2 --> STATE
5. 常见失败模式与社区关注点
- OpenAI 兼容 API:社区多次请求
/v1/chat/completions端点以便对接 Chatbox 等第三方客户端(#265),当前默认部署不直接暴露该端点,需要通过 Admin UI 配置的 Agent 自建封装 资料来源:community context(issue #265)。 - 管理员信息面板:
#161提议在管理员侧展示检索上下文与向量距离图,目前 RAGApp 仅通过QueryEngine工具返回上下文,未提供可视化面板 资料来源:community context(issue #161)。 - TOP_K 等后端参数上移:
#149指出LLM_TEMPERATURE、TOP_K、VECTOR_STORE_PROVIDER仍只可通过.env修改,UI 暂未提供对应入口 资料来源:community context(issue #149)。 - 混合检索:
#103说明 hybrid search 受限于 ChromaDB 的全文检索能力,目前仅依赖向量检索 资料来源:community context(issue #103)。 - 多文件部署下的文档显示:
ragbox 0.1.4已修复 "cannot show document files in multiple deployments mode",这通常与STATE_DIR中文件输出目录的权限和路由相关 资料来源:community context(ragbox 0.1.4 changelog)。 - UI 代码块崩溃:
ragbox 0.1.5修复了代码块渲染时的 UI 崩溃,升级到最新镜像即可规避 资料来源:community context(ragbox 0.1.5 changelog)。
6. See Also
- README.md · ragapp/ragapp
- Agent Configuration · Wiki
- Tools Reference · Wiki
- Providers · Wiki
来源:https://github.com/ragapp/ragapp / 项目说明书
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
非工程用户可能没有 Docker,启动成本明显增加。
可能增加新用户试用和生产接入成本。
可能增加新用户试用和生产接入成本。
可能增加新用户试用和生产接入成本。
Pitfall Log / 踩坑日志
项目:ragapp/ragapp
摘要:发现 13 个潜在踩坑项,其中 0 个为 high/blocking;最高优先级:安装坑 - 依赖 Docker 环境。
1. 安装坑 · 依赖 Docker 环境
- 严重度:medium
- 证据强度:runtime_trace
- 发现:安装/运行入口包含 Docker 命令:docker run -p 8000:8000 ragapp/ragapp
- 对用户的影响:非工程用户可能没有 Docker,启动成本明显增加。
- 复现命令:
docker run -p 8000:8000 ragapp/ragapp - 证据:identity.distribution | https://github.com/ragapp/ragapp | docker run -p 8000:8000 ragapp/ragapp
2. 安装坑 · 来源证据:Add governance and audit trails for enterprise RAG deployments
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:Add governance and audit trails for enterprise RAG deployments
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/ragapp/ragapp/issues/289 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
3. 安装坑 · 来源证据:Question / suggestion: use WFGY 16-problem map as an optional RAG failure debugger
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:Question / suggestion: use WFGY 16-problem map as an optional RAG failure debugger
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/ragapp/ragapp/issues/287 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
4. 安装坑 · 来源证据:Response always empty
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:Response always empty
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/ragapp/ragapp/issues/271 | 来源讨论提到 docker 相关条件,需在安装/试用前复核。
5. 能力坑 · 能力判断依赖假设
- 严重度:medium
- 证据强度:source_linked
- 发现:README/documentation is current enough for a first validation pass.
- 对用户的影响:假设不成立时,用户拿不到承诺的能力。
- 证据:capability.assumptions | https://github.com/ragapp/ragapp | README/documentation is current enough for a first validation pass.
6. 维护坑 · 来源证据:Add 'BaseURL' for OpenAI provider
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个维护/版本相关的待验证问题:Add 'BaseURL' for OpenAI provider
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/ragapp/ragapp/issues/283 | 来源类型 github_issue 暴露的待验证使用条件。
7. 维护坑 · 维护活跃度未知
- 严重度:medium
- 证据强度:source_linked
- 发现:未记录 last_activity_observed。
- 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
- 证据:evidence.maintainer_signals | https://github.com/ragapp/ragapp | last_activity_observed missing
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 证据:downstream_validation.risk_items | https://github.com/ragapp/ragapp | no_demo; severity=medium
9. 安全/权限坑 · 存在评分风险
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 对用户的影响:风险会影响是否适合普通用户安装。
- 证据:risks.scoring_risks | https://github.com/ragapp/ragapp | no_demo; severity=medium
10. 安全/权限坑 · 来源证据:Add OpenRouter adapter for LLM
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Add OpenRouter adapter for LLM
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/ragapp/ragapp/issues/282 | 来源讨论提到 api key 相关条件,需在安装/试用前复核。
11. 安全/权限坑 · 来源证据:Path traversal in knowledge file upload allows writing files outside data
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Path traversal in knowledge file upload allows writing files outside data
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/ragapp/ragapp/issues/293 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
12. 维护坑 · issue/PR 响应质量未知
- 严重度:low
- 证据强度:source_linked
- 发现:issue_or_pr_quality=unknown。
- 对用户的影响:用户无法判断遇到问题后是否有人维护。
- 证据:evidence.maintainer_signals | https://github.com/ragapp/ragapp | issue_or_pr_quality=unknown
13. 维护坑 · 发布节奏不明确
- 严重度:low
- 证据强度:source_linked
- 发现:release_recency=unknown。
- 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
- 证据:evidence.maintainer_signals | https://github.com/ragapp/ragapp | release_recency=unknown
来源:Doramagic 发现、验证与编译记录