接口架构与 SDK
API 架构与 SDK
相关源文件
本章引用的主要源码文件:
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/constants.pyapi/db/init_data.pyapi/db/joint_services/tenant_model_service.pyapi/ragflow_server.pyapi/settings.pyapi/utils/api_utils.pyapi/utils/configs.pycommon/data_source/jira/connector.pycommon/http_client.pyconf/service_conf.yamldocker/service_conf.yaml.templatedocs/references/http_api_reference.mddocs/references/python_api_reference.mddocs/release_notes.mdrag/utils/opendal_conn.pyrag/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.pysdk/python/test/conftest.pysdk/python/test/test_frontend_api/common.pysdk/python/test/test_frontend_api/test_chunk.pysdk/python/test/test_frontend_api/test_dataset.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
目的与范围
本文档介绍 RAGFlow 的 RESTful HTTP API 架构和 Python SDK 实现。内容涵盖 API 服务器结构、认证机制(JWT 令牌和 API 密钥)、请求/响应模式、错误处理,以及 Python SDK(ragflow-sdk)如何封装 HTTP 端点以支持程序化访问。
如需了解特定 API 端点及其参数,请参阅 HTTP API 参考文档 docs/references/http_api_reference.md:8-183 和 Python API 参考文档 docs/references/python_api_reference.md:8-245。
API 服务器架构
基于 Quart 的应用框架
RAGFlow 的 API 服务器基于 Quart 构建,这是一个与 Flask API 兼容但支持 async/await 模式的异步 Python Web 框架。应用在 api/apps/__init__.py 中初始化。
应用初始化流程
来源:api/apps/__init__.py:60-85, api/utils/api_utils.py:135-150, api/apps/sdk/session.py:147, api/apps/sdk/doc.py:54
服务器支持以下特性:
- 异步请求处理:用于非阻塞 I/O 操作,对长时间运行的 RAG 任务尤为关键。
- 扩展超时:默认超时时间延长至 600 秒,以适应大语言模型(LLM)的慢响应或大型文档处理
api/apps/__init__.py:70-73。 - CORS:全局启用跨域资源共享
api/apps/__init__.py:61。 - OpenAPI/Swagger:通过
QuartSchema自动生成和校验模式api/apps/__init__.py:64。 - 全局错误处理:未处理的异常由
server_error_response捕获,该函数会对Unauthorized(401)或index_not_found_exception(提示需要解析)等错误进行分类api/utils/api_utils.py:135-150。
认证系统
双认证机制
RAGFlow 在 _load_user 代理中实现了两种并行的认证方法,以同时支持 Web 会话和程序化 API 访问。
认证流程示意图
来源:api/apps/__init__.py:96-191, api/utils/api_utils.py:41-45, api/db/db_models.py:25-26
JWT 令牌认证(Web 界面)
用于 Web 前端。_load_user 函数尝试使用基于系统 SECRET_KEY 的 Serializer 从 Authorization 请求头中解码令牌 api/apps/__init__.py:130-149。
API 密钥认证(程序化访问)
用于 SDK 客户端和第三方集成。如果 JWT 解码失败,系统会将请求头视为 API 密钥,并查询 APIToken 表 api/apps/__init__.py:171-174。此方法会设置 g.auth_via_api_token = True api/apps/__init__.py:179。
HTTP API 结构
请求与响应标准化
RAGFlow 遵循 RESTful 约定,在重构旧端点时确保向后兼容 docs/release_notes.md:45-47, 85-86。
- 请求解析:
_coerce_request_data工具函数使用合理的默认值获取 JSON 请求体,必要时回退到表单数据api/utils/api_utils.py:62-90。 - 响应格式:响应通常通过
get_json_resultapi/utils/api_utils.py:141或get_resultapi/apps/sdk/session.py:90进行封装。 - OpenAI 兼容性:RAGFlow 在
/api/v1/openai/{chat_id}/chat/completions提供 OpenAI 兼容接口docs/references/http_api_reference.md:62。标准 OpenAI 客户端只需更改base_url即可与 RAGFlow 交互docs/references/python_api_reference.md:77。
已废弃的 API 别名
为确保平滑过渡到统一的 RESTful API,RAGFlow 为多个 v0.24.0 路径维护了向后兼容层 docs/references/http_api_reference.md:30-52。
Python SDK 架构
SDK 结构与模块
ragflow-sdk 是 REST API 的面向对象封装,按功能组织为特定模块。
SDK 到代码实体的映射
来源:sdk/python/ragflow_sdk/ragflow.py:27, sdk/python/ragflow_sdk/modules/session.py:21, api/apps/sdk/session.py:24-31, api/apps/sdk/doc.py:25
关键 SDK 操作
- 会话与聊天:SDK 区分标准 RAG 聊天和可视化工作流代理。
create_agent_session初始化基于代理的对话api/apps/sdk/session.py:57-90。 - 文档与数据集:
DataSet模块管理知识库,包括设置片段切分方法(例如naive、qa、manual)和解析器配置docs/references/python_api_reference.md:127-181。 - 流式支持:SDK 支持标准和代理补全的流式响应,遵循服务器发送事件(SSE)模式
docs/references/http_api_reference.md:143-168。
汇总表:SDK 到 API 的映射
| 功能 | SDK 方法 | HTTP 端点 |
|---|---|---|
| 创建数据集 | RAGFlow.create_dataset() | POST /api/v1/datasets docs/references/python_api_reference.md:127 |
| 下载文档 | Document.download() | GET /api/v1/datasets/{dataset_id}/documents/{document_id} api/apps/sdk/doc.py:54 |
| 创建代理会话 | RAGFlow.create_agent_session() | POST /api/v1/agents/{agent_id}/sessions api/apps/sdk/session.py:57 |
| 删除会话 | RAGFlow.delete_datasets() | DELETE /api/v1/agents/{agent_id}/sessions api/apps/sdk/session.py:93 |
| 开始解析 | DataSet.parse() | POST /api/v1/datasets/{dataset_id}/chunks api/apps/sdk/doc.py:174 |
| 聊天补全 | client.chat.completions.create() | POST /api/v1/openai/{chat_id}/chat/completions docs/references/http_api_reference.md:62 |
来源:api/apps/sdk/session.py:57-93, api/apps/sdk/doc.py:54-174, docs/references/http_api_reference.md:62, docs/references/python_api_reference.md:127