Threads

Esta página apresenta o identificador de thread concreto do Oracle junto com o tipo de auxiliar de mensagem voltado para o desenvolvedor.

Thread Oracle

classe oracleagentmemory.core.OracleThread

Bases: IThread

Thread apoiado por um armazenamento Oracle.

Esta implementação incorpora e armazena mensagens de thread e memórias adicionadas manualmente e, em seguida, suporta pesquisa de similaridade em todos os registros armazenados.

Observações

Crie uma nova instância do OracleThread.

Exemplos

from oracleagentmemory.core import MemoryExtractionConfig, OracleAgentMemory
client = OracleAgentMemory(connection=db_pool, embedder=embedder)
thread = client.create_thread(
    thread_id="c4",
    llm=llm,
    memory_extraction_config=MemoryExtractionConfig(enable_context_summary=True),
)
len(thread.add_messages([{"role": "user", "content": "I love pizza."}]))
1

método add_image

Persista uma imagem associada a este tópico.

description é armazenado como texto pesquisável da imagem. Quando é omitido ou None, um LLM anexado gera uma legenda. Os valores de escopo omitidos herdam os identificadores de usuário, agente e thread correspondentes deste thread.

método add_image_async (assíncrono)

Persistir uma imagem associada a este thread de forma assíncrona.

description é armazenado como texto pesquisável da imagem. Quando é omitido ou None, um LLM anexado gera uma legenda. Os valores de escopo omitidos herdam os identificadores de usuário, agente e thread correspondentes deste thread.

método add_memory

Adicione uma entrada de memória manual e indexe-a.

Exemplos

thread.add_memory("Remember this preference", memory_id="mem-thread-docs")
'mem-thread-docs'

método add_memory_async (assíncrono)

Adicione uma entrada de memória manual e indexe-a de forma assíncrona.

Exemplos

import asyncio
asyncio.run(thread.add_memory_async(
    "Remember this preference", memory_id="mem-thread-docs-async"
))
'mem-thread-docs-async'

método add_messages

Adicionar mensagens ao tópico e indexá-las.

No modo de extração em segundo plano, esse método retorna após a inserção de mensagens brutas e a tentativa de extração em segundo plano devido.

As mensagens brutas são armazenadas antes da extração automática em qualquer modo. Se a extração posterior ou o armazenamento de memória derivada falhar, as mensagens brutas permanecerão armazenadas enquanto memórias derivadas ou atualizações resumidas poderão estar ausentes.

Observações

No MemoryExtractionMode.BACKGROUND, as mensagens brutas são persistidas antes que as memórias extraídas sejam armazenadas. Se a extração em segundo plano não enfileirar, ou se uma espera de capacidade de fila configurada atingir seu timeout, as mensagens brutas inseridas permanecerão armazenadas e a chamada continuará sem memórias extraídas ou aumentará TimeoutError, dependendo de background_extraction_queue_full_behavior.

Exemplos

len(thread.add_messages([{"role": "user", "content": "Thread message from docs"}]))
1

método add_messages_async (assíncrono)

Adicione mensagens de forma assíncrona ao tópico e indexe-as.

No modo de extração em segundo plano, esse método retorna após a inserção de mensagens brutas e a tentativa de extração em segundo plano devido.

As mensagens brutas são armazenadas antes da extração automática em qualquer modo. Se a extração posterior ou o armazenamento de memória derivada falhar, as mensagens brutas permanecerão armazenadas enquanto memórias derivadas ou atualizações resumidas poderão estar ausentes.

No MemoryExtractionMode.BACKGROUND, as mensagens brutas são persistidas antes que as memórias extraídas sejam armazenadas. Se a extração em segundo plano não enfileirar, ou se uma espera de capacidade de fila configurada atingir seu timeout, as mensagens brutas inseridas permanecerão armazenadas e a chamada continuará sem memórias extraídas ou aumentará TimeoutError, dependendo de background_extraction_queue_full_behavior.

método delete_image

Excluir uma imagem pertencente a este tópico.

método delete_image_async (assíncrono)

Exclua uma imagem pertencente a este thread de forma assíncrona.

método delete_memory

Exclua um registro semelhante à memória (por exemplo, uma memória, um fato, uma preferência ou uma diretriz) deste thread exato por identificador.

Observações

Antes de excluir o registro, este método aguarda a extração em segundo plano anterior aceita para este thread por meio do componente de memória do agente anexado. Ele não aguarda o trabalho aceito após o início da espera ou o trabalho iniciado por outro componente ou processo.

