Todos os produtos
Search
Central de documentação

Tablestore:Document management

Última atualização: Oct 21, 2026

Gerencie os documentos em uma base de conhecimento do AgentStorage, incluindo as operações de importação, consulta, listagem, atualização e exclusão. Você pode importar arquivos do computador local ou do Object Storage Service (OSS) e acompanhar cada documento desde o upload até a recuperação.

Pré-requisitos

  • Uma instância do AgentStorage, juntamente com seu endpoint de acesso e nome da instância. Para obter instruções, consulte Create an AgentStorage instance.

  • Uma base de conhecimento. Para obter instruções, consulte Manage knowledge bases.

  • O SDK do AgentStorage instalado e autenticado. Para obter instruções, consulte Agent Storage SDK.

  • Para fazer upload de documentos do computador local, um bucket do OSS na mesma região da instância, com a autorização do OSS concluída. Ao inicializar o SDK, forneça também a configuração do OSS, incluindo o par de AccessKey, o endpoint e o nome do bucket do OSS.

  • (Condicional) Para armazenar imagens e usar a recuperação multimodal, o modo multimodal deve estar habilitado na base de conhecimento. Você pode habilitar o modo multimodal apenas ao criar a base de conhecimento, e não é possível alterar essa configuração depois de habilitada.

  • (Condicional) Se a base de conhecimento tiver o subespaço habilitado, o parâmetro subspace em cada solicitação de importação e listagem.

  • (Condicional) Para inserir metadados de um documento durante o upload, um esquema de metadados configurado para a base de conhecimento.

Formatos de documento suportados

As bases de conhecimento do AgentStorage suportam os seguintes formatos de arquivo:

Tipo

Extensão do arquivo

PDF

.pdf

Word

.doc, .docx

Excel

.xls, .xlsx

PowerPoint

.ppt, .pptx

Texto simples

.txt

Markdown

.md

Texto estruturado

.csv, .xml, .html, .json

Imagem

.jpeg, .png, .bmp, .webp, .gif, .tiff

Os seguintes limites se aplicam à importação de documentos:

  • Documentos por solicitação — Cada solicitação suporta até 10 documentos.

  • Tamanho do arquivo — Cada arquivo pode ter até 50 MB.

  • Limites superiores — Para solicitar um limite superior, abra um ticket ou entre no grupo de suporte técnico do Tablestore no DingTalk: 36165029092.

  • Imagens — Uma base de conhecimento sem o modo multimodal habilitado não pode vetorizar ou recuperar imagens enviadas.

Ciclo de vida do status do documento

Os documentos passam pelos seguintes status desde o upload até se tornarem pesquisáveis:

Status

Descrição

Operações disponíveis

Pending

A tarefa de upload foi recebida e está aguardando processamento.

Consultar o status, excluir.

Indexing

O documento está sendo analisado, fragmentado e vetorizado.

Consultar o status, excluir.

Completed

A indexação foi concluída e o documento pode ser recuperado.

Recuperar, atualizar metadados, excluir, visualizar fragmentos.

Failed

A indexação falhou.

Visualizar o motivo da falha, excluir, enviar novamente.

Deleting

O documento e seus fragmentos estão sendo excluídos.

Aguardar a conclusão da exclusão.

Documentos com status Pending ou Indexing não podem ser recuperados. Aguarde até que o status mude para Completed antes de recuperar um documento. Quando um documento entra no status Failed, a resposta da operação de consulta retorna o motivo da falha no campo failedDetails.

Importar documentos

Importe documentos para uma base de conhecimento do AgentStorage. O AgentStorage analisa e fragmenta cada documento, gera vetores e cria índices. Fazer upload de um documento novamente com o mesmo ossKey substitui o documento existente.

Você pode importar documentos das seguintes formas:

Método

Quando usar

Opção no console

Método do SDK

Upload de arquivos locais

Os arquivos estão no computador local e o SDK faz o upload deles para o OSS primeiro.

Upload file, Upload folder

upload_documents (Python), uploadDocuments (TypeScript)

Adicionar arquivos do OSS

Os arquivos já estão no OSS.

Import from OSS

add_documents (Python), addDocuments (TypeScript)

Importação em lote de um diretório do OSS

Os arquivos estão em um diretório do OSS, que o sistema verifica recursivamente.

Import from OSS

