Gérez les documents d'une base de connaissances : importation, interrogation, liste, mise à jour et suppression.
Prérequis
Vous avez créé une instance AgentStorage, obtenu son endpoint HTTPS et son nom, et créé une base de connaissances. Consultez la rubrique Gestion des bases de connaissances.
Pour télécharger des documents locaux, votre compte doit disposer d'un bucket OSS dans la même région que l'instance et l'autorisation OSS doit être configurée. Lors de l'initialisation du SDK, fournissez la configuration OSS supplémentaire (AccessKey et endpoint/bucket OSS).
Les métadonnées du document doivent correspondre au schéma de métadonnées défini pour la base de connaissances. Sinon, le document est marqué comme
failed.Si la fonctionnalité de sous-espace est activée pour la base de connaissances, spécifiez le paramètre
subspacepour toutes les opérations sur les documents et les requêtes de récupération.
Formats de documents pris en charge
|
Type |
Extension |
|
|
|
|
Word |
|
|
Excel |
|
|
PowerPoint |
|
|
Texte brut |
|
|
Markdown |
|
|
Texte structuré |
|
|
Image |
|
L'importation d'images et la récupération multimodale nécessitent d'activer la fonctionnalité multimodale lors de la création de la base de connaissances. Cette option est irréversible. Les bases de connaissances sans activation multimodale ne peuvent ni vectoriser ni récupérer les images téléchargées.
Une seule requête accepte jusqu'à 10 documents, avec une taille de fichier maximale de 50 Mo. Pour demander des limites supérieures, soumettez un ticket ou rejoignez le groupe DingTalk de support technique Tablestore 36165029092 et contactez le support technique.
Cycle de vie des statuts des documents
Les documents passent par les statuts suivants, du téléchargement à la disponibilité pour la recherche :
|
Statut |
Description |
Opérations disponibles |
|
|
Tâche de téléchargement reçue, en attente de traitement |
Interroger le statut, supprimer |
|
|
Analyse, découpage et vectorisation |
Interroger le statut, supprimer |
|
|
Indexation terminée, document consultable |
Rechercher, mettre à jour les métadonnées, supprimer, afficher les fragments |
|
|
Échec de l'indexation |
Afficher la raison de l'échec, supprimer, retélécharger |
|
|
Suppression du document et de ses fragments en cours |
Attendez la fin de la suppression |
Vous ne pouvez pas récupérer les documents dont le statut estPendingouIndexing. Attendez que le statut passe àCompletedavant de pouvoir les rechercher.
Importer des documents
Importez des documents dans une base de connaissances. Le système analyse, découpe, vectorise (Embedding) et construit l'index automatiquement. Un nouveau téléchargement avec la même valeur ossKey écrase le document original.
Le SDK propose trois méthodes d'importation :
|
Méthode |
Méthode SDK |
Description |
|
Télécharger des fichiers locaux |
|
Spécifiez les chemins d'accès aux fichiers locaux. Le SDK les télécharge automatiquement vers OSS, puis les ajoute à la base de connaissances. |
|
Ajouter des fichiers OSS |
|
Spécifiez les chemins d'accès aux fichiers OSS existants. |
|
Importation groupée depuis un répertoire OSS |
|
Spécifiez un chemin d'accès à un répertoire OSS. Le système analyse récursivement tous les fichiers du répertoire. |
Pour obtenir la liste complète des champs de requête et les détails de la réponse, consultez la rubrique API d'importation de documents.
Console
Ouvrez la carte de la base de connaissances cible, accédez à Document management et cliquez sur Upload document.
-
Sélectionnez une méthode d'importation :
Upload file : sélectionnez l'emplacement de téléchargement (bucket OSS), puis choisissez les fichiers locaux à télécharger.
Upload folder : téléchargez par lot via un répertoire. Vous pouvez configurer la récursivité et définir les extensions de fichier à inclure ou à exclure.
Import from OSS : sélectionnez le bucket source de données, puis importez des fichiers ou des répertoires existants depuis OSS.
Cliquez sur OK pour démarrer l'importation.
Si la base de connaissances dispose d'un schéma de métadonnées défini, le panneau de téléchargement affiche l'étape 3 « Metadata (optional) », où vous pouvez renseigner les champs correspondants pour le document. Les bases de connaissances sans schéma de métadonnées n'affichent pas cette étape.
Le type de fichier, la taille unitaire et la quantité par lot sont soumis aux limites indiquées dans le panneau de téléchargement. Après le téléchargement, les documents doivent passer par les phases d'analyse et de découpage. Ils ne seront consultables qu'une fois leur statut passé à Completed . Si une invite d'autorisation OSS apparaît, complétez l'autorisation avant de poursuivre.
SDK
Python
Lors de l'utilisation de upload_documents, l'initialisation de AgentStorageClient nécessite les paramètres oss_endpoint et oss_bucket_name. À défaut, une erreur ValueError est levée.
from tablestore_agent_storage import AgentStorageClient
# To upload local files, configure OSS (the SDK first uploads files to OSS, 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"])
Ajouter des fichiers OSS
Lorsque les fichiers se trouvent déjà sur OSS, spécifiez directement la clé ossKey. L'authentification par clé API suffit.
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"}
}
]
})
Importation groupée depuis un répertoire OSS
Spécifiez un chemin d'accès à un répertoire OSS. Le système analyse récursivement tous les fichiers du répertoire. Utilisez les filtres inclusionFilters et exclusionFilters pour filtrer selon des motifs de noms de fichiers.
resp = client.add_documents({
"knowledgeBaseName": "product_docs_kb",
"documents": [
{
"ossKey": "oss://example-bucket/docs/",
"inclusionFilters": ["*.pdf", "*.docx"],
"exclusionFilters": ["*draft*"]
}
]
})
TypeScript
Pour télécharger des fichiers locaux en TypeScript, utilisez NodeAgentStorageClient et fournissez la configuration 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);
}
Ajouter des fichiers 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' },
},
],
});
Importation groupée depuis un répertoire OSS
const resp = await client.addDocuments({
knowledgeBaseName: 'product_docs_kb',
documents: [
{
ossKey: 'oss://example-bucket/docs/',
inclusionFilters: ['*.pdf', '*.docx'],
exclusionFilters: ['*draft*'],
},
],
});
API
Appelez l'opération AddDocuments pour importer des documents. Pour obtenir la liste complète des champs de requête et les détails de la réponse, consultez la rubrique API d'importation de documents.
Un code HTTP 200 avec la valeur SUCCESS ne signifie pas que tous les documents ont été traités avec succès. Vérifiez individuellement le champ
statusde chaque document figurant dansdocumentDetails.La valeur
status: "succeed"indique que la tâche de téléchargement a été reçue, et non que l'indexation est terminée. Attendez que le statut du document passe àCompletedavant de pouvoir le rechercher.Si la fonctionnalité de sous-espace est activée pour la base de connaissances, transmettez le paramètre
subspace. Sinon, l'erreurINVALID_PARAMETERest renvoyée.Les champs de date dans les métadonnées doivent utiliser un format pris en charge (par exemple,
yyyy-MM-dd HH:mm:ss). Les formats non pris en charge entraînent le marquage du document commefailed.
Interroger le statut d'indexation
Les documents subissent un traitement asynchrone après le téléchargement avant de devenir consultables. Pour confirmer la fin de l'indexation, il est recommandé d'utiliser un mécanisme d'interrogation avec backoff exponentiel.
Console
Dans la liste Document management, consultez le statut actuel de chaque document dans la colonne Status. Vous pouvez également utiliser le filtre de statut situé au-dessus de la liste (All / Pending / Indexing / Completed / Failed / Deleting) pour localiser rapidement les documents. Cliquez sur Details dans la colonne Actions pour afficher les informations complètes, notamment l'ID du document, le chemin OSS, le statut, le nombre de fragments, etc. Un statut Completed signifie que le document est consultable.
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, waiting 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-...")
La durée de traitement des documents dépend de la taille, du type et du nombre de fichiers. Les petits fichiers sont généralement traités en quelques secondes, tandis que les fichiers volumineux ou les importations par lot peuvent prendre plusieurs minutes.
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
Appelez l'opération GetDocument pour interroger le statut d'un document. Pour obtenir les détails complets des champs, consultez la rubrique API de récupération de document.
Interroger un document
Interrogez les informations détaillées d'un document spécifié, y compris son statut de traitement, le nombre de fragments et ses métadonnées. Fournissez soit l'identifiant docId, soit la clé ossKey.
Console
Dans la liste Document management, cliquez sur Details dans la colonne Actions du document cible pour afficher l'ID du document, son nom, le chemin OSS, le statut, le nombre de fragments, le sous-espace, l'ETag, ainsi que les dates de création et de mise à jour.
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.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
Appelez l'opération GetDocument pour interroger les détails d'un document. Pour obtenir les détails complets des champs, consultez la rubrique API de récupération de document.
Lorsque la même cléossKeyfait l'objet d'une création, puis d'une suppression, suivie d'une nouvelle création, l'appel àget_documentpeut renvoyer plusieurs enregistrements (y compris historiques). Utilisez le champstatuspour identifier le document valide et sélectionnez l'enregistrement dont le statut estCompleted.
Lister les documents
Parcourez la liste paginée des documents d'une base de connaissances.
Console
Accédez à la page Document management de la base de connaissances. La liste affiche le nom du document, les dates de création et de mise à jour, le nombre de fragments et le statut. Vous pouvez utiliser le filtre de statut situé au-dessus de la liste (All / Pending / Indexing / Completed / Failed / Deleting) pour localiser rapidement les documents.
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']} (chunks: {doc.get('chunkNum', '-')})")
# Paginate
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} (chunks: ${doc.chunkNum ?? '-'})`);
}
API
Appelez l'opération ListDocuments pour lister les documents. Pour obtenir les détails complets des champs, consultez la rubrique API de liste des documents.
La valeur par défaut de
maxResultsest 10, avec un maximum de 1 000.Le paramètre
subspaceaccepte une liste multivaluée pouvant contenir jusqu'à 10 entrées. Le dépassement de cette limite renvoie une erreur. Ce paramètre est obligatoire lorsque la fonctionnalité de sous-espace est activée.
Mettre à jour les métadonnées d'un document
Mettez à jour les métadonnées d'un document spécifié. Seuls les documents dont le statut est Completed peuvent voir leurs métadonnées mises à jour. L'appel de cette opération sur des documents ayant un autre statut renvoie une erreur.
Console
La console ne permet pas de modifier les métadonnées des documents. Utilisez le SDK ou l'API pour effectuer la mise à jour.
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
Appelez l'opération UpdateDocument pour mettre à jour les métadonnées d'un document. Pour obtenir les détails complets des champs, consultez la rubrique API de mise à jour de document.
Les métadonnées utilisent un mode de mise à jour par remplacement. Les valeurs transmises remplacent intégralement les métadonnées existantes. Si vous souhaitez mettre à jour un seul champ, vous devez inclure tous les champs.
Transmettre la valeur
"metadata": nullefface toutes les métadonnées. Omettre le champmetadataconserve les valeurs originales.La taille totale des métadonnées (clé + valeur) est limitée à 4 Ko, avec un maximum de 200 champs.
Supprimer des documents
Important : La suppression d'un document entraîne également la suppression de toutes ses données de fragments. Cette opération est irréversible.
Console
Dans la liste Document management, sélectionnez un ou plusieurs documents et cliquez sur Batch delete, ou cliquez sur Delete dans la colonne Actions d'une ligne unique. Une boîte de dialogue de confirmation s'affiche : « Are you sure you want to delete the document? This action cannot be undone. » Cliquez sur OK pour confirmer la suppression.
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
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
for (const detail of resp.data.documentDetails) {
console.log(`${detail.ossKey}: ${detail.status}`);
}
API
Appelez l'opération DeleteDocuments pour supprimer des documents. Pour obtenir les détails complets des champs, consultez la rubrique API de suppression de documents.
Comme pour l'opération AddDocuments, vérifiez individuellement les résultats de suppression en examinant le champ
statusde chaque document figurant dansdocumentDetails.
Rubriques connexes
Pour afficher et ajuster les fragments de documents, consultez la rubrique Gestion des fragments de connaissances
Pour la création et la configuration des bases de connaissances, consultez la rubrique Gestion des bases de connaissances
Pour l'installation et l'authentification du SDK, consultez la rubrique SDK Agent Storage