Exemplos

thread.delete_memory("456")
0

método delete_memory_async (assíncrono)

Exclua um registro semelhante à memória (por exemplo, uma memória, um fato, uma preferência ou uma diretriz) deste thread exato por identificador de forma assíncrona.

Observações

Este método segue o comportamento de espera e simultaneidade de extração em segundo plano documentado por delete_memory().

Exemplos

import asyncio
asyncio.run(thread.delete_memory_async("456"))
0

método delete_message

Exclua um registro de mensagem deste thread exato por identificador.

Observações

Antes de excluir a mensagem, este método aguarda a extração em segundo plano anterior aceita para este thread por meio do componente de memória do agente anexado. Ele não aguarda o trabalho aceito após o início da espera ou o trabalho iniciado por outro componente ou processo.

A exclusão de uma mensagem remove apenas o registro de mensagem bruta. Memórias derivadas não são excluídas porque ainda não rastreamos quais memórias extraídas vieram de qual mensagem, então elas podem permanecer pesquisáveis ou ainda afetar a saída do cartão de contexto. Use OracleAgentMemory.delete_thread() para excluir o thread junto com suas mensagens e memórias associadas.

Exemplos

thread.delete_message("123")
0

método delete_message_async (assíncrono)

Exclua um registro de mensagem deste thread exato por identificador de forma assíncrona.

Observações

Este método segue o comportamento de espera e simultaneidade de extração em segundo plano documentado por delete_message().

A exclusão de uma mensagem remove apenas o registro de mensagem bruta. Memórias derivadas não são excluídas porque ainda não rastreamos quais memórias extraídas vieram de qual mensagem, então elas podem permanecer pesquisáveis ou ainda afetar a saída do cartão de contexto. Use OracleAgentMemory.delete_thread() para excluir o thread junto com suas mensagens e memórias associadas.

Exemplos

import asyncio
asyncio.run(thread.delete_message_async("123"))
0

Exclua uma relação de thread por ID ou complete a tupla do ponto final.

Os seletores de tupla de ponto final devem usar a orientação de origem para destino armazenada.

Exemplos

thread.delete_record_link(relation_id="relation-id")
1

Exclua de forma assíncrona uma relação pertencente a este thread.

método get_context_card

Retorna um objeto de cartão de contexto para o thread.

Preferir get_context_card_async quando uma implementação suportada por LLM puder executar E/S de rede remota.

Observações

Isso usa o escopo de pesquisa padrão do thread com exact_thread_match=False, para que memórias relevantes de outros threads para o mesmo usuário/agente possam ser incluídas.

Exemplos

thread.add_memory("User likes pizza", memory_id="mem-context-docs")
'mem-context-docs'
len(thread.add_messages([{"role": "user", "content": "Tell me about pizza"}]))
1
"User likes pizza" in thread.get_context_card().content
True
card = thread.get_context_card(
    max_relevant_results=4,
    min_relevant_results_by_type={"memory": 1},
)
len(card.relevant_results or []) <= 4
True

método get_context_card_async (assíncrono)

Retorna assincronicamente um objeto de cartão de contexto para o thread.

Exemplos

import asyncio
card = asyncio.run(thread.get_context_card_async(
    min_relevant_results_by_type={"preference": 1, "guideline": 1},
))
len(card.relevant_results or []) <= 5
True

método get_message

Retornar uma mensagem de propriedade deste tópico.

As partes da imagem são retornadas com seus identificadores e descrições por padrão. Informe included_image_ids para carregar bytes para partes de imagem selecionadas. Os identificadores não relacionados são ignorados.

método get_message_async (assíncrono)

Retorna uma mensagem de thread pertencente de forma assíncrona.

included_image_ids opcionalmente seleciona partes de imagem anexadas cujos bytes devem ser carregados; omitido ou None retorna somente metadados de imagem.

método get_messages

Retornar mensagens armazenadas para este tópico.

Exemplos

len(thread.add_messages([{"role": "user", "content": "Stored message example"}]))
1
messages = thread.get_messages()
messages[-1].content
'Stored message example'

método get_messages_async (assíncrono)

Obtenha as mensagens não processadas do thread, conforme adicionado com add_messages de forma assíncrona.

Exemplos

import asyncio
message_ids = asyncio.run(thread.add_messages_async(
    [{"role": "user", "content": "Stored message example"}]
))
len(message_ids)
1
messages = asyncio.run(thread.get_messages_async())
messages[-1].content
'Stored message example'