add_documents (Python), addDocuments (TypeScript)

As credenciais e o cliente necessários dependem do método de importação:

  • Arquivos locais — Forneça um par de AccessKey e a configuração do OSS, incluindo oss_endpoint e oss_bucket_name. No TypeScript, use NodeAgentStorageClient e forneça também ossAccessKeyId e ossAccessKeySecret.

  • Arquivos já no OSS — A autenticação por chave de API é suficiente. Use AgentStorageClient e especifique o ossKey de cada arquivo.Uma solicitação de importação reporta seus resultados por documento:

  • Uma resposta bem-sucedida não significa que todos os documentos foram importados com sucesso. Verifique o campo status de cada documento em documentDetails individualmente. Em uma resposta da API, HTTP 200 com code: SUCCESS confirma apenas que a solicitação foi aceita.

  • **status: "succeed" significa que a tarefa de upload foi recebida, não que a indexação foi concluída.** A operação de importação retorna esse valor, enquanto os status do ciclo de vida do documento são um conjunto separado de valores. Não use succeed ao consultar um documento para verificar a conclusão da indexação.

Console

  • Faça logon no AgentStorage console, abra a base de conhecimento que deseja gerenciar, vá para Document management e clique em Upload document.

  • Selecione um método de importação:

  • Upload file: Selecione um local de upload (um bucket do OSS) e selecione um arquivo local para fazer upload.

  • Upload folder: Faça upload de arquivos locais em lotes por diretório. Você pode escolher se deseja verificar diretórios recursivamente e especificar as extensões de arquivo a incluir ou excluir.

  • Import from OSS: Selecione um bucket de origem e importe arquivos ou diretórios existentes do OSS.

  • Clique em OK para iniciar a importação.Ao usar o painel de upload, observe o seguinte:

  • Etapa de metadados — Se a base de conhecimento tiver um esquema de metadados, o painel de upload exibirá a Etapa 3, Metadata (optional), onde você pode inserir os campos de metadados de um documento. Esta etapa não está disponível para bases de conhecimento sem um esquema de metadados.

  • Limites de upload — O painel de upload determina o tipo de arquivo, o tamanho máximo de arquivo individual e os limites de tamanho do lote.

  • Autorização do OSS — Se um prompt de autorização do OSS aparecer, conclua a autorização antes de continuar.

SDK

Python

Upload local files

Ao usar upload_documents, você deve fornecer tanto oss_endpoint quanto oss_bucket_name ao inicializar AgentStorageClient. Caso contrário, um ValueError será gerado.

from tablestore_agent_storage import AgentStorageClient

# Configure OSS to upload local files. The SDK uploads files to OSS first, then triggers chunking and vectorization.
client = AgentStorageClient(
    access_key_id="<AccessKey ID>",
    access_key_secret="<AccessKey Secret>",
    ots_endpoint="https://<instance>.<region>.ots.aliyuncs.com",
    ots_instance_name="<instance-name>",
    oss_endpoint="https://oss-<region>.aliyuncs.com",
    oss_bucket_name="<bucket-name>",
)

resp = client.upload_documents({
    "knowledgeBaseName": "product_docs_kb",
    "documents": [
        {
            "filePath": "/home/user/docs/product_manual.pdf",
            "metadata": {"author": "John", "category": "Product documentation"}
        },
        {
            "filePath": "/home/user/docs/faq.docx",
            "metadata": {"author": "Jane", "category": "FAQ"}
        }
    ]
})

for detail in resp["data"]["documentDetails"]:
    print(detail["ossKey"], detail["status"])

Add OSS files

Especifique o ossKey de um arquivo que já está no OSS.

from tablestore_agent_storage import AgentStorageClient

client = AgentStorageClient(
    api_key="<your-api-key>",
    ots_endpoint="https://<instance>.<region>.ots.aliyuncs.com",
    ots_instance_name="<instance-name>",
)

resp = client.add_documents({
    "knowledgeBaseName": "product_docs_kb",
    "documents": [
        {
            "ossKey": "oss://example-bucket/docs/product_manual.pdf",
            "metadata": {"author": "John"}
        }
    ]
})

Batch import from an OSS directory

Especifique um caminho de diretório do OSS. O sistema verifica recursivamente todos os arquivos no diretório. Use inclusionFilters e exclusionFilters para filtrar por padrão de nome de arquivo.

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

