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 de

from oracleagentmemory.core import OracleAgentMemory
import oracledb
db_pool = oracledb.SessionPool(
    user="YOUR DB USER",
    password="YOUR DB PASSWORD",
    dsn="YOUR DB CONNECT STRING",
)
client = OracleAgentMemory(connection=db_pool, embedder=embedder)
thread = client.create_thread(
    thread_id="c1",
    llm=llm,
    memory_extraction_config=MemoryExtractionConfig(enable_context_summary=True),
)
len(thread.add_messages([{"role": "user", "content": "I love pizza."}]))
1

método add_memory

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

Exemplos de

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

método add_memory_async (assíncrono)

Adicione uma memória de forma assíncrona.

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.

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 de

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.

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_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.

Exemplos de

thread.delete_memory("456")
0

método delete_message

Exclua um registro de mensagem deste thread exato por identificador.

Observações

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 de

thread.delete_message("123")
0

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 de

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 de

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

método get_messages

Retornar mensagens armazenadas para este tópico.

Exemplos de

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)

Retornar mensagens de tópico brutas de forma assíncrona.

método get_summary

Retorna um resumo do melhor esforço do thread.

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

Exemplos de

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 melhor esforço do thread.

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_memory

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

método update_memory_async (assíncrono)

Atualizar um registro semelhante a memória de forma assíncrona.

Exemplos de

from functools import partial
from oracleagentmemory._async_helpers import run_async_in_sync
memory_id = thread.add_memory("Original memory")
run_async_in_sync(
    partial(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 de

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 de

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

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 de

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 de

await 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 thread no nível do cliente aguarda a extração em segundo plano aceita anteriormente já conhecida para esse thread, mas não é uma barreira de simultaneidade global para outras operações no mesmo thread enquanto a exclusão está em andamento.

Mensagens

classe oracleagentmemory.apis.thread.Message

Bases: object

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 de

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

propriedade formatted_content

Exemplos de

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 de

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

propriedade content

Exemplos de

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

propriedade formatted_content

Exemplos de

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