método get_summary

Retorna um resumo do thread.

Uma solicitação de thread inteiro reutiliza ou atualiza o resumo durável. Uma solicitação com except_last resume esse prefixo sem alterar o resumo durável do thread inteiro.

Preferir get_summary_async quando uma implementação suportada por LLM puder executar E/S de rede remota.

Exemplos

len(thread.add_messages([{"role": "assistant", "content": "Summary source message"}]))
1
summary = thread.get_summary()
bool(summary.content)
True

método get_summary_async (assíncrono)

Retorna assincronicamente um resumo do thread.

Uma solicitação de thread inteiro reutiliza ou atualiza o resumo durável. Uma solicitação com except_last resume esse prefixo sem alterar o resumo durável do thread inteiro.

Crie uma relação direcionada entre dois registros pertencentes a este thread.

No momento, os dois pontos finais devem ser registros semelhantes à memória: "memory", "fact", "guideline" ou "preference". Os tipos de relação incorporados são "supersedes" ("is_superseded_by"), "contradicts", "refines" ("is_refined_by"), "supports" ("is_supported_by") e "duplicates". "contradicts" e "duplicates" usam o mesmo label invertido.

Ambos os pontos finais devem pertencer a este thread exato. Somente uma orientação pode ser armazenada para um par de pontos finais. opposite_relation_type nomeia a relação ao percorrer do destino para a origem; por exemplo, new "supersedes" old torna-se old "is_superseded_by" new nessa direção.

Exemplos

thread.link_records(
    "fact-1", "fact", "memory-1", "memory", "supports"
)
'relation-id'

Crie de forma assíncrona uma relação entre registros pertencentes a este thread.

No momento, os dois pontos finais devem ser registros semelhantes à memória: "memory", "fact", "guideline" ou "preference". Os tipos de relação incorporados são "supersedes" ("is_superseded_by"), "contradicts", "refines" ("is_refined_by"), "supports" ("is_supported_by") e "duplicates". "contradicts" e "duplicates" usam o mesmo label invertido.

método list_images

Listar registros de imagem pertencentes a este thread.

Por padrão, os registros retornados contêm metadados de imagem. Os bytes brutos são carregados somente quando include_bytes=True e image_id são fornecidos.

método list_images_async (assíncrono)

Liste registros de imagem pertencentes a este thread de forma assíncrona.

Por padrão, os registros retornados contêm metadados de imagem. Os bytes brutos são carregados somente quando include_bytes=True e image_id são fornecidos. O escopo deste thread é aplicado automaticamente.

Pesquise de forma síncrona registros relevantes para uma consulta.

Observações

Os campos de escopo omitidos herdam o escopo de pesquisa padrão deste thread: correspondência exata de usuário e agente mais o user_id, agent_id e thread_id atuais deste thread. A pesquisa de thread padrão sai intencionalmente de exact_thread_match=False, para que possa retornar registros relevantes de outros threads para o mesmo usuário/agente. Informe exact_thread_match=True para restringir os resultados ao thread atual. Os valores explícitos do escopo None ainda seguem as regras de correspondência exata resolvidas: exact_*_match=False deixa essa dimensão sem restrições, enquanto exact_*_match=True corresponde apenas aos valores None armazenados.

Os valores max_results explícitos devem ser pelo menos 1; a omissão do argumento usa o valor padrão de 10. Este é um limite superior: a chamada pode retornar menos de max_results resultados quando os filtros são muito restritivos, quando há menos registros correspondentes ou por causa do comportamento de pesquisa específico da implementação.

método search_async (assíncrono)

Pesquise registros relevantes para uma consulta de forma assíncrona.

Observações

Os campos de escopo omitidos herdam o escopo de pesquisa padrão deste thread: correspondência exata de usuário e agente mais o user_id, agent_id e thread_id atuais deste thread. A pesquisa de thread padrão sai intencionalmente de exact_thread_match=False, para que possa retornar registros relevantes de outros threads para o mesmo usuário/agente. Informe exact_thread_match=True para restringir os resultados ao thread atual. Os valores explícitos do escopo None ainda seguem as regras de correspondência exata resolvidas: exact_*_match=False deixa essa dimensão sem restrições, enquanto exact_*_match=True corresponde apenas aos valores None armazenados.

