PolarDB企业知识空间提供数据接口(PolarRAG API),支持通过HTTP请求完成托管文档上传、文档状态查询、文档删除和知识检索。本文介绍数据接口的接入准备、基础约定和各接口的调用方法。
适用范围
本文仅描述客户侧数据接口。知识空间、知识库、模型和权限等管理配置请通过控制台或OpenAPI完成,不在本文范围内。调用数据接口前,请确保已准备以下资源:
一个已创建的PolarDB知识库。创建方法请参见使用企业知识空间。
已获取调用数据接口所需的信息,详见下表:
信息
说明
示例
space_id企业知识空间ID,形如
pks-xxx。pks-xxxkb_id控制台中目标知识库的ID,形如
pkb-xxx。pkb-xxxOpenSearch访问地址
数据接口的访问地址,即企业知识空间绑定的PolarSearch连接地址。仅ACL Disabled Space需要。
http://<opensearch-host>:<port>调用凭据
搜索节点账号,作为OpenSearch访问凭据。仅ACL Disabled Space需要。
<username>:<password>OSS文件路径
待入库文件所在的OSS路径,格式必须为
oss://<bucket>/<object_key>。oss://xxx_bucket/docs/report.pdf数据接口的接入方式取决于企业知识空间的ACL 模式(是否开始了文档 ACL):
空间模式
客户接入方式
开放空间(ACL Disabled)
可以使用本文列出的OpenSearch REST接口直连,调用账号须具备对应权限。
权限感知空间(ACL Enforced)
必须通过PolarDB Agentic Server(MCP Server)上传、查询、删除和检索,不使用本文的直连示例。
说明权限感知空间(ACL Enforced)中,MCP Server根据已认证用户的SSO claims在服务端生成可信
acl_context,客户端、模型或工具参数不得自行传入或覆盖身份信息。
开通、连接与版本确认
企业知识空间的开通和控制台操作请参见对应文档,本文不再展开:
获取企业知识空间版本
使用上传接口前,建议先查询当前运行的企业知识空间版本,以确定是否支持省略doc_id:
curl -sS -u '<username>:<password>' \
'http://<opensearch-host>:<port>/_plugins/_polar_rag/_version'当安装包携带1.0.6发布标识时,响应形如:
{
"version": "t-polardb-rag-1.0.6-20260814175603.al8.x86_64"
}确认为1.0.6或更高版本:上传支持缺省
doc_id,推荐缺省。低于1.0.6:必须显式提供
doc_id。返回
404、unknown、仅有OpenSearch插件描述版本(例如3.3.2-SNAPSHOT)或无法确认企业知识空间发布版本:按旧版本兼容处理,显式提供doc_id。
接口总览
数据接口提供以下能力:
场景 | 方法 | 路径 | ACL访问说明 |
上传单个托管文档 |
|
|
|
批量上传托管文档 |
|
|
|
查询单个文档状态 |
|
|
|
批量查询文档状态 |
|
|
|
删除单个托管文档 |
|
|
|
查询删除任务 |
|
|
|
搜索知识内容 |
|
|
|
基础约定
Base URL
http://<opensearch-host>:<port>/_plugins/_polar_rag接口详情中的路径均以/_plugins/_polar_rag开头,实际请求时请拼接实际的搜索节点地址。
认证与权限
如果服务启用了OpenSearch Security,请在开放空间(ACL Disabled)模式下的直连请求中请携带搜索节点的账号密码:
curl -u '<username>:<password>' ...账号能连接搜索节点不代表自动拥有所有接口权限。文档上传,尤其是批量上传,需要您提供具备对应写入或受信管控权限的账号。权限不足时会返回
403。权限感知空间(ACL Enforced)不使用本文的Basic Auth直连方式访问数据面,必须通过PolarDB Agentic Server(MCP Server)。
请求格式
接口类型 | Content-Type |
普通JSON接口 |
|
批量上传文档 |
|
时间字段使用ISO-8601 UTC字符串。
OSS路径填写规则
文档上传时需要填写oss_path,格式必须是:
oss://<bucket>/<object_key>参数说明
项目 | 正确填写 | 说明 |
Bucket名称 |
| 只有bucket名,不带endpoint |
Bucket完整域名 |
| 常用于控制台或外部访问地址展示 |
Endpoint |
| 表示地域入口,不是bucket名 |
文档路径 |
| API上传文档时使用 |
不要把OSS endpoint填进
oss_path。如果只填
xxx_bucket报不存在错误,通常是因为当前字段需要完整文档路径,应填写oss://xxx_bucket/<文件路径>。
示例
oss://xxx_bucket/docs/report.pdf常见状态码
状态码 | 含义 |
| 请求成功、幂等返回,或删除已完成 |
| 单文档新提交/重新提交成功;或批量请求 |
| 删除仍在后台处理,需使用 |
| 请求体格式错误或参数非法 |
| 权限不足;ACL Enforced Space直连时可能返回 |
| 文档或删除任务不存在 |
| 资源正在提交、删除或存在并发状态冲突 |
| 服务依赖暂不可用 |
| 服务端内部错误,或删除结果为 |
示例
常见错误响应:
{ "error_type": "invalid_parameter", "error": "kb_id is required" }权限感知空间(ACL Enforced)误用直连接口时可能返回:
{ "error_type": "acl_context_required", "error": "Use the protected document endpoint" }
数据接入流程
开放空间(ACL Disabled)
将文件上传到当前空间可访问的OSS Bucket。
查询企业知识空间版本;1.0.6及以上推荐省略
doc_id,旧版本或版本不明确时显式提供。调用托管文档上传接口,保存响应中的
document.doc_id。轮询文档状态至
COMPLETED或FAILED,完成后再搜索;删除返回PROCESSING时继续查询删除任务。
权限感知空间(ACL Enforced)
通过PolarDB Agentic Server(MCP Server)完成资源发现、上传、状态查询、删除和搜索。MCP Server负责从认证会话生成可信ACL身份上下文。
文档上传
版本要求:省略
doc_id是企业知识空间1.0.6新增的能力。1.0.6及以上版本推荐省略,由服务端生成稳定ID;低于1.0.6的版本必须显式传入doc_id。适用边界:本章REST示例仅适用于开放空间(ACL Disabled)。权限感知空间(ACL Enforced)请通过PolarDB Agentic Server(MCP Server)上传。
建议通过OSS自动同步功能上传文档,具体操作请参见使用企业知识空间。您也可以通过以下托管文档上传接口上传文档。
上传单个文档
提交OSS中的文件进行解析、分块和索引。
请求
请求地址:
POST /_plugins/_polar_rag/spaces/{space_id}/managed_documents Content-Type: application/json路径参数:
参数
类型
必填
说明
space_idstring
是
企业知识空间ID,最大64个字符。
请求示例(1.0.6 及以上版本推荐省略
doc_id):{ "kb_id": "pkb-xxx", "oss_path": "oss://xxx_bucket/docs/report.pdf", "filename": "report.pdf", "file_type": "pdf", "file_md5": "replace_with_actual_file_md5", "file_size_bytes": 123456, "source": "customer_api", "metadata": { "category": "技术文档" } }说明示例中的
replace_with_actual_file_md5为占位值,调用时请替换为OSS对象的实际MD5值,并填写与该对象一致的file_size_bytes。请求字段说明:
字段
类型
必填
说明
doc_idstring
1.0.6 起可选
1.0.6 及以上推荐省略,由服务端生成稳定 UUID
低于 1.0.6 版本时必填。显式传入时须全局唯一且最大 64 个字符
kb_idstring
是
控制台中目标知识库的ID,最大64个字符。
oss_pathstring
是
文件的OSS路径,格式为
oss://<bucket>/<object_key>,最大1024个字符。filenamestring
是
文件名,最大512个字符。
file_typestring
否
文件类型,例如
pdf、docx、txt,最大32个字符。file_md5string
否
文件内容的MD5值,最大64个字符。
file_size_bytesinteger
否
文件大小,单位为字节。
sourcestring
否
文档来源标识,最大32个字符。
metadataobject
否
文档级自定义元数据。
说明建议同时提供
file_md5和file_size_bytes。如果相同doc_id和相同oss_path指向的OSS对象被原地覆盖,但请求未提供文件指纹,服务可能将其判定为幂等重放,不会重新入库。
响应
响应示例:首次提交新文档成功时返回HTTP 201和
idempotent=false,并回显请求中的doc_id。{ "idempotent": false, "document": { "doc_id": "662ad95f-xxxx-xxxx-xxxx-df40999314b9", "space_id": "pks-xxx", "kb_id": "pkb-xxx", "oss_path": "oss://xxx_bucket/docs/report.pdf", "filename": "report.pdf", "file_type": "pdf", "file_md5": "replace_with_actual_file_md5", "file_size_bytes": 123456, "status": "DISPATCHED", "error_message": null, "metadata": "{\"category\":\"技术文档\"}", "source": "customer_api", "is_deleted": false } }响应字段说明:
说明批量上传中成功元素的
document使用同一响应结构。字段
类型
说明
idempotentboolean
false表示本次新提交或重新提交,true表示返回已有文档。document.doc_idstring
回显请求中的文档ID。
document.space_idstring
企业知识空间ID。
document.kb_idstring
知识库ID。
document.oss_pathstring
OSS对象路径。
document.filenamestring
文件名。
document.file_typestring
文件类型。
document.file_md5string或null
文件指纹,未提供时可能为空。
document.file_size_bytesinteger,可选
文件大小,未提供时该字段可能省略。
document.statusstring
当前文档状态的对外表示。
document.error_messagestring或null
处理失败信息,无错误时为空。
document.metadatastring或null
当前版本上传响应中该字段为JSON字符串,不是请求中的object。请按字符串接收,需要时再解析为JSON。
document.sourcestring或null
文档来源标识。
document.is_deletedboolean
是否已标记删除。
省略文档 ID 时的生成规则(仅 1.0.6 及以上版本适用)
服务端根据
space_id + kb_id + oss_path生成稳定的 UUID。同一组
space_id、kb_id、oss_path会得到相同doc_id,便于重试和幂等处理。省略
doc_id时,space_id和kb_id不能包含冒号:。调用方必须保存响应中的
document.doc_id,后续状态查询和删除都使用该 ID。如果业务系统已有稳定的外部文档 ID,也可以显式传入
doc_id。
幂等与重新提交语义
同一doc_id再次提交时,请结合已有文档状态判断结果:
条件 | 结果 |
已有文档状态为 | 返回HTTP 409,表示资源正在提交或删除。 |
身份字段相同,且已有文档状态不是 | 返回HTTP 200和 |
已有文档状态为 | 重新提交。成功时返回HTTP 201和 |
身份字段发生变化。 | 先删除旧内容再重新提交。如果删除仍在进行中,返回HTTP 409,请稍后重试。 |
身份字段校验字段包括oss_path、file_md5、规范化后的file_size_bytes、kb_id、filename、file_type和metadata。source不参与身份判断。
批量上传文档
批量提交OSS文件进行解析、分块和索引,单次最多提交500个文档。从 1.0.6 版本起,每个元素的 doc_id 可以省略,并按省略文档 ID 时的生成规则(仅 1.0.6 及以上版本适用)分别生成。
1.0.6 及以上版本推荐省略。低于 1.0.6 版本时每个元素都必须显式提供
doc_id,且每个doc_id必须全局唯一。批量上传接口需申请相关权限,暂不支持直接调用。普通搜索账号调用可能返回
403 trusted_control_plane_required。若您有相关需求,请提交工单联系我们为您处理。
请求地址:
POST /_plugins/_polar_rag/spaces/{space_id}/managed_documents/_bulk Content-Type: application/json请求示例:
{ "documents": [ { "kb_id": "pkb-xxx", "oss_path": "oss://xxx_bucket/docs/report-1.pdf", "filename": "report-1.pdf", "file_type": "pdf", "file_md5": "replace_with_actual_file_md5_1", "file_size_bytes": 123456 }, { "doc_id": "customer_doc_002", "kb_id": "pkb-xxx", "oss_path": "oss://xxx_bucket/docs/report-2.docx", "filename": "report-2.docx", "file_type": "docx" } ] }说明示例中的
replace_with_actual_file_md5_1为占位值,调用时请替换为对应OSS对象的实际MD5值,并保证file_size_bytes与该对象一致。响应示例:
{ "total": 2, "documents": [ { "success": true, "idempotent": false, "document": { "doc_id": "27b950f1-xxxx-xxxx-xxxx-145d2d1c4c7a", "space_id": "pks-xxx", "kb_id": "pkb-xxx", "oss_path": "oss://xxx_bucket/docs/report-1.pdf", "filename": "report-1.pdf", "status": "DISPATCHED" } }, { "success": true, "idempotent": false, "document": { "doc_id": "customer_doc_002", "space_id": "pks-xxx", "kb_id": "pkb-xxx", "oss_path": "oss://xxx_bucket/docs/report-2.docx", "filename": "report-2.docx", "status": "DISPATCHED" } } ], "succeeded": 2, "failed": 0 }批量请求中的文档逐条处理,单个文档失败不会回滚已成功提交的文档:
失败数为0时返回HTTP 201。即使全部成功项均为幂等返回,整体仍返回201。
失败数大于0时返回HTTP 200,包括部分失败和全部失败。
请逐项检查
success字段。对成功项请继续检查idempotent,并按上传单个文档的规则理解对应的document.status。
调用上传接口前,请先将文件上传到对应的OSS Bucket。接口只接收OSS路径,不接收文件流。
无论您是否传入
doc_id,服务端都会在成功项或可识别的失败项中返回最终doc_id。
文档状态查询
文档状态查询用于查询文档的处理状态。如需召回文档内容,请使用搜索接口。
适用边界:本章
GET .../status和批量POST .../_batch_status的直连示例仅适用于开放空间(ACL Disabled)。普通调用者查询权限感知空间(ACL Enforced)会返回403 acl_context_required,请通过PolarDB Agentic Server(MCP Server)查询,由服务端携带可信身份上下文。兼容返回字段:以下示例仅展示主要字段。实际响应可能包含其他附加字段,客户端请允许并忽略暂不识别的字段,以保持向前兼容。
查询单个文档状态
请求地址:
GET /_plugins/_polar_rag/documents/{doc_id}/status处理中的响应示例:
{ "doc_id": "doc_12345678", "status": "CHUNKING", "chunk_count": 0, "created_at": "2026-04-21T10:00:00Z", "updated_at": "2026-04-21T10:01:00Z", "space_id": "pks-xxx", "kb_id": "pkb-xxx", "filename": "report.pdf", "submit_retry_count": 0, "task": { "task_id": "task_12345678", "taskd_task_id": "taskd_xxx", "task_status": "DISPATCHED", "retry_count": 0, "poll_error_count": 0, "dispatched_at": "2026-04-21T10:01:00Z" } }处理完成的响应示例:
{ "doc_id": "doc_12345678", "status": "COMPLETED", "chunk_count": 15, "created_at": "2026-04-21T10:00:00Z", "updated_at": "2026-04-21T10:05:00Z", "completed_at": "2026-04-21T10:05:00Z" }处理失败的响应示例:
{ "doc_id": "doc_12345678", "status": "FAILED", "chunk_count": 0, "created_at": "2026-04-21T10:00:00Z", "updated_at": "2026-04-21T10:02:00Z", "error_message": "TaskD processing failed" }文档状态说明:
状态
含义
PENDING已提交,等待派发。
DISPATCHED已派发给文档处理服务。
CHUNKING正在分块。
INDEXING正在写入索引。
COMPLETED处理完成,可以检索。
FAILED处理失败,详情请参见
error_message。DELETING正在删除。
批量查询文档状态
请求地址:
POST /_plugins/_polar_rag/documents/_batch_status Content-Type: application/json请求示例:
{ "doc_ids": ["doc_12345678", "doc_87654321"] }响应示例:
{ "total": 2, "found": 2, "documents": [ { "doc_id": "doc_12345678", "status": "CHUNKING", "chunk_count": 0, "space_id": "pks-xxx", "kb_id": "pkb-xxx", "filename": "report.pdf", "submit_retry_count": 0 }, { "doc_id": "doc_87654321", "status": "COMPLETED", "chunk_count": 15, "completed_at": "2026-04-21T10:05:00Z" } ] }响应字段说明:
字段
说明
total请求中的
doc_id数量。found实际查询到的文档数量。
found可能小于total,表示部分文档ID不存在。documents文档状态列表。
文档删除
版本支持:当前已发布的
polar-rag-plugin 1.0.6支持本章接口,对应Tag:t-polardb-rag_R_1_0_6_20260814175603_20260814。访问边界:以下直连删除流程仅适用于开放空间(ACL Disabled)。权限感知空间(ACL Enforced)必须通过PolarDB Agentic Server(MCP Server)删除,服务端会按当前用户对目标文档的
MANAGE权限执行校验。
删除单个文档
删除指定企业知识空间中的托管文档。删除完成后,文档对应的索引数据将被清理,托管文档记录将被标记为已删除。
请求地址
DELETE /_plugins/_polar_rag/spaces/{space_id}/managed_documents/{doc_id}该接口不需要请求体。路径参数:
参数
类型
必填
说明
space_idstring
是
企业知识空间ID。
doc_idstring
是
待删除的文档ID。
删除完成的响应示例:
{ "doc_id": "doc_12345678", "task_id": "task_12345678", "status": "COMPLETED", "error_message": null }删除处理中的响应示例:
{ "doc_id": "doc_12345678", "task_id": "task_12345678", "status": "PROCESSING", "error_message": null }响应中的
status取值说明:状态
说明
COMPLETED文档删除完成。
PROCESSING删除任务仍在后台执行。
FAILED文档删除失败,具体原因请参见
error_message。
查询删除任务
使用删除接口返回的task_id查询后台删除任务的状态。
请求地址:
GET /_plugins/_polar_rag/delete_tasks/{task_id}路径参数:
参数
类型
必填
说明
task_idstring
是
删除任务ID。
响应示例:
{ "task_id": "task_12345678", "task_type": "delete", "type": "doc_id", "target_id": "doc_12345678", "space_id": "pks-xxx", "status": "COMPLETED", "total_docs": 1, "deleted_docs": 1, "created_at": "2026-08-14T10:00:00Z", "completed_at": "2026-08-14T10:00:03Z" }任务状态说明:
状态
说明
PENDING删除任务已创建,等待执行。
PROCESSING正在删除。
COMPLETED删除完成。
FAILED删除失败。响应中可能包含
error_message、failed_docs和failed_doc_ids字段。当任务状态为
PENDING或PROCESSING时,请继续轮询,直到状态变为COMPLETED或FAILED。权限感知空间(ACL Enforced)的删除与任务查询应由MCP Server统一完成,不向终端客户暴露acl_context。
搜索知识内容
适用边界:以下直连搜索示例仅适用于开放空间(ACL Disabled)。权限感知空间(ACL Enforced)必须通过PolarDB Agentic Server(MCP Server)检索,MCP Server根据登录用户的SSO身份在服务端生成acl_context。客户端、模型和工具参数不得自行构造或覆盖acl_context。
在指定企业知识空间中检索相关内容。您可以通过kb_id限定只检索某个知识库。
请求地址
POST /_plugins/_polar_rag/spaces/{space_id}/search Content-Type: application/json请求示例:
{ "query_text": "OpenSearch 的向量搜索功能", "search_mode": "balanced", "kb_id": "pkb-xxx", "size": 10, "min_score": 0.5, "reranker": false }请求字段:
字段
类型
必填
说明
query_textstring
是
查询文本,不能为空。
search_modestring
否
检索模式,可选值为
knn、rrf、balanced、precise和semantic,默认值为balanced。kb_idstring
否
知识库ID过滤。指定后仅检索该知识库。
sizeinteger
否
返回结果数,默认值为10,取值范围为1~1000。
min_scorenumber
否
最低相关性分数,低于该阈值的结果将被过滤。
rerankerboolean
否
是否启用reranker,默认值为false。
检索模式说明:
模式
说明
适用场景
knn纯向量检索。
语义匹配、跨语言表达。
rrf排名融合。
通用检索,排序更稳健。
balancedBM25与向量检索均衡。
默认推荐。
precise更偏关键词匹配。
专有名词、编号、精确短语。
semantic更偏语义理解。
自然语言问题、同义表达。
响应为标准OpenSearch search响应。默认返回的
_source字段说明:字段
说明
text分块(chunk)正文。
doc_id文档ID。
kb_id知识库ID。
filename原始文件名。
chunk_indexchunk在文档内的序号。
page_numberschunk覆盖的页码。
headingschunk所属的标题链。
captions图表标题。
doc_items原文的结构化定位信息。
metadata上传文档时传入的文档级元数据。
chunk_metadata分块服务产生的chunk元数据。
响应示例:
{ "took": 45, "hits": { "total": { "value": 3, "relation": "gte" }, "max_score": 0.85, "hits": [ { "_index": "polar_rag_space_pks-xxx", "_id": "Sp1CM1N47cn3IQV5jVRWXA", "_score": 0.85, "_source": { "text": "OpenSearch 是一个开源的分布式搜索和分析引擎...", "doc_id": "doc_001", "kb_id": "pkb-xxx", "filename": "opensearch_intro.txt", "chunk_index": 0, "page_numbers": [1, 2], "headings": ["概述"], "captions": [], "doc_items": ["#/texts/2", "#/texts/3"], "metadata": { "category": "技术文档" }, "chunk_metadata": { "origin": { "binary_hash": 123456789 } } } } ] } }curl示例:
curl -u '<username>:<password>' -X POST \ 'http://<opensearch-host>:<port>/_plugins/_polar_rag/spaces/pks-xxx/search?pretty' \ -H 'Content-Type: application/json' \ -d '{ "query_text": "OpenSearch 的向量搜索功能", "search_mode": "balanced", "kb_id": "pkb-xxx", "size": 10 }'说明reranker=true需要目标知识空间已配置reranker能力,否则接口返回400。搜索接口返回chunk级结果。上层应用可以基于
text、filename、page_numbers、headings和doc_items等字段展示引用来源。