Todos os produtos
Search
Central de documentação

Tablestore:File memory

Última atualização: Oct 21, 2026

A memória de arquivos permite que agentes de IA leiam contexto de longo prazo como arquivos. As aplicações podem gerenciar os arquivos diretamente ou permitir que o service de armazenamento de memória converta mensagens de conversas em arquivos somente leitura.

Recursos

O service de armazenamento de memória oferece as seguintes capacidades de arquivo.

Capacidade

Tipo de armazenamento de memória

Operações de arquivo

Cenários

Conversão de conversa para arquivo

inputType=messages, outputTypes inclui file

Listar, ler e pesquisar arquivos somente leitura gerados pelo service

Continuar escrevendo por meio de mensagens enquanto o agente lê a memória como arquivos

Gerenciamento direto de arquivos

inputType=file, outputTypes=["file"]

Criar, ler, atualizar, renomear, excluir e gerenciar versões

Memória Markdown existente ou necessidade de organizar diretórios e versões independentemente

Organização de arquivos Dream

inputType=file, outputTypes=["file"]

Ler arquivos de texto entre escopos e gravar automaticamente em um escopo de saída determinístico

Deduplicar, resumir, corrigir, mesclar ou reorganizar arquivos existentes

Escolha o ponto de entrada adequado ao seu caso de uso:

No Linux, também é possível usar agent-memory-fuse para montar a memória de arquivos como um diretório local, permitindo que agentes e aplicações acessem a memória por meio de operações padrão de arquivo. Para mais detalhes, consulte Mount as a local directory through FUSE.

Pré-requisitos

  • Você já created an AgentStorage instance e obteve o endpoint e o nome da instância.

  • O SDK do Agent Storage está instalado: Python SDK versão 1.0.10 ou posterior, ou TypeScript SDK versão 0.0.13 ou posterior.

Endereçamento de arquivos

Um arquivo é identificado conjuntamente pelo armazenamento de memória, pelo escopo e pelo caminho.

  • memoryStoreName: O nome do armazenamento de memória.

  • scope: O escopo ao qual o arquivo pertence. Forneça o appId, tenantId, agentId e runId completos. O caractere curinga * não é suportado.

  • path: O caminho do arquivo dentro do escopo. Recomendamos o uso de caminhos semânticos iniciados com /, como /profile/preferences.md ou /projects/alpha/decisions.md.

O mesmo caminho pode ser utilizado em escopos diferentes. O conteúdo dos arquivos é isolado entre escopos. O itemId retornado pela interface de listagem é o identificador estável do arquivo e é obrigatório para consultar versões históricas.

Início rápido

Os exemplos a seguir abrangem o fluxo principal: instalar o SDK, configurar credenciais, inicializar o client, criar um armazenamento de memória de arquivos, gravar um arquivo Markdown e lê-lo novamente. Substitua a chave de API, o endpoint e o nome da instância pelos seus próprios valores. Para outras operações, como listar, atualizar e excluir arquivos, consulte Operações comuns de arquivos.

Python

from tablestore_agent_storage import AgentStorageClient

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

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

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

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

item = client.get_item({
    "memoryStoreName": "agent_files",
    "scope": scope,
    "path": "/profile/preferences.md",
    "view": "full",
})
print(item["content"])

TypeScript

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

async function main() {
  const client = new AgentStorageClient({
    apiKey: 'your-api-key',
    endpoint: 'https://your-instance.cn-beijing.ots.aliyuncs.com',
    instanceName: 'your-instance-name',
  });

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

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

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

  const item = await client.getItem({
    memoryStoreName: 'agent_files',
    scope,
    path: '/profile/preferences.md',
    view: 'full',
  });
  console.log(item.content);
}

void main();

Ambos os exemplos imprimem o conteúdo do arquivo recém-gravado:

# User preferences

- Prefers Americano coffee
- Prefers concise responses

O parâmetro storageMode é obrigatório na criação de um armazenamento de memória e não pode ser alterado posteriormente. As operações subsequentes com arquivos não exigem esse parâmetro novamente. O SDK do Agent Storage preenche automaticamente os campos de tipo necessários pelas interfaces de Item.