Os valores max_results explícitos devem ser pelo menos 1; a omissão do argumento usa o valor padrão de 10. Este é um limite superior: a chamada pode retornar menos de max_results resultados quando os filtros são muito restritivos, quando há menos registros correspondentes ou por causa do comportamento de pesquisa específico da implementação.

método update_image

Atualize uma imagem pertencente a este thread.

Omita image para preservar os bytes existentes. Se image for fornecido, mime_type deverá ser fornecido com ele. Omita description para preservar a descrição existente. Informe None para gerar uma nova descrição com o LLM configurado; uma descrição não nula a substitui diretamente. A expiração de uma imagem anexada a uma mensagem deve ser alterada por meio de update_message().

método update_image_async (assíncrono)

Atualize uma imagem pertencente a este thread de forma assíncrona.

Omita image para preservar os bytes existentes. Se image for fornecido, mime_type deverá ser fornecido com ele. Omita description para preservar a descrição existente. Informe None para gerar uma nova descrição com o LLM configurado; uma descrição não nula a substitui diretamente. As definições de metadados, timestamp e expiração são atualizadas quando fornecidas. A expiração de uma imagem anexada a uma mensagem deve ser alterada por meio de update_message_async().

método update_memory

Atualize um registro semelhante à memória pertencente a este thread exato.

método update_memory_async (assíncrono)

Atualize um registro semelhante à memória pertencente a este thread exato de forma assíncrona.

Exemplos

import asyncio
memory_id = asyncio.run(thread.add_memory_async("Original memory"))
(
    asyncio.run(thread.update_memory_async(
        memory_id, content="Updated memory"
    ))
    == memory_id
)
True

método update_message

Atualize um registro de mensagem bruta pertencente a este thread exato.

Observações

Os campos omitidos são preservados do registro armazenado. A atribuição armazenada e o timestamp permanecem inalterados. A edição de conteúdo atualiza o histórico de mensagens brutas e, quando a extração automática é ativada, pode fazer com que o SDK extraia novamente memórias da mensagem editada e do histórico anterior. No modo INLINE, essa extração é concluída antes que esse método seja retornado. No modo BACKGROUND, esse método retorna depois que a atualização da mensagem bruta é bem-sucedida e a extração em segundo plano é tentada. Este trabalho de acompanhamento não afeta a frequência de extração normal usada por chamadas add_messages() posteriores. As memórias extraídas existentes permanecem no lugar, enquanto as memórias recém-extraídas do conteúdo editado podem ser adicionadas. Como a atualização da mensagem bruta e quaisquer gravações de memória extraída posteriores não acontecem de forma atômica, as memórias extraídas ainda poderão refletir o conteúdo da mensagem anterior se o trabalho em segundo plano não for enfileirado, se uma espera de capacidade de fila configurada atingir seu timeout ou se o trabalho de extração posterior falhar. Além disso, observe que as memórias extraídas existentes mantêm sua expiração original quando o TTL de uma mensagem de origem é alterado.

Exemplos

message_id = thread.add_messages([{"role": "user", "content": "Draft message"}])[0]
thread.update_message(message_id, content="Edited message") == message_id
True

método update_message_async (assíncrono)

Atualize um registro de mensagem bruta pertencente a este thread exato de forma assíncrona.

Observações

Os campos omitidos são preservados do registro armazenado. A atribuição armazenada e o timestamp permanecem inalterados. A edição de conteúdo atualiza o histórico de mensagens brutas e, quando a extração automática é ativada, pode fazer com que o SDK extraia novamente memórias da mensagem editada e do histórico anterior. No modo INLINE, essa extração é concluída antes que esse método seja retornado. No modo BACKGROUND, esse método retorna depois que a atualização da mensagem bruta é bem-sucedida e a extração em segundo plano é tentada. Este trabalho de acompanhamento não afeta a frequência de extração normal usada por chamadas add_messages() posteriores. As memórias extraídas existentes permanecem no lugar, enquanto as memórias recém-extraídas do conteúdo editado podem ser adicionadas. Como a atualização da mensagem bruta e quaisquer gravações de memória extraída posteriores não acontecem de forma atômica, as memórias extraídas ainda poderão refletir o conteúdo da mensagem anterior se o trabalho em segundo plano não for enfileirado, se uma espera de capacidade de fila configurada atingir seu timeout ou se o trabalho de extração posterior falhar. Além disso, observe que as memórias extraídas existentes mantêm sua expiração original quando o TTL de uma mensagem de origem é alterado.