TypeScript

Upload local files

Para fazer upload de arquivos locais, use NodeAgentStorageClient e forneça a configuração do OSS.

import { NodeAgentStorageClient } from '@tablestore/agent-storage/node';

const client = new NodeAgentStorageClient({
  accessKeyId: '<AccessKey ID>',
  accessKeySecret: '<AccessKey Secret>',
  endpoint: 'https://<instance>.<region>.ots.aliyuncs.com',
  instanceName: '<instance-name>',
  ossEndpoint: 'https://oss-<region>.aliyuncs.com',
  ossBucketName: '<bucket-name>',
  ossAccessKeyId: '<AccessKey ID>',
  ossAccessKeySecret: '<AccessKey Secret>',
});

const resp = await client.uploadDocuments({
  knowledgeBaseName: 'product_docs_kb',
  documents: [
    {
      filePath: '/home/user/docs/product_manual.pdf',
      metadata: { author: 'John', category: 'Product documentation' },
    },
  ],
});

for (const detail of resp.data.documentDetails) {
  console.log(detail.ossKey, detail.status);
}

Add OSS files

Especifique o ossKey de um arquivo que já está no OSS.

import { AgentStorageClient } from '@tablestore/agent-storage';

const client = new AgentStorageClient({
  apiKey: '<your-api-key>',
  endpoint: 'https://<instance>.<region>.ots.aliyuncs.com',
  instanceName: '<instance-name>',
});

const resp = await client.addDocuments({
  knowledgeBaseName: 'product_docs_kb',
  documents: [
    {
      ossKey: 'oss://example-bucket/docs/product_manual.pdf',
      metadata: { author: 'John' },
    },
  ],
});

Batch import from an OSS directory

Especifique um caminho de diretório do OSS e use inclusionFilters e exclusionFilters para filtrar por padrão de nome de arquivo.

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

API

Chame AddDocuments para importar documentos. Para obter a lista completa de campos da solicitação e descrições da resposta, consulte Import documents.

  • Se a base de conhecimento tiver o subespaço habilitado e você omitir o parâmetro subspace, INVALID_PARAMETER será retornado.

Consultar status da indexação

Os documentos são indexados de forma assíncrona após o upload. Consulte o status de indexação de um documento e faça consultas com backoff exponencial até que o status mude para Completed ou Failed.

O tempo de processamento do documento depende do tamanho, tipo e quantidade dos arquivos. Arquivos pequenos geralmente terminam em segundos, enquanto arquivos grandes ou importações em lote podem levar vários minutos.

Nos exemplos a seguir, substitua fc6ed97f-... pelo docId do seu documento. Você pode encontrar o docId no painel Details do documento na página Document management.

Console

Na lista Document management, visualize o status atual de cada documento na coluna Status. Para encontrar documentos rapidamente, use o filtro de status acima da lista: All, Pending, Indexing, Completed, Failed ou Deleting. Na coluna Actions, clique em Details para visualizar o ID do documento, o caminho do OSS, o status e o número de fragmentos.

SDK

Python

import time

from tablestore_agent_storage import AgentStorageClient

client = AgentStorageClient(
    api_key="<your-api-key>",
    ots_endpoint="https://<instance>.<region>.ots.aliyuncs.com",
    ots_instance_name="<instance-name>",
)

def wait_for_document(client, kb_name, doc_id, max_interval=30):
    """Poll document status with exponential backoff and wait for indexing to complete."""
    interval = 3
    while True:
        resp = client.get_document({
            "knowledgeBaseName": kb_name,
            "docId": doc_id
        })
        status = resp["data"][0]["status"]
        if status == "Completed":
            print(f"Indexing complete. Chunk count: {resp['data'][0].get('chunkNum', 'N/A')}")
            return resp
        elif status == "Failed":
            raise Exception(f"Indexing failed: {resp['data'][0].get('failedDetails')}")
        print(f"Current status: {status}. Retrying in {interval}s...")
        time.sleep(interval)
        interval = min(interval * 2, max_interval)

wait_for_document(client, "product_docs_kb", "fc6ed97f-...")

TypeScript

import { AgentStorageClient } from '@tablestore/agent-storage';

const client = new AgentStorageClient({
  apiKey: '<your-api-key>',
  endpoint: 'https://<instance>.<region>.ots.aliyuncs.com',
  instanceName: '<instance-name>',
});

