Tous les produits
Search
Centre de documentation

:Agent Storage SDK

Dernière mise à jour :Aug 19, 2026

Le SDK Agent Storage de Tablestore offre un accès unifié aux API Memory Store, file memory et Knowledge Base pour les agents d'IA. Il prend en charge Python et TypeScript et simplifie l'authentification des services grâce aux clés API.

Différences par rapport au SDK Tablestore

Le SDK Agent Storage est distinct du SDK Tablestore et se concentre sur le stockage pour agents. Le tableau suivant répertorie les principales différences.

Dimension

SDK Tablestore

SDK Agent Storage

Package

Python : tablestore ; Node.js : tablestore

Python : tablestore-agent-storage ; TypeScript : @tablestore/agent-storage

Classe client

OTSClient / AsyncOTSClient / TableStore.Client

AgentStorageClient

Portée

Toutes les API Tablestore, y compris les API Memory Store

API du service de stockage pour agents pour Memory Store, file memory et Knowledge Base

Authentification

AccessKey (AK/SK)

Clé API ou AccessKey (AK/SK)

Installation et configuration

Prérequis

  • Une instance Tablestore avec son endpoint HTTPS et son nom d'instance

  • Pour l'authentification par clé API : une clé API créée sur l'instance cible. L'utilisateur RAM associé à la clé API doit disposer de l'autorisation ots:CallWithBearerToken. La clé API hérite des stratégies RAM de l'utilisateur.

  • Pour les fonctionnalités Knowledge Base : un compartiment Object Storage Service (OSS) pour les documents sources. Le SDK nécessite des identifiants AccessKey OSS pour télécharger les documents. Spécifiez les paramètres oss_endpoint et oss_bucket lors de l'initialisation du client.

Installation

Installez le package correspondant à votre langage. Les API Item de file memory nécessitent le SDK Python version 1.0.10 ou ultérieure, ou le SDK TypeScript version 0.0.11 ou ultérieure.

Python

pip install tablestore-agent-storage

TypeScript/Node.js

npm install @tablestore/agent-storage

Authentification

Le SDK Agent Storage prend en charge deux méthodes d'authentification.

Méthode

Cas d'utilisation

API prises en charge

Transport

AccessKey (AK/SK)

Accès complet, incluant la gestion des tables et les opérations sur les données

Toutes les API Tablestore

HTTP ou HTTPS

Clé API

Intégration légère pour les applications d'IA sans gestion des identifiants AccessKey

API du service de stockage pour agents

HTTPS uniquement

Pour plus d'informations sur la création et l'autorisation des clés API, consultez la rubrique Gestion des clés API.

Initialiser le client

L'authentification par clé API est recommandée. Les téléchargements vers Knowledge Base et d'autres API Tablestore nécessitent des identifiants AccessKey et une configuration OSS.

Clé API (recommandé)

Initialisez le client avec le paramètre api_key et les informations de l'instance. L'endpoint doit utiliser HTTPS.

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.list_memory_stores({})
for store in resp["stores"]:
    print(store["memoryStoreName"])

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.listMemoryStores({});
for (const store of resp.stores) {
  console.log(store.memoryStoreName);
}

cURL

Transmettez la clé API dans l'en-tête de requête x-ots-apikey.

curl -X POST 'https://<instance>.<region>.ots.aliyuncs.com/ListMemoryStores' \
  -H 'x-ots-instancename: <instance-name>' \
  -H 'x-ots-apikey: <your-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{}'

AccessKey

Utilisez l'authentification AccessKey pour accéder à toutes les API Tablestore ou pour télécharger des documents Knowledge Base vers OSS.

Python

from tablestore_agent_storage import AgentStorageClient

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>",
    # Configure OSS to use Knowledge Base features
    oss_endpoint="https://oss-<region>.aliyuncs.com",
    oss_bucket_name="<bucket-name>",
)

TypeScript

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

const client = new AgentStorageClient({
  endpoint: 'https://<instance>.<region>.ots.aliyuncs.com',
  instanceName: '<instance-name>',
  accessKeyId: process.env.OTS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OTS_ACCESS_KEY_SECRET,
});

Exemples Knowledge Base

Knowledge Base découpe et vectorise automatiquement les documents et prend en charge la récupération hybride pour la réponse aux questions en entreprise et la génération augmentée par récupération (RAG). Les documents sources sont stockés dans OSS, tandis que Tablestore gère l'indexation et la récupération des fragments. Configurez OSS et Tablestore avant utilisation.

Si vous ne spécifiez pas de modèle d'incorporation lors de la création d'une base de connaissances, le SDK utilise Alibaba Cloud Model Studio text-embedding-v4 avec 1 024 dimensions. La récupération hybride, qui combine la recherche vectorielle et la recherche en texte intégral, est activée par défaut.

