Negozi e schema
Questa pagina presenta le astrazioni dell'area di memorizzazione principale e i controlli dello schema utilizzati dall'SDK di memoria dell'agente Oracle.
API negozio
Semantica scrittura negozio
Le scritture dell'area di memorizzazione mantengono una chiara separazione tra il testo memorizzato da un'applicazione e il payload utilizzato dall'area di memorizzazione per il recupero. La maggior parte delle applicazioni può utilizzare le API a livello di memoria e thread e lasciare che l'area di memorizzazione prepari le righe di ricerca necessarie per il recupero vettoriale, di parole chiave o ibrido. Le API di memorizzazione di livello inferiore espongono index_texts, index_text, embeddings e embedding per integrazioni avanzate che sanno già quale testo o vettori devono essere utilizzati per il recupero.
Pensa a ogni scrittura come a due pezzi correlati:
contentsinadd()etextinupdate()controllano il testo del record memorizzato restituito daget(),list()e dai risultati della ricerca.index_textsinadd()eindex_textinupdate()controllano il testo scritto nelle righe di recupero del negozio. La ricerca utilizza tali righe, quindi restituisce i record logici originali.
Se non viene fornita alcuna sostituzione di ricerca o incorporamento esplicito, l'area di memorizzazione utilizza il testo memorizzato risolto come testo di recupero. Il testo non vuoto viene messo in chunk dal negozio durante la configurazione del chunk. Testo vuoto memorizza il testo del record, ma non fornisce alcun testo di recupero.
Nella tabella seguente viene descritto come viene scelto il testo di recupero prima di considerare i payload vettoriali espliciti.
Payload di recupero a livello di negozio
| Input | Aggiungi() | update() |
|---|---|---|
index_texts o index_text omesso |
Ogni record utilizza il valore contents risolto per il recupero. |
Per il recupero viene utilizzato un valore text sostitutivo. Se viene omesso anche text, gli aggiornamenti di solo incorporamento riutilizzano le righe di testo di recupero esistenti del record. |
Voce stringa index_texts o stringa index_text |
La stringa sostituisce il testo di recupero per il record. Il negozio può eseguire il chunk prima di scrivere le righe di recupero. | La stringa sostituisce il testo di recupero per il record. Il negozio può eseguire il chunk prima di scrivere le righe di recupero. |
list[str] index_texts voce o list[str] index_text |
L'elenco viene considerato come blocchi di proprietà del chiamante. Ogni stringa non vuota viene scritta come una riga di recupero e il negozio non la raggruppa di nuovo. | L'elenco viene considerato come blocchi di proprietà del chiamante. Ogni stringa non vuota viene scritta come una riga di recupero e il negozio non la raggruppa di nuovo. |
None index_texts voce o index_text=None |
None nell'elenco esterno index_texts significa "utilizzare il contenuto memorizzato per questo record". |
index_text=None cancella le righe di recupero lasciando invariato il testo memorizzato, a meno che non venga fornito anche text. |
| Stringa vuota o elenco chunk vuoto | Memorizza il testo del record e non fornisce alcun testo di recupero per tale record. | Aggiorna il testo del record quando viene fornito text e cancella il testo di recupero per tale record. |
Le integrazioni esplicite sono facoltative. Quando vengono omessi, l'area di memorizzazione ricava vettori locali dal testo di recupero quando è configurata la memorizzazione vettoriale locale; le aree di memorizzazione per parola chiave o ibride possono anche utilizzare righe di recupero solo testo. Quando vengono forniti valori embeddings o embedding espliciti, l'area di memorizzazione scrive tali vettori direttamente e non ne chiama l'incorporatore per tali vettori.
In add(), embeddings=None si comporta come se omettesse embeddings. In update(), embedding=None è esplicito: l'archivio conserva o riscrive il testo di recupero secondo text e index_text, ma memorizza tali righe senza vettori locali. Se text e index_text vengono omessi entrambi, i vettori vengono cancellati dalle righe di recupero esistenti.
La forma vettoriale indica la quantità di proprietà del chunk che il chiamante sta assumendo:
- un vettore significa un vettore per l'intero testo di recupero. L'area di memorizzazione non divide il testo per il vettore esplicito. Se il testo di recupero è vuoto, il vettore può essere memorizzato senza testo di chunk complementare.
- più vettori indicano un vettore per chunk di proprietà del chiamante. Fornire liste di chunk
index_textsoindex_textcorrispondenti oppure utilizzare unupdate()di sola incorporazione che riutilizza le righe di testo di recupero esistenti del record. - i conteggi dei vettori devono corrispondere ai conteggi dei chunk e tutti i vettori espliciti in una chiamata
add()devono avere la stessa dimensione. - un payload vettoriale vuoto per record è consentito solo quando non sono presenti righe di testo di recupero da allineare ad esso.
Alcune combinazioni vengono rifiutate in modo che il testo memorizzato, il testo di recupero e i vettori non si separino. Il passaggio di text=None cancella il testo memorizzato e le righe di recupero, pertanto non può essere combinato con valori index_text o embedding non nulli. I record del profilo attore non supportano text=None. Il passaggio di index_text=None in update() significa "Cancella righe di recupero", pertanto non sono consentite incorporamenti espliciti non vuoti nella stessa chiamata. Più vettori espliciti richiedono testo chunk esplicito, a meno che l'aggiornamento non sia di sola incorporazione e le righe di recupero esistenti non forniscano già il testo chunk.
classe oracleagentmemory.core.OracleMemoryStore
Basi: IMemoryStore
Interfaccia di memorizzazione comune utilizzata da OracleAgentMemory.
Un'implementazione del negozio è responsabile della persistenza dei record di testo e dell'esecuzione di ricerche di somiglianza su di essi. Entrambi i punti di accesso sincrono e asincrono sono definiti in modo che le API di livello superiore possano esporre le superfici di sincronizzazione/asincroni corrispondenti senza duplicare la logica specifica dell'area di memorizzazione.
metodo add
Aggiungere record al negozio.
- Parametri:
- contents
list[str | None]: registra i payload per renderli persistenti. I valori di testo vengono utilizzati anche per l'indicizzazione semantica, a meno che non vengano fornitiindex_textsoembeddings. Quando il valore di testo èNone, le implementazioni possono tornare ametadata["content"]. Le stringhe vuote esplicite vengono conservate. - record_type
str: tipo di record logico da creare, ad esempio"message","memory","guideline","fact","preference","user_profile"o"agent_profile". - index_texts
list[str | list[str] | None]: payload alternativi facoltativi utilizzati solo per l'indicizzazione semantica. Se specificato, l'elenco esterno deve essere allineato agli input di testo. Ogni voce può essere una stringa, che il negozio può chunk internamente, o una lista di stringhe non vuote, che il negozio considera come chunk di proprietà del chiamante e non deve dividere di nuovo. - embeddings
list[list[float] | ndarray | list[list[float] | ndarray]]: vettori di incorporamento precalcolati facoltativi allineati con gli input di testo. Ogni voce di record può essere un vettore di incorporamento o un elenco di vettori di incorporamento di chunk per quel record. Se fornito, il negozio deve utilizzare questi vettori direttamente invece di invocare il suo embedder. Più vettori per un record richiedono la corrispondenza con gli elenchi di chunkindex_textsin modo che i limiti del testo e del chunk vettoriale siano espliciti. Se non viene fornito, le aree di memorizzazione di solito derivano lo stato semantico dall'incorporatore configurato, ma le modalità di indicizzazione basate sul testo specifiche dell'implementazione possono anche consentire scritture di solo testo senza una. - record_ids
str | None | list[str | None]: identificativi facoltativi visibili al chiamante. È possibile utilizzare una singola stringa per gli inserimenti di un record, mentre gli elenchi devono essere allineati agli input di testo. Gli identificativi generati vengono restituiti quando questo campo viene omesso. - thread_ids
str | None | list[str | None]: identificativi di thread facoltativi associati ai record inseriti. I valori scalari possono essere trasmessi attraverso input di testo allineati. - user_ids
str | None | list[str | None]: identificativi utente facoltativi associati ai record inseriti. I valori scalari possono essere trasmessi attraverso input di testo allineati. - agent_ids
str | None | list[str | None]: identificativi agente facoltativi associati ai record inseriti. I valori scalari possono essere trasmessi attraverso input di testo allineati. - roles
str | None | list[str | None]: ruoli messaggio facoltativi quali"user"o"assistant". I valori scalari possono essere trasmessi attraverso input di testo allineati. Utilizzato solo se record_type è"message". - timestamps
str | None | list[str | None]: indicatori orari facoltativi da salvare con i record. Ogni indicatore orario rappresenta la data di creazione del record. I valori scalari possono essere trasmessi attraverso input di testo allineati. Le voci omesse oNoneutilizzano l'ora corrente. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]: dizionari di metadati forniti dal chiamante opzionali. I metadati possono includere"content"come origine di fallback quando un valore di testo viene omesso anziché impostato in modo esplicito su"". - ttl_days
int | None | list[int | None]: durata Time To Live facoltativa in giorni per i record che supportano la scadenza. Omettere questo argomento per utilizzare il valore predefinito dell'area di memorizzazione. PassareNoneper i record che non devono scadere. I valori scalari possono essere trasmessi attraverso input di testo allineati. - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor]: ancoraggio Time To Live opzionale. UtilizzareTimeToLiveAnchor.CREATED_ATper scadere in relazione all'ora di creazione memorizzata oppureTimeToLiveAnchor.TIMESTAMPper scadere in relazione all'indicatore orario dell'evento di ciascun record. Se omesso, le implementazioni utilizzanoTimeToLiveAnchor.CREATED_AT. - **store_kwargs (Qualsiasi): opzioni di scrittura specifiche dell'implementazione inoltrate al negozio concreto.
- contents
- Tipo restituito: list[str]
Note
Utilizzare add_batches() quando il chiamante dispone già di uno o più oggetti PendingRecordBatch.
- Restituzioni: identificativi per i record inseriti, nello stesso ordine logico dell'input.
- Tipo restituito: elenco[str]
- Parametri:
- contenuti
list[str | None] - tipo_record
str - testi_indice
list[str | list[str] | None] - embeding
list[list[float] | ndarray | list[list[float] | ndarray]] - ID_record
str | None | list[str | None] - id_thread
str | None | list[str | None] - ID_utente
str | None | list[str | None] - id_agente
str | None | list[str | None] - ruoli
str | None | list[str | None] - Indicatori data/ora
str | None | list[str | None] - metadati
dict[str, Any] | None | list[dict[str, Any] | None] - ttl_days
int | None | list[int | None] - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor] - store_kwargs
Any
- contenuti
metodo add_agent (abstract)
Aggiungere un record profilo agente.
- Parametri:
- agent_id
str: identificativo stabile per il profilo dell'agente. - information
str: testo in formato libero che descrive l'agente. - metadati
dict[str, Any] | None: mapping dei metadati facoltativo memorizzato nella riga del profilo dell'agente.
- agent_id
- Restituzioni: identificativo del record profilo agente creato.
- Tipo restituito: str
metodo add_async (asincrono)
Aggiungere in modo asincrono record orientati alle righe al negozio.
Accetta gli stessi argomenti e restituisce gli stessi identificativi di add().
- Parametri:
- contenuti
list[str | None] - tipo_record
str - testi_indice
list[str | list[str] | None] - embeding
list[list[float] | ndarray | list[list[float] | ndarray]] - ID_record
str | None | list[str | None] - id_thread
str | None | list[str | None] - ID_utente
str | None | list[str | None] - id_agente
str | None | list[str | None] - ruoli
str | None | list[str | None] - Indicatori data/ora
str | None | list[str | None] - metadati
dict[str, Any] | None | list[dict[str, Any] | None] - ttl_days
int | None | list[int | None] - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor] - store_kwargs
Any
- contenuti
- Tipo restituito: list[str]
metodo add_batches
Aggiungere batch logici preparati dal chiamante all'area di memorizzazione.
- Parametri:
- batches
list[PendingRecordBatch]: batch logici completamente preparati da rendere persistenti. Ogni batch deve contenere i propri campi per record, ad esempiorecord_type, valori di ambito, ruoli, indicatori orari e metadati. - **store_kwargs (Qualsiasi): opzioni di scrittura specifiche dell'implementazione inoltrate al negozio concreto.
- batches
- Restituzioni: identificativi per i record inseriti, nello stesso ordine logico dei batch e delle righe di input.
- Tipo restituito: elenco[str]
Esempi
store.add_batches(
[
PendingRecordBatch(
texts=["pizza batch"],
record_type="memory",
record_ids="mem-batch-docs",
)
]
)
['mem-batch-docs']
metodo add_batches_async (asincrono)
Aggiungere in modo asincrono batch logici preparati dal chiamante all'area di memorizzazione.
Accetta gli stessi argomenti e restituisce gli stessi identificativi di add_batches().
- Parametri:
- batch
list[PendingRecordBatch] - store_kwargs
Any
- batch
- Tipo restituito: list[str]
metodo add_user (abstract)
Aggiungere un record profilo utente.
- Parametri:
- user_id
str: identificativo stabile per il profilo utente. - information
str: testo in formato libero che descrive l'utente. - metadata
dict[str, Any] | None: mapping dei metadati facoltativo memorizzato nella riga del profilo utente.
- user_id
- Restituzioni: identificativo del record profilo utente creato.
- Tipo restituito: str
metodo delete (abstract)
Eliminare un record memorizzato in base all'identificativo.
- Parametri:
- record_type
str: tipo logico del record da rimuovere. - record_id
str: identificativo del record da rimuovere. - cascade
bool: quando si utilizzaTrue, applicare qualsiasi comportamento di eliminazione a catena supportato dall'area di memorizzazione per le destinazioni di livello superiore richieste all'interno della stessa operazione di eliminazione. Viene utilizzato principalmente per destinazioni quali i profili attore che possiedono record con ambito aggiuntivo. Ad esempio, una cascata di profilo utente o di profilo agente può eliminare i thread di proprietà stessi, i messaggi con ambito thread e i record di memoria rimossi con tali thread e qualsiasi record con ambito attore diretto rimanente come messaggi, memorie, linee guida, fatti o preferenze. Per l'eliminazione del profilo attore, questo cleanup con ambito può essere ancora eseguito quando la riga del profilo corrispondente è già assente.
- record_type
- Restituzioni: numero di record di livello superiore richiesti eliminati, in genere
0o1. Le righe figlio a catena non vengono conteggiate separatamente, pertanto è possibile che sia ancora0quando un profilo attore mancante attiva il cleanup con ambito. - Tipo restituito: int.
metodo delete_thread (abstract)
Eliminare un thread e i dati memorizzati associati.
- Parametri: thread_id
str: identificativo del thread da rimuovere. - Restituzioni: numero di record thread eliminati, in genere
0o1. - Tipo restituito: int.
Note
Operazione a livello di negozio per la rimozione di un thread e dei record con ambito thread gestiti dal negozio. Preferire l'eliminazione dei thread quando i requisiti di conservazione richiedono l'eliminazione sia dei messaggi di origine che dei dati di memoria con ambito thread derivato, poiché le eliminazioni a livello di messaggio non implicano la rimozione di record derivati con persistenza separata.
metodo get (abstract)
Recupera un record memorizzato per tipo e identificativo.
- Parametri:
- record_type
str: tipo logico del record da recuperare. - record_id
str: identificativo del record da recuperare.
- record_type
- Restituisce: il record memorizzato, se trovato, altrimenti
None. - Tipo restituito: Record | Nessuno
metodo list (abstract)
Elenca i record memorizzati per un tipo di record.
- Parametri:
- record_type
str: tipo di record logico da enumerare. - limite
int | None: numero massimo facoltativo di record più recenti da restituire. Se omesso, le implementazioni possono applicare un limite superiore sicuro comeMAX_LIST_LIMIT. PassareNoneper disabilitare il limite e restituire ogni record corrispondente. - thread_id
str | None: filtro thread-ambito esatto. Se omesso, non viene applicato alcun filtro. Se impostato suNone, vengono restituiti solo i record il cuithread_idèNone. I tipi di record senza ambito ignorano questo filtro. - user_id
str | None: filtro esatto dell'ambito utente. Se omesso, non viene applicato alcun filtro. Se impostato suNone, vengono restituiti solo i record il cuiuser_idèNone. I tipi di record senza ambito ignorano questo filtro. - agent_id
str | None: filtro agente-ambito esatto. Se omesso, non viene applicato alcun filtro. Se impostato suNone, vengono restituiti solo i record il cuiagent_idèNone. I tipi di record senza ambito ignorano questo filtro. -
filtro_metadata
dict[str, Any] | None:Filtro metadati. Se omesso, non viene applicato alcun filtro. Se impostato su
None, vengono restituiti solo i record i cui metadati sonoNone. Se impostato su un dett, le voci inmetadata_filtervengono combinate con la semantica AND. Le voci il cui valore non è un dizionario operatore a livello di campo utilizzano la semantica di corrispondenza esatta: la chiave richiesta deve esistere nei metadati memorizzati. I dizionari nidificati vengono abbinati in modo ricorsivo. I valori scalari e di elenco corrispondono in base all'uguaglianza esatta; anche l'ordine e la lunghezza dell'elenco devono corrispondere. Per eseguire il test dell'appartenenza all'array, utilizzare un dizionario operatore a livello di campo, ad esempio{"tags": {"$array_contains": "prod"}}. Un operando elenco per"$array_contains"indica che devono essere presenti tutti i valori elencati;"$array_contains_any"indica che deve essere presente almeno un valore elencato. Utilizzare"$not"per negare un'altra espressione a livello di campo nello stesso campo, incluso un dizionario operatore o un valore raw di corrispondenza esatta. Le espressioni negative corrispondono quando l'espressione positiva non riesce, inclusi i campi mancanti; l'appartenenza all'array negata corrisponde anche ai campi non array. Ad esempio,metadata_filter={"source": "slack"}per un campo scalare,metadata_filter={"review": {"status": "open"}}per un campo nidificato emetadata_filter={"tags": ["prod", "urgent"]}per una corrispondenza esatta dell'elenco. Combina le condizioni per richiederle tutte:metadata_filter={ "source": "slack", "review": {"status": "open"}, "tags": ["prod", "urgent"], }
- record_type
- Restituzioni: record ordinati dal meno recente al più recente all'interno della finestra restituita.
- Tipo restituito: elenco[Record]
metodo list_thread_messages (abstract)
Elenca la cronologia dei messaggi memorizzata per una discussione.
- Parametri:
- thread_id
str: identificativo del thread in cui devono essere restituiti i messaggi. - last_n
int | None: numero facoltativo di messaggi più recenti da includere. Se omesso, vengono restituiti tutti i messaggi memorizzati per il thread.
- thread_id
- Restituzioni: i record dei messaggi ordinati dal meno recente al più recente all'interno della finestra restituita.
- Tipo restituito: List[MessageRecord]
metodo search (abstract)
Cerca i record per somiglianza.
- Parametri:
- query
str | None: query in linguaggio naturale. Deve essere fornito quandoquery_vectorviene omesso. - query_vector
list[float] | None: incorporamento facoltativo di query precalcolate. Specificare esattamente uno dei valoriqueryequery_vector. - k
int: numero massimo di risultati da restituire. I valori espliciti devono essere almeno1. Questo è un limite superiore: la chiamata può restituire meno dikrisultati quando i filtri sono troppo restrittivi, quando esistono meno record di corrispondenza non scaduti o a causa di un funzionamento di ricerca specifico dell'implementazione. - thread_id
str | None: ambito del thread facoltativo. - user_id
str | None: filtri facoltativi per l'ambito di utente e agente. - agent_id
str | None: filtri facoltativi per l'ambito dell'utente e dell'agente. - exact_user_match
bool: indica se ogni identificativo di ambito specificato deve avere una corrispondenza esatta. - exact_agent_match
bool: indica se ogni identificativo di ambito fornito deve avere una corrispondenza esatta. - exact_thread_match
bool: indica se ogni identificativo di ambito fornito deve avere una corrispondenza esatta. - record_types
set[str] | None: set facoltativo di tipi di record da includere. - metadata_filter
dict[str, Any] | None: mapping facoltativo del filtro dei metadati. Le voci inmetadata_filtersono combinate con la semantica AND. Le voci il cui valore non è un dizionario operatore a livello di campo utilizzano la semantica di corrispondenza esatta: la chiave richiesta deve esistere nei metadati memorizzati. I dizionari nidificati vengono abbinati in modo ricorsivo. I valori scalari e di elenco corrispondono in base all'uguaglianza esatta; anche l'ordine e la lunghezza dell'elenco devono corrispondere. Per eseguire il test dell'appartenenza all'array, utilizzare un dizionario operatore a livello di campo, ad esempio{"tags": {"$array_contains": "prod"}}. Un operando elenco per"$array_contains"indica che devono essere presenti tutti i valori elencati;"$array_contains_any"indica che deve essere presente almeno un valore elencato. Utilizzare"$not"per negare un'altra espressione a livello di campo nello stesso campo, incluso un dizionario operatore o un valore raw di corrispondenza esatta. Le espressioni negative corrispondono quando l'espressione positiva non riesce, inclusi i campi mancanti; l'appartenenza all'array negata corrisponde anche ai campi non array.
- query
- Restituzioni: coppie
(record, distance)ordinate in base alla distanza crescente. L'elenco può contenere meno dikvoci. - Tipo restituito: list[tuple[Record, float]]
- Raise: ValueError: se
kè minore di1.
Esempi
store.add(
["Searchable abstract memory"],
record_type="memory",
record_ids="mem-search-abstract-docs",
)
['mem-search-abstract-docs']
store.search("Searchable", 1, record_types={"memory"})[0][0].id
'mem-search-abstract-docs'
Filtra in base a un valore di metadati scalare:
store.add(
["pizza release"],
record_type="memory",
record_ids="mem-search-meta-source-docs",
metadata={"source": "slack"},
)
['mem-search-meta-source-docs']
any(
record.id == "mem-search-meta-source-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"source": "slack"},
)
)
True
Filtra in base ai metadati nidificati:
store.add(
["pizza review"],
record_type="memory",
record_ids="mem-search-meta-review-docs",
metadata={"review": {"status": "open"}},
)
['mem-search-meta-review-docs']
any(
record.id == "mem-search-meta-review-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"review": {"status": "open"}},
)
)
True
Corrisponde esattamente a un valore di elenco, incluso l'ordine:
store.add(
["pizza tags"],
record_type="memory",
record_ids="mem-search-meta-tags-docs",
metadata={"tags": ["prod", "urgent"]},
)
['mem-search-meta-tags-docs']
any(
record.id == "mem-search-meta-tags-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"tags": ["prod", "urgent"]},
)
)
True
Filtra quando un array di metadati contiene un valore:
any(
record.id == "mem-search-meta-tags-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"tags": {"$array_contains": "prod"}},
)
)
True
Combina più condizioni metadati. Un record deve soddisfare ogni chiave:
store.add(
["pizza rollout"],
record_type="memory",
record_ids="mem-search-meta-combined-docs",
metadata={
"source": "slack",
"review": {"status": "open"},
"tags": ["prod", "urgent"],
},
)
['mem-search-meta-combined-docs']
any(
record.id == "mem-search-meta-combined-docs"
for record, _ in store.search(
"pizza",
k=5,
metadata_filter={
"source": "slack",
"review": {"status": "open"},
"tags": ["prod", "urgent"],
},
)
)
True
metodo search_async (asincrono)
Cercare i record in modo asincrono in base alla somiglianza semantica.
- Parametri:
- query
str | None: lo stesso testo di query accettato dasearch. - k
int: conteggio massimo dei risultati accettato dasearch. I valori espliciti devono essere almeno1. - query_vector
list[float] | None: incorporamento facoltativo della stessa query precalcolata accettato dasearch. - thread_id
str | None: gli stessi filtri di ambito opzionali accettati dasearch. - user_id
str | None: gli stessi filtri di ambito opzionali accettati dasearch. - agent_id
str | None: filtri di ambito opzionali uguali accettati dasearch. - exact_user_match
bool: flag della stessa corrispondenza esatta accettati dasearch. - exact_agent_match
bool: flag della stessa corrispondenza esatta accettati dasearch. - exact_thread_match
bool: flag della stessa corrispondenza esatta accettati dasearch. - record_types
set[str] | None: filtro del tipo di record opzionale accettato dasearch. - metadata_filter
dict[str, Any] | None: lo stesso filtro di metadati facoltativo accettato dasearch, tra cui scalare, nidificato, lista esatta, appartenenza ad array e condizioni combinate come{"source": "slack"},{"review": {"status": "open"}},{"tags": ["prod", "urgent"]}e{"tags": {"$array_contains": "prod"}}.
- query
- Restituzioni: coppie
(record, distance)restituite dalla chiamatasearchsottostante. - Tipo restituito: List[tuple[Record, float]]
- Raise: ValueError: se
kè minore di1.
metodo update (abstract)
Aggiorna il contenuto dei record memorizzati, incorporando dati, metadati, indicatore orario o scadenza.
- Parametri:
- record_type
str: tipo logico di record da aggiornare. - record_id
str: identificativo del record da aggiornare. - testo
str | None: contenuto sostitutivo opzionale. PassareNoneper cancellare in modo esplicito il testo memorizzato quando è supportato dall'area di memorizzazione. I negozi possono anche cancellare lo stato semantico associato e rifiutare gli aggiornamentiindex_textoembeddingnon nulli in conflitto nella stessa chiamata. Omettere l'argomento per non modificare il contenuto. - index_text
str | list[str] | None: payload semantico alternativo facoltativo utilizzato per ricalcolare o sostituire lo stato di ricerca memorizzato senza modificare il testo persistente. Una stringa può essere messa a chunking internamente dal negozio. Una lista di stringhe non vuote viene considerata come chunk di proprietà del chiamante e non deve essere divisa di nuovo. Alcune implementazioni possono anche persistere separatamente come testo di ricerca ibrida. - incorporamento
list[float] | ndarray | list[list[float] | ndarray] | None: vettore di incorporamento precalcolato opzionale o elenco di vettori di incorporamento dei chunk. Se fornito, questo viene utilizzato direttamente e non viene effettuata alcuna chiamata di incorporamento. Più vettori richiedono liste di chunkindex_textcorrispondenti o righe di testo chunk memorizzate esistenti. PassareNoneper cancellare in modo esplicito l'incorporamento memorizzato quando l'area di memorizzazione lo supporta. I negozi con indicizzazione text-aware possono anche consentire aggiornamenti semantici senza incorporamento o incorporamento esplicito. - metadata
dict[str, Any] | None: mapping dei metadati di sostituzione facoltativo. PassareNoneper cancellare i metadati quando l'area di memorizzazione li supporta. - timestamp
str | None: nuovo indicatore orario facoltativo da salvare con il record. Rappresenta la data di creazione del record. Omettere questo argomento per non modificare l'indicatore orario memorizzato. PassareNoneper cancellare l'indicatore orario salvato e utilizzare l'ora di aggiunta del record al negozio quando il negozio lo supporta. - ttl_days
int | None: aggiornamento della scadenza facoltativo in giorni. Omettere questo argomento insieme attl_anchorper conservare l'indicatore orario di scadenza corrente. PassareNoneper cancellare la scadenza. - ttl_anchor
TimeToLiveAnchor: ancoraggio Time To Live opzionale per un aggiornamento della scadenza. UtilizzareTimeToLiveAnchor.CREATED_ATper l'ora di creazione del record oTimeToLiveAnchor.TIMESTAMPper la sostituzionetimestampfornita nello stesso aggiornamento oppure l'indicatore orario dell'evento memorizzato quandotimestampviene omesso. Se si specificattl_anchorsenzattl_days, viene utilizzata la durata Time To Live predefinita dell'area di memorizzazione o dello schema. Quandottl_anchorviene omesso durante un aggiornamento, le implementazioni utilizzanoTimeToLiveAnchor.CREATED_AT.
- record_type
- Restituzioni: numero di record aggiornati, in genere
0o1. Restituisce0quando nessun record memorizzato corrisponde all'identificativo logico richiesto. - Tipo restituito: int.
- Aumenti: ValueError: se il payload di aggiornamento non è valido per l'area di memorizzazione, ad esempio omettendo ogni campo facoltativo o fornendo argomenti semantici in conflitto.
Area di memorizzazione Oracle DB
classe oracleagentmemory.core.OracleDBMemoryStore
Basi: OracleMemoryStore
Persistenza supportata dal database per messaggi, memorie e profili degli attori.
Creare un'area di memorizzazione Oracle DB.
- Parametri:
- embedder
IEmbedder | None: incorporamento utilizzato quando l'area di memorizzazione richiede incorporamenti vettoriali locali. Può essereNonequando i chiamanti forniscono sempre vettori precalcolati o quando la ricerca per parola chiave viene utilizzata con scritture di solo testo e query di testo.SearchStrategy.HYBRIDrichiede unOracleDBEmbedderqui in modo che l'indice ibrido gestito possa utilizzare il modello in-database di questo incorporante. - pool
Any: connessione o pool Oracle DB. Il passaggio di una connessione raw abilita la modalità a sessione singola per questa istanza dell'area di memorizzazione: le chiamate dell'area di memorizzazione concorrente vengono serializzate localmente per conservare le ipotesi di blocco delle righe e delle transazioni utilizzate dalle operazioni di scrittura. Utilizzare un connection pool per le richieste concorrenti. - schema_policy
SchemaPolicy | str: modalità di impostazione dello schema. L'impostazione predefinita richiede uno schema gestito esistente e aggiornato e non esegue alcuna modifica DDL. UtilizzareSchemaPolicy.CREATE_IF_NECESSARYper riempire gli oggetti mancanti oppureSchemaPolicy.RECREATEper eliminare e ricreare gli oggetti gestiti.SchemaPolicy.CREATE_IF_NECESSARYpuò applicare gli aggiornamenti della versione dello schema gestito supportati, aggiornare uno schema vettoriale per la ricerca per parola chiave aggiungendo un indice di testo o per la ricerca ibrida aggiungendo le strutture di ricerca gestita e l'indice ibrido. - vector_dim
int | None: dimensione di incorporamento facoltativa per la memorizzazione vettoriale locale. Passare un numero intero positivo per creare la colonna di incorporamento gestita e l'indice vettoriale e per convalidare i metadati dello schema esistenti rispetto a tale dimensione. PassareNoneo omettere l'argomento quando questa memoria di memorizzazione non richiede memoria vettoriale locale. La parola chiave e la ricerca ibrida possono funzionare dal testo di ricerca memorizzato senza la colonna di incorporamento locale. La ricerca vettoriale richiede la memorizzazione vettoriale locale. -
nome_tabellaprefisso
str–Prefisso facoltativo aggiunto ai nomi di tabella/indice gestiti. Passare questo o
memory_store_id, non entrambi.Nota: non più valido dalla versione 26.6.0: questo parametro non è più valido nella versione 26.6.0 e verrà rimosso nella versione 27.1. Utilizzare invece
memory_store_id. - memory_store_id
str: ID stabile per l'area di memorizzazione della memoria DB gestita. Riutilizzare lo stesso ID per riaprire lo stesso negozio gestito. L'ID viene unito tramite join ai nomi degli oggetti DB gestiti con un carattere di sottolineatura, pertanto deve iniziare con una lettera, contenere solo lettere, numeri e caratteri di sottolineatura e contenere al massimo 16 caratteri. Passare questo otable_name_prefix, non entrambi. Se omesso, l'area di memorizzazione utilizzatable_name_prefixo il valore predefinito non prefisso quando viene omesso anchetable_name_prefix. - search_strategy
SearchStrategy: valoreSearchStrategyche seleziona il backend persearch(). UtilizzareSearchStrategy.VECTOR(impostazione predefinita) per il recupero solo vettoriale,SearchStrategy.HYBRIDper eseguire una query su un indice vettoriale ibrido Oracle gestito nel testo di ricerca memorizzato oSearchStrategy.KEYWORDper classificare in base alla corrispondenza parola chiave/testo nel testo di ricerca memorizzato senza fusione vettoriale.KEYWORDnon richiede l'embedder.HYBRIDrichiede cheembeddersia un valoreOracleDBEmbedder, pertanto l'indice ibrido gestito utilizza lo stesso modello in-database dell'embedder dell'area di memorizzazione principale. Se un client per parole chiave apre uno schema ibrido esistente, l'area di memorizzazione può utilizzare il ramo di testo di tale indice ibrido. L'avvio non riesce quando viene utilizzata una strategia incompatibile con uno schema esistente perché tale schema potrebbe non contenere lo stato della ricerca memorizzata richiesto dalla strategia. - search_index_sync
SearchIndexSyncMode: valoreSearchIndexSyncModeche seleziona il funzionamento di aggiornamento dell'indice di ricerca gestito perSearchStrategy.HYBRIDeSearchStrategy.KEYWORD.SearchIndexSyncMode.ON_COMMITè l'impostazione predefinita e rende i record ricercabili non appena viene eseguito il commit della transazione di scrittura.SearchIndexSyncMode.MANUALlascia l'aggiornamento a un'operazione di sincronizzazione esplicita lato database.SearchIndexSyncMode.AUTOconsente a Oracle di aggiornare l'indice ibrido gestito in modo asincrono ed è supportato solo conSearchStrategy.HYBRID; la ricerca per parola chiave rifiutaAUTO. - memory_retention_config
MemoryRetentionConfig: configurazione di conservazione della memoria facoltativa per i messaggi e le memorie supportate dal database.MemoryRetentionConfig.default_ttl_daysviene utilizzato quando una nuova scrittura omettettl_days.MemoryRetentionConfig.max_ttl_daysblocca le durate esplicite per record al di sopra del massimo configurato con un avviso e, se impostato, fa in modo chettl_days=Noneutilizzi tale massimo invece di creare righe non in scadenza. ConSchemaPolicy.CREATE_IF_NECESSARY, una configurazione esplicita aggiorna i metadati memorizzati in uno schema gestito aggiornato esistente, ma non aggiorna le date di scadenza esistenti; omettendo mantiene l'impostazione esistente. Se una configurazione esplicita lasciadefault_ttl_daysomax_ttl_daysinNOT_SET_MARKER, l'SDK risolve l'attributo al relativo valore predefinito (None) prima di confrontare o memorizzare i metadati dello schema. Scegliere questa configurazione in base alle informazioni previste memorizzate nei record, al motivo per cui l'applicazione la conserva e a qualsiasi impegno di conservazione delle applicazioni o delle normative.
- embedder
Avvertenza: SchemaPolicy.CREATE_IF_NECESSARY può essere più costoso del normale avvio dell'area di memorizzazione perché potrebbe applicare DDL dello schema gestito e riscritture dei dati con il massimo sforzo prima che l'inizializzazione abbia esito positivo. Pianificare la prima apertura di uno schema gestito meno recente come operazione di migrazione o manutenzione quando tale schema può contenere più righe.
Se l'impostazione dello schema deve creare il job di rimozione dei record scaduti gestiti, ma l'utente del database non dispone del privilegio scheduler-job, l'inizializzazione avverte e continua. I messaggi e le memorie scaduti rimangono nascosti dalle letture e dalle ricerche, ma non vengono rimossi fisicamente fino a quando il job non viene creato da un utente con CREATE JOB o un privilegio scheduler equivalente.
Quando SchemaPolicy.CREATE_IF_NECESSARY crea per la prima volta un indice ibrido gestito su uno schema esistente, Oracle analizza il testo di ricerca memorizzato e crea lo stato dell'indice ibrido gestito dal modello in-database configurato. L'inizializzazione dell'area di memorizzazione attende il completamento di tale DDL, pertanto pianifica il primo upgrade ibrido come operazione di migrazione o manutenzione per schemi di grandi dimensioni. SearchIndexSyncMode controlla la manutenzione in corso dopo che l'indice esiste; non rende la prima build dell'indice asincrona.
La creazione di tale indice ibrido gestito crea anche una preferenza vectorizer DBMS_VECTOR_CHAIN denominata dallo schema gestito. La preferenza memorizza i metadati di configurazione del vectorizer leggero dal modello OracleDBEmbedder configurato. Può essere ispezionato con viste delle preferenze di Oracle Text, ad esempio CTX_USER_PREFERENCES e CTX_USER_PREFERENCE_VALUES.
metodo add
Aggiungere record all'area di memorizzazione di Oracle DB.
- Parametri:
- contents
list[str | None]: registra i payload per renderli persistenti. I valori di testo vengono utilizzati anche per il testo di ricerca, a meno che non venga specificatoindex_texts. Quando il valore di testo èNone, l'area di memorizzazione può tornare ametadata["content"]. Le stringhe vuote esplicite vengono conservate. - record_type
str: tipo di record logico da creare, ad esempio"message","memory","guideline","fact","preference","user_profile"o"agent_profile". - index_texts
list[str | list[str] | None]: payload alternativi facoltativi utilizzati come testo di ricerca. Utilizzare questa opzione per controllare quali indici di ricerca basati su DB o ibridi. Ogni voce dell'elenco esterno è allineata a un record. Una voce stringa può essere messa a chunk dal negozio. Una voce di elenco viene considerata come blocchi di proprietà del chiamante e scritta così com'è aRECORD_CHUNKS.chunk_text. Quando vengono forniti ancheembeddings, le voci dell'elenco richiedono esattamente un vettore per chunk; le voci stringa accettano solo un singolo vettore per quel record. -
embeding
list[list[float] | ndarray | list[list[float] | ndarray]]–Vettori di incorporamento precompilati opzionali allineati a
contents. Ogni voce di record può essere un vettore o un elenco di vettori chunk. Quando la memoria vettoriale locale è configurata, questi vettori vengono memorizzati direttamente come rappresentazione vettoriale del record invece di chiamare l'incorporatore del negozio per creare vettori locali per la scrittura. Un singolo vettore rappresenta l'intero testo semantico, anche quando il chunker configurato altrimenti lo dividerebbe. Più vettori di chunk richiedono liste di chunkindex_textscorrispondenti.In
SearchStrategy.VECTOR, la ricerca vettoriale si posiziona rispetto ai vettori memorizzati. InSearchStrategy.HYBRIDoSearchStrategy.KEYWORD, la ricerca basata su DB si classifica attraverso il testo di ricerca memorizzato e il testo gestito da Oracle o lo stato dell'indice ibrido, quindi le integrazioni del tempo aggiuntivo influiscono solo su qualsiasi storage vettoriale locale configurato, non su quella strategia di ricerca attiva. Se questa area di memorizzazione è stata configurata senza memoria vettoriale locale, fornireindex_textsanzichéembeddingsper sostituire il testo visibile a tali indici con riconoscimento testo. - record_ids
str | None | list[str | None]: identificativi facoltativi visibili al chiamante. È possibile utilizzare una singola stringa per gli inserimenti di un record, mentre gli elenchi devono essere allineati acontents. Gli identificativi generati vengono restituiti quando questo campo viene omesso. - thread_ids
str | None | list[str | None]: identificativi di thread facoltativi associati ai record inseriti. I valori scalari possono essere trasmessi attraverso gli input allineati. - user_ids
str | None | list[str | None]: identificativi utente facoltativi associati ai record inseriti. I valori scalari possono essere trasmessi attraverso gli input allineati. - agent_ids
str | None | list[str | None]: identificativi agente facoltativi associati ai record inseriti. I valori scalari possono essere trasmessi attraverso gli input allineati. - roles
str | None | list[str | None]: ruoli messaggio facoltativi quali"user"o"assistant". Utilizzato solo serecord_typeè"message". - timestamps
str | None | list[str | None]: indicatori orari facoltativi da salvare con i record. Ogni indicatore orario rappresenta la data di creazione del record. I valori scalari possono essere trasmessi attraverso gli input allineati. Le voci omesse oNonelasciano l'indicatore orario dell'evento non impostato. Settl_anchorèTimeToLiveAnchor.TIMESTAMP, ogni record interessato deve avere un valore di indicatore orario ISO-8601 concreto. Gli indicatori orari ISO-8601 senza un fuso orario vengono trattati come UTC. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]: dizionari di metadati opzionali. I metadati possono includere"content"come origine di fallback quando un valore di testo viene omesso anziché impostato su"". - ttl_days
int | None | list[int | None]: durata Time To Live opzionale in giorni per i record di tipo messaggio e memoria. Omettere questo argomento per utilizzareMemoryRetentionConfig.default_ttl_daysdallo schema gestito. PassareNoneper utilizzareMemoryRetentionConfig.max_ttl_daysquando la configurazione di conservazione ne imposta uno o per creare un record non in scadenza quando non lo è. I valori superiori aMemoryRetentionConfig.max_ttl_daysvengono bloccati al massimo con un'avvertenza. I valori scalari possono essere trasmessi attraverso gli input allineati. - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor]: ancoraggio Time To Live opzionale. UtilizzareTimeToLiveAnchor.CREATED_ATper scadere in relazione all'ora di creazione del database oppureTimeToLiveAnchor.TIMESTAMPper scadere in relazione all'indicatore orario dell'evento fornito. Se omesso, la scadenza utilizzaTimeToLiveAnchor.CREATED_AT. La scadenza ancorata all'indicatore orario richiede un indicatore orario ISO-8601 concreto per ogni record inserito. Gli indicatori orari ISO-8601 senza un fuso orario vengono trattati come UTC. - **store_kwargs (Qualsiasi): opzioni di scrittura DB.
batch_sizecontrolla la dimensione del batch executemany e per impostazione predefinita è256.
- contents
- Restituzioni: identificativi per i record inseriti, nello stesso ordine logico dell'input.
- Tipo restituito: list[str]
Esempi
store.add(
["Index this stored text"],
record_type="memory",
record_ids="mem-db-add-docs",
)
['mem-db-add-docs']
store.add(
["Stored text"],
record_type="memory",
index_texts=["Search this text"],
record_ids="mem-db-index-text-docs",
)
['mem-db-index-text-docs']
store.add(
["Short-lived event"],
record_type="memory",
record_ids="mem-db-ttl-docs",
timestamps="2026-01-01T12:00:00+00:00",
ttl_days=7,
ttl_anchor=TimeToLiveAnchor.TIMESTAMP,
)
['mem-db-ttl-docs']
metodo add_agent
Aggiungere un record profilo agente.
- Parametri:
- agent_id
str: identificativo dell'agente. - informazioni
str: informazioni in formato libero sull'agente. Questo testo viene memorizzato come contenuto del profilo e utilizzato per creare la rappresentazione ricercabile del profilo. - metadati
dict[str, Any] | None: mapping dei metadati facoltativo memorizzato nella riga del profilo dell'agente.
- agent_id
- Restituzioni: identificativo del record profilo agente inserito.
- Tipo restituito: str
Note
I record profilo agente non hanno ambito. L'identificativo di record pubblico inserito è lo stesso valore passato come agent_id.
Esempi
store.add_agent("a-docs-agent", "Support assistant")
'a-docs-agent'
metodo add_async (asincrono)
Aggiungere in modo asincrono record orientati alle righe al negozio.
Accetta gli stessi argomenti e restituisce gli stessi identificativi di add().
- Parametri:
- contenuti
list[str | None] - tipo_record
str - testi_indice
list[str | list[str] | None] - embeding
list[list[float] | ndarray | list[list[float] | ndarray]] - ID_record
str | None | list[str | None] - id_thread
str | None | list[str | None] - ID_utente
str | None | list[str | None] - id_agente
str | None | list[str | None] - ruoli
str | None | list[str | None] - Indicatori data/ora
str | None | list[str | None] - metadati
dict[str, Any] | None | list[dict[str, Any] | None] - ttl_days
int | None | list[int | None] - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor] - store_kwargs
Any
- contenuti
- Tipo restituito: list[str]
metodo add_batches
Aggiungere batch logici preparati dal chiamante all'area di memorizzazione.
- Parametri:
- batches
list[PendingRecordBatch]: batch logici completamente preparati da rendere persistenti. Ogni batch deve contenere i propri campi per record, ad esempiorecord_type, valori di ambito, ruoli, indicatori orari e metadati. - **store_kwargs (Qualsiasi): opzioni di scrittura specifiche dell'implementazione inoltrate al negozio concreto.
- batches
- Restituzioni: identificativi per i record inseriti, nello stesso ordine logico dei batch e delle righe di input.
- Tipo restituito: elenco[str]
Esempi
store.add_batches(
[
PendingRecordBatch(
texts=["pizza batch"],
record_type="memory",
record_ids="mem-batch-docs",
)
]
)
['mem-batch-docs']
metodo add_batches_async (asincrono)
Aggiungere in modo asincrono batch logici preparati dal chiamante all'area di memorizzazione.
Accetta gli stessi argomenti e restituisce gli stessi identificativi di add_batches().
- Parametri:
- batch
list[PendingRecordBatch] - store_kwargs
Any
- batch
- Tipo restituito: list[str]
metodo add_user
Aggiungere un record profilo utente.
- Parametri:
- user_id
str: identificativo utente. - informazioni
str: informazioni in formato libero sull'utente. Questo testo viene memorizzato come contenuto del profilo e utilizzato per creare la rappresentazione ricercabile del profilo. - metadata
dict[str, Any] | None: mapping dei metadati facoltativo memorizzato nella riga del profilo utente.
- user_id
- Restituzioni: identificativo del record del profilo utente inserito.
- Tipo restituito: str
Note
I record profilo utente non hanno ambito. L'identificativo di record pubblico inserito è lo stesso valore passato come user_id.
Esempi
store.add_user("u-docs-profile", "Prefers concise answers.")
'u-docs-profile'
metodo delete
Eliminare una riga gestita e le relative righe chunk in base all'identificativo.
- Parametri:
- record_type
str: etichetta del tipo di record da eliminare. I tipi supportati includono"thread","message","memory","guideline","fact","preference","user_profile"e"agent_profile". - record_id
str: identificativo da eliminare. - a cascata
bool: quando si utilizzaTrue, espandere le destinazioni di livello superiore supportate, ad esempio i profili attore, nelle righe figlio con ambito all'interno della stessa transazione. Per una destinazione di profilo utente o di profilo agente, vengono eliminate prima le righe di thread di proprietà, che rimuovono i messaggi con ambito thread e le righe della tabella di memoria, quindi i messaggi con ambito attore e le righe simili alla memoria rimanenti (memory,guideline,fact,preference). Il cleanup con ambito viene ancora eseguito quando la riga del profilo corrispondente è già assente.
- record_type
- Restituzioni: numero di destinazioni di livello superiore richieste rimosse, in genere
0o1. Le righe figlio a catena non vengono conteggiate separatamente, pertanto è possibile che sia ancora0quando un profilo attore mancante attiva il cleanup con ambito. - Tipo restituito: int.
Note
L'operazione viene eseguita all'interno di una transazione. Quando cascade è abilitato per una destinazione di livello superiore supportata, l'eliminazione del profilo e tutte le eliminazioni figlio con ambito vengono sottoposte a commit o sottoposte a rollback insieme.
Esempi
store.add(["Delete me"], record_type="memory", record_ids="mem-delete-docs")
['mem-delete-docs']
store.delete("memory", "mem-delete-docs")
1
metodo delete_thread
Eliminare un thread e le relative righe memorizzate associate.
- Parametri: thread_id
str: identificativo del thread le cui righe devono essere rimosse, incluse la riga del thread, le righe figlio dipendenti e il cleanup esplicito della riga chunk. - Restituzioni: numero di righe di thread eliminate (
0o1). - Tipo restituito: int.
Note
Utilizzare questa operazione quando è necessario eseguire il cleanup a cascata con ambito thread. Nell'area di memorizzazione supportata dal database, l'eliminazione del thread rimuove la riga del thread gestito insieme alle righe di messaggio e memoria associate, oltre ai dati di ricerca gestiti per il recupero. Questa operazione è più ampia di un'eliminazione a livello di messaggio, che rimuove solo la riga del messaggio raw. L'eliminazione dei thread rimuove le righe di messaggi e memoria dipendenti insieme ai dati di recupero associati nella stessa transazione.
Esempi
store.delete_thread("c1")
0
metodo get
Recupera un record memorizzato in base all'identificativo.
- Parametri:
- record_type
str: etichetta del tipo di record che viene risolta in una riga gestita, ad esempio"message","memory","guideline","fact","preference","user_profile"o"agent_profile". - record_id
str: identificativo di cui eseguire la ricerca.
- record_type
- Restituzioni: record popolato con metadati decodificati se trovati, altrimenti
None. - Tipo restituito: Record | Nessuno
Esempi
store.add(["Remember this"], record_type="memory", record_ids="mem-get-docs")
['mem-get-docs']
store.get("memory", "mem-get-docs").id
'mem-get-docs'
metodo list
Enumerare i record persistenti per un tipo di record.
- Parametri:
- record_type
str: etichetta del tipo di record (ad esempio"message","memory","guideline","fact","preference","user_profile"o"agent_profile"). - limite
int | None: numero massimo facoltativo di record da restituire. Se omesso, il negozio utilizza il suo limite predefinito. PassareNoneper disabilitare il limite e restituire ogni record corrispondente. - thread_id
str | None: filtro thread-ambito esatto. Se omesso, non viene applicato alcun filtro. Se impostato suNone, vengono restituite solo le righe il cuithread_idè SQLNULL. I tipi di record senza ambito ignorano questo filtro. - user_id
str | None: filtro esatto dell'ambito utente. Se omesso, non viene applicato alcun filtro. Se impostato suNone, vengono restituite solo le righe il cuiuser_idè SQLNULL. I tipi di record senza ambito ignorano questo filtro. - agent_id
str | None: filtro agente-ambito esatto. Se omesso, non viene applicato alcun filtro. Se impostato suNone, vengono restituite solo le righe il cuiagent_idè SQLNULL. I tipi di record senza ambito ignorano questo filtro. -
filtro_metadata
dict[str, Any] | None:Filtro metadati. Se omesso, non viene applicato alcun filtro. Se impostato su
None, vengono restituiti solo i record senza metadati memorizzati. Se impostato su un dett, le voci inmetadata_filtervengono combinate con la semantica AND. Le voci il cui valore non è un dizionario operatore a livello di campo utilizzano la semantica di corrispondenza esatta: la chiave richiesta deve esistere nei metadati memorizzati. I dizionari nidificati vengono abbinati in modo ricorsivo. I valori scalari e di elenco corrispondono in base all'uguaglianza esatta; anche l'ordine e la lunghezza dell'elenco devono corrispondere. Per eseguire il test dell'appartenenza all'array, utilizzare un dizionario operatore a livello di campo, ad esempio{"tags": {"$array_contains": "prod"}}. Un operando elenco per"$array_contains"indica che devono essere presenti tutti i valori elencati;"$array_contains_any"indica che deve essere presente almeno un valore elencato. Utilizzare"$not"per negare un'altra espressione a livello di campo nello stesso campo, incluso un dizionario operatore o un valore raw di corrispondenza esatta. Le espressioni negative corrispondono quando l'espressione positiva non riesce, inclusi i campi mancanti; l'appartenenza all'array negata corrisponde anche ai campi non array. Ad esempio,metadata_filter={"source": "slack"}per un campo scalare,metadata_filter={"review": {"status": "open"}}per un campo nidificato emetadata_filter={"tags": ["prod", "urgent"]}per una corrispondenza esatta dell'elenco. Combina le condizioni per richiederle tutte:metadata_filter={ "source": "slack", "review": {"status": "open"}, "tags": ["prod", "urgent"], }
- record_type
- Restituzioni: record ordinati in base all'ordine di inserimento.
- Tipo restituito: list[Record]
Note
"user_profile" e "agent_profile" sono tipi di record senza ambito. Per questi tipi di record, thread_id, user_id e agent_id vengono ignorati e l'identità dell'attore rimane in record.id.
Esempi
store.add(
["First listed", "Second listed"],
record_type="memory",
record_ids=["mem-list-docs-1", "mem-list-docs-2"],
)
['mem-list-docs-1', 'mem-list-docs-2']
[record.id for record in store.list("memory", limit=2)]
['mem-list-docs-1', 'mem-list-docs-2']
store.add_user("u-list-docs", "Prefers concise answers.")
'u-list-docs'
any(
record.id == "u-list-docs"
for record in store.list("user_profile", user_id=None, limit=10)
)
True
metodo list_thread_messages
Restituisci messaggi persistenti per un thread.
- Parametri:
- thread_id
str: identificativo del thread i cui messaggi devono essere restituiti. - last_n
int | None: numero facoltativo di messaggi più recenti da restituire.
- thread_id
- Restituzioni: record di messaggi ordinati in base all'ordine di inserimento.
- Tipo restituito: list[MessageRecord]
Esempi
store.list_thread_messages("c1")
[]
metodo search
Cerca i record per somiglianza.
Il backend di ricerca attivo dipende dal valore SearchStrategy configurato dell'area di memorizzazione. SearchStrategy.VECTOR classifica il vettore di query rispetto ai vettori di record memorizzati. SearchStrategy.HYBRID esegue query sull'indice ibrido gestito di Oracle sul testo di ricerca memorizzato e sul relativo stato dell'indice gestito. SearchStrategy.KEYWORD si classifica solo in base al testo corrispondente sul testo di ricerca memorizzato.
- Parametri:
- query
str | None: testo in lingua naturale opzionale utilizzato per trovare record corrispondenti o simili. Fornire almeno un carattere che non sia uno spazio quandoquery_vectorviene omesso. La ricerca vettoriale incorpora questo testo; la ricerca per parola chiave lo confronta con il testo di ricerca memorizzato; la ricerca ibrida lo utilizza sia per il testo che per il recupero vettoriale. - query_vector
list[float] | None: incorporamento facoltativo di query precalcolate. Specificare esattamente uno dei valoriqueryequery_vector. Nella ricerca vettoriale, questo viene confrontato con i vettori di record memorizzati. Nella ricerca ibrida, viene inviata all'indice ibrido gestito di Oracle come input vettoriale lato query e non causa il confronto diretto tra l'area di memorizzazione DB e i vettori memorizzati in fase di aggiunta o aggiornamento. La ricerca per parola chiave non accettaquery_vector. Il vettore deve essere non vuoto, un dimensionale e contenere solo valori numerici finiti. Nella ricerca ibrida, la relativa dimensione deve corrispondere al modelloOracleDBEmbedderconfigurato. - k
int: numero massimo di risultati da restituire. I valori espliciti devono essere almeno1. Questo è un limite superiore: la chiamata può restituire meno dikrisultati quando i filtri sono troppo restrittivi, quando esistono meno record di corrispondenza non scaduti o a causa di un funzionamento di ricerca specifico dell'implementazione. - thread_id
str | None: identificativo di ambito thread facoltativo.exact_thread_match=Falselascia la dimensione thread non vincolata.exact_thread_match=Truecorrisponde esattamente al valorethread_idfornito. Sethread_id=None, corrisponde solo ai record senza ambito nella dimensione thread. - user_id
str | None: identificativi facoltativi dell'ambito utente e agente. Il flagexact_*_match=Falsecorrispondente lascia la dimensione non vincolata.exact_*_match=Truecorrisponde esattamente all'ID fornito. Se l'ID èNone, corrisponde solo ai record senza ambito su tale dimensione. - agent_id
str | None: identificativi facoltativi di ambito utente e agente. Il flagexact_*_match=Falsecorrispondente lascia la dimensione non vincolata.exact_*_match=Truecorrisponde esattamente all'ID fornito. Se l'ID èNone, corrisponde solo ai record senza ambito su tale dimensione. - exact_user_match
bool: indica se ogni identificativo di ambito deve avere una corrispondenza esatta.Falselascia la dimensione non vincolata.Truecorrisponde esattamente al valore fornito. Se il valore èNone, corrisponde solo ai record con ambito non definito della dimensione. - exact_agent_match
bool: indica se ogni identificativo di ambito deve avere una corrispondenza esatta.Falselascia la dimensione non vincolata.Truecorrisponde esattamente al valore fornito. Se il valore èNone, corrisponde solo ai record con ambito non definito della dimensione. - exact_thread_match
bool: indica se ogni identificativo di ambito deve avere una corrispondenza esatta.Falselascia la dimensione non vincolata.Truecorrisponde esattamente al valore fornito. Se il valore èNone, corrisponde solo ai record con ambito non definito della dimensione. - record_types
set[str] | None: set facoltativo di tipi di record ricercabili da includere. Se omessa, la ricerca DB copre messaggi, righe della tabella di memoria e profili attore. I profili attore contribuiscono al payloadinformation, mentre le righe di messaggio e memoria contribuiscono al payloadcontent. Durante la ricerca, i tipi di record profilo utilizzano il relativo identificativo attore per la dimensione ambito applicabile mentre le restanti dimensioni ambito funzionano comeNone. - metadata_filter
dict[str, Any] | None: mapping facoltativo del filtro dei metadati. Le voci inmetadata_filtersono combinate con la semantica AND. Le voci il cui valore non è un dizionario operatore a livello di campo utilizzano la semantica di corrispondenza esatta: la chiave richiesta deve esistere nei metadati memorizzati. I dizionari nidificati vengono abbinati in modo ricorsivo. I valori scalari e di elenco corrispondono in base all'uguaglianza esatta; anche l'ordine e la lunghezza dell'elenco devono corrispondere. Per eseguire il test dell'appartenenza all'array, utilizzare un dizionario operatore a livello di campo, ad esempio{"tags": {"$array_contains": "prod"}}. Un operando elenco per"$array_contains"indica che devono essere presenti tutti i valori elencati;"$array_contains_any"indica che deve essere presente almeno un valore elencato. Utilizzare"$not"per negare un'altra espressione a livello di campo nello stesso campo, incluso un dizionario operatore o un valore raw di corrispondenza esatta. Le espressioni negative corrispondono quando l'espressione positiva non riesce, inclusi i campi mancanti; l'appartenenza all'array negata corrisponde anche ai campi non array.
- query
- Restituzioni: coppie
(record, distance)ordinate in base alla distanza crescente. L'elenco può contenere meno dikvoci. - Tipo restituito: list[tuple[Record, float]]
- Soluzioni: ValueError: se
kè minore di1, se vengono forniti entrambi i valoriqueryequery_vector, sequeryè vuoto, se la modalità vettoriale non è in grado di risolvere l'incorporamento di una query, sequery_vectornon è valido o semetadata_filternon è valido.
Esempi
store.add(
["pizza preference"],
record_type="memory",
record_ids="mem-search-docs",
thread_ids="c-search-docs",
)
['mem-search-docs']
results = store.search(
"pizza",
1,
thread_id="c-search-docs",
exact_thread_match=True,
record_types={"memory"},
)
results[0][0].id
'mem-search-docs'
Filtra in base a un valore di metadati scalare:
store.add(
["pizza release"],
record_type="memory",
record_ids="mem-search-meta-source-docs",
metadata={"source": "slack"},
)
['mem-search-meta-source-docs']
any(
record.id == "mem-search-meta-source-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"source": "slack"},
)
)
True
Filtra in base ai metadati nidificati:
store.add(
["pizza review"],
record_type="memory",
record_ids="mem-search-meta-review-docs",
metadata={"review": {"status": "open"}},
)
['mem-search-meta-review-docs']
any(
record.id == "mem-search-meta-review-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"review": {"status": "open"}},
)
)
True
Corrisponde esattamente a un valore di elenco, incluso l'ordine:
store.add(
["pizza tags"],
record_type="memory",
record_ids="mem-search-meta-tags-docs",
metadata={"tags": ["prod", "urgent"]},
)
['mem-search-meta-tags-docs']
any(
record.id == "mem-search-meta-tags-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"tags": ["prod", "urgent"]},
)
)
True
Filtra quando un array di metadati contiene un valore:
any(
record.id == "mem-search-meta-tags-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"tags": {"$array_contains": "prod"}},
)
)
True
Combina più condizioni metadati. Un record deve soddisfare ogni chiave:
store.add(
["pizza rollout"],
record_type="memory",
record_ids="mem-search-meta-combined-docs",
metadata={
"source": "slack",
"review": {"status": "open"},
"tags": ["prod", "urgent"],
},
)
['mem-search-meta-combined-docs']
any(
record.id == "mem-search-meta-combined-docs"
for record, _ in store.search(
"pizza",
k=5,
metadata_filter={
"source": "slack",
"review": {"status": "open"},
"tags": ["prod", "urgent"],
},
)
)
True
metodo search_async (asincrono)
Cercare i record in modo asincrono in base alla somiglianza semantica.
- Parametri:
- query
str | None: lo stesso testo di query accettato dasearch. - k
int: conteggio massimo dei risultati accettato dasearch. I valori espliciti devono essere almeno1. - query_vector
list[float] | None: incorporamento facoltativo della stessa query precalcolata accettato dasearch. - thread_id
str | None: gli stessi filtri di ambito opzionali accettati dasearch. - user_id
str | None: gli stessi filtri di ambito opzionali accettati dasearch. - agent_id
str | None: filtri di ambito opzionali uguali accettati dasearch. - exact_user_match
bool: flag della stessa corrispondenza esatta accettati dasearch. - exact_agent_match
bool: flag della stessa corrispondenza esatta accettati dasearch. - exact_thread_match
bool: flag della stessa corrispondenza esatta accettati dasearch. - record_types
set[str] | None: filtro del tipo di record opzionale accettato dasearch. - metadata_filter
dict[str, Any] | None: lo stesso filtro di metadati facoltativo accettato dasearch, tra cui scalare, nidificato, lista esatta, appartenenza ad array e condizioni combinate come{"source": "slack"},{"review": {"status": "open"}},{"tags": ["prod", "urgent"]}e{"tags": {"$array_contains": "prod"}}.
- query
- Restituzioni: coppie
(record, distance)restituite dalla chiamatasearchsottostante. - Tipo restituito: List[tuple[Record, float]]
- Raise: ValueError: se
kè minore di1.
metodo update
Aggiorna il contenuto del record memorizzato, lo stato della ricerca, i metadati e i valori dell'indicatore orario.
- Parametri:
- record_type
str: etichetta del tipo di record della riga da modificare, ad esempio"message","memory","guideline","fact","preference","user_profile"o"agent_profile". - record_id
str: identificativo della riga memorizzata da aggiornare. - testo
str | None: il testo sostitutivo facoltativo è persistente nella colonnacontent. PassareNoneper cancellare il testo memorizzato e cancellare l'incorporamento memorizzato. Passare soloNoneo argomenti semantici omessi nella stessa chiamata. Passare""per conservare il contenuto vuoto esplicito durante la cancellazione di qualsiasi rappresentazione vettoriale memorizzata per il record. Se omesso, il contenuto esistente rimane invariato. - index_text
str | list[str] | None: payload facoltativo solo semantico. Se omesso, per l'indicizzazione semantica viene utilizzatotext. Negli schemi con capacità ibrida questo diventa anche il testo di ricerca memorizzato utilizzato dal componente di testo di Oracle. Un valore stringa può essere chunk dal negozio; un valore elenco viene considerato come chunk di proprietà del chiamante e scritto così com'è aRECORD_CHUNKS. Se viene fornito soloembedding, il testo di ricerca esistente viene riutilizzato. -
incorporamento
list[float] | ndarray | list[list[float] | ndarray] | None:Vettore di incorporamento precomputato opzionale o elenco di vettori di incorporamento chunk. Quando la memoria vettoriale locale è configurata, questo viene utilizzato direttamente e non viene effettuata alcuna chiamata di incorporamento. Passare
Noneper cancellare l'incorporamento memorizzato. Un singolo vettore rappresenta l'intero testo di sostituzione quando viene fornitotext, anche quando il chunker configurato divide tale testo. Quando si sostituisce il testo, vengono rifiutati più vettori chunk a meno cheindex_textnon sia un elenco chunk. Quando viene fornito soloembedding, il conteggio di incorporamento deve corrispondere alle righe chunk esistenti del record.In
SearchStrategy.VECTOR, la ricerca vettoriale si posiziona rispetto all'incorporamento memorizzato. InSearchStrategy.HYBRIDoSearchStrategy.KEYWORD, la ricerca basata su DB si classifica attraverso il testo di ricerca memorizzato e il testo gestito da Oracle o lo stato dell'indice ibrido, quindi le integrazioni del tempo di aggiornamento influiscono solo su qualsiasi storage vettoriale locale configurato, non su quella strategia di ricerca attiva. Se questa area di memorizzazione è stata configurata senza memoria vettoriale locale, fornireindex_textanzichéembeddingper aggiornare il testo visibile a tali indici con riconoscimento testo. Gli aggiornamenti semantici di solo testo possono omettere completamenteembeddingin tali modalità. - metadata
dict[str, Any] | None: mapping dei metadati facoltativo serializzato in JSON e memorizzato inmetadata. - timestamp
str | None: nuovo indicatore orario facoltativo da salvare con il record. Rappresenta la data di creazione del record. Se omesso, l'indicatore orario esistente viene conservato. PassareNoneper cancellare l'indicatore orario salvato e utilizzare l'ora di creazione del database per i futuri aggiornamenti della scadenzaTimeToLiveAnchor.CREATED_AT. Quandottl_anchorèTimeToLiveAnchor.TIMESTAMP, gli indicatori orari ISO-8601 senza un fuso orario vengono considerati come UTC. - ttl_days
int | None: aggiornamento della scadenza facoltativo in giorni. Omettere questo argomento insieme attl_anchorper conservare l'indicatore orario di scadenza corrente. PassareNoneper utilizzareMemoryRetentionConfig.max_ttl_daysquando la configurazione di conservazione ne imposta una o per cancellare la scadenza quando non è impostata. I valori superiori aMemoryRetentionConfig.max_ttl_daysvengono bloccati al massimo con un'avvertenza. L'aggiornamento della scadenza può rendere nuovamente visibile un record scaduto se non è stato ancora rimosso. - ttl_anchor
TimeToLiveAnchor: ancoraggio Time To Live opzionale per un aggiornamento della scadenza. UtilizzareTimeToLiveAnchor.CREATED_ATper eseguire il conteggio dall'ora di creazione memorizzata oppureTimeToLiveAnchor.TIMESTAMPper eseguire il conteggio dalla sostituzionetimestampfornita nello stesso aggiornamento oppure dall'indicatore orario dell'evento memorizzato quandotimestampviene omesso. Se si specificattl_anchorsenzattl_days, la scadenza viene aggiornata utilizzandoMemoryRetentionConfig.default_ttl_daysdello schema. Quandottl_anchorviene omesso durante un aggiornamento, l'area di memorizzazione utilizzaTimeToLiveAnchor.CREATED_AT. Gli aggiornamenti con indicatore orario basato su indicatore orario richiedono un indicatore orario ISO-8601 sostitutivo nella stessa chiamata o un indicatore orario evento memorizzato esistente in tale formato. Gli indicatori orari ISO-8601 senza un fuso orario vengono trattati come UTC.
- record_type
- Restituzioni: numero di righe aggiornate (
0o1). Restituisce0quando nessun record logico corrisponde arecord_typeerecord_id. - Tipo restituito: int.
- Aumenti: ValueError: se
record_typenon è supportato, se non viene fornito alcun payload di aggiornamento o se gli argomenti di aggiornamento semantico sono incompatibili.
Esempi
store.add(["Original note"], record_type="memory", record_ids="mem-update-docs")
['mem-update-docs']
store.update("memory", "mem-update-docs", text="Updated note")
1
store.get("memory", "mem-update-docs").content
'Updated note'
Strategia di ricerca
classe oracleagentmemory.core.dbsearch.SearchStrategy
Basi: Enum
Funzionamento della ricerca per le aree di memorizzazione di Oracle DB.
L'inizializzazione dell'area di memorizzazione DB utilizza la strategia selezionata per scegliere la funzionalità di ricerca dello schema gestito. La ricerca VECTOR memorizza gli incorporamenti locali. La ricerca KEYWORD memorizza il testo ricercabile e un indice di testo. HYBRID memorizza il testo ricercabile più lo stato dell'indice vettoriale ibrido gestito da Oracle. L'area di memorizzazione DB convalida questa funzionalità di schema all'avvio in modo che una strategia incompatibile non restituisca in silenzio risultati incompleti.
VECTOR- Cerca solo per somiglianza vettoriale. L'area di memorizzazione incorpora la query con l'incorporatore configurato oppure utilizza un
query_vectorfornito dal chiamante e classifica i record in base alla distanza dai vettori memorizzati. Utilizzare questa opzione con uno schema DB configurato per la ricerca vettoriale. HYBRID- Cerca con l'indice ibrido gestito di Oracle. Oracle combina la corrispondenza di testo rispetto al testo di ricerca memorizzato con la classificazione vettoriale dell'indice ibrido nel database. Utilizzare questa opzione quando gli utenti possono eseguire ricerche in base al linguaggio naturale, nonché agli identificatori esatti, agli alias o ai nomi dei prodotti. Questa strategia richiede che l'embedder principale dell'area di memorizzazione sia un
OracleDBEmbedderin modo che l'indice gestito e l'area di memorizzazione condividano un modello nel database. KEYWORD- Cerca solo per parola chiave/testo corrispondente rispetto al testo di ricerca memorizzato. Questa modalità non crea incorporamenti di query locali e non richiede un incorporamento di Oracle DB. Se aperto rispetto a uno schema ibrido esistente, può utilizzare il ramo di testo di tale indice ibrido senza creare un nuovo indice ibrido. Utilizzare questa opzione quando identificatori esatti, alias, nomi di prodotti o frasi brevi devono guidare il recupero senza fusione vettoriale.
IBRIDO = "ibrido"
KEYWORD = parola chiave
VECTOR = 'vettore'
Modalità di sincronizzazione indice di ricerca
classe oracleagentmemory.core.dbsearch.SearchIndexSyncMode
Basi: Enum
Funzionamento di aggiornamento per gli indici di ricerca DB gestiti.
Questa impostazione controlla quando Oracle rende visibile il testo di ricerca nuovo o modificato per la ricerca basata sul testo supportata dal database. SearchStrategy.HYBRID utilizza l'indice vettoriale ibrido gestito di Oracle. SearchStrategy.KEYWORD utilizza un indice Oracle Text. SearchStrategy.VECTOR non utilizza questa impostazione.
ON_COMMIT- Aggiornare l'indice quando viene eseguito il commit della transazione di scrittura. Questa è la scelta predefinita e più semplice per la maggior parte delle applicazioni perché i record possono essere cercati immediatamente dopo una scrittura riuscita. Può aggiungere lavoro per scrivere transazioni perché l'indice viene mantenuto aggiornato immediatamente.
MANUAL- Non aggiornare l'indice automaticamente. È possibile che i record nuovi o aggiornati non vengano visualizzati nella ricerca per parola chiave o ibrida finché non si esegue l'operazione di sincronizzazione dell'indice lato database. Ciò è utile per i caricamenti di massa o le finestre di manutenzione in cui si desidera controllare quando vengono eseguiti i lavori di aggiornamento.
AUTO- Consenti a Oracle di aggiornare l'indice ibrido gestito in modo asincrono. Le scritture possono evitare il costo di aggiornamento immediato, ma i risultati della ricerca potrebbero rimanere in ritardo rispetto alle scritture recenti fino al completamento dell'aggiornamento in background da parte di Oracle. Questa modalità è supportata solo con
SearchStrategy.HYBRID.
Avvertenza: questa impostazione controlla la manutenzione continua dopo l'esistenza dell'indice di ricerca gestito. Non rende la prima build dell'indice asincrona. La creazione di un indice ibrido gestito sul testo di ricerca memorizzata esistente può essere a esecuzione prolungata perché Oracle crea lo stato dell'indice ibrido gestito da tale testo.
AUTO = 'AUTO'
MANUAL = 'manuale'
ON_COMMIT = 'ON_COMMIT'
Time To Live
classe oracleagentmemory.core.retention.MemoryRetentionConfig
Basi: object
Impostazioni di conservazione a livello di schema per i record supportati da Oracle DB.
- Parametri:
- default_ttl_days
int | None: durata Time To Live predefinita, in giorni. Lasciare il valoreNOT_SET_MARKERper utilizzare il valore predefinitoNone(nessun valore massimo). - max_ttl_days
int | None: durata massima opzionale del tempo reale, in giorni. Lasciare il segnoNOT_SET_MARKERper utilizzare il valore predefinitoNone. PassareNoneper nessun massimo. Quando è impostato, questo è un hard cap: le scritture che tentano di utilizzare un valorettl_dayspiù grande vengono bloccate a questo massimo con un avviso e le API di scrittura che passanottl_days=Noneutilizzano questo massimo invece di creare record non in scadenza.
- default_ttl_days
classe oracleagentmemory.apis.ttl.TimeToLiveAnchor
Basi: Enum
Ancoraggio utilizzato per calcolare un indicatore orario di scadenza da una durata Time To Live.
CREATED_AT- Scadenza del calcolo dall'indicatore orario di creazione del database del record. Questa è l'impostazione predefinita quando i chiamanti omettono
ttl_anchor. TIMESTAMP- Calcola la scadenza dall'indicatore orario dell'evento memorizzato del record. Utilizzare questa opzione quando un messaggio o una memoria rappresenta un evento meno recente e deve scadere in relazione all'ora dell'evento anziché all'ora di inserimento.
CREATED_AT = 'CREATED_AT'
TIMESTAMP = 'Indicatore orario'
Criterio schema
classe oracleagentmemory.core.SchemaPolicy
Basi: str, Enum
Criterio di creazione schema per le aree di memorizzazione di Oracle DB.
RICHIEDI_ESISTENTE
Verificare che lo schema gestito completo esista già e sia aggiornato. Non creare o modificare oggetti DB.
CREA_SE_EMPTY
Se non esistono oggetti gestiti, lo schema di bootstrap. Se gli oggetti esistono già, è necessario uno schema gestito completo e aggiornato.
CREA_SE_NECESSARIO
Creare gli oggetti gestiti mancanti e applicare gli aggiornamenti dello schema gestito supportati.
RICREA
Eliminare e ricreare tutti gli oggetti schema gestiti. Questo è distruttivo.