async function waitForDocument(kbName: string, docId: string, maxInterval = 30) {
  let interval = 3;
  while (true) {
    const resp = await client.getDocument({
      knowledgeBaseName: kbName,
      docId,
    });
    const doc = resp.data[0];
    if (doc.status === 'Completed') {
      console.log(`Indexing complete. Chunk count: ${doc.chunkNum ?? 'N/A'}`);
      return resp;
    } else if (doc.status === 'Failed') {
      throw new Error(`Indexing failed: ${doc.failedDetails}`);
    }
    console.log(`Current status: ${doc.status}. Retrying in ${interval}s...`);
    await new Promise((r) => setTimeout(r, interval * 1000));
    interval = Math.min(interval * 2, maxInterval);
  }
}

await waitForDocument('product_docs_kb', 'fc6ed97f-...');

API

Chame GetDocument para consultar o status de indexação de um documento. Para obter descrições completas dos campos, consulte Query documents.

Consultar documento

Consulte os detalhes de um documento especificado, incluindo seu status de processamento, número de fragmentos e metadados. Especifique docId ou ossKey. Nos exemplos a seguir, substitua fc6ed97f-... pelo docId do seu documento.

Console

Na lista Document management, clique em Details na coluna Actions do documento que deseja consultar. O painel mostra o ID do documento, nome, caminho do OSS, status, número de fragmentos, subespaço, ETag, hora de criação e hora de atualização.

SDK

Quando o mesmo ossKey passa por criação, exclusão e criação novamente, get_document pode retornar vários registros, incluindo registros de histórico. Use o campo status para identificar o documento válido e selecione o registro com status Completed.

Python

from tablestore_agent_storage import AgentStorageClient

client = AgentStorageClient(
    api_key="<your-api-key>",
    ots_endpoint="https://<instance>.<region>.ots.aliyuncs.com",
    ots_instance_name="<instance-name>",
)

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

doc = resp["data"][0]
print(f"Status: {doc['status']}, chunk count: {doc.get('chunkNum', 'N/A')}")

TypeScript

import { AgentStorageClient } from '@tablestore/agent-storage';

const client = new AgentStorageClient({
  apiKey: '<your-api-key>',
  endpoint: 'https://<instance>.<region>.ots.aliyuncs.com',
  instanceName: '<instance-name>',
});

const resp = await client.getDocument({
  knowledgeBaseName: 'product_docs_kb',
  docId: 'fc6ed97f-...',
});

const doc = resp.data[0];
console.log(`Status: ${doc.status}, chunk count: ${doc.chunkNum ?? 'N/A'}`);

API

Chame GetDocument para recuperar os detalhes de um documento. Para obter descrições completas dos campos, consulte Query documents.

Listar documentos

Liste os documentos em uma base de conhecimento do AgentStorage por página.

Console

Acesse a página Document management da base de conhecimento. A lista mostra o nome do documento, hora de criação, hora de atualização, número de fragmentos e status. Para encontrar documentos rapidamente, use o filtro de status acima da lista: All, Pending, Indexing, Completed, Failed ou Deleting.

SDK

Python

from tablestore_agent_storage import AgentStorageClient

client = AgentStorageClient(
    api_key="<your-api-key>",
    ots_endpoint="https://<instance>.<region>.ots.aliyuncs.com",
    ots_instance_name="<instance-name>",
)

# Get the first page
resp = client.list_documents({
    "knowledgeBaseName": "product_docs_kb",
    "maxResults": 20
})
for doc in resp["data"]["documentDetails"]:
    print(f"[{doc['status']}] {doc['ossKey']} (chunk count: {doc.get('chunkNum', '-')})")

# Get the next page
next_token = resp["data"].get("nextToken")
if next_token:
    resp = client.list_documents({
        "knowledgeBaseName": "product_docs_kb",
        "maxResults": 20,
        "nextToken": next_token
    })

TypeScript

import { AgentStorageClient } from '@tablestore/agent-storage';

const client = new AgentStorageClient({
  apiKey: '<your-api-key>',
  endpoint: 'https://<instance>.<region>.ots.aliyuncs.com',
  instanceName: '<instance-name>',
});

