以下の API を使用して、ナレッジベース内のドキュメントを管理します。ドキュメントのインポート、ステータスの問い合わせ、ドキュメント一覧の取得、メタデータの更新、ドキュメントの削除などの操作が可能です。
サポートされるドキュメント形式
PDF:
.pdfWord:
.doc、.docxExcel:
.xls、.xlsxPowerPoint:
.ppt、.pptxプレーンテキスト:
.txtMarkdown:
.md
ドキュメントステータスのライフサイクル
ドキュメントがアップロードされた後、検索可能になるまでに以下のステータスを遷移します。
ステータス | 説明 | 実行可能な操作 |
| タスクが処理待ちの状態です。 | ステータスの問い合わせ、削除 |
| システムがドキュメントの解析、チャンキング、ベクトル化を実行中です。 | ステータスの問い合わせ、削除 |
| インデックス作成が完了しました。ドキュメントは検索可能です。 | 検索、メタデータ更新、削除、チャンク表示 |
| インデックス作成が失敗しました。 | 失敗理由の確認、削除、再アップロード |
| システムがドキュメントと関連するチャンクを削除中です。 | 削除の完了を待ちます。 |
ドキュメントのステータスが 保留中 または インデックス作成 の場合、検索はできません。ステータスが 完了 に変わるまで待つ必要があります。
ドキュメントの追加
ナレッジベースにドキュメントをインポートします。システムは自動的に解析、チャンキング、埋め込みベクトル化、インデックス構築を実行します。同じ ossKey のドキュメントをアップロードすると、既存のドキュメントが上書きされます。
SDK では、ドキュメントをインポートする 3 つの方法を提供しています。
方法 | SDK メソッド | 説明 |
ローカルファイルのアップロード |
| ローカルファイルのパスを指定します。SDK が自動的に OSS にアップロードし、ナレッジベースに追加します。 |
OSS ファイルの追加 |
| 既存の OSS ファイルのパスを指定します。 |
OSS ディレクトリからの一括インポート |
| OSS ディレクトリのパスを指定します。システムがディレクトリ内のすべてのファイルを再帰的にスキャンして追加します。 |
リクエストパラメータ
パラメータ | 型 | 説明 |
| string | ナレッジベースの名前。必須。 |
| string | サブスペースの名前。最大長は 128 文字です。ナレッジベースでサブスペースが有効になっている場合は必須です。 |
| list<object> | ドキュメントのリスト。必須。1 回のリクエストで最大 10 個のドキュメントを含めることができ、各ファイルは 50 MB を超えてはいけません。 説明 これらの制限の引き上げをご希望の場合は、チケットを送信するか、Tablestore 技術交流グループ (DingTalk グループ ID: 36165029092) に参加してテクニカルサポートにお問い合わせください。 |
| string | ローカルファイルのパス。 |
| string | OSS ファイルまたはディレクトリのパス。長さは 1 ~ 256 文字である必要があります。 説明 |
| object | ドキュメントのメタデータ。ナレッジベースに定義されたメタデータスキーマに準拠する必要があります。 |
| list<string> | 包含フィルター。OSS ディレクトリをスキャンする際に、先頭と末尾で |
| list<string> | 除外フィルター。先頭と末尾で |
コード例
ローカルファイルのアップロード
ローカルファイルのパスを指定します。SDK が自動的に 2 つのステップ (ファイルを 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": "Product Manual"}
},
{
"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 | 失敗の理由。このフィールドは、ステータスが |
レスポンス例
{
"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"
}使用上の注意
200 OKの HTTP レスポンスにcode: SUCCESSが含まれていても、すべてのドキュメントが正常に処理されたことを保証するものではありません。status配列内の各ドキュメントのdocumentDetailsフィールドを確認する必要があります。status: "succeed"は、アップロードタスクが受け付けられたことを示しますが、インデックス作成が完了したことを意味するものではありません。ドキュメントのステータスが完了に変わった後にのみ、ドキュメントを取得できます。ナレッジベースでサブスペースが有効になっている場合は、
subspaceパラメータを渡す必要があります。指定しない場合、INVALID_PARAMETERエラーが返されます。サポートされていない形式を使用するとドキュメントのステータスが
failedになるため、yyyy-MM-dd HH:mm:ssのようなサポートされているメタデータの日付形式を使用する必要があります。
インデックス作成ステータスの確認
ドキュメントのアップロードは非同期処理です。アップロード後、検索可能になる前に処理が必要です。インデックス作成が完了したかどうかを確認するには、エクスポネンシャルバックオフを使用したポーリング戦略を推奨します。
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 == "完了":
print(f"インデックス作成が完了しました。チャンク数: {resp['data'][0].get('chunkNum', 'N/A')}")
return resp
elif status == "失敗":
raise Exception(f"インデックス作成が失敗しました: {resp['data'][0].get('failedDetails')}")
print(f"現在のステータス: {status}、{interval} 秒後に再試行します...")
time.sleep(interval)
interval = min(interval * 2, max_interval)処理時間は、ファイルのサイズ、種類、数によって異なります。小さなファイルは通常数秒で処理されますが、大きなファイルや一括インポートの場合は数分かかることがあります。
ドキュメントの問い合わせ
get_document メソッドを呼び出して、特定のドキュメントの詳細 (処理ステータス、チャンク数、メタデータなど) を取得します。
リクエストパラメータ
パラメータ | 型 | 説明 |
| string | ナレッジベースの名前。必須。 |
| string | サブスペースの名前。ナレッジベースでサブスペースが有効になっている場合は必須です。 |
| 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 | 失敗の理由。このフィールドは、ステータスが |
| object | ドキュメントのメタデータ。 |
使用上の注意
同じ ossKey が作成、削除され、その後再度作成された場合、get_document は履歴レコードを含む複数のレコードを返す可能性があります。有効なドキュメントを特定するには、status フィールドを確認し、ステータスが 完了 のレコードを使用してください。
ドキュメント一覧の取得
list_documents メソッドを呼び出して、ナレッジベース内のドキュメントのページネーション一覧を取得します。
リクエストパラメータ
パラメータ | 型 | 説明 |
| string | ナレッジベースの名前。必須。 |
| list<string> | サブスペース名のリスト。最大 10 個のサブスペースを指定できます。ナレッジベースでサブスペースが有効になっている場合は必須です。 |
| int | 返される結果の数。デフォルト値は 10、最大値は 1000 です。 |
| string | 次のページの結果を取得するためのページネーショントークン。 |
コード例
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 メソッドを呼び出して、特定のドキュメントのメタデータを更新します。
ステータスが 完了 のドキュメントのみメタデータを更新できます。他のステータスのドキュメントに対してこのメソッドを呼び出すと、エラーが返されます。
リクエストパラメータ
パラメータ | 型 | 説明 |
| string | ナレッジベースの名前。必須。 |
| string | サブスペースの名前。ナレッジベースでサブスペースが有効になっている場合は必須です。 |
| string | ドキュメントの OSS パス。 このパラメーターまたは |
| string | ドキュメント ID。このパラメーターまたは |
| map | 新しいメタデータ。必須。 |
コード例
resp = client.update_document({
"knowledgeBaseName": "product_docs_kb",
"docId": "fc6ed97f-...",
"metadata": {"author": "田中愛", "category": "Technical Docs", "version": 2}
})
print(f"更新ステータス: {resp['data']['updateStatus']}") # UPDATED または NO_OPレスポンス
フィールド | 型 | 説明 |
| string | ドキュメント ID。 |
| string | OSS パス。 |
| long | 更新タイムスタンプ。 |
| string |
|
使用上の注意
メタデータの更新は上書き操作です。指定した新しいメタデータが、既存のメタデータを完全に置き換えます。単一のフィールドのみを更新したい場合は、他のすべての既存フィールドもリクエストに含める必要があります。
"metadata": nullを渡すと、すべてのメタデータがクリアされます。metadataフィールドを指定しない場合、元の値が保持されます。制限事項: メタデータの合計サイズ (キーと値) は 4 KB を超えることはできません。フィールドの最大数は 200 です。
ドキュメントの削除
delete_documents メソッドを呼び出して、指定したドキュメントとそれに関連するすべてのチャンクを削除します。
リクエストパラメータ
パラメータ | 型 | 説明 |
| string | ナレッジベースの名前。必須。 |
| string | サブスペースの名前。ナレッジベースでサブスペースが有効になっている場合は必須です。 |
| 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 API と同様に、削除結果についても documentDetails 内の各ドキュメントの status を個別に確認する必要があります。
関連ドキュメント
ドキュメントのチャンクを表示および管理するには、「チャンク管理」をご参照ください。