Threads

Esta página presenta el identificador de thread de Oracle concreto junto con el tipo de ayuda de mensaje orientado al desarrollador.

Thread de Oracle

clase oracleagentmemory.core.OracleThread

Bases: IThread

Thread respaldado por un almacén de Oracle.

Esta implantación incrusta y almacena tanto mensajes de thread como memorias agregadas manualmente y, a continuación, soporta la búsqueda de similitud en todos los registros almacenados.

Notas

Cree una nueva instancia de OracleThread.

Ejemplos

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

Agregue una entrada de memoria manual e indíquela.

Ejemplos

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

method add_memory_async (async)

Agregue una memoria de forma asíncrona.

método add_messages

Agregar mensajes al hilo y indexarlos.

En el modo de extracción en segundo plano, este método se devuelve después de insertar los mensajes raw y de intentar la extracción en segundo plano en segundo plano.

Notas

En MemoryExtractionMode.BACKGROUND, los mensajes raw se mantienen antes de que se almacenen las memorias extraídas. Si la extracción en segundo plano no se pone en cola o si una espera de capacidad de cola configurada alcanza su timeout, los mensajes raw insertados permanecen almacenados y la llamada continúa sin memorias extraídas o emite TimeoutError, según background_extraction_queue_full_behavior.

Ejemplos

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

method add_messages_async (async)

Agregar mensajes al thread de forma asíncrona e indexarlos.

En el modo de extracción en segundo plano, este método se devuelve después de insertar los mensajes raw y de intentar la extracción en segundo plano en segundo plano.

En MemoryExtractionMode.BACKGROUND, los mensajes raw se mantienen antes de que se almacenen las memorias extraídas. Si la extracción en segundo plano no se pone en cola o si una espera de capacidad de cola configurada alcanza su timeout, los mensajes raw insertados permanecen almacenados y la llamada continúa sin memorias extraídas o emite TimeoutError, según background_extraction_queue_full_behavior.

método delete_memory

Eliminar un registro similar a la memoria (por ejemplo, una memoria, un hecho, una preferencia o una directriz) de este thread exacto por identificador.

Ejemplos

thread.delete_memory("456")
0

método delete_message

Eliminar un registro de mensaje de este hilo exacto por identificador.

Notas

Al eliminar un mensaje, solo se elimina el registro de mensaje sin formato. Las memorias derivadas no se eliminan porque todavía no rastreamos qué memorias extraídas provienen de qué mensaje, por lo que pueden seguir siendo buscables o aún afectar la salida de la tarjeta de contexto. Utilice OracleAgentMemory.delete_thread() para suprimir el thread junto con sus mensajes y memorias asociados.

Ejemplos

thread.delete_message("123")
0

método get_context_card

Devolver un objeto de tarjeta de contexto para el thread.

Preferir get_context_card_async cuando una implementación respaldada por LLM puede realizar E/S de red remota.

Notas

Esto utiliza el ámbito de búsqueda predeterminado del thread con exact_thread_match=False, por lo que se pueden incluir memorias relevantes de otros threads para el mismo usuario/agente.

Ejemplos

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

method get_context_card_async (async)

Devolver de forma asíncrona un objeto de tarjeta de contexto para el thread.

Ejemplos

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

Devolver mensajes almacenados para este tema.

Ejemplos

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

method get_messages_async (async)

Devolver mensajes de thread sin procesar de forma asíncrona.

método get_summary

Devolver un resumen de mejor esfuerzo del hilo.

Preferir get_summary_async cuando una implementación respaldada por LLM puede realizar E/S de red remota.

Ejemplos

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

method get_summary_async (async)

Devolver de forma asíncrona un resumen de mejor esfuerzo del thread.

Búsqueda sincrónica de registros relevantes para una consulta.

Notas

Los campos de ámbito omitidos heredan el ámbito de búsqueda por defecto de este thread: coincidencia exacta de usuario y agente más los valores user_id, agent_id y thread_id actuales de este thread. La búsqueda de subprocesos predeterminada deja intencionadamente exact_thread_match=False, por lo que puede devolver registros relevantes de otros subprocesos para el mismo usuario/agente. Transfiera exact_thread_match=True para restringir los resultados al thread actual. Los valores de ámbito None explícitos siguen las reglas de coincidencia exacta resueltas: exact_*_match=False deja esa dimensión sin restricciones, mientras que exact_*_match=True solo coincide con los valores None almacenados.

Los valores max_results explícitos deben ser al menos 1; al omitir el argumento se utiliza el valor por defecto de 10. Este es un límite superior: la llamada puede devolver menos de max_results resultados cuando los filtros son demasiado restrictivos, cuando hay menos registros coincidentes o debido al comportamiento de búsqueda específico de la implementación.

method search_async (async)

Busque de forma asíncrona registros relevantes para una consulta.

Notas

Los campos de ámbito omitidos heredan el ámbito de búsqueda por defecto de este thread: coincidencia exacta de usuario y agente más los valores user_id, agent_id y thread_id actuales de este thread. La búsqueda de subprocesos predeterminada deja intencionadamente exact_thread_match=False, por lo que puede devolver registros relevantes de otros subprocesos para el mismo usuario/agente. Transfiera exact_thread_match=True para restringir los resultados al thread actual. Los valores de ámbito None explícitos siguen las reglas de coincidencia exacta resueltas: exact_*_match=False deja esa dimensión sin restricciones, mientras que exact_*_match=True solo coincide con los valores None almacenados.