const resp = await client.listDocuments({
  knowledgeBaseName: 'product_docs_kb',
  maxResults: 20,
});
for (const doc of resp.data.documentDetails) {
  console.log(`[${doc.status}] ${doc.ossKey} (chunk count: ${doc.chunkNum ?? '-'})`);
}

API

Chame ListDocuments para listar documentos. Para obter descrições completas dos campos, consulte List documents.

  • O valor padrão de maxResults é 10, e o máximo é 1000.

  • O parâmetro subspace suporta uma lista de até 10 valores. Exceder o limite retorna um erro.

Atualizar metadados do documento

Atualize os metadados de um documento especificado usando um SDK ou a API. Você pode atualizar metadados apenas para documentos com status Completed. Chamar esta operação para documentos em outros status retorna um erro.

  • Atualizações no modo substituição — Os valores fornecidos substituem completamente os metadados originais. Para atualizar apenas um campo, inclua todos os campos.

  • Limpar metadados — Passar "metadata": null limpa todos os metadados. Omitir o campo metadata mantém os valores originais.

  • Limites de tamanho e campos — O tamanho total dos metadados, incluindo chaves e valores, é limitado a 4 KB. Você pode especificar até 200 campos.

  • Formato de data — Os campos de data dos metadados devem usar um formato suportado, como yyyy-MM-dd HH:mm:ss. Um formato não suportado faz com que o documento entre no status Failed.

SDK

Python

from tablestore_agent_storage import AgentStorageClient

client = AgentStorageClient(
    api_key="<your-api-key>",
    ots_endpoint="https://<instance>.<region>.ots.aliyuncs.com",
    ots_instance_name="<instance-name>",
)

resp = client.update_document({
    "knowledgeBaseName": "product_docs_kb",
    "docId": "fc6ed97f-...",
    "metadata": {"author": "John", "category": "Technical documentation", "version": 2}
})

print(f"Update status: {resp['data']['updateStatus']}")  # UPDATED or NO_OP

TypeScript

import { AgentStorageClient } from '@tablestore/agent-storage';

const client = new AgentStorageClient({
  apiKey: '<your-api-key>',
  endpoint: 'https://<instance>.<region>.ots.aliyuncs.com',
  instanceName: '<instance-name>',
});

const resp = await client.updateDocument({
  knowledgeBaseName: 'product_docs_kb',
  docId: 'fc6ed97f-...',
  metadata: { author: 'John', category: 'Technical documentation', version: 2 },
});

console.log(`Update status: ${resp.data.updateStatus}`); // UPDATED or NO_OP

API

Chame UpdateDocument para atualizar os metadados do documento. Para obter descrições completas dos campos, consulte Update document.

Excluir documentos

Excluir um documento também exclui todos os seus fragmentos. Esta operação não pode ser desfeita.

Console

Na lista Document management, selecione um ou mais documentos e clique em Batch delete, ou clique em Delete na coluna Actions para excluir um único documento. Na caixa de diálogo de confirmação, clique em OK.

SDK

Python

from tablestore_agent_storage import AgentStorageClient

client = AgentStorageClient(
    api_key="<your-api-key>",
    ots_endpoint="https://<instance>.<region>.ots.aliyuncs.com",
    ots_instance_name="<instance-name>",
)

resp = client.delete_documents({
    "knowledgeBaseName": "product_docs_kb",
    "documents": [
        {"docId": "fc6ed97f-..."},
        {"ossKey": "oss://example-bucket/docs/faq.docx"}
    ]
})

# Check each deletion result individually
for detail in resp["data"]["documentDetails"]:
    print(f"{detail['ossKey']}: {detail['status']}")

TypeScript

import { AgentStorageClient } from '@tablestore/agent-storage';

const client = new AgentStorageClient({
  apiKey: '<your-api-key>',
  endpoint: 'https://<instance>.<region>.ots.aliyuncs.com',
  instanceName: '<instance-name>',
});

const resp = await client.deleteDocuments({
  knowledgeBaseName: 'product_docs_kb',
  documents: [
    { docId: 'fc6ed97f-...' },
    { ossKey: 'oss://example-bucket/docs/faq.docx' },
  ],
});

// Check each deletion result individually
for (const detail of resp.data.documentDetails) {
  console.log(`${detail.ossKey}: ${detail.status}`);
}

API

Chame DeleteDocuments para excluir documentos. Para obter descrições completas dos campos, consulte Delete documents.

Referências