Python

from tablestore_agent_storage import AgentStorageClient

client = AgentStorageClient(
    access_key_id="<AccessKey ID>",
    access_key_secret="<AccessKey Secret>",
    oss_endpoint="https://oss-<region>.aliyuncs.com",
    oss_bucket_name="<bucket-name>",
    ots_endpoint="https://<instance>.<region>.ots.aliyuncs.com",
    ots_instance_name="<instance-name>",
)

# 1. Create a knowledge base. The default embedding model is Model Studio
#    text-embedding-v4, and the default retrieval method is hybrid retrieval.
client.create_knowledge_base({
    "knowledgeBaseName": "product_kb",
    "description": "Product knowledge base",
})

# 2. Upload local documents. The SDK uploads files to OSS before chunking
#    and vectorization.
client.upload_documents({
    "knowledgeBaseName": "product_kb",
    "documents": [
        {
            "documentId": "doc-guide-001",
            "filePath": "./docs/product-overview.txt",
        },
        {
            "documentId": "doc-guide-002",
            "filePath": "./docs/sdk-intro.txt",
        },
    ],
})

# 3. List documents in the knowledge base
resp = client.list_documents({
    "knowledgeBaseName": "product_kb",
    "maxResults": 10,
})
for doc in resp["data"]["documentDetails"]:
    print(doc.get("documentId"), doc.get("ossKey"), doc.get("status"))

# 4. Retrieve documents
from tablestore_agent_storage.models import RetrieveRequest, RetrievalQuery

req = RetrieveRequest(
    knowledge_base_name="product_kb",
    retrieval_query=RetrievalQuery(text="What is Agent Storage SDK used for?"),
)
result = client.retrieve(req)
for hit in result["data"]["retrievalResults"]:
    print(hit)

# 5. Delete documents
client.delete_documents({
    "knowledgeBaseName": "product_kb",
    "documents": [{"documentId": "doc-guide-001"}],
})

# 6. Delete the knowledge base
client.delete_knowledge_base({"knowledgeBaseName": "product_kb"})

TypeScript

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>',
});

// 1. Create a knowledge base. The default embedding model is Model Studio
//    text-embedding-v4, and the default retrieval method is hybrid retrieval.
await client.createKnowledgeBase({
  knowledgeBaseName: 'product_kb',
  description: 'Product knowledge base',
});

// 2. Upload local documents. The SDK uploads files to OSS before chunking
//    and vectorization. The service generates docId during upload. The
//    TypeScript SDK does not accept a custom documentId.
await client.uploadDocuments({
  knowledgeBaseName: 'product_kb',
  documents: [
    { filePath: './docs/product-overview.txt' },
    { filePath: './docs/sdk-intro.txt' },
  ],
});

// 3. List documents in the knowledge base
const resp = await client.listDocuments({
  knowledgeBaseName: 'product_kb',
  maxResults: 10,
});
for (const doc of resp.data.documentDetails) {
  console.log(doc.docId, doc.ossKey, doc.status);
}

// 4. Retrieve documents
const result = await client.retrieve({
  knowledgeBaseName: 'product_kb',
  retrievalQuery: { text: 'What is Agent Storage SDK used for?' },
});
for (const hit of result.data.retrievalResults) {
  console.log(hit);
}

// 5. Delete documents by the ossKey returned in the previous step
await client.deleteDocuments({
  knowledgeBaseName: 'product_kb',
  documents: [{ ossKey: '<oss-key-from-list>' }],
});

// 6. Delete the knowledge base
await client.deleteKnowledgeBase({ knowledgeBaseName: 'product_kb' });

Le découpage et la vectorisation des documents s'exécutent de manière asynchrone après le téléchargement. Interrogez le champ status avec list_documents (listDocuments en TypeScript) pour vérifier la progression de l'indexation.

Exemples Memory Store

Memory Store conserve les mémoires de conversation multi-tours pour les agents d'IA et prend en charge la récupération sémantique basée sur des vecteurs. Les méthodes du SDK correspondent aux opérations de l'API REST. Les méthodes Python utilisent le format snake_case, les méthodes TypeScript utilisent le format camelCase et les paramètres correspondent à la spécification de l'API.

Python

# 1. Create a memory store
client.create_memory_store({
    "memoryStoreName": "agent_memory",
    "description": "Long-term memory store for agents",
    "extractInstructions": "Focus on the user's dietary preferences and travel habits",
})

