自訂內容卡內容
情境卡提供關於服務人員在產生回應時可使用的對話的精簡內容。它可以包含對話執行緒摘要、相關儲存的訊息,以及相關記憶。
本指南說明如何自訂 Oracle AI Agent Memory 內容卡中所傳回的內容。
get_context_card() 傳回的內容卡也可以包含擷取主題與相關記錄。當專員需要長期對話的連續性,但不需要將完整成績單傳回模型時,請使用內容卡。這可以減少輸入記號的使用量、讓代理程式保持焦點,以及藉由將相關記憶體放在提示相關資訊環境前方,減少對某些代理程式層級工具呼叫的需求。
如需含有 LangGraph 的完整提示壓縮工作流程,請參閱使用 Oracle Agent Memory 短期 API 搭配 LangGraph 。如需 API 詳細資訊,請參閱 OracleThread 和 Context Cards 。
備註:當預設擷取結果未包含記錄類型的正確組合時,請使用內容卡自訂。例如,當一般事實主導結果時,應用程式可以保留使用者偏好設定或回應準則的空間。
若要針對搜尋與內容卡設定結果限制、重新排名、刪減或變數替代字預算,請參閱改善搜尋結果相關性。
依記錄類型要求最低結果
依預設,內容卡擷取會一次搜尋所有類似記憶體的記錄類型。例如,如果事實或一般記憶體擁擠偏好設定或準則,請傳送 min_relevant_results_by_type 以要求特定記錄類型的計數下限。
import oracledb
from oracleagentmemory.core import MemoryExtractionConfig, SchemaPolicy
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="localhost:1521/...",
)
memory_store_id = "T_CARD_CONTENT"
memory = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
schema_policy=SchemaPolicy.CREATE_IF_NECESSARY,
memory_store_id=memory_store_id
)
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,
"message": 1,
},
)
prompt_context = card.content
print(prompt_context)
呈現的卡片是類似 XML 的提示文字。確切的記錄取決於您儲存的資料,但 <relevant_information> 區段可在所有記憶體類型搜尋的剩餘結果之前包含要求的類型:
<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>
最小值是最佳努力。如果要求的類型沒有足夠的相符記錄,則呼叫仍會成功。任何支援的類似記憶體的記錄類型相符項目都可以使用剩餘的結果插槽。最終相關記錄一律以 max_relevant_results 為上限。
支援的金鑰為 "memory"、"fact"、"guideline"、"preference" 及 "message"。只會在目前執行緒中搜尋訊息結果;其他記錄類型會保留一般使用者 / 代理搜尋範圍。省略 min_relevant_results_by_type 以保留預設的擷取行為。
建立相關資訊環境卡時,Oracle Agent Memory 會從目前執行緒中的訊息個別搜尋類似記憶體的記錄。設定重新分級或刪減時,會在組合集合之前,分別套用至每一組結果。提供 min_relevant_results_by_type 時,會分別搜尋每個要求的記錄類型。若配置了重新排序或刪減,也會分別套用至每個搜尋的結果。另一種搜尋所有類似記憶體的記錄類型後,即可使用任何保留的結果位置。
相較之下,如果針對要求多個 record_types 的一般搜尋設定重新排名或刪減,則會在合併的搜尋結果套用一次。
省略 max_relevant_results 時,除非要求的總計下限較大,否則 Oracle 代理程式記憶體會使用預設的相關結果預算。在此情況下,有效預算會擴充以符合要求的最小總計。
調整類型搜尋並行
建立環境定義卡可以對每個要求的記錄類型執行一個搜尋,再對所有類似記憶體的記錄類型執行一個搜尋,以使用任何剩餘的結果槽位。依預設,最多可同時執行五個搜尋。若要減少即時繫線控點的同時搜尋次數,請在建立或重新開啟繫線時傳送 context_card_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,
"message": 1,
},
)
結論
在本指南中,我們瞭解如何針對特定類似記憶體的記錄類型要求相關資訊環境卡結果計數下限,以及如何調整每種類型擷取所使用的平行搜尋扇出。
→ 瞭解如何自訂相關資訊環境卡擷取之後,您現在可以繼續使用 Oracle 代理程式記憶體短期 API 搭配 LangGraph 。
完整代碼
#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, SchemaPolicy
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="localhost:1521/...",
)
memory_store_id = "T_CARD_CONTENT"
memory = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
schema_policy=SchemaPolicy.CREATE_IF_NECESSARY,
memory_store_id=memory_store_id
)
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,
"message": 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,
"message": 1,
},
)