Introduction à la mémoire de l'agent
Cet article vous guide tout au long de l'installation de la mémoire d'agent et de l'exécution d'opérations de mémoire de base, notamment le stockage et l'extraction du contexte utilisateur.
Prérequis
Vérifiez que vous disposez des éléments suivants :
- Accès à Oracle AI Database 23ai ou version ultérieure (version de base de données 23.4 ou version ultérieure). Reportez-vous à Exécution locale d'Oracle AI Database.
- Python 3.10 à 3.14.
Configuration requise pour les fonctionnalités d'Oracle AI Database
La banque de données sauvegardée par la base de données de la mémoire d'agent Oracle requiert Oracle AI Database 23ai ou une version ultérieure (version de base de données 23.4 ou ultérieure). Pour Oracle AI Vector Search, définissez le paramètre d'initialisation COMPATIBLE de la base de données sur 23.4.0 ou une version ultérieure.
La stratégie de recherche sélectionnée comporte les exigences supplémentaires suivantes :
SearchStrategy.VECTORrequiert Oracle AI Vector Search, y compris le type de donnéesVECTORet les index vectoriels. Il est disponible avec Oracle AI Database 23ai (23.4) ou version ultérieure.SearchStrategy.KEYWORDutilise la même ligne de base Oracle AI Database 23ai (23.4) prise en charge, mais ne crée pas de colonnes vectorielles locales ni d'index vectoriels.SearchStrategy.HYBRIDrequiert Oracle AI Database 23ai Release Update 23.6 ou version ultérieure. Il utilise des index vectoriels hybrides gérés etDBMS_HYBRID_VECTOR.SEARCH.
Pendant l'initialisation du schéma géré, la mémoire de l'agent Oracle valide la version de la base de données connectée avant d'exécuter le script DDL et signale une action de mise à niveau lorsque la stratégie de recherche sélectionnée n'est pas disponible.
Configuration de la base de données gérée
Lorsqu'un propriétaire de schéma crée ou recrée une banque de mémoire, le package Python de mémoire de l'agent Oracle prépare les objets de base de données gérés dont il a besoin. Le propriétaire a besoin des privilèges système Oracle CREATE TABLE et CREATE PROCEDURE.
Connectez-vous en tant que propriétaire du schéma pour la configuration du schéma. Une connexion d'application utilisant schema_owner accède à un emplacement de stockage existant et doit utiliser SchemaPolicy.REQUIRE_EXISTING. Elle ne crée ni ne met à jour les objets de base de données gérés du propriétaire.
Installation du kit SDK
Vous trouverez toutes les versions et plates-formes prises en charge de oracleagentmemory sur la page de téléchargement de logiciel.
Pour installer la mémoire de l'agent, exécutez :
pip install "oracleagentmemory==26.8.0"
L'installation avec pip tire des roues binaires prédéfinies sur les plates-formes prises en charge.
Journalisation et tests de diagnostic
Oracle AI Agent Memory émet des messages de diagnostic via la journalisation Python standard sous les noms de journaliseur commençant par oracleagentmemory. Le kit SDK ne configure pas de gestionnaires ou de niveaux de journalisation. Les applications peuvent acheminer ces journaux vers leur console, fichier ou pipeline d'observabilité existant. Certains enregistrements de journal utilisent les champs extra de la journalisation Python pour des diagnostics structurés sécurisés, qui peuvent être capturés par des gestionnaires de journalisation structurés.
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger("oracleagentmemory").setLevel(logging.INFO)
Pour le dépannage dans les environnements contrôlés, activez les journaux DEBUG :
logging.getLogger("oracleagentmemory").setLevel(logging.DEBUG)
Conservez les déploiements de production à un niveau autre que DEBUG. Les journaux DEBUG sont destinés au développement et à la prise en charge des diagnostics, et le texte des messages de journal ne doit pas être traité comme une API publique stable.
Purge des enregistrements de durée de vie et expirés
Les messages et les mémoires sauvegardés par Oracle DB peuvent expirer automatiquement grâce à une combinaison de valeurs par défaut de conservation au niveau du schéma et de valeurs ttl_days/ttl_anchor par enregistrement sur les API d'écriture et de mise à jour.
Lorsque la mémoire de l'agent Oracle crée ou met à niveau son schéma géré, elle crée également un travail de purge DBMS_SCHEDULER quotidien qui enlève physiquement les lignes expirées, leurs blocs d'extraction et les blocs d'extraction orphelins dont la ligne source prise en charge n'existe plus. Si la configuration de schéma doit créer ce travail mais que l'utilisateur de base de données ne dispose pas de CREATE JOB, la configuration se termine par un avertissement : les lignes expirées restent filtrées hors des lectures et des recherches, mais les blocs expirés et orphelins ne sont pas purgés physiquement tant qu'un utilisateur privilégié n'a pas créé le travail. Sous SchemaPolicy.REQUIRE_EXISTING, un travail de purge manquant est toléré et consigné au niveau DEBUG.
Les schémas à mémoire liée créent également un déclencheur qui valide de nouveau les mémoires restantes après la suppression d'un lien, y compris lorsque le travail de purge supprime une mémoire expirée et qu'Oracle met ses liens en cascade. Le propriétaire du schéma a besoin de CREATE TRIGGER lors de la création ou de la mise à niveau du schéma ; les utilisateurs d'exécution standard n'ont pas besoin de ce privilège.
Pour obtenir le modèle de conservation complet, la configuration MemoryRetentionConfig, les requêtes de vérification de purge, la création manuelle de travaux d'administrateur de base de données et des exemples Python à l'aide de TimeToLiveAnchor, reportez-vous à Utilisation du délai de vie pour les messages et les mémoires.
Autorisations de schéma Linked-Memory
Le schéma de mémoire liée inclut un graphique de propriétés Oracle SQL et un déclencheur de base de données qui conserve l'état de cycle de vie correct lorsque des liens sont supprimés.
Si vous définissez memory_store_id, le nom du graphique géré est préfixé de la même manière que les tables. Par exemple, memory_store_id="SALES" crée SALES_MEMORY_GRAPH.
Les valeurs APP_SCHEMA et APP_USER sont des espaces réservés. Remplacez-les par vos noms utilisateur de base de données. Les exemples utilisent des majuscules car les identificateurs Oracle sans guillemets sont stockés en majuscules.
- Lors de la configuration du schéma, accordez au propriétaire du schéma
CREATE PROPERTY GRAPHetCREATE TRIGGER. Ils sont requis avecSchemaPolicy.CREATE_IF_NECESSARYouSchemaPolicy.RECREATEchaque fois que le graphique géré ou le déclencheur de suppression de lien doit être créé.GRANT CREATE PROPERTY GRAPH TO APP_SCHEMA; GRANT CREATE TRIGGER TO APP_SCHEMA; -- Run OracleAgentMemory schema setup as APP_SCHEMA. REVOKE CREATE PROPERTY GRAPH FROM APP_SCHEMA; REVOKE CREATE TRIGGER FROM APP_SCHEMA;Accordez-les à nouveau avant une mise à niveau ultérieure du kit SDK si cette mise à niveau doit créer ou recréer le graphique géré ou le déclencheur de suppression de lien.
- Au cours de l'exécution normale de l'application, déterminez l'utilisateur qui se connecte à Oracle :
- Si l'utilisateur d'exécution est
APP_SCHEMA, aucune autorisation de graphique supplémentaire n'est nécessaire. Le propriétaire du graphique peut accéder à son propre graphique. - Si l'utilisateur d'exécution est différent, exécutez la commande suivante en tant que
APP_SCHEMAaprès la configuration du schéma. Le nom de graphique par défaut estMEMORY_GRAPH. Utilisez le nom préfixé lorsquememory_store_idest défini.GRANT SELECT ON PROPERTY GRAPH APP_SCHEMA.MEMORY_GRAPH TO APP_USER;L'utilisateur runtime a également besoin de l'accès normal à la base de données requis par le reste du déploiement de la mémoire de l'agent Oracle.
- Si l'utilisateur d'exécution est
SchemaPolicy.REQUIRE_EXISTING ignore la première étape car il s'attend à ce que le graphique et le déclencheur existent déjà. Un utilisateur d'exécution distinct a toujours besoin d'accéder au graphique de propriétés gérées.
Initialiser l'instance de mémoire
Créez une instance OracleAgentMemory en configurant l'intégrateur, le LLM et la connexion de base de données.
import oracledb
from oracleagentmemory.core import SchemaPolicy
from oracleagentmemory.core.oracleagentmemory import OracleAgentMemory
from oracleagentmemory.apis.searchscope import SearchScope
from oracleagentmemory.core.embedders.embedder import Embedder
from oracleagentmemory.core.llms.llm import Llm
embedder = Embedder(model="YOUR_EMBEDDING_MODEL")
llm = Llm(model="YOUR_LLM")
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,
schema_policy=SchemaPolicy.CREATE_IF_NECESSARY,
memory_store_id="T_GET_STARTED",
)
Remarque : par défaut, les schémas Oracle AI Database gérés ne définissent pas de période de conservation pour les messages et les mémoires. Configurez les paramètres de durée de vie MemoryRetentionConfig ou par enregistrement pour utiliser une période de conservation différente. Pour plus d'informations, reportez-vous à Utilisation du délai de vie pour les messages et les mémoires.
Stocker les entrées de mémoire
Commencez par créer un thread, ajouter des messages et stocker une entrée de mémoire pour l'utilisateur.
messages = [
{
"role": "user",
"content": (
"Orange juice has become my favorite breakfast drink lately, "
"what can I pair it with?"
),
},
{
"role": "assistant",
"content": (
"Nice! Orange juice goes great with something savory. "
"Try eggs and toast, avocado toast, or a breakfast sandwich."
),
},
]
thread = memory.create_thread(user_id="user_123")
#add_messages will add messages to the DB and extract memories automatically
thread.add_messages(messages)
#add_memory adds memory to the DB
thread.add_memory("The user likes orange juice with breakfast.")
Récupérer les entrées de mémoire
Rechercher des mémoires à l'aide d'une requête de portée utilisateur.
results = memory.search(query="orange juice", scope=SearchScope(user_id="user_123"))
for result in results:
print(f"- [{result.record.record_type}] {result.content}")
Sortie :
- [memory] The user likes orange juice with breakfast.
- [message] Orange juice has become my favorite breakfast drink lately, what can I pair it with?
- [message] Nice! Orange juice goes great with something savory. Try eggs and toast,
avocado toast, or a breakfast sandwich.
Remarque : La sortie affichée est illustrative. Les versions futures peuvent renvoyer des types de résultats, des champs ou des prescriptions supplémentaires.
Compatibilité des modèles
Les grands modèles de langage (LLM) et les modèles d'intégration suivants sont compatibles avec oracleagentmemory.
LLM
Les grands modèles de langage (LLM) suivants ont été confirmés comme compatibles.
Modèles hébergés par OCI
oci/google.gemini-2.5-flashoci/google.gemini-2.5-flash-liteoci/google.gemini-2.5-prooci/xai.grok-4.20-0309-non-reasoningoci/xai.grok-4.20-0309-reasoningoci/xai.grok-4.20-non-reasoningoci/xai.grok-4.20-reasoningoci/xai.grok-4.3oci/openai.gpt-5(et versions de5.1à5.6)
OpenAI
openai/gpt-4.1(et-mini)openai/gpt-4oopenai/gpt-5(et-mini)openai/gpt-5.1openai/gpt-5.2openai/gpt-5.4(et-mini)openai/gpt-5.5openai/gpt-5.6-luna(etterra,sol)openai/gpt-6-astra
LLM auto-hébergés
openai/google/gemma-4-26B-A4B-itopenai/openai/gpt-oss-120b
Anthropique
anthropic/claude-opus-4-7anthropic/claude-opus-4-6anthropic/claude-sonnet-4-6anthropic/claude-haiku-4-5
Gémeaux
gemini/gemini-3.1-flash-lite-previewgemini/gemini-3-flash-previewgemini/gemini-3.1-pro-preview
Intégrations
Les modèles d'intégration suivants ont été confirmés comme compatibles.
Modèles hébergés par OCI
oci/cohere.embed-v4.0
OpenAI
openai/text-embedding-3-largeopenai/text-embedding-3-small
LLM auto-hébergés
hosted_vllm/nomic-embed-text
Gémeaux
gemini/gemini-embedding-001gemini/gemini-embedding-2-preview