Tous les produits
Search
Centre de documentation

Tablestore:Search Memories

Dernière mise à jour :Oct 15, 2026

Utilisez l'interface SearchMemories pour récupérer des mémoires structurées et des fichiers de mémoire générés par le service en fonction d'un texte de requête.

Prérequis

  • Vous avez créé une instance AgentStorage dont le statut est normal, et vous avez obtenu le endpoint ainsi que le nom de l'instance.

  • Vous avez créé une API Key.

  • Règles de portée : le champ appId est obligatoire et ne peut pas être * ; les autres champs prennent par défaut la valeur __default__ s'ils sont omis, et ne correspondent à toutes les valeurs que si * est explicitement transmis. Les magasins de mémoire qui incluent une sortie file ne prennent pas encore en charge la recherche de portée avec des caractères génériques ; utilisez des portées exactes et, si nécessaire, combinez-les avec filter pour affiner davantage la plage.

Paramètres de la requête

Champ

Type

Obligatoire

Description

memoryStoreName

string

Oui

Nom du magasin de mémoire cible.

query

string

Oui

Texte de la requête, limité par défaut à 8 192 caractères Unicode.

scope

object

Oui

Portée de base de la requête. Le champ appId est obligatoire et ne peut pas être * ; les autres champs prennent par défaut la valeur __default__ s'ils sont omis, et ne correspondent à toutes les valeurs que si * est explicitement transmis.

filter

object

Non

Filtre de portée combiné à scope selon une logique ET ; la recherche finale couvre uniquement les portées de conversation correspondantes. Pour la structure, consultez les Objets communs.

contextScope

object

Non

Portée complète exacte de la conversation actuelle, utilisée comme signal de classement souple ; elle doit se situer dans la plage scope et satisfaire le filter.

topK

int

Non

Nombre maximal de résultats renvoyés par catégorie, 10 par défaut, avec une limite supérieure de 50.

enableRerank

boolean

Non

Indique s'il faut activer le reclassement (Rerank) pour les mémoires structurées, true par défaut.

includeEvidence

boolean

Non

Indique s'il faut inclure les preuves de messages à court terme correspondantes pour les mémoires structurées, false par défaut.

minSimilarity

float

Non

Champ de compatibilité, plage 0~1, filtre le score. Les nouvelles requêtes doivent utiliser thresholds ; les deux ne peuvent pas être utilisés simultanément.

thresholds

object

Non

Seuils de résultat explicites. Lorsque les seuils internes sont tous deux définis, une logique ET s'applique.

thresholds.minSimilarity

float

Non

Plage 0~1, filtre la similarity.

thresholds.minScore

float

Non

Plage 0~1, filtre le score.

metadata

object

Non

Conditions de correspondance exacte pour les métadonnées des mémoires structurées. Au maximum 16 clés, chaque clé pouvant contenir jusqu'à 64 caractères Unicode et chaque valeur jusqu'à 1 024 caractères Unicode ; les clés et les valeurs sont des chaînes de caractères, et plusieurs paires clé-valeur sont combinées selon une logique ET.

Les champs scope et filter peuvent résoudre au maximum 1 000 portées de conversation uniques ; si cette limite est dépassée, l'erreur 400 INVALID_PARAMETER est renvoyée. Lorsque la requête de portée est temporairement indisponible, l'erreur 503 SERVICE_UNAVAILABLE est renvoyée. Les magasins de mémoire qui incluent une sortie file ne prennent pas encore en charge la recherche de portée avec des caractères génériques ; utilisez des portées exactes et, si nécessaire, combinez-les avec filter pour affiner davantage la plage.

Le champ metadata effectue une correspondance exacte sur la chaîne complète ; des caractères tels que *, ?, les virgules et les signes égal sont traités comme des caractères ordinaires, ce qui le rend adapté à la récupération de valeurs longues telles que les UUID et les ID de trace. Si le nombre de clés ou les limites de longueur clé-valeur sont dépassés, l'erreur 400 INVALID_PARAMETER est renvoyée. Pour la définition générale, consultez les Métadonnées.

Le paramètre topK s'applique séparément aux champs results et fileResults. En raison du filtrage par pertinence, de la déduplication ou d'un manque de données visibles, le nombre réel de résultats peut être inférieur à topK ; les applications ne doivent pas compter sur un nombre fixe d'éléments renvoyés.

Exemple de requête

Lors de l'utilisation de l'authentification par API Key, transmettez le nom de l'instance et la clé API via les en-têtes de requête x-ots-instancename et x-ots-apikey.

