Personnaliser le contenu de la carte contextuelle
Une carte de contexte fournit un contexte compact sur une conversation qu'un agent peut utiliser lors de la génération d'une réponse. Il peut inclure un résumé du fil de conversation, des messages récents et des souvenirs pertinents.
Cet article explique comment personnaliser le contenu renvoyé dans les cartes de contexte Mémoire de l'agent Oracle AI.
Les cartes de contexte renvoyées par get_context_card() peuvent également inclure des rubriques d'extraction et des enregistrements durables pertinents. Utilisez des cartes contextuelles lorsqu'un agent a besoin d'une continuité dans une longue conversation, mais n'a pas besoin que la transcription complète soit renvoyée au modèle. Cela peut réduire l'utilisation des jetons d'entrée, maintenir l'agent concentré et réduire le besoin d'appels d'outil au niveau de l'agent en plaçant la mémoire pertinente dans le contexte d'invite à l'avance.
Pour un workflow complet de compression d'invite avec LangGraph, reportez-vous à Utilisation des API à court terme de mémoire d'agent avec LangGraph. Pour plus de détails sur l'API, reportez-vous à OracleThread et à Cartes de contexte.
Remarque : Utilisez la personnalisation de la carte de contexte lorsque les résultats d'extraction par défaut n'incluent pas la bonne combinaison de types d'enregistrement. Par exemple, une application peut réserver de l'espace pour les préférences utilisateur ou les directives de réponse lorsque les faits généraux dominent les résultats.
Résultats minimum de demande par type d'enregistrement
Par défaut, l'extraction de la carte de contexte recherche simultanément tous les types d'enregistrement de type mémoire. Par exemple, si des faits ou des mémoires générales excluent des préférences ou des directives, transmettez min_relevant_results_by_type pour demander des nombres minimaux pour des types d'enregistrement spécifiques.
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")
llm = Llm(model="provider/model_id")
db_pool = oracledb.SessionPool(
user="YOUR DB USER",
password="YOUR DB PASSWORD",
dsn="YOUR DB CONNECT STRING",
)
memory = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
thread = memory.create_thread(
thread_id="context_card_customization_demo",
user_id="user_123",
agent_id="assistant_456",
memory_extraction_config=MemoryExtractionConfig(
memory_extraction_custom_instructions=(
"Extract restaurant preferences as preference records and assistant "
"response-style instructions as guideline records."
)
),
)
thread.add_messages(
[
{
"role": "user",
"content": "I need vegetarian dinner recommendations for Friday.",
},
{
"role": "assistant",
"content": "I can compare concise options and tradeoffs.",
},
]
)
card = thread.get_context_card(
max_relevant_results=6,
min_relevant_results_by_type={
"preference": 1,
"guideline": 1,
},
)
prompt_context = card.content
print(prompt_context)
La carte affichée est un texte d'invite de type XML. Les enregistrements exacts dépendent de vos données stockées, mais la section <relevant_information> peut inclure les types demandés avant les résultats restants de la recherche tout-memory-types :
<context_card>
<summary>
User is planning dinner recommendations.
</summary>
<topics>
<topic>pizza planning</topic>
<topic>dinner</topic>
</topics>
<relevant_information>
<preference>
<content>User prefers vegetarian restaurants.</content>
</preference>
<guideline>
<content>Offer concise recommendations with clear tradeoffs.</content>
</guideline>
<memory>
<content>User is comparing pizza places for Friday.</content>
</memory>
</relevant_information>
<recent_messages>
...
</recent_messages>
</context_card>
Les minimums sont les meilleurs efforts. S'il n'y a pas assez d'enregistrements correspondants pour un type demandé, l'appel réussit toujours et la capacité de résultat restante peut être remplie par la recherche normale de tous les types de mémoire. Les derniers enregistrements pertinents sont toujours plafonnés par max_relevant_results.
Les clés prises en charge sont "memory", "fact", "guideline" et "preference". Omettez min_relevant_results_by_type pour conserver le comportement d'extraction par défaut de tous les types de mémoire.
Lorsque max_relevant_results est omis, la mémoire de l'agent Oracle utilise le budget pertinent-results par défaut, sauf si le total minimum demandé est supérieur. Dans ce cas, le budget effectif est élargi pour correspondre au total minimum demandé.
Concomitance de recherche de type de réglage
La récupération par type peut exécuter une recherche complète de tous les types de mémoire plus une recherche pour chaque type d'enregistrement demandé. Par défaut, jusqu'à cinq de ces recherches peuvent être exécutées en même temps. Afin de réduire la ventilation de back-end pour un descripteur de thread actif, transmettez context_card_type_search_concurrency lors de la création ou de la réouverture du thread. Cette valeur n'est pas conservée avec la ligne de thread :
thread = memory.get_thread(
"context_card_customization_demo",
context_card_type_search_concurrency=2,
)
card = thread.get_context_card(
max_relevant_results=6,
min_relevant_results_by_type={
"preference": 1,
"guideline": 1,
},
)
Conclusion
Dans ce guide, nous avons appris à demander un nombre minimal de résultats de carte de contexte pour des types d'enregistrement spécifiques de type mémoire et à régler le ventilateur de recherche parallèle utilisé par l'extraction par type.
Après avoir appris à personnaliser l'extraction des cartes contextuelles, vous pouvez maintenant passer à Utilisation des API à court terme de mémoire d'agent avec LangGraph.
Code complet
#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 Context Card Content
#-----------------------------------------------------------------
##Reserve relevant results by record type
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")
llm = Llm(model="provider/model_id")
db_pool = oracledb.SessionPool(
user="YOUR DB USER",
password="YOUR DB PASSWORD",
dsn="YOUR DB CONNECT STRING",
)
memory = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
thread = memory.create_thread(
thread_id="context_card_customization_demo",
user_id="user_123",
agent_id="assistant_456",
memory_extraction_config=MemoryExtractionConfig(
memory_extraction_custom_instructions=(
"Extract restaurant preferences as preference records and assistant "
"response-style instructions as guideline records."
)
),
)
thread.add_messages(
[
{
"role": "user",
"content": "I need vegetarian dinner recommendations for Friday.",
},
{
"role": "assistant",
"content": "I can compare concise options and tradeoffs.",
},
]
)
card = thread.get_context_card(
max_relevant_results=6,
min_relevant_results_by_type={
"preference": 1,
"guideline": 1,
},
)
prompt_context = card.content
print(prompt_context)
##Tune type search concurrency
thread = memory.get_thread(
"context_card_customization_demo",
context_card_type_search_concurrency=2,
)
card = thread.get_context_card(
max_relevant_results=6,
min_relevant_results_by_type={
"preference": 1,
"guideline": 1,
},
)