Converter conversas em arquivos de memória somente leitura

Se sua aplicação já grava conversas por meio de AddMemories, o service pode gerar arquivos de memória somente leitura de forma assíncrona, eliminando a necessidade de manter o conteúdo dos arquivos manualmente.

Siga as quatro etapas abaixo no console ou no SDK. Cada etapa apresenta ambos os métodos, e os exemplos do SDK utilizam Python.

1. Criar um armazenamento de memória

Crie um armazenamento de memória que gere tanto memória estruturada quanto arquivos:

Console

  1. Faça login no console do Agent Storage, acesse Memory store management e clique em Create memory store.

  2. Em Input type, selecione Short-term messages. Em Output type, selecione File memory. Para utilizar recuperação semântica simultaneamente, marque também Structured memory.

  3. Clique em OK para concluir a criação.

SDK

from tablestore_agent_storage import AgentStorageClient

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

client.create_memory_store({
    "memoryStoreName": "agent_memory",
    "description": "Conversation memory for an agent",
    "inputType": "messages",
    "outputTypes": ["structured", "file"],
})

Caso precise apenas de arquivos, defina outputTypes como ["file"]. Não é possível modificar inputType após a criação. Para armazenamentos de memória que usam messages como entrada, ajuste outputTypes por meio de UpdateMemoryStore.

2. Gravar conversas

Grave as mensagens da conversa no armazenamento de memória. O service gera os arquivos somente leitura de forma assíncrona.

Console

  1. Abra o armazenamento de memória de arquivos, acesse a página Short-term memory e clique em Write memory.

  2. Em Input mode, selecione Conversation messages (JSON). Preencha o escopo completo de quatro níveis: ApplicationappId, Tenant/UsertenantId, AgentagentId e SessionrunId.

  3. Cole o JSON das mensagens da conversa e clique em OK para enviar. Os arquivos são gerados assincronicamente. Após o envio, verifique o status da tarefa de geração na página Request log.

SDK

Chame AddMemories para gravar as mensagens. A saída de arquivo suporta apenas geração assíncrona, portanto sync deve ser false ou omitido.

resp = client.add_memories({
    "memoryStoreName": "agent_memory",
    "scope": {
        "appId": "shopping-app",
        "tenantId": "user-001",
        "agentId": "shopping-assistant",
        "runId": "session-001",
    },
    "messages": [
        {"role": "user", "content": "I usually drink Americano coffee without sugar."},
        {"role": "assistant", "content": "Okay, I will remember your beverage preference."},
    ],
    "sync": False,
})
request_id = resp["requestId"]

Salve o requestId da resposta.

Importante

Passar sync=true retorna 400 INVALID_PARAMETER.

3. Aguardar a conclusão da geração de arquivos

Consulte o status da tarefa de geração para confirmar que o service criou os arquivos somente leitura.

Console

  1. Abra o armazenamento de memória de arquivos e acesse a página Request log.

  2. Localize o registro correspondente pelo Request ID salvo, verifique a coluna Status e aguarde até que o status seja completed.

SDK

Utilize o requestId retornado por AddMemories para chamar GetMemoryTask:

task = client.get_memory_task({
    "memoryStoreName": "agent_memory",
    "requestId": request_id,
})
print(task["task"]["status"])

Quando task.status for completed, todas as saídas configuradas foram geradas. Em armazenamentos de memória com saída dupla, a tarefa geral só atinge o status completed após a geração tanto da memória estruturada quanto dos arquivos.

4. Listar e ler arquivos

Use exatamente o mesmo escopo de quatro níveis da operação de gravação para navegar pelos arquivos somente leitura gerados pelo service. Arquivos gerados pelo service não aceitam escopos com caracteres curinga.

Console

  1. Faça login no console do Agent Storage, abra o armazenamento de memória de arquivos e acesse a página Long-term memory.

  2. Mude para File memory e selecione o escopo completo utilizado durante a gravação.

  3. Navegue pelos arquivos somente leitura gerados na árvore de arquivos. Clique em um arquivo para visualizar seu conteúdo e histórico de versões.

SDK

Chame ListItems para listar os arquivos e, em seguida, leia cada um deles.

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