Los valores max_results explícitos deben ser al menos 1; al omitir el argumento se utiliza el valor por defecto de 10. Este es un límite superior: la llamada puede devolver menos de max_results resultados cuando los filtros son demasiado restrictivos, cuando hay menos registros coincidentes o debido al comportamiento de búsqueda específico de la implementación.

método update_memory

Actualice un registro similar a la memoria que sea propiedad de este thread exacto.

method update_memory_async (async)

Actualizar un registro similar a la memoria de forma asíncrona.

Ejemplos

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

Actualizar un registro de mensaje raw propiedad de este thread exacto.

Notas

Los campos omitidos se conservan del registro almacenado. El rol almacenado y el registro de hora permanecen sin cambios. La edición del contenido actualiza el historial de mensajes raw y, cuando la extracción automática está activada, puede hacer que el SDK vuelva a extraer las memorias del mensaje editado y del historial anterior. En el modo INLINE, esa extracción finaliza antes de que se devuelva este método. En el modo BACKGROUND, este método se devuelve después de que la actualización del mensaje raw se realiza correctamente y se intenta la extracción en segundo plano. Este trabajo de seguimiento no afecta a la frecuencia de extracción normal que utilizan las llamadas add_messages() posteriores. Las memorias extraídas existentes permanecen en su lugar mientras que las memorias recién extraídas del contenido editado pueden agregarse. Debido a que la actualización del mensaje sin formato y las escrituras de memoria extraídas posteriores no se producen atómicamente, las memorias extraídas aún pueden reflejar el contenido del mensaje anterior si el trabajo en segundo plano no se pone en cola, si una espera de capacidad de cola configurada alcanza su timeout o si falla el trabajo de extracción posterior. Además, tenga en cuenta que las memorias extraídas existentes mantienen su caducidad original cuando cambia el TTL de un mensaje de origen.

Ejemplos

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

method update_message_async (async)

Actualice un registro de mensaje raw propiedad de este thread exacto de forma asíncrona.

Notas

Los campos omitidos se conservan del registro almacenado. El rol almacenado y el registro de hora permanecen sin cambios. La edición del contenido actualiza el historial de mensajes raw y, cuando la extracción automática está activada, puede hacer que el SDK vuelva a extraer las memorias del mensaje editado y del historial anterior. En el modo INLINE, esa extracción finaliza antes de que se devuelva este método. En el modo BACKGROUND, este método se devuelve después de que la actualización del mensaje raw se realiza correctamente y se intenta la extracción en segundo plano. Este trabajo de seguimiento no afecta a la frecuencia de extracción normal que utilizan las llamadas add_messages() posteriores. Las memorias extraídas existentes permanecen en su lugar mientras que las memorias recién extraídas del contenido editado pueden agregarse. Debido a que la actualización del mensaje sin formato y las escrituras de memoria extraídas posteriores no se producen atómicamente, las memorias extraídas aún pueden reflejar el contenido del mensaje anterior si el trabajo en segundo plano no se pone en cola, si una espera de capacidad de cola configurada alcanza su timeout o si falla el trabajo de extracción posterior. Además, tenga en cuenta que las memorias extraídas existentes mantienen su caducidad original cuando cambia el TTL de un mensaje de origen.

Ejemplos

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

Espere a una extracción de memoria en segundo plano anterior para este thread.

Este método espera a que se inicie la extracción en segundo plano mediante llamadas add_messages(), add_messages_async(), update_message() o update_message_async() anteriores en este thread a través del mismo componente de memoria de agente. Si una de esas llamadas ya está terminando, este método incluye la extracción que comienza antes de esperar.

El método no espera a que se inicie la extracción después de que comience esta espera, a que se inicie la extracción por un componente de memoria de agente diferente o a que se ejecute la extracción en otro proceso. Los fallos de extracción cuentan como finalizados para esta espera.

Ejemplos

thread.wait_for_memory_extraction(timeout=10)

method wait_for_memory_extraction_async (async)

Espere de forma asíncrona la extracción de memoria en segundo plano anterior.

Este método sigue el mismo comportamiento que wait_for_memory_extraction().

Ejemplos

await thread.wait_for_memory_extraction_async(timeout=10)

Nota: delete_message() solo suprime la fila de mensaje raw. Los recuerdos derivados pueden seguir siendo buscables o aparecer en las tarjetas de contexto. Utilice OracleAgentMemory.delete_thread() para suprimir el thread junto con sus mensajes y memorias asociados. La supresión de thread de nivel de cliente espera la extracción en segundo plano aceptada anteriormente ya conocida para ese thread, pero no es una barrera de simultaneidad global para otras operaciones en el mismo thread mientras la supresión está en curso.

Mensajes

clase oracleagentmemory.apis.thread.Message

Bases: object

Tarjetas de contexto

clase oracleagentmemory.apis.contextcard.ContextCard

Bases: ABC

Objeto abstracto de tarjeta de contexto devuelto por las API de thread.

property content (resumen)

clase oracleagentmemory.core.contextcard.OracleContextCard

Bases: ContextCard

Tarjeta de contexto devuelta por un thread de Oracle.

propiedad content

Ejemplos

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

propiedad formatted_content

Ejemplos

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

Resúmenes

clase oracleagentmemory.apis.summary.Summary

Bases: ABC

Objeto abstracto de resumen de thread devuelto por las API de thread.

property content (resumen)

clase oracleagentmemory.core.summary.OracleSummary

Bases: Summary

Resumen devuelto por un thread de Oracle.

Ejemplos

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

propiedad content

Ejemplos

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

propiedad formatted_content

Ejemplos

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