Personalizar extracción automática de memoria

La extracción automática de memoria puede capturar detalles útiles sin configuración adicional. Las instrucciones personalizadas permiten a una aplicación agregar orientación al proceso de extracción cuando el comportamiento por defecto se debe adaptar para un caso de uso específico.

En este artículo se explica cómo guiar la extracción automática de memoria del agente de Oracle AI con instrucciones personalizadas.

Las instrucciones personalizadas proporcionan orientación adicional específica de la aplicación para la extracción de memoria. Son útiles cuando la aplicación necesita extracción para reflejar el conocimiento del dominio, la política de productos o las prioridades específicas de la conversación.

Nota: Utilice instrucciones personalizadas cuando la extracción de memoria deba seguir instrucciones específicas de la aplicación. La extracción por defecto es adecuada cuando no se necesita orientación adicional.

Indicación: Consulte Introducción a la memoria del agente para obtener información sobre cómo instalar oracleagentmemory. Si necesita una base de datos Oracle local para este ejemplo, siga Ejecutar Oracle AI Database localmente.

Configuración de instrucciones de extracción a nivel de cliente

Cree el componente Memoria de Agente de Oracle con una conexión o pool de Oracle DB, un embebido, un LLM e instrucciones de extracción centradas en el soporte. Estas instrucciones se aplican a los threads creados o cargados a través de este cliente, a menos que un thread proporcione sus propias instrucciones de extracción.

import oracledb

from oracleagentmemory.core import MemoryExtractionConfig
from oracleagentmemory.core.embedders.embedder import Embedder
from oracleagentmemory.core.llms.llm import Llm
from oracleagentmemory.core.oracleagentmemory import OracleAgentMemory


embedder = Embedder(model="YOUR_EMBEDDING_MODEL")
memory_llm = Llm(model="YOUR_MEMORY_LLM")
db_pool = oracledb.SessionPool(
    user="YOUR DB USER",
    password="YOUR DB PASSWORD",
    dsn="YOUR DB CONNECT STRING",
)

support_extraction_instructions = """
Only extract customer support facts:
- order ids
- return requests
- delivery problems
Ignore greetings, small talk, and one-off troubleshooting text.
""".strip()

memory = OracleAgentMemory(
    connection=db_pool,
    embedder=embedder,
    llm=memory_llm,
    memory_extraction_config=MemoryExtractionConfig(
        memory_extraction_custom_instructions=support_extraction_instructions
    ),
)
Referencia de API: OracleAgentMemory OracleThread

Extraer recuerdos de soporte de mensajes de thread

Cree un thread de soporte y agregue mensajes de usuario y asistente. En el ejemplo, se define memory_extraction_config=MemoryExtractionConfig(memory_extraction_frequency=1) para que add_messages() ejecute la extracción automática inmediatamente para la vuelta insertada. Las instrucciones personalizadas mantienen la memoria extraída centrada en los ID de pedido, las solicitudes de devolución y los problemas de entrega.

support_thread = memory.create_thread(
    thread_id="support_ticket_7421",
    user_id="customer_123",
    memory_extraction_config=MemoryExtractionConfig(memory_extraction_frequency=1),
)

#add_messages persists the turn and runs automated memory extraction because
#MemoryExtractionConfig(memory_extraction_frequency=1) is set for this thread.
support_thread.add_messages(
    [
        {
            "role": "user",
            "content": (
                "Hi, order 7421 arrived damaged. I need a return request "
                "and a replacement delivery."
            ),
        },
        {
            "role": "assistant",
            "content": "I can help start the return request for order 7421.",
        },
    ]
)

results = support_thread.search(
    "return request order 7421",
    max_results=5,
    record_types=["fact"],
)
for result in results:
    print(f"- [{result.record.record_type}] {result.content}")

Salida:

- [fact] Customer reported damaged order 7421 and requested a return and replacement delivery.

La salida mostrada anteriormente es ilustrativa. El texto exacto de la memoria depende del LLM de extracción configurado, pero las memorias extraídas deben seguir las instrucciones personalizadas proporcionadas al cliente.

La diferencia es más fácil de ver al comparar el tipo de memoria que se le pide al extractor:

Con instrucciones personalizadas

El extractor mantiene el hecho duradero de soporte al cliente e ignora el saludo y la redacción conversacional.

- [fact] Customer reported damaged order 7421 and requested a return and replacement delivery.

Sin instrucciones personalizadas

El extractor puede mantener una memoria de conversación más amplia porque el campo de extracción por defecto no tiene un ámbito para admitir operaciones.

- [memory] The user contacted support about order 7421 and discussed a damaged delivery.
Referencia de API: OracleThread Resultado de búsqueda de Oracle

Instrucciones de sustitución para un thread

Transfiera memory_extraction_config=MemoryExtractionConfig(memory_extraction_custom_instructions=...) a create_thread() cuando un thread necesite una política de extracción más estrecha que la predeterminada del cliente. El valor de nivel de thread tiene prioridad para ese thread y se mantiene con la configuración del thread.