# 2. Write memories
client.add_memories({
    "memoryStoreName": "agent_memory",
    "scope": {
        "appId": "app-001",
        "tenantId": "user-001",
        "agentId": "assistant",
        "runId": "session-001",
    },
    "messages": [
        {"role": "user", "content": "I like Americano coffee"},
    ],
    "sync": True,
})

# 3. Search memories
result = client.search_memories({
    "memoryStoreName": "agent_memory",
    "scope": {
        "appId": "app-001",
        "tenantId": "user-001",
        "agentId": "*",
        "runId": "*",
    },
    "query": "What beverages does the user like?",
    "topK": 5,
    "includeEvidence": True,
    "minSimilarity": 0.3,
})
for hit in result["data"]["memories"]:
    print(hit["content"], hit["similarity"])

# 4. List scopes in the memory store
scopes = client.list_memory_store_scopes({
    "memoryStoreName": "agent_memory",
    "scope": {
        "appId": "app-001",
        "tenantId": "*",
        "agentId": "*",
        "runId": "*",
    },
})
for scope in scopes["scopes"]:
    print(scope)

# 5. List memory stores
resp = client.list_memory_stores({})
for store in resp["stores"]:
    print(store["memoryStoreName"])

TypeScript

// 1. Create a memory store
await client.createMemoryStore({
  memoryStoreName: 'agent_memory',
  description: 'Long-term memory store for agents',
});

// 2. Write memories
await client.addMemories({
  memoryStoreName: 'agent_memory',
  scope: {
    appId: 'app-001',
    tenantId: 'user-001',
    agentId: 'assistant',
    runId: 'session-001',
  },
  messages: [{ role: 'user', content: 'I like Americano coffee' }],
  sync: true,
});

// 3. Search memories
const result = await client.searchMemories({
  memoryStoreName: 'agent_memory',
  scope: { appId: 'app-001', tenantId: 'user-001', agentId: '*', runId: '*' },
  query: 'What beverages does the user like?',
  topK: 5,
  includeEvidence: true,
});
for (const hit of result.data.memories) {
  console.log(hit.content, hit.similarity);
}

// 4. List scopes in the memory store
const scopes = await client.listMemoryStoreScopes({
  memoryStoreName: 'agent_memory',
  scope: { appId: 'app-001', tenantId: '*', agentId: '*', runId: '*' },
});
for (const scope of scopes.scopes) {
  console.log(scope);
}

Le SDK fournit également des méthodes pour mettre à jour et supprimer des magasins de mémoire, obtenir et mettre à jour des mémoires individuelles, interroger des tâches asynchrones et consolider des mémoires avec Dream. Pour toutes les opérations et tous les paramètres, consultez la rubrique API de stockage de mémoire.

Exemples file memory

File memory organise le contexte à long terme par chemin de fichier et peut stocker des profils utilisateur, des résumés de conversation et des fichiers de travail d'agent. Le SDK ajoute automatiquement le type memoryfile requis par les API Item. Spécifiez uniquement le magasin de mémoire, l'étendue, le chemin et le contenu.

Opération

Python

TypeScript

Créer un fichier

add_item

addItem

Répertorier les fichiers

list_items

listItems

Lire un fichier ou ses métadonnées

get_item

getItem

Mettre à jour le contenu ou renommer un fichier

update_item

updateItem

Supprimer un fichier

delete_item

deleteItem

Répertorier les versions historiques

list_item_versions

listItemVersions

Lire une version historique

get_item_version

getItemVersion

Caviarder une version historique

redact_item_version

redactItemVersion

Toutes les opérations sur les fichiers nécessitent une étendue complète à quatre niveaux avec appId, tenantId, agentId et runId. Le caractère générique * n'est pas pris en charge.

Avertissement

Le caviardage des versions historiques est irréversible. Il supprime le chemin, le contenu, le condensé et la taille uniquement de la version historique spécifiée et ne modifie pas le fichier actuel.

Les exemples suivants supposent que le client est initialisé.

Python

scope = {
    "appId": "app-001",
    "tenantId": "user-001",
    "agentId": "assistant",
    "runId": "session-001",
}

client.create_memory_store({
    "memoryStoreName": "agent_files",
    "storageMode": "filemem",
})

created = client.add_item({
    "memoryStoreName": "agent_files",
    "scope": scope,
    "path": "/profile/preferences.md",
    "content": "# User preferences\n\n- Likes Americano coffee\n",
})

page = client.list_items({
    "memoryStoreName": "agent_files",
    "scope": scope,
    "pathPrefix": "/profile/",
})

current = client.get_item({
    "memoryStoreName": "agent_files",
    "scope": scope,
    "path": "/profile/preferences.md",
    "includeContent": False,
})