Exemplos

import asyncio
message_ids = asyncio.run(thread.add_messages_async(
    [{"role": "user", "content": "Draft message"}]
))
(
    asyncio.run(thread.update_message_async(
        message_ids[0], content="Edited message"
    ))
    == message_ids[0]
)
True

Atualize uma relação cujos pontos finais pertencem a este thread.

Os valores omitidos são preservados. Quando relation_type muda para um tipo de relação de memória incorporado, seu label reverso fixo substitui opposite_relation_type.

Exemplos

thread.update_record_link("relation-id", relation_type="supports")
1

Atualizar assincronicamente uma relação cujos pontos finais pertencem a este thread.

método wait_for_memory_extraction

Aguarde a extração de memória em segundo plano anterior para este thread.

Esse método aguarda a extração em segundo plano iniciada por chamadas add_messages(), add_messages_async(), update_message() ou update_message_async() anteriores nesse thread por meio do mesmo componente de memória do agente. Se uma dessas chamadas já está terminando, este método inclui a extração que começa antes de esperar.

O método não aguarda o início da extração após o início dessa espera, a extração iniciada por um componente de memória de agente diferente ou a extração em execução em outro processo. As falhas de extração contam como concluídas para esta espera.

Exemplos

thread.wait_for_memory_extraction(timeout=10)

método wait_for_memory_extraction_async (assíncrono)

Aguarde assincronamente a extração de memória em segundo plano anterior.

Este método segue o mesmo comportamento de wait_for_memory_extraction().

Exemplos

import asyncio
asyncio.run(thread.wait_for_memory_extraction_async(timeout=10))

Observação: delete_message() exclui somente a linha de mensagem bruta. Memórias derivadas ainda podem ser pesquisadas ou aparecer em cartões de contexto. Use OracleAgentMemory.delete_thread() para excluir o thread junto com suas mensagens e memórias associadas. A exclusão de mensagem e memória por meio de um identificador de thread aguarda a extração em segundo plano anterior já aceita pelo cliente anexado para esse thread. Essa não é uma barreira de simultaneidade global para outras instâncias, processos ou trabalhos do cliente aceitos após o início da espera.

Mensagens e conteúdo da mensagem

classe oracleagentmemory.apis.message.Message

Bases: object

A mensagem na memória compartilhada por threads e adaptadores LLM.

classe oracleagentmemory.apis.message.MessageContent

Bases: ABC

Classe base para conteúdo de mensagem estruturada.

classe oracleagentmemory.apis.message.TextContent

Bases: MessageContent

Uma parte de texto em uma mensagem multimodal.

classe oracleagentmemory.apis.message.ImageContent

Bases: MessageContent

Uma parte da imagem em uma mensagem multimodal.

classe oracleagentmemory.apis.message.ImageMimeType

Bases: str, Enum

Tipos MIME suportados para conteúdo de imagem.

PNG e WebP animados não são suportados.

JPEG = 'image/JPEG'

PNG = 'image/PNG'

WEBP = 'imagem/WEBP'

Cartões de Contexto

classe oracleagentmemory.apis.contextcard.ContextCard

Bases: ABC

Objeto de cartão de contexto abstrato retornado por APIs de thread.

propriedade content (abstrato)

classe oracleagentmemory.core.contextcard.OracleContextCard

Bases: ContextCard

Cartão de contexto retornado por um thread Oracle.

propriedade content

Exemplos

card = OracleContextCard(summary="ctx")
"<summary>" in card.content and "ctx" in card.content
True

propriedade formatted_content

Exemplos

OracleContextCard(summary="").formatted_content
''
card = OracleContextCard(summary="ctx", topics=["travel"])
"<topics>" in card.formatted_content
True

Resumos

classe oracleagentmemory.apis.summary.Summary

Bases: ABC

Objeto de resumo de thread resumido retornado por APIs de thread.

propriedade content (abstrato)

classe oracleagentmemory.core.summary.OracleSummary

Bases: Summary

Resumo retornado por um thread Oracle.

Exemplos

summary = OracleSummary(content="Plan the Rome itinerary.")
summary.content
'Plan the Rome itinerary.'
str(summary)
'Plan the Rome itinerary.'

propriedade content

Exemplos

OracleSummary(content="Keep the tea preference in mind.").content
'Keep the tea preference in mind.'

propriedade formatted_content

Exemplos

OracleSummary(content="Thread recap").formatted_content
'Thread recap'