Kontextkarteninhalt anpassen
Eine Kontextkarte bietet kompakten Kontext zu einer Unterhaltung, die ein Agent beim Generieren einer Antwort verwenden kann. Es kann eine Konversationsthreadzusammenfassung, aktuelle Nachrichten und relevante Erinnerungen enthalten.
In diesem Artikel wird erläutert, wie Sie den in Oracle AI Agent Memory-Kontextkarten zurückgegebenen Inhalt anpassen.
Kontextkarten, die von get_context_card() zurückgegeben werden, können auch Abrufthemen und relevante dauerhafte Datensätze enthalten. Verwenden Sie Kontextkarten, wenn ein Agent für eine lange Unterhaltung Kontinuität benötigt, das vollständige Transkript jedoch nicht an das Modell zurückgesendet werden muss. Dies kann die Verwendung von Eingabetokens reduzieren, den Agent fokussieren und die Notwendigkeit einiger Toolaufrufe auf Agent-Ebene reduzieren, indem der relevante Speicher im Prompt-Kontext im Voraus platziert wird.
Einen vollständigen Prompt-Compaction-Workflow mit LangGraph finden Sie unter Agent Memory Short-Term APIs mit LangGraph verwenden. API-Details finden Sie unter OracleThread und Kontextkarten.
Hinweis: Verwenden Sie die Anpassung der Kontextkarte, wenn die Standardabrufergebnisse nicht die richtige Mischung aus Datensatztypen enthalten. Beispiel: Eine Anwendung kann Speicherplatz für Benutzervoreinstellungen oder Antwortrichtlinien reservieren, wenn allgemeine Fakten die Ergebnisse sonst dominieren würden.
Minimale Ergebnisse nach Datensatztyp anfordern
Standardmäßig durchsucht Kontextkartenabruf alle speicherähnlichen Datensatztypen gleichzeitig. Beispiel: Wenn Fakten oder allgemeine Erinnerungen Voreinstellungen oder Richtlinien verdrängen, übergeben Sie min_relevant_results_by_type, um Mindestanzahlen für bestimmte Datensatztypen zu verlangen.
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)
Die gerenderte Karte ist XML-ähnlicher Prompt-Text. Die genauen Datensätze hängen von Ihren gespeicherten Daten ab. Der Abschnitt <relevant_information> kann jedoch die angeforderten Typen enthalten, bevor die restlichen Ergebnisse aus der Suche nach All-Memory-Typen abgerufen werden:
<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>
Die Mindestwerte sind die beste Anstrengung. Wenn nicht genügend übereinstimmende Datensätze für einen angeforderten Typ vorhanden sind, ist der Aufruf weiterhin erfolgreich, und die verbleibende Ergebniskapazität kann durch die normale Suche nach All-Memory-Typen gefüllt werden. Die endgültigen relevanten Datensätze werden immer durch max_relevant_results begrenzt.
Unterstützte Schlüssel sind "memory", "fact", "guideline" und "preference". Lassen Sie min_relevant_results_by_type weg, um das Standardabrufverhalten für alle Speichertypen beizubehalten.
Wenn max_relevant_results ausgelassen wird, verwendet Oracle Agent Memory das Standardbudget für relevante Ergebnisse, es sei denn, die angeforderte Mindestsumme ist größer. In diesem Fall wird das effektive Budget entsprechend dem geforderten Mindestbetrag erweitert.
Nebenläufigkeit für Suchtyp optimieren
Pro Typabruf kann eine Bestückungssuche mit einem All-Memory-Typ sowie eine Suche nach jedem angeforderten Datensatztyp ausführen. Standardmäßig können bis zu fünf dieser Suchen gleichzeitig ausgeführt werden. Um Backend-Fanout für ein Live-Thread-Handle zu reduzieren, übergeben Sie context_card_type_search_concurrency, wenn Sie den Thread erstellen oder erneut öffnen. Dieser Wert wird in der Threadzeile nicht beibehalten:
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,
},
)
Schlussfolgerung
In diesem Handbuch haben wir gelernt, wie Sie die minimale Anzahl von Kontextkartenergebnissen für bestimmte speicherähnliche Datensatztypen anfordern und wie Sie das parallele Such-Fanout optimieren, das vom Abruf pro Typ verwendet wird.
Nachdem Sie gelernt haben, wie Sie den Kontextkartenabruf anpassen, können Sie jetzt mit Agent-Speicher-Kurzzeit-APIs mit LangGraph verwenden fortfahren.
Vollständiger Code
#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,
},
)