通過以下介面管理知識庫中的文檔:匯入文件、查詢狀態、列出文檔、更新中繼資料、刪除文檔。
支援文檔格式
PDF:
.pdfWord:
.doc、.docxExcel:
.xls、.xlsxPowerPoint:
.ppt、.pptx純文字:
.txtMarkdown:
.md
文檔狀態流轉
文檔從上傳到可檢索,經歷以下狀態:
狀態 | 說明 | 可執行檔操作 |
| 上傳任務已接收,等待處理 | 查詢狀態、刪除 |
| 正在解析、切片和向量化 | 查詢狀態、刪除 |
| 索引完成,可被檢索 | 檢索、更新中繼資料、刪除、查看切片 |
| 索引失敗 | 查看失敗原因、刪除、重新上傳 |
| 文檔及其切片正在刪除 | 等待刪除完成 |
文檔上傳後處於 Pending 或 Indexing 狀態時無法被檢索到。必須等到狀態變為 Completed 才能檢索。
添加文檔
將文檔匯入知識庫。系統自動完成解析、切片、Embedding 向量化和索引構建。相同 ossKey 重複上傳會覆蓋原有文檔。
SDK 提供三種匯入方式:
方式 | SDK 方法 | 說明 |
上傳本地檔案 |
| 指定本地檔案路徑,SDK 自動上傳至 OSS 後添加到知識庫 |
添加 OSS 檔案 |
| 指定已存在的 OSS 檔案路徑 |
OSS 目錄大量匯入 |
| 指定 OSS 目錄路徑,系統遞迴掃描所有檔案 |
請求參數
參數 | 類型 | 說明 |
| string | 知識庫名稱(必填) |
| string | 子空間名稱,最大 128 字元。開啟 subspace 時必填 |
| list<object> | 文檔列表(必填)。單次請求最多 10 個文檔,單檔案最大 50MB 說明 如需提升請提交工單或加入Table Store技術交流群36165029092後聯絡支援人員 |
| string | 本地檔案路徑。upload_documents 時必填 |
| string | OSS 檔案或目錄路徑,長度 1–256。add_documents 時必填 說明 如需提升請提交工單或加入Table Store技術交流群36165029092後聯絡支援人員 |
| object | 文檔中繼資料,必須與知識庫定義的 metadata schema 一致 |
| list<string> | 包含過濾器,支援首尾 |
| list<string> | 排除過濾器,支援首尾 |
程式碼範例
上傳本地檔案
指定本地檔案路徑,SDK 自動完成“上傳 OSS → 添加到知識庫”。
使用 upload_documents 時,初始化 AgentStorageClient 需同時提供 oss_endpoint 和 oss_bucket_name,否則拋出 ValueError。
resp = client.upload_documents({
"knowledgeBaseName": "product_docs_kb",
"documents": [
{
"filePath": "/home/user/docs/product_manual.pdf",
"metadata": {"author": "張三", "category": "產品文檔"}
},
{
"filePath": "/home/user/docs/faq.docx",
"metadata": {"author": "李四", "category": "FAQ"}
}
]
})添加 OSS 檔案
檔案已在 OSS 上時,直接指定 ossKey。
resp = client.add_documents({
"knowledgeBaseName": "product_docs_kb",
"documents": [
{
"ossKey": "oss://example-bucket/docs/product_manual.pdf",
"metadata": {"author": "張三"}
}
]
})OSS 目錄大量匯入
指定 OSS 目錄路徑,系統遞迴掃描目錄下所有檔案。通過 inclusionFilters 和 exclusionFilters 按檔案名稱模式過濾。
resp = client.add_documents({
"knowledgeBaseName": "product_docs_kb",
"documents": [
{
"ossKey": "oss://example-bucket/docs/",
"inclusionFilters": ["*.pdf", "*.docx"],
"exclusionFilters": ["*draft*"]
}
]
})響應說明
響應欄位
欄位 | 類型 | 說明 |
| list<object> | 每個文檔的處理結果 |
| string | 文檔 ID |
| string | 文檔 OSS 路徑 |
| string |
|
| string | 失敗原因(僅 failed 時) |
響應樣本
{
"code": "SUCCESS",
"data": {
"documentDetails": [
{"docId": "fc6ed97f-...", "status": "succeed", "ossKey": "oss://example-bucket/docs/product_manual.pdf"},
{"docId": "940f2c5c-...", "status": "succeed", "ossKey": "oss://example-bucket/docs/faq.docx"}
]
},
"message": "succeed"
}部分失敗響應(HTTP 仍返回 200,code 仍為 SUCCESS):
{
"code": "SUCCESS",
"data": {
"documentDetails": [
{"status": "failed", "failureReason": "Metadata field 'date' date string format is not supported", "ossKey": "oss://..."},
{"status": "succeed", "ossKey": "oss://...", "docId": "940f2c5c-..."}
]
},
"message": "succeed"
}注意事項
HTTP 200 +
code: SUCCESS不代表所有文檔都處理成功。必須逐個檢查documentDetails中每個文檔的status欄位。status: "succeed"表示上傳任務已接收,並非索引完成。必須等到文檔狀態變為Completed才能被檢索。知識庫開啟 subspace 後必須傳
subspace參數,否則報INVALID_PARAMETER。metadata 日期格式需使用支援的格式(如
yyyy-MM-dd HH:mm:ss),不支援的格式會導致文檔failed。
查詢索引狀態
文檔上傳後經過非同步處理才能被檢索。如需確認文檔是否索引完成,建議採用指數退避輪詢。
import time
def wait_for_document(client, kb_name, doc_id, max_interval=30):
"""指數退避輪詢文檔狀態,等待索引完成。"""
interval = 3
while True:
resp = client.get_document({
"knowledgeBaseName": kb_name,
"docId": doc_id
})
status = resp["data"][0]["status"]
if status == "completed":
print(f"索引完成,切片數: {resp['data'][0].get('chunkNum', 'N/A')}")
return resp
elif status == "failed":
raise Exception(f"索引失敗: {resp['data'][0].get('failedDetails')}")
print(f"目前狀態: {status},{interval}s 後重試...")
time.sleep(interval)
interval = min(interval * 2, max_interval)文檔處理時間受檔案大小、類型和數量影響,小檔案通常幾秒完成,大檔案或大量匯入可能需要數分鐘。
查詢文檔
調用 get_document 查詢指定文檔的詳細資料,包括處理狀態、切片數量和中繼資料。
請求參數
參數 | 類型 | 說明 |
| string | 知識庫名稱(必填) |
| string | 子空間名稱。開啟 subspace 時必填 |
| string | 文檔 ID。與 |
| string | OSS 檔案路徑。與 |
程式碼範例
resp = client.get_document({
"knowledgeBaseName": "product_docs_kb",
"docId": "fc6ed97f-..."
})
doc = resp["data"][0]
print(f"狀態: {doc['status']}, 切片數: {doc.get('chunkNum', 'N/A')}")響應說明
欄位 | 類型 | 說明 |
| string | 文檔 ID |
| string | OSS 路徑 |
| string | 子空間 |
| int | 切片數量 |
| string | 文檔狀態: |
| int | 建立時間戳記 |
| int | 更新時間戳記 |
| string | 文檔 eTag |
| string | 失敗原因(僅 Failed 時) |
| object | 文檔中繼資料 |
注意事項
同一個 ossKey 經歷建立→刪除→建立後,get_document 可能返回多條記錄(包含記錄)。根據 status 欄位判斷有效文檔,取 Completed 狀態的記錄。
列出文檔
調用 list_documents 分頁查詢知識庫下的文檔列表。
請求參數
參數 | 類型 | 說明 |
| string | 知識庫名稱(必填) |
| list<string> | 子空間列表,最多 10 個。開啟 subspace 時必填 |
| int | 返回數量。預設為 10,最大 1000 |
| string | 翻頁 token |
程式碼範例
resp = client.list_documents({
"knowledgeBaseName": "product_docs_kb",
"maxResults": 20
})
for doc in resp["data"]["documentDetails"]:
print(f"[{doc['status']}] {doc['ossKey']} (切片數: {doc.get('chunkNum', '-')})")注意事項
subspace 參數支援多值列表,但最多 10 個,超過會報錯。
更新文檔中繼資料
調用 update_document 更新指定文檔的 metadata。
僅 Completed 狀態的文檔可更新中繼資料。對其他狀態的文檔調用會報錯。
請求參數
參數 | 類型 | 說明 |
| string | 知識庫名稱(必填) |
| string | 子空間名稱。開啟 subspace 時必填 |
| string | 文檔 OSS 路徑。與 |
| string | 文檔 ID。與 |
| map | 新的 metadata(必填) |
程式碼範例
resp = client.update_document({
"knowledgeBaseName": "product_docs_kb",
"docId": "fc6ed97f-...",
"metadata": {"author": "張三", "category": "技術文檔", "version": 2}
})
print(f"更新狀態: {resp['data']['updateStatus']}") # UPDATED 或 NO_OP響應說明
欄位 | 類型 | 說明 |
| string | 文檔 ID |
| string | OSS 路徑 |
| long | 更新時間戳記 |
| string |
|
注意事項
metadata 採用覆蓋式更新,傳入的值會全量替換原有 metadata。如果只想更新一個欄位,必須把所有欄位都帶上。
傳入
"metadata": null會清空所有 metadata。不傳
metadata欄位則保留原值。限制:metadata 總大小(key + value)最大 4KB,欄位數最多 200 個。
刪除文檔
調用 delete_documents 刪除指定的文檔及其所有切片資料。
請求參數
參數 | 類型 | 說明 |
| string | 知識庫名稱(必填) |
| string | 子空間名稱。開啟 subspace 時必填 |
| list<object> | 要刪除的文檔列表(必填) |
| string | 文檔 ID。與 |
| string | OSS 路徑。與 |
程式碼範例
resp = client.delete_documents({
"knowledgeBaseName": "product_docs_kb",
"documents": [
{"docId": "fc6ed97f-..."},
{"ossKey": "oss://example-bucket/docs/faq.docx"}
]
})
# 逐個檢查刪除結果
for detail in resp["data"]["documentDetails"]:
print(f"{detail['ossKey']}: {detail['status']}")注意事項
同 AddDocuments,刪除結果也需逐個檢查 documentDetails 中每個文檔的 status。
相關文檔
文檔切片的查看和內容調整,參見切片管理