updated = client.update_item({
    "memoryStoreName": "agent_files",
    "scope": scope,
    "path": "/profile/preferences.md",
    "content": "# User preferences\n\n- Likes latte\n",
    "expectedSha256": current["contentSha256"],
})

renamed = client.update_item({
    "memoryStoreName": "agent_files",
    "scope": scope,
    "path": "/profile/preferences.md",
    "newPath": "/profile/user-preferences.md",
    "expectedSha256": updated["contentSha256"],
})

versions = client.list_item_versions({
    "memoryStoreName": "agent_files",
    "scope": scope,
    "itemId": created["itemId"],
    "limit": 20,
})
version = versions["versions"][0]

snapshot = client.get_item_version({
    "memoryStoreName": "agent_files",
    "scope": scope,
    "itemId": version["itemId"],
    "versionId": version["versionId"],
    "versionSeq": version["versionSeq"],
})

client.redact_item_version({
    "memoryStoreName": "agent_files",
    "scope": scope,
    "itemId": version["itemId"],
    "versionId": version["versionId"],
    "versionSeq": version["versionSeq"],
    "sessionId": "privacy-job-001",
})

client.delete_item({
    "memoryStoreName": "agent_files",
    "scope": scope,
    "path": "/profile/user-preferences.md",
    "expectedSha256": renamed["contentSha256"],
})

print(page["items"], snapshot.get("content"))

TypeScript

const scope = {
  appId: 'app-001',
  tenantId: 'user-001',
  agentId: 'assistant',
  runId: 'session-001',
};

await client.createMemoryStore({
  memoryStoreName: 'agent_files',
  storageMode: 'filemem',
});

const created = await client.addItem({
  memoryStoreName: 'agent_files',
  scope,
  path: '/profile/preferences.md',
  content: '# User preferences\n\n- Likes Americano coffee\n',
});

const page = await client.listItems({
  memoryStoreName: 'agent_files',
  scope,
  pathPrefix: '/profile/',
});

const current = await client.getItem({
  memoryStoreName: 'agent_files',
  scope,
  path: '/profile/preferences.md',
  includeContent: false,
});

const updated = await client.updateItem({
  memoryStoreName: 'agent_files',
  scope,
  path: '/profile/preferences.md',
  content: '# User preferences\n\n- Likes latte\n',
  expectedSha256: current.contentSha256,
});

const renamed = await client.updateItem({
  memoryStoreName: 'agent_files',
  scope,
  path: '/profile/preferences.md',
  newPath: '/profile/user-preferences.md',
  expectedSha256: updated.contentSha256,
});

const versions = await client.listItemVersions({
  memoryStoreName: 'agent_files',
  scope,
  itemId: created.itemId,
  limit: 20,
});
const version = versions.versions[0];

const snapshot = await client.getItemVersion({
  memoryStoreName: 'agent_files',
  scope,
  itemId: version.itemId,
  versionId: version.versionId,
  versionSeq: version.versionSeq,
});

await client.redactItemVersion({
  memoryStoreName: 'agent_files',
  scope,
  itemId: version.itemId,
  versionId: version.versionId,
  versionSeq: version.versionSeq,
  sessionId: 'privacy-job-001',
});

await client.deleteItem({
  memoryStoreName: 'agent_files',
  scope,
  path: '/profile/user-preferences.md',
  expectedSha256: renamed.contentSha256,
});

console.log(page.items, snapshot.content);

expectedSha256 est un paramètre optionnel de contrôle de concurrence. Si plusieurs appelants peuvent modifier le même chemin, transmettez le dernier contentSha256. Si le condensé ne correspond pas, lisez le dernier fichier avant de décider de réessayer.

Exemples de vue de fichier

Après avoir créé un magasin de mémoire en mode file+ots, utilisez les API de mémoire structurée pour écrire, rechercher et mettre à jour des mémoires. Les API Item fournissent un accès en lecture aux vues de fichiers générées par le service.

client.create_memory_store({
    "memoryStoreName": "agent_memory",
    "storageMode": "file+ots",
})

Répertoriez les fichiers avec une étendue complète et lisez le contenu du fichier par chemin.

page = client.list_items({
    "memoryStoreName": "agent_memory",
    "scope": scope,
})

for entry in page["items"]:
    item = client.get_item({
        "memoryStoreName": "agent_memory",
        "scope": scope,
        "path": entry["path"],
    })
    print(item["path"], item["content"])
Important

Si list_items renvoie readOnly: true, la vue de fichier est en lecture seule. Maintenez les mémoires sources avec les API de mémoire structurée telles que add_memories, update_memory et delete_memory. Les méthodes d'écriture contre la vue de fichier renvoient READ_ONLY_STORE.