billing_thread = memory.create_thread(
    thread_id="billing_ticket_9310",
    user_id="customer_123",
    memory_extraction_config=MemoryExtractionConfig(
        memory_extraction_frequency=1,
        memory_extraction_custom_instructions=(
            "Only extract billing facts, invoice identifiers, and payment issues."
        ),
    ),
)

billing_thread.add_messages(
    [
        {
            "role": "user",
            "content": "Invoice INV-9310 was paid twice and needs a refund.",
        }
    ]
)
Referencia de API: OracleAgentMemory OracleThread

Actualizar o borrar instrucciones de subproceso

Utilice update_thread() para cambiar las instrucciones de extracción persistentes para un thread existente. Transfiera None para borrar las instrucciones de nivel de thread para que los identificadores de thread futuros utilicen las instrucciones de nivel de cliente o, si no se configura ninguna, el comportamiento de extracción normal del SDK.

memory.update_thread(
    "support_ticket_7421",
    memory_extraction_config=MemoryExtractionConfig(
        memory_extraction_custom_instructions=(
            "Only extract product defects and replacement requests."
        )
    ),
)

memory.update_thread(
    "support_ticket_7421",
    memory_extraction_config=MemoryExtractionConfig(
        memory_extraction_custom_instructions=None
    ),
)

Nota: get_thread(..., memory_extraction_config=MemoryExtractionConfig(memory_extraction_custom_instructions=...)) puede aplicar instrucciones al identificador de thread activo devuelto sin actualizar la configuración de thread persistente.

Referencia de API: OracleAgentMemory OracleThread

Conclusión

En esta guía hemos aprendido a configurar instrucciones de extracción personalizadas a nivel de cliente, sustituirlas para un thread específico y actualizar o borrar instrucciones de extracción a nivel de thread.

Después de haber aprendido a personalizar la extracción automatizada, ahora puede continuar con Uso de API de corto plazo de memoria de agente con LangGraph.

Código Completo

#Copyright © 2026 Oracle and/or its affiliates.
#This software is under the Apache License 2.0
#(LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) or Universal Permissive License
#(UPL) 1.0 (LICENSE-UPL or https://oss.oracle.com/licenses/upl), at your option.

#Oracle Agent Memory Code Example - Customize Automatic Memory Extraction
#------------------------------------------------------------------------

##Configure custom memory extraction instructions

import oracledb

from oracleagentmemory.core import MemoryExtractionConfig
from oracleagentmemory.core.embedders.embedder import Embedder
from oracleagentmemory.core.llms.llm import Llm
from oracleagentmemory.core.oracleagentmemory import OracleAgentMemory


embedder = Embedder(model="YOUR_EMBEDDING_MODEL")
memory_llm = Llm(model="YOUR_MEMORY_LLM")
db_pool = oracledb.SessionPool(
    user="YOUR DB USER",
    password="YOUR DB PASSWORD",
    dsn="YOUR DB CONNECT STRING",
)

support_extraction_instructions = """
Only extract customer support facts:
- order ids
- return requests
- delivery problems
Ignore greetings, small talk, and one-off troubleshooting text.
""".strip()

memory = OracleAgentMemory(
    connection=db_pool,
    embedder=embedder,
    llm=memory_llm,
    memory_extraction_config=MemoryExtractionConfig(
        memory_extraction_custom_instructions=support_extraction_instructions
    ),
)



##Extract support memories from thread messages

support_thread = memory.create_thread(
    thread_id="support_ticket_7421",
    user_id="customer_123",
    memory_extraction_config=MemoryExtractionConfig(memory_extraction_frequency=1),
)

#add_messages persists the turn and runs automated memory extraction because
#MemoryExtractionConfig(memory_extraction_frequency=1) is set for this thread.
support_thread.add_messages(
    [
        {
            "role": "user",
            "content": (
                "Hi, order 7421 arrived damaged. I need a return request "
                "and a replacement delivery."
            ),
        },
        {
            "role": "assistant",
            "content": "I can help start the return request for order 7421.",
        },
    ]
)

results = support_thread.search(
    "return request order 7421",
    max_results=5,
    record_types=["fact"],
)
for result in results:
    print(f"- [{result.record.record_type}] {result.content}")
#- [fact] Customer reported damaged order 7421 and requested a return and replacement delivery.



##Override custom instructions for one thread

billing_thread = memory.create_thread(
    thread_id="billing_ticket_9310",
    user_id="customer_123",
    memory_extraction_config=MemoryExtractionConfig(
        memory_extraction_frequency=1,
        memory_extraction_custom_instructions=(
            "Only extract billing facts, invoice identifiers, and payment issues."
        ),
    ),
)

billing_thread.add_messages(
    [
        {
            "role": "user",
            "content": "Invoice INV-9310 was paid twice and needs a refund.",
        }
    ]
)



##Update or clear thread custom instructions

memory.update_thread(
    "support_ticket_7421",
    memory_extraction_config=MemoryExtractionConfig(
        memory_extraction_custom_instructions=(
            "Only extract product defects and replacement requests."
        )
    ),
)

memory.update_thread(
    "support_ticket_7421",
    memory_extraction_config=MemoryExtractionConfig(
        memory_extraction_custom_instructions=None
    ),
)