【RAGFlow代码详解-25】HTTP 接口
认证
所有 HTTP API 端点都需要使用 API 密钥进行持有者令牌身份验证。身份验证机制在
api/utils/api_utils.py 290-306
中
通过 token_required
装饰器实现,该装饰器根据存储在数据库中的 APIToken
模型验证令牌。
@token_required
def endpoint_function(tenant_id):# tenant_id is automatically injected after successful authentication
API 密钥在 Authorization 标头中传递:Authorization: Bearer <YOUR_API_KEY>
API 架构概述
HTTP API 是使用具有模块化蓝图结构的 Flask 构建的。每个主要功能区域都作为 api/apps/sdk/ 下的单独应用程序模块实现。
基于蓝图的 Flask 架构
核心 API 类别
数据集管理
数据集终结点处理知识库生命周期作,包括创建、更新和删除。主要实现位于
api/apps/sdk/dataset.py
关键端点:
- POST /api/v1/datasets - 创建数据集
( dataset.py 56 )
- GET /api/v1/datasets - 列出数据集
( dataset.py 381 )
- PUT /api/v1/datasets/{dataset_id} - 更新数据集
( dataset.py 254 )
- DELETE /api/v1/datasets - 删除数据集
( dataset.py 158 )
GET /api/v1/datasets/{dataset_id}/knowledge_graph - 获取数据集的知识图谱( dataset.py 476 )
DELETE /api/v1/datasets/{dataset_id}/knowledge_graph - 删除数据集的知识图谱( dataset.py 516 )
数据集创建过程通过
api/utils/api_utils.py 479-529
验证
verify_embedding_availability()
嵌入模型,并通过 get_parser_config() api/utils/api_utils.py 352-394
应用默认解析器配置
文档管理
文档端点管理数据集中的文件上传、处理和检索。实现跨度
api/apps/sdk/doc.py 69-680
关键端点:
- POST /api/v1/datasets/{dataset_id}/documents - 上传文件
( doc.py 69 )
- GET /api/v1/datasets/{dataset_id}/documents - 列出文件
( doc.py 415 )
- PUT /api/v1/datasets/{dataset_id}/documents/{document_id} - 更新文件
( doc.py 175 )
- GET /api/v1/datasets/{dataset_id}/documents/{document_id} - 下载文档
( doc.py 355 )
- DELETE /api/v1/datasets/{dataset_id}/documents - 删除文档
( doc.py 572 )
文档处理是通过块端点启动的:
POST /api/v1/datasets/{dataset_id}/chunks - 开始解析文档 ( doc.py 682 )
DELETE /api/v1/datasets/{dataset_id}/chunks - 停止解析文档 ( doc.py 765 )
块管理
块终结点提供对文档段及其元数据的细粒度控制。主要业务包括:
- GET /api/v1/datasets/{dataset_id}/documents/{document_id}/chunks - 列表块
( doc.py 836 )
- POST /api/v1/datasets/{dataset_id}/documents/{document_id}/chunks - 添加块
( doc.py 1048 )
- PUT /api/v1/datasets/{dataset_id}/documents/{document_id}/chunks/{chunk_id} - 更新块
( doc.py 1171 )
- DELETE /api/v1/datasets/{dataset_id}/documents/{document_id}/chunks - 删除块
( doc.py 1276 )
聊天助手管理
聊天端点通过
api/apps/sdk/chat.py
处理对话式 AI 助手配置
关键端点:
- POST /api/v1/chats - 创建聊天助手
( chat.py 30 )
- GET /api/v1/chats - 列出聊天助手
( chat.py 271 )
- PUT /api/v1/chats/{chat_id} - 更新聊天助手
( chat.py 147 )
- DELETE /api/v1/chats - 删除聊天助手
( chat.py 228 )
会话管理
会话端点处理聊天助手和代理的对话会话。实现在
api/apps/sdk/session.py
聊天会话:
- POST /api/v1/chats/{chat_id}/sessions - 使用聊天助手创建会话
( session.py 37 )
- GET /api/v1/chats/{chat_id}/sessions - 列出聊天助手的会话
( session.py 480 )
- PUT /api/v1/chats/{chat_id}/sessions/{session_id} - 更新会话
( session.py 97 )
- DELETE /api/v1/chats/{chat_id}/sessions - 删除会话
( session.py 595 )
代理会话:
- POST /api/v1/agents/{agent_id}/sessions - 创建与代理的会话
( session.py 66 )
- GET /api/v1/agents/{agent_id}/sessions - 列出代理会话
( session.py 534 )
- DELETE /api/v1/agents/{agent_id}/sessions - 删除代理会话
( session.py 643 )
对话终结点:
- POST /api/v1/chats/{chat_id}/completions - 与聊天助手交谈
( session.py 119 )
- POST /api/v1/agents/{agent_id}/completions - 与代理人交谈
( session.py 442 )
- POST /api/v1/sessions/ask - 询问数据集
( session.py 695 )
OpenAI 兼容 API
RAGFlow 提供与 OpenAI 兼容的聊天完成端点,遵循与 OpenAI 的 API 相同的请求/响应格式,从而可以直接替代现有的 OpenAI 集成。这两个端点都在
api/apps/sdk/session.py
中实现
端点:
- POST /api/v1/chats_openai/{chat_id}/chat/completions - 聊天完成
( session.py 148 )
- POST /api/v1/agents_openai/{agent_id}/chat/completions - 代理完成
( session.py 381 )
这两个端点都支持与 OpenAI API 格式相同的流式处理和非流式处理响应,包括使用情况统计数据和通过 tiktoken 进行令牌计数。
请求/响应流
完整的 API 请求处理管道
OpenAI 兼容流式传输
错误处理
API 使用通过 api/utils/api_utils.py
中的实用程序函数实现的标准化错误响应格式:
功能 | 目的 | HTTP 状态 | 重新编码 |
---|---|---|---|
get_result() | 成功响应 200 0 | ||
get_error_argument_result() | 参数无效 | 400 | 101 |
get_error_data_result() | 数据验证错误 | 400 | 102 |
get_error_permission_result() | 授权失败 | 403 | 403 |
server_error_response() | 内部错误 | 500 | 500 |
完整的错误代码参考
法典 | 消息 | 描述 |
---|---|---|
0 | 成功 | 成功完成 |
101 | 参数错误 | 请求参数无效 |
102 | 数据错误 | 数据验证或业务逻辑错误 |
109 | 身份验证错误 | API 密钥或令牌无效 |
403 | 禁止 | 访问被拒绝 |
500 | 内部服务器错误 | 服务器内部错误 |
1001 | 块 ID 无效 | 块 ID 无效 |
1002 | 块更新失败 | 块更新失败 |
所有回复均遵循标准化格式:
{"code": 0,"message": "success", "data": {...}
}
错误响应包括特定的错误消息:
{"code": 102,"message": "Dataset name 'example' already exists"
}
Python SDK 集成
sdk/python/ragflow_sdk/
中的 Python SDK 提供了一个直接映射到 HTTP API 端点的高级接口。RAGFlow 类 ragflow.py 26
封装了 HTTP 客户端功能:
class RAGFlow:def __init__(self, api_key, base_url, version="v1"):self.api_url = f"{base_url}/api/{version}"self.authorization_header = {"Authorization": f"Bearer {api_key}"}
SDK 模块直接对应于 API 端点类别:
- DataSet 类→ /datasets 终结点
- 文档类→ /documents 端点
- 聊天类→ /chats 终结点
- 块类 → /chunks 端点
SDK 自动处理身份验证、请求序列化、错误处理和响应反序列化,提供比直接 HTTP API 使用更用户友好的界面。