curl -X POST https://<endpoint>/SearchMemories \
  -H "x-ots-instancename: <instance-name>" \
  -H "x-ots-apikey: <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
  "memoryStoreName": "agent_memory",
  "scope": {
    "appId": "app-001",
    "tenantId": "user-001",
    "agentId": "*",
    "runId": "*"
  },
  "filter": {"op": "eq", "field": "text", "value": "*sess*"},
  "contextScope": {
    "appId": "app-001",
    "tenantId": "user-001",
    "agentId": "assistant",
    "runId": "session-001"
  },
  "query": "用户喜欢什么饮品",
  "topK": 5,
  "enableRerank": true,
  "includeEvidence": true,
  "thresholds": {
    "minSimilarity": 0.3,
    "minScore": 0.2
  },
  "metadata": {
    "source": "chat"
  }
}'

Réponse

Champ

Description

results

Liste des résultats de mémoire structurée ; [] s'il n'y a pas de sortie structured.

results[].unit

Unité de mémoire à long terme ; consultez le tableau ci-dessous pour les définitions des champs.

results[].score

Score de pertinence normalisé (0~1), filtré par thresholds.minScore ; le champ de compatibilité minSimilarity filtre également ce champ.

results[].similarity

Similarité cosinus normalisée entre la requête et la mémoire (0~1), filtrée par thresholds.minSimilarity.

results[].rankingScore

Score de classement final qui peut être renvoyé lorsque le classement souple contextScope est utilisé.

results[].rankingSignals

Explication du classement renvoyée conjointement avec rankingScore.

results[].source

Source de la correspondance, par exemple vector, vector+text.

fileResults

Liste des résultats de fichier de mémoire ; [] s'il n'y a pas de sortie file.

evidence

Preuve de message à court terme renvoyée lorsque includeEvidence=true ; [] si aucune preuve n'est disponible.

scope

Portée utilisée pour la requête.

memoryStoreName

Nom du magasin de mémoire.

Les champs results et fileResults sont renvoyés pour tous les magasins de mémoire, afin que les clients puissent utiliser la même structure de réponse. Les magasins de mémoire à double sortie renvoient au maximum topK résultats structurés et topK résultats de fichiers, respectivement.

Les éléments fileResults comportent les champs suivants.

Champ

Description

type

Toujours défini sur memoryfile.

itemId

ID du fichier de mémoire.

path

Chemin du fichier de mémoire.

summary

Résumé du fichier, qui est également le texte participant à la récupération.

versionId

ID de la version de fichier correspondante.

versionSeq

Numéro de séquence de la version de fichier correspondante.

score

Score de pertinence normalisé (0~1). Dans la recherche de fichiers actuelle, il est identique à similarity.

similarity

Similarité cosinus normalisée entre le résumé du fichier et la requête (0~1).

Exemple de réponse pour un magasin de mémoire à double sortie :

Par défaut, les results sont triés par score dans l'ordre décroissant. Les résultats ne sont retriés par rankingScore dans l'ordre décroissant que si la réponse inclut rankingScore ; le classement souple de session n'écrase pas le score.

Le champ results[].unit contient les champs internes suivants. Les champs d'unité de mémoire renvoyés par ListMemories et GetMemory sont cohérents avec ceux-ci. Les vecteurs d'embedding ne sont pas renvoyés dans la réponse.

Champ

Description

id

ID de l'unité de mémoire à long terme.

conversation_key

Clé de conversation associée.

scope

Portée à laquelle appartient la mémoire ; l'objet contient quatre champs : appId, tenantId, agentId et runId.

memcell_id

ID du fragment de mémoire.

unit_type

Type d'unité de mémoire, par exemple atomic_fact, entity_fact, temporal_anchor.

title

Nom de la mémoire, jusqu'à 64 caractères ; pour les données héritées ou lorsque le champ est vide, les clients peuvent se rabattre sur l'affichage du text.

text

Texte de la mémoire.

search_text

Texte utilisé pour la récupération.

keywords

Liste de mots-clés, jusqu'à 8 mots-clés, chacun pouvant contenir jusqu'à 32 caractères.

source_turn_ids

Liste des ID de messages source.

type_label

Libellé de type.

date_bucket

Intervalle de dates.

metadata

Objet de métadonnées (paires clé-valeur fournies lors de l'écriture).

metadata_json

Métadonnées sous forme de chaîne JSON.

metadata_flat

Chaîne de métadonnées aplatie, utilisée pour le filtrage.

deleted

Indique si l'élément a été supprimé.

created_at

Date de création.

effective_at

Date d'effet du fait, de l'événement ou du plan décrit ; elle peut être antérieure ou postérieure à la date d'écriture de la mémoire.

updated_at

Date de la dernière mise à jour côté serveur de l'unité de mémoire.

time_source

Source temporelle, par exemple explicit_event, source_message, legacy_created_at, manual.

time_precision

Précision originale de effective_at : second, day, month, year ou unknown.

salience

Score de saillance.

version

Numéro de version.

speaker

Locuteur impliqué dans la mémoire (renvoyé lorsque le champ n'est pas vide).

topic

Libellé de sujet (renvoyé lorsque le champ n'est pas vide).

entities

Liste des entités associées (renvoyée lorsque le champ n'est pas vide).

time_anchor

Informations d'ancrage temporel (renvoyées lorsque le champ n'est pas vide).

source_turn_refs

Liste des références de messages source ; chaque élément contient messageId et timestampMs (renvoyé lorsque le champ n'est pas vide).

superseded_by / supersedes_id

Informations sur la chaîne de remplacement lorsque la mémoire est fusionnée ou mise à jour (renvoyées lorsque le champ n'est pas vide).

dream_id / dream_action_id / dream_reason / dream_source_message_ids / dream_source_memory_ids

Champs de provenance portés par les mémoires produites ou réécrites par la consolidation de mémoire (Dream) (renvoyés lorsque le champ n'est pas vide).

Lorsque contextScope est fourni, le service peut prioriser les mémoires de la conversation actuelle parmi les candidats ayant une pertinence sémantique similaire. Ce champ affecte uniquement le classement et n'étend pas la plage de données spécifiée par scope et filter, ni ne permet de contourner les thresholds ou les seuils de compatibilité.

{
    "memoryStoreName": "agent_memory",
    "results": [
        {
            "unit": {
                "id": "1b88d0d65a5b6c0d9142e9b7c7347048",
                "conversation_key": "app-001/user-001/assistant/session-001",
                "scope": {
                    "appId": "app-001",
                    "tenantId": "user-001",
                    "agentId": "assistant",
                    "runId": "session-001"
                },
                "memcell_id": "87e8805d6df9866dce823d135cfd6dff",
                "unit_type": "entity_fact",
                "text": "[2026-08-25T05:52:19Z] 我写脚本只用 Python。",
                "search_text": "用户编程语言偏好\n我写脚本只用 Python。\nkeywords: Python, 脚本, 编程语言, 偏好\nPython 脚本语言 技术偏好\nuser\n记住:我的内部工号是 FALCON-9931,常驻杭州,写脚本只用 Python。\ntime: 2026-08-25T05:52:19Z",
                "keywords": [
                    "Python",
                    "脚本",
                    "编程语言",
                    "偏好"
                ],
                "source_turn_ids": [
                    "aa5f2e1d34b8ced5b044239f0fc75bee"
                ],
                "source_turn_refs": [
                    {
                        "messageId": "aa5f2e1d34b8ced5b044239f0fc75bee",
                        "timestampMs": 1787637139185
                    }
                ],
                "type_label": "profile_fact",
                "date_bucket": "2026-08",
                "metadata": {
                    "content_hash": "4ec0592b5550159a3f77b9dc62bca64e",
                    "session_date": "5:52 AM on 25 August, 2026",
                    "source_quote": "写脚本只用 Python"
                },
                "metadata_json": "{\"content_hash\":\"4ec0592b5550159a3f77b9dc62bca64e\",\"session_date\":\"5:52 AM on 25 August, 2026\",\"source_quote\":\"写脚本只用 Python\"}",
                "metadata_flat": "content_hash=4ec0592b5550159a3f77b9dc62bca64e,session_date=5:52 AM on 25 August, 2026,source_quote=写脚本只用 Python",
                "deleted": false,
                "created_at": "2026-08-25T05:52:19.185Z",
                "salience": 0.8,
                "version": 1,
                "title": "用户编程语言偏好",
                "effective_at": "2026-08-25T05:52:19Z",
                "updated_at": "2026-08-25T05:52:30.509Z",
                "time_source": "source_message",
                "time_precision": "second"
            },
            "score": 0.3358759430317645,
            "similarity": 0.2652787210590392,
            "source": "vector"
        },
        {
            "unit": {
                "id": "546b00a31ddd5e76e309e2da5cb0030e",
                "conversation_key": "app-001/user-001/assistant/session-001",
                "scope": {
                    "appId": "app-001",
                    "tenantId": "user-001",
                    "agentId": "assistant",
                    "runId": "session-001"
                },
                "memcell_id": "87e8805d6df9866dce823d135cfd6dff",
                "unit_type": "entity_fact",
                "text": "[2026-08-25T05:52:19Z] 我常驻杭州。",
                "search_text": "用户常驻地\n我常驻杭州。\nkeywords: 杭州, 常驻, 地理位置\n杭州 常驻地 地理位置\nuser\n记住:我的内部工号是 FALCON-9931,常驻杭州,写脚本只用 Python。\ntime: 2026-08-25T05:52:19Z",
                "keywords": [
                    "杭州",
                    "常驻",
                    "地理位置"
                ],
                "source_turn_ids": [
                    "aa5f2e1d34b8ced5b044239f0fc75bee"
                ],
                "source_turn_refs": [
                    {
                        "messageId": "aa5f2e1d34b8ced5b044239f0fc75bee",
                        "timestampMs": 1787637139185
                    }
                ],
                "type_label": "profile_fact",
                "date_bucket": "2026-08",
                "metadata": {
                    "content_hash": "9f9821b441975f392313a2d7aec6ed6e",
                    "session_date": "5:52 AM on 25 August, 2026",
                    "source_quote": "常驻杭州"
                },
                "metadata_json": "{\"content_hash\":\"9f9821b441975f392313a2d7aec6ed6e\",\"session_date\":\"5:52 AM on 25 August, 2026\",\"source_quote\":\"常驻杭州\"}",
                "metadata_flat": "content_hash=9f9821b441975f392313a2d7aec6ed6e,session_date=5:52 AM on 25 August, 2026,source_quote=常驻杭州",
                "deleted": false,
                "created_at": "2026-08-25T05:52:19.185Z",
                "salience": 0.8,
                "version": 1,
                "title": "用户常驻地",
                "effective_at": "2026-08-25T05:52:19Z",
                "updated_at": "2026-08-25T05:52:30.509Z",
                "time_source": "source_message",
                "time_precision": "second"
            },
            "score": 0.32277120656532554,
            "similarity": 0.25208147048454044,
            "source": "vector"
        },
        {
            "unit": {
                "id": "4f6ddad33fad6f52d475c69708b44dd1",
                "conversation_key": "app-001/user-001/assistant/session-001",
                "scope": {
                    "appId": "app-001",
                    "tenantId": "user-001",
                    "agentId": "assistant",
                    "runId": "session-001"
                },
                "memcell_id": "87e8805d6df9866dce823d135cfd6dff",
                "unit_type": "entity_fact",
                "text": "[2026-08-25T05:52:19Z] 我的内部工号是 FALCON-9931。",
                "search_text": "用户内部工号\n我的内部工号是 FALCON-9931。\nkeywords: 工号, FALCON-9931, 内部标识\nFALCON-9931 工号 身份标识\nuser\n记住:我的内部工号是 FALCON-9931,常驻杭州,写脚本只用 Python。\ntime: 2026-08-25T05:52:19Z",
                "keywords": [
                    "工号",
                    "FALCON-9931",
                    "内部标识"
                ],
                "source_turn_ids": [
                    "aa5f2e1d34b8ced5b044239f0fc75bee"
                ],
                "source_turn_refs": [
                    {
                        "messageId": "aa5f2e1d34b8ced5b044239f0fc75bee",
                        "timestampMs": 1787637139185
                    }
                ],
                "type_label": "profile_fact",
                "date_bucket": "2026-08",
                "metadata": {
                    "content_hash": "d0b62aedd9294009f14ed6ab951ebfed",
                    "session_date": "5:52 AM on 25 August, 2026",
                    "source_quote": "我的内部工号是 FALCON-9931"
                },
                "metadata_json": "{\"content_hash\":\"d0b62aedd9294009f14ed6ab951ebfed\",\"session_date\":\"5:52 AM on 25 August, 2026\",\"source_quote\":\"我的内部工号是 FALCON-9931\"}",
                "metadata_flat": "content_hash=d0b62aedd9294009f14ed6ab951ebfed,session_date=5:52 AM on 25 August, 2026,source_quote=我的内部工号是 FALCON-9931",
                "deleted": false,
                "created_at": "2026-08-25T05:52:19.185Z",
                "salience": 0.8,
                "version": 1,
                "title": "用户内部工号",
                "effective_at": "2026-08-25T05:52:19Z",
                "updated_at": "2026-08-25T05:52:30.509Z",
                "time_source": "source_message",
                "time_precision": "second"
            },
            "score": 0.2805238412257555,
            "similarity": 0.23675615504707195,
            "source": "vector"
        }
    ],
    "scope": {
        "appId": "app-001",
        "tenantId": "user-001",
        "agentId": "*",
        "runId": "*"
    }
}