后端接口系统
7. 后端 API 系统
相关源文件
以下文件为本维基页面的生成提供了上下文:
admin/server/admin_server.pyapi/apps/__init__.pyapi/apps/backward_compat.pyapi/apps/restful_apis/chunk_api.pyapi/apps/sdk/dify_retrieval.pyapi/apps/sdk/doc.pyapi/apps/sdk/session.pyapi/db/init_data.pyapi/db/joint_services/tenant_model_service.pyapi/ragflow_server.pyapi/settings.pyapi/utils/api_utils.pyconf/service_conf.yamldocker/service_conf.yaml.templatedocs/references/http_api_reference.mddocs/references/python_api_reference.mddocs/release_notes.mdrag/utils/redis_conn.pysdk/python/ragflow_sdk/modules/__init__.pysdk/python/ragflow_sdk/modules/agent.pysdk/python/ragflow_sdk/modules/base.pysdk/python/ragflow_sdk/modules/chat.pysdk/python/ragflow_sdk/modules/chunk.pysdk/python/ragflow_sdk/modules/dataset.pysdk/python/ragflow_sdk/modules/document.pysdk/python/ragflow_sdk/modules/session.pysdk/python/ragflow_sdk/ragflow.pytest/testcases/test_http_api/test_dataset_management/test_dify_retrieval_routes_unit.pytest/testcases/test_http_api/test_file_management_within_dataset/test_doc_sdk_routes_unit.pytest/testcases/test_web_api/test_chunk_app/test_chunk_routes_unit.pytest/testcases/test_web_api/test_system_app/test_apps_init_unit.py
概述
后端 API 系统通过 RESTful HTTP 端点和 Python SDK 提供对 RAGFlow 功能的编程访问。它使开发者能够管理数据集、文档、聊天助手、智能体,并执行检索增强生成(RAG)工作流,而无需使用 Web 界面。API 遵循 REST 约定,并包含与 OpenAI 兼容的端点,以便与现有的大语言模型(LLM)工具无缝集成。
该系统基于 Quart 框架构建,该框架提供了 Flask API 的异步实现。这使得 RAGFlow 能够高效处理用于流式大语言模型(LLM)响应的长连接和并发后台任务 api/apps/__init__.py:60-73。
有关可视化工作流系统和基于画布的智能体编排的信息,请参见智能体与工作流系统。有关使用这些 API 的 Web 前端的详细信息,请参见前端应用。
范围与目的
本页面涵盖以下内容:
- 整体 API 架构和设计模式。
- 请求/响应格式和错误处理。
- 跨功能域的端点组织。
- Python SDK 结构和设计。
- OpenAI 兼容层。
具体端点类别的详细说明在子页面中提供:
- API 架构与 SDK — 记录 API 设计、请求/响应模式、SDK 结构和 OpenAPI 兼容性。
- 认证与授权 — 解释认证流程(JWT、OAuth、API 令牌)、
@login_required装饰器和current_user代理。 - 用户与租户管理 — 记录用户注册、OAuth 集成、基于 OTP 的密码重置流程和多租户架构。
- 数据集与知识库 API — 详细说明数据集的增删改查操作、解析器配置、元数据设置和知识库管理端点。
- 文档与文件管理 API — 解释文档上传、解析触发、文件层级结构、元数据更新以及文件与文档之间的关系。
- 聊天与会话 API — 记录聊天补全端点、会话管理、流式响应和检索增强生成(RAG)检索流程。
- 智能体与记忆 API — 详细说明智能体/画布管理端点和用于持久化智能体状态的记忆系统 API。
- 系统状态与健康监控 — 解释健康检查端点、组件状态报告、任务执行器心跳监控以及 MCP 服务器集成。
API 层架构
后端 API 的结构将路由逻辑与业务逻辑和数据库操作分离开来。
标题:API 层架构
来源: api/apps/sdk/session.py:56-57,api/apps/sdk/doc.py:172-174,api/utils/api_utils.py:153-180,rag/utils/redis_conn.py:60-115
请求处理流程
每个 API 请求都遵循标准化的处理管线,以确保安全性和一致性。
- 认证:API 请求通常使用
@token_required装饰器api/apps/sdk/session.py:56。该装饰器会根据APIToken表校验Authorization: Bearer <API_KEY>请求头api/apps/__init__.py:170-184。 - 请求解析:辅助函数
get_request_json()api/utils/api_utils.py:92-93会异步获取 JSON 请求体,它使用_coerce_request_data()来处理各种内容类型并缓存结果api/utils/api_utils.py:62-90。 - 校验:处理器使用
validate_request函数确保载荷中存在必填字段api/utils/api_utils.py:153-176。 - 业务逻辑:处理器调用特定的服务。例如,
create_agent_session会初始化一个Canvas对象,并通过API4ConversationService保存会话api/apps/sdk/session.py:73-88。 - 响应格式化:成功结果通过
get_result(data=...)返回api/utils/api_utils.py:214-215,而错误则使用get_data_error_result()api/utils/api_utils.py:120-132。
来源: api/apps/sdk/session.py:56-90,api/utils/api_utils.py:62-93,api/apps/__init__.py:129-188
标准响应与错误码
RAGFlow 使用统一的响应信封。成功通过 HTTP 200 和 JSON 请求体中的特定代码表示。
| 代码 | 消息 | 描述 |
|---|---|---|
200 | (成功) | 请求处理成功。 |
401 | Unauthorized | 认证凭据无效或缺失 docs/references/http_api_reference.md:21。 |
403 | Forbidden | 拒绝访问指定资源 docs/references/http_api_reference.md:22。 |
1001 | Invalid Chunk ID | 指定的片段标识符不存在 docs/references/http_api_reference.md:25。 |
1002 | Chunk Update Failed | 手动编辑片段时失败 docs/references/http_api_reference.md:26。 |
来源: docs/references/http_api_reference.md:14-26,api/utils/api_utils.py:120-132
Python SDK 与对象映射
ragflow-sdk 提供了面向对象的接口,该接口镜像了 REST API 的层级结构,将自然语言空间桥接到代码实体。
标题:SDK 到后端的映射
主要特性:
- 资源管理:高级方法,如
create_datasetdocs/references/python_api_reference.md:126-135和delete_datasetsdocs/references/python_api_reference.md:228-232。 - 配置:允许在创建时设置
chunk_method(例如naive、qa、paper)和parser_configdocs/references/python_api_reference.md:165-181。 - OpenAI 集成:SDK 允许通过
base_url将标准的OpenAI客户端指向 RAGFlow 端点docs/references/python_api_reference.md:73-77。
来源: docs/references/python_api_reference.md:124-212,api/apps/sdk/session.py:147-158
OpenAI 兼容层
RAGFlow 实现了一个兼容层,允许标准的大语言模型(LLM)客户端与 RAGFlow 的"聊天"和"智能体"进行交互。
- 端点路径:
- 聊天:
/api/v1/openai/{chat_id}/chat/completionsdocs/references/http_api_reference.md:62。 - 为向后兼容保留了旧版别名
docs/references/http_api_reference.md:32-38。
- 聊天:
- 扩展参数:支持
extra_body用于 RAG 特定的功能,例如reference(返回引用来源)和metadata_condition(用于复杂的检索过滤)docs/references/http_api_reference.md:90-113。 - 流式传输:通过
stream: true参数支持服务器发送事件(SSE),该功能使用 Quart 的Response并设置mimetype="text/event-stream"实现docs/references/http_api_reference.md:127-130。
来源: docs/references/http_api_reference.md:30-114,api/apps/sdk/session.py:147-158
部署与配置
API 服务器通过 service_conf.yaml 配置,并在 ragflow_server.py 中初始化。
- 端口:主 API 服务器默认监听端口
9380conf/service_conf.yaml:3。 - 管理服务器:一个独立的管理 API 运行在端口
9381上conf/service_conf.yaml:6。 - 初始化:服务器通过
init_database_tables()初始化数据库表,并根据需要通过init_superuser()设置默认超级用户api/ragflow_server.py:105-126。 - 存储:根据配置文件建立与 MySQL/OceanBase、Redis 以及文档存储(ES/Infinity)的连接
conf/service_conf.yaml:7-46。 - 进度跟踪:后台线程
update_progress会定期运行,以同步数据库中文档解析的状态api/ragflow_server.py:53-69。
来源: conf/service_conf.yaml:1-46,api/ragflow_server.py:53-154,api/db/init_data.py:27-50