page = client.list_items({
    "type": "memoryfile",
    "memoryStoreName": "agent_memory",
    "scope": scope,
    "limit": 20,
})

# Get the actual path from items, then read the content
for entry in page["items"]:
    item = client.get_item({
        "type": "memoryfile",
        "memoryStoreName": "agent_memory",
        "scope": scope,
        "path": entry["path"],
        "view": "full",
    })
    print(item["path"], item["content"])

O campo de resposta de nível superior readOnly é true quando o service mantém esses arquivos. Defina view=full para ler o conteúdo deles.

Importante

Chamar as interfaces de criação, atualização, renomeação ou exclusão nesses arquivos retorna 409 READ_ONLY_STORE. Para modificar o conteúdo, continue gravando conversas ou mantenha a memória de source por meio das interfaces de memória estruturada.

Ler a visualização de arquivos da memória estruturada

Se sua aplicação grava conversas ou texto no service e utiliza as interfaces de memória estruturada para recuperação semântica, o agente também pode navegar pela mesma memória como arquivos. Esta seção aborda apenas a leitura. Para o fluxo completo de gravação, espera e leitura, consulte Convert conversations to read-only memory files.

  • Continue gravando e mantendo dados por meio das interfaces de memória estruturada, como AddMemories, UpdateMemory e DeleteMemory.

  • Utilize os métodos list_items e get_item do SDK do Agent Storage para listar e ler os arquivos gerados.

  • Quando a resposta de ListItems incluir readOnly: true, a visualização atual do arquivo é somente leitura. Operações de criação, atualização, renomeação, exclusão e versionamento não são suportadas.

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

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

Para modificar o conteúdo de uma visualização de arquivo somente leitura, atualize a memória de source por meio das interfaces de memória estruturada.

Montar como um diretório local via FUSE

O agent-memory-fuse mapeia um armazenamento de memória de arquivos e um escopo exato em uma instância do Tablestore para um diretório Linux local. Após a montagem, agentes e aplicações podem usar ls, cat, editores ou APIs de arquivo para ler e gravar na memória sem integrar o SDK do Agent Storage à aplicação.

Cada montagem corresponde a um único conjunto (instance, memoryStoreName, scope). Esta ferramenta foi projetada para memória de arquivos, não sendo um sistema de arquivos POSIX de uso geral.

Preparar o ambiente

Antes de montar a memória de arquivos, certifique-se de que as seguintes condições sejam atendidas:

  • O executável Linux agent-memory-fuse compatível com a arquitetura do seu runtime está disponível e possui permissões de execução.

  • O kernel Linux tem o FUSE habilitado e o usuário ou contêiner atual consegue acessar /dev/fuse.

  • O fusermount3 está instalado. Em alguns sistemas, o comando chama-se fusermount.

  • Um armazenamento de memória de arquivos com storageMode=filemem foi criado. O endpoint HTTPS da instância, o nome da instância e o escopo completo de quatro níveis estão disponíveis.

  • Uma chave de API, um par de AccessKey ou uma credencial temporária do Security Token Service (STS) está disponível. Chaves de API devem ser usadas com endpoints HTTPS.

Ao executar em um contêiner, geralmente é necessário mapear /dev/fuse e conceder CAP_SYS_ADMIN ou permissão equivalente de montagem no namespace do usuário. Utilize uma configuração de privilégio mínimo para o seu ambiente de runtime.

Conceda permissão de execução ao binário e crie o diretório de montagem:

chmod +x ./agent-memory-fuse
mkdir -p /mnt/agent-memory

Montar a memória de arquivos

Execute o comando a seguir. O escopo no exemplo corresponde ao objeto scope do início rápido. Envolva o escopo completo entre aspas para evitar que o shell interprete caracteres especiais inesperadamente.

./agent-memory-fuse mount \
  --endpoint https://your-instance.cn-beijing.ots.aliyuncs.com \
  --instance your-instance-name \
  --credential apikey:your-api-key \
  --store agent_files \
  --scope 'app-001#user-001#assistant#session-001' \
  --session fuse-session-001 \
  /mnt/agent-memory

O comando de montagem executa em primeiro plano e gerencia o ciclo de vida da montagem. O log a seguir indica que o carregamento inicial do diretório e a montagem foram bem-sucedidos:

