全部產品
Search
文件中心

Tablestore:文件管理

更新時間:May 13, 2026

通過以下介面管理知識庫中的文檔:匯入文件、查詢狀態、列出文檔、更新中繼資料、刪除文檔。

支援文檔格式

  • PDF:.pdf

  • Word:.doc.docx

  • Excel:.xls.xlsx

  • PowerPoint:.ppt.pptx

  • 純文字:.txt

  • Markdown:.md

文檔狀態流轉

文檔從上傳到可檢索,經歷以下狀態:

狀態

說明

可執行檔操作

Pending

上傳任務已接收,等待處理

查詢狀態、刪除

Indexing

正在解析、切片和向量化

查詢狀態、刪除

Completed

索引完成,可被檢索

檢索、更新中繼資料、刪除、查看切片

Failed

索引失敗

查看失敗原因、刪除、重新上傳

Deleting

文檔及其切片正在刪除

等待刪除完成

說明

文檔上傳後處於 PendingIndexing 狀態時無法被檢索到。必須等到狀態變為 Completed 才能檢索。

添加文檔

將文檔匯入知識庫。系統自動完成解析、切片、Embedding 向量化和索引構建。相同 ossKey 重複上傳會覆蓋原有文檔。

SDK 提供三種匯入方式:

方式

SDK 方法

說明

上傳本地檔案

upload_documents()

指定本地檔案路徑,SDK 自動上傳至 OSS 後添加到知識庫

添加 OSS 檔案

add_documents()

指定已存在的 OSS 檔案路徑

OSS 目錄大量匯入

add_documents()

指定 OSS 目錄路徑,系統遞迴掃描所有檔案

請求參數

參數

類型

說明

knowledgeBaseName

string

知識庫名稱(必填)

subspace

string

子空間名稱,最大 128 字元。開啟 subspace 時必填

documents

list<object>

文檔列表(必填)。單次請求最多 10 個文檔,單檔案最大 50MB

說明

如需提升請提交工單或加入Table Store技術交流群36165029092後聯絡支援人員

documents[].filePath

string

本地檔案路徑。upload_documents 時必填

documents[].ossKey

string

OSS 檔案或目錄路徑,長度 1–256。add_documents 時必填

說明

如需提升請提交工單或加入Table Store技術交流群36165029092後聯絡支援人員

documents[].metadata

object

文檔中繼資料,必須與知識庫定義的 metadata schema 一致

documents[].inclusionFilters

list<string>

包含過濾器,支援首尾 * 萬用字元(如*.pdf),用於 OSS 目錄掃描

documents[].exclusionFilters

list<string>

排除過濾器,支援首尾 * 萬用字元(如*draft*

程式碼範例

上傳本地檔案

指定本地檔案路徑,SDK 自動完成“上傳 OSS → 添加到知識庫”。

說明

使用 upload_documents 時,初始化 AgentStorageClient 需同時提供 oss_endpointoss_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 目錄路徑,系統遞迴掃描目錄下所有檔案。通過 inclusionFiltersexclusionFilters 按檔案名稱模式過濾。

resp = client.add_documents({
    "knowledgeBaseName": "product_docs_kb",
    "documents": [
        {
            "ossKey": "oss://example-bucket/docs/",
            "inclusionFilters": ["*.pdf", "*.docx"],
            "exclusionFilters": ["*draft*"]
        }
    ]
})

響應說明

響應欄位

欄位

類型

說明

documentDetails

list<object>

每個文檔的處理結果

documentDetails[].docId

string

文檔 ID

documentDetails[].ossKey

string

文檔 OSS 路徑

documentDetails[].status

string

succeedfailed

documentDetails[].failureReason

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 查詢指定文檔的詳細資料,包括處理狀態、切片數量和中繼資料。

請求參數

參數

類型

說明

knowledgeBaseName

string

知識庫名稱(必填)

subspace

string

子空間名稱。開啟 subspace 時必填

docId

string

文檔 ID。ossKey 二選一

ossKey

string

OSS 檔案路徑。docId 二選一

程式碼範例

resp = client.get_document({
    "knowledgeBaseName": "product_docs_kb",
    "docId": "fc6ed97f-..."
})

doc = resp["data"][0]
print(f"狀態: {doc['status']}, 切片數: {doc.get('chunkNum', 'N/A')}")

響應說明

欄位

類型

說明

docId

string

文檔 ID

ossKey

string

OSS 路徑

subspace

string

子空間

chunkNum

int

切片數量

status

string

文檔狀態:Pending/Indexing/Completed/Failed/Deleting

createdAt

int

建立時間戳記

updatedAt

int

更新時間戳記

eTag

string

文檔 eTag

failedDetails

string

失敗原因(僅 Failed 時)

metadata

object

文檔中繼資料

注意事項

同一個 ossKey 經歷建立→刪除→建立後,get_document 可能返回多條記錄(包含記錄)。根據 status 欄位判斷有效文檔,取 Completed 狀態的記錄。

列出文檔

調用 list_documents 分頁查詢知識庫下的文檔列表。

請求參數

參數

類型

說明

knowledgeBaseName

string

知識庫名稱(必填)

subspace

list<string>

子空間列表,最多 10 個。開啟 subspace 時必填

maxResults

int

返回數量。預設為 10,最大 1000

nextToken

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 狀態的文檔可更新中繼資料。對其他狀態的文檔調用會報錯。

請求參數

參數

類型

說明

knowledgeBaseName

string

知識庫名稱(必填)

subspace

string

子空間名稱。開啟 subspace 時必填

ossKey

string

文檔 OSS 路徑。docId 二選一

docId

string

文檔 ID。ossKey 二選一

metadata

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

響應說明

欄位

類型

說明

docId

string

文檔 ID

ossKey

string

OSS 路徑

updatedAt

long

更新時間戳記

updateStatus

string

NO_OPUPDATED

注意事項

  • metadata 採用覆蓋式更新,傳入的值會全量替換原有 metadata。如果只想更新一個欄位,必須把所有欄位都帶上。

  • 傳入 "metadata": null 會清空所有 metadata。

  • 不傳 metadata 欄位則保留原值。

  • 限制:metadata 總大小(key + value)最大 4KB,欄位數最多 200 個。

刪除文檔

調用 delete_documents 刪除指定的文檔及其所有切片資料。

請求參數

參數

類型

說明

knowledgeBaseName

string

知識庫名稱(必填)

subspace

string

子空間名稱。開啟 subspace 時必填

documents

list<object>

要刪除的文檔列表(必填)

documents[].docId

string

文檔 ID。ossKey 二選一

documents[].ossKey

string

OSS 路徑。docId 二選一

程式碼範例

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

相關文檔