mounted /mnt/agent-memory: store=agent_files files=1 readOnly=false

Mantenha esse processo em execução e acesse o diretório de montagem a partir de outro terminal ou processo da aplicação. Em ambientes de produção, utilize systemd ou um sistema de orquestração de contêineres para gerenciar o processo. Não encerre o processo forçadamente enquanto a montagem ainda estiver em uso.

A tabela a seguir descreve os principais parâmetros.

Parâmetro

Descrição

--endpoint

O endpoint HTTPS da instância do Tablestore.

--instance

O nome da instância do Tablestore.

--credential

apikey:<key>, aksk:<id>:<secret> ou sts:<id>:<secret>:<token>.

--store

O nome do armazenamento de memória com storageMode=filemem.

--scope

O escopo exato separado por #: appId#tenantId#agentId#runId. Caracteres curinga não são suportados.

--session

O identificador de sessão para esta montagem, usado para atribuição de versão no lado do servidor. Sessões de gravação diferentes devem usar valores distintos.

--read-only

Opcional. Restringe esta montagem a somente leitura.

Último argumento posicional

O diretório de montagem local.

Aviso

O valor de --credential é sensível, e o exemplo mostra apenas o formato do parâmetro. Não grave credenciais reais em códigos, imagens, logs ou scripts compartilhados. Prefira credenciais de curta duração com permissões restritas.

Ler e gravar arquivos

Após a montagem ser concluída com sucesso, você pode ler, criar, modificar, renomear e excluir arquivos como faria em um diretório comum.

# View existing server-side files
find /mnt/agent-memory -type f
cat /mnt/agent-memory/profile/preferences.md

# Create or update files
mkdir -p /mnt/agent-memory/projects/alpha
printf '%s\n' '# Project decisions' '' '- Use an event-driven architecture' \
  > /mnt/agent-memory/projects/alpha/decisions.md
cat /mnt/agent-memory/projects/alpha/decisions.md

# Rename and delete files
mv /mnt/agent-memory/projects/alpha/decisions.md \
  /mnt/agent-memory/projects/alpha/architecture.md
rm /mnt/agent-memory/projects/alpha/architecture.md

Os arquivos são sincronizados com o servidor nas operações de flush, fsync ou close.

Importante

Aplicações em produção devem verificar os valores de retorno de fsync e close. Alguns redirecionamentos de shell não exibem erros da etapa de close. Para gravações importantes, leia o arquivo novamente após a conclusão da gravação para confirmar o resultado.

Os diretórios são formados a partir dos prefixos dos caminhos dos arquivos. Diretórios que contêm arquivos podem ser restaurados entre processos e remontagens. Diretórios vazios existem apenas no processo de montagem atual.

Montagem somente leitura

Se o agente precisar apenas ler a memória, adicione --read-only antes do argumento do diretório de montagem.

./agent-memory-fuse mount \
  --endpoint https://your-instance.cn-beijing.ots.aliyuncs.com \
  --instance your-instance-name \
  --credential apikey:your-api-key \
  --store agent_files \
  --scope 'app-001#user-001#assistant#session-001' \
  --session fuse-reader-001 \
  --read-only \
  /mnt/agent-memory

Para visualizações de arquivos somente leitura geradas a partir de memória estruturada, o servidor muda automaticamente a montagem para somente leitura. Operações de gravação em uma montagem somente leitura retornam EROFS.

Rotacionar credenciais STS

Ao montar com credenciais STS, é possível rotacionar o AccessKey ID, o AccessKey secret e o token do Security Token Service completos sem desmontar o diretório. O provedor de credenciais deve gravar o seguinte JSON na saída padrão e canalizá-lo para o comando de rotação.

{"accessKeyId":"new-access-key-id","accessKeySecret":"new-access-key-secret","stsToken":"new-sts-token"}
your-credential-provider | \
  ./agent-memory-fuse rotate-credential --mountpoint /mnt/agent-memory

O comando de rotação lê as credenciais da entrada padrão para evitar colocar novas credenciais nos argumentos da linha de comando. Um comando bem-sucedido indica que as novas credenciais foram instaladas no processo de montagem local. Solicitações subsequentes de arquivo confirmam se as credenciais são válidas. Apenas processos confiáveis podem acessar o ponto de montagem e realizar a rotação de credenciais.

Desmontar a memória de arquivos

Após concluir as operações de arquivo e fechar todos os arquivos abertos, execute o seguinte comando.

./agent-memory-fuse umount /mnt/agent-memory

Após a desmontagem ser concluída com sucesso, o processo de montagem em primeiro plano é encerrado. Se o sistema não possuir nem fusermount3 nem fusermount, o comando de desmontagem retornará um erro. Instale primeiro as ferramentas de espaço de usuário do FUSE.

Limites e solução de problemas

Limites e erros de memória de arquivos surgem no diretório montado como valores errno padrão do Linux. Para limites gerais de arquivos e cotas, consulte Limits.

  • Conteúdo que não seja UTF-8 válido retorna EILSEQ, e um arquivo que exceda o tamanho máximo individual retorna EFBIG.

  • Gravações que excedam a cota de arquivos atuais de um escopo retornam ENOSPC.

  • Quando vários clients modificam simultaneamente o mesmo arquivo, identificadores de arquivo obsoletos podem retornar ESTALE. Reabra o arquivo e leia o conteúdo mais recente antes de decidir se deve tentar novamente.

  • Credenciais inválidas ou um token STS expirado retornam EACCES. Rotacione as credenciais ou remonte com credenciais válidas.

  • Limitação de taxa do service ou indisponibilidade breve podem retornar EAGAIN. A ferramenta realiza tentativas limitadas inicialmente. As aplicações ainda devem usar estratégias de backoff para lidar com erros finais.

  • Links simbólicos, hard links, ACLs, atributos estendidos, arquivos esparsos e bloqueios de arquivo entre sessões não são suportados.

  • Se você vir operation not permitted ou não conseguir abrir /dev/fuse, verifique o mapeamento do dispositivo, as permissões do usuário atual e as capacidades de montagem do contêiner.

  • Se encontrar um erro de initial directory load, verifique se o endpoint, o nome da instância, as credenciais, o nome do armazenamento de memória e o escopo correspondem.

Operações comuns de arquivos

As operações a seguir estão disponíveis tanto no console quanto no SDK.

No console, todas as operações são realizadas na página Long-term memory do armazenamento de memória de arquivos:

  • Primeiro selecione Application (appId) e Tenant/User (tenantId). Para navegação, você pode definir Agent e Session como All. Criar ou carregar arquivos requer um escopo completo de quatro níveis.

  • Use Path prefix para navegar pela lista de arquivos à esquerda e, em seguida, selecione um arquivo para visualizar seu conteúdo, metadados e histórico de versões à direita.

Os exemplos de SDK nesta seção usam o client Python, o scope e o armazenamento de memória agent_files de Quick start.

Ler apenas metadados

Console

Selecione o arquivo alvo na lista de arquivos à esquerda. O painel de detalhes à direita exibe o conteúdo do arquivo, Creation time, Update time e o Version ID atual. Nenhuma operação adicional é necessária para visualizar os metadados.

SDK

Defina includeContent como False. A resposta não incluirá content, o que é adequado para verificar resumos de arquivos e horários de atualização.

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

Atualizar o conteúdo do arquivo

Console

Selecione o arquivo, clique em Edit or replace data, modifique o File content e salve. O console realiza validação de concorrência com base na versão atual. Se outra solicitação tiver modificado o arquivo, o salvamento falhará. Clique em Refresh e tente novamente.

SDK

Para gravações concorrentes, passe o contentSha256 da última leitura como expectedSha256. Se outra solicitação tiver modificado o arquivo, o service rejeitará a substituição. Leia o arquivo novamente e decida se deve tentar outra vez.

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

Renomear um arquivo

Console

Selecione o arquivo, clique em Rename, insira o novo File path e confirme. Se o caminho de destino já existir, um conflito será reportado.

SDK

O UpdateItem lida tanto com atualizações de conteúdo quanto com renomeações. Uma única solicitação deve especificar exatamente um entre content ou newPath.

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

Se o caminho de destino já existir, o service retorna um conflito por padrão. Defina "overwrite": True apenas quando sua lógica de negócio confirmar que a substituição do arquivo de destino é permitida.

Listar arquivos com paginação

Console

Na página Long-term memory, selecione um escopo e navegue pela lista de arquivos paginada por Path prefix à esquerda. Clique em Refresh para obter a lista mais recente.

SDK

O ListItems retorna 100 arquivos por página por padrão, com um máximo de 500 por página. Quando a resposta incluir nextToken, passe-o exatamente como está na próxima solicitação.

next_token = None
while True:
    request = {
        "memoryStoreName": "agent_files",
        "scope": scope,
        "pathPrefix": "/profile/",
        "limit": 100,
    }
    if next_token:
        request["nextToken"] = next_token

    page = client.list_items(request)
    for entry in page["items"]:
        print(entry["path"])

    next_token = page.get("nextToken")
    if not next_token:
        break

Excluir um arquivo

Console

Selecione o arquivo, clique em Delete e confirme. A exclusão remove o arquivo atual e cria uma versão de exclusão. Versões históricas permanecem disponíveis em Version history.

SDK

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

A operação de exclusão remove o arquivo atual, mas ainda é possível consultar versões históricas pelo ID do arquivo.

Consultar versões históricas

Cada operação de criação, atualização, renomeação ou exclusão gera uma versão histórica imutável. Primeiro obtenha o itemId do arquivo atual ou de uma resposta salva anteriormente e, em seguida, liste as versões.

versions = client.list_item_versions({
    "memoryStoreName": "agent_files",
    "scope": scope,
    "itemId": renamed["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"],
})
print(snapshot.get("content"))

É possível usar operation para filtrar versões created, modified ou deleted. A lista de versões não retorna conteúdo. Chame GetItemVersion para ler um snapshot específico.

Redigir versões históricas

Aviso

A redação é irreversível. Antes de executá-la, confirme que selecionou a versão histórica correta.

O RedactItemVersion limpa o caminho, o conteúdo, o hash do conteúdo e o tamanho de um snapshot histórico. Ele preserva o tipo de operação, a sequência da versão, o horário de criação e as informações de auditoria da redação. Solicitações repetidas são idempotentes. A redação não modifica o arquivo atual nem cria uma nova versão.

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

Após a redação, chamar GetItemVersion ainda retorna a versão, mas a resposta não inclui mais content.

Erros comuns

Código de erro

Causa comum

Correção sugerida

VALIDATION_ERROR

Escopo incompleto, caminho inválido ou a solicitação de atualização forneceu tanto content quanto newPath.

Verifique o escopo completo de quatro níveis, o caminho e a ramificação da solicitação.

NOT_FOUND

O armazenamento de memória, escopo, caminho ou versão não existe.

Verifique as informações de localização do arquivo. Não reutilize identificadores de arquivo entre escopos.

PATH_EXISTS

O caminho de destino para criação ou renomeação já existe.

Use um caminho diferente. Habilite a substituição apenas quando a lógica de negócio confirmar que é permitido.

SHA_MISMATCH

Outra solicitação modificou o arquivo.

Leia o arquivo novamente e decida se deve tentar outra vez com base no conteúdo mais recente.

LOCK_CONFLICT

Alterações concorrentes estão ocorrendo no mesmo escopo.

Tente novamente após um breve backoff e releia o arquivo mais recente.

READ_ONLY_STORE

Tentativa de modificar uma visualização de arquivo somente leitura.

Use as interfaces de memória estruturada para atualizar a memória de source.

Limites

Os seguintes limites aplicam-se à memória de arquivos:

  • Apenas texto UTF-8 válido é suportado. O tamanho máximo de um único arquivo é de 100 KiB.

  • O caminho normalizado pode ter até 800 bytes. Caminhos não podem apontar para o diretório raiz e não podem conter segmentos de caminho vazios, ., .. ou caracteres NUL.

  • Cada escopo suporta um máximo de 2.000 arquivos atuais por padrão.

  • Todas as interfaces de Item exigem um escopo completo de quatro níveis. Caracteres curinga não são suportados.

  • Versões históricas redigidas não podem ser restauradas.