Magasin vectoriel OracleDB
OracleVector stocke les embeddings dans des colonnes VECTOR d’Oracle Database et les expose par l’interface vectorielle de Mastra. Chaque index vectoriel logique Mastra est associé à une table vectorielle Oracle par l’intermédiaire d’une table de registre, tandis que les métadonnées sont stockées au format Oracle JSON pour permettre un filtrage structuré.
InstallationLien direct vers Installation
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/oracledb@latest
pnpm add @mastra/oracledb@latest
yarn add @mastra/oracledb@latest
bun add @mastra/oracledb@latest
UtilisationLien direct vers Utilisation
import { OracleVector } from '@mastra/oracledb'
const vector = new OracleVector({
id: 'oracle-vector',
user: process.env.ORACLE_DATABASE_USER,
password: process.env.ORACLE_DATABASE_PASSWORD,
connectString: process.env.ORACLE_DATABASE_CONNECT_STRING,
})
await vector.createIndex({
indexName: 'memory_messages',
dimension: 1536,
metric: 'cosine',
})
await vector.upsert({
indexName: 'memory_messages',
vectors: [embedding],
metadata: [{ resource_id: 'user-1', thread_id: 'thread-1' }],
})
const results = await vector.query({
indexName: 'memory_messages',
queryVector,
topK: 5,
filter: { resource_id: 'user-1' },
})
Par défaut, OracleVector utilise la recherche exacte sans index vectoriel approximatif. Configurez IVF ou HNSW lorsque votre jeu de données et vos exigences de latence nécessitent une recherche approximative.
Options du constructeurLien direct vers Options du constructeur
Transmettez directement les options de connexion Oracle (user, password, connectString, pool, options de portefeuille ou externalAuth), ou transmettez poolManager pour partager le pool utilisé par OracleStore. Les options spécifiques aux vecteurs sont :
id:
poolManager?:
OracleStore.schemaName?:
tablePrefix?:
registryTableName?:
defaultIndexConfig?:
defaultMetadataIndexes?:
defaultVectorFormat?:
upsertBatchSize?:
executeMany. L’upsert complet effectue un commit unique après la réussite de tous les lots.Exemples de constructeurLien direct vers Exemples de constructeur
Pool partagé avec OracleStoreLien direct vers Pool partagé avec OracleStore
import { OracleStore, OracleVector } from '@mastra/oracledb'
const storage = new OracleStore({ id: 'oracle-storage', user, password, connectString })
const vector = new OracleVector({
id: 'oracle-vector',
poolManager: storage.getPoolManager(),
})
Pour Autonomous Database et les connexions mTLS, transmettez walletLocation, walletPassword et configDir au même constructeur.
MéthodesLien direct vers Méthodes
createIndex()Lien direct vers createindex
Crée la ligne de registre, la table vectorielle Oracle physique, les index de métadonnées et, éventuellement, un index vectoriel Oracle.
indexName:
dimension:
metric?:
hamming et jaccard.vectorFormat?:
indexConfig?:
none signifie une recherche exacte sans index vectoriel approximatif.buildIndex?:
indexConfig.type vaut ivf ou hnsw.metadataIndexes?:
OracleVectorIndexConfigLien direct vers oraclevectorindexconfig
type?:
accuracy?:
ivf.neighborPartitions?:
hnsw.neighbors?:
hnsw.efConstruction?:
Configuration de l’indexLien direct vers Configuration de l’index
await vector.createIndex({
indexName: 'support_articles',
dimension: 1536,
metric: 'cosine',
indexConfig: {
type: 'ivf',
accuracy: 95,
ivf: {
neighborPartitions: 32,
},
},
})
La valeur par défaut est indexConfig: { type: 'none' }, qui utilise la recherche exacte et ne nécessite aucun réglage d’index approximatif. Utilisez IVF ou HNSW uniquement lorsque votre volume de données et vos exigences de latence justifient une recherche approximative. HNSW est configuré avec indexConfig: { type: 'hnsw', hnsw: { neighbors, efConstruction } } et nécessite de la mémoire Oracle Vector Pool, que configureVectorMemory() peut allouer pour les bases de données locales ou autogérées.
upsert()Lien direct vers upsert
indexName:
vectors:
metadata?:
vectors.ids?:
query()Lien direct vers query
indexName:
queryVector:
topK?:
filter?:
includeVector?:
minScore?:
queryMode?:
targetAccuracy?:
listIndexes()Lien direct vers listindexes
Renvoie les noms d’index logiques Mastra enregistrés dans la table de registre vectoriel Oracle.
describeIndex()Lien direct vers describeindex
Renvoie les métadonnées de l’index Oracle, notamment le nom de la table physique, la dimension, le nombre de vecteurs, la métrique, le type d’index, le format vectoriel et la précision configurée.
deleteIndex()Lien direct vers deleteindex
Supprime la table vectorielle Oracle et retire l’entrée de registre de l’index logique.
updateVector()Lien direct vers updatevector
Met à jour des vecteurs par ID ou filtre de métadonnées. Vous devez fournir id ou filter, mais pas les deux. L’objet update peut inclure vector, metadata ou les deux.
await vector.updateVector({
indexName: 'support_articles',
id: 'doc-1',
update: { metadata: { status: 'reviewed' } },
})
deleteVector()Lien direct vers deletevector
Supprime un seul vecteur par ID.
deleteVectors()Lien direct vers deletevectors
Supprime plusieurs vecteurs par ID ou filtre de métadonnées. Vous devez fournir ids ou filter, mais pas les deux.
buildIndex()Lien direct vers buildindex
Construit un index vectoriel Oracle pour un index logique existant. Si le type d’index résolu est none, cette méthode ne fait rien.
rebuildIndex()Lien direct vers rebuildindex
Supprime et recrée l’index vectoriel Oracle d’un index logique existant, généralement après la modification du réglage de l’index approximatif.
Diagnostic de l’indexLien direct vers Diagnostic de l’index
Utilisez getIndexStatus({ indexName }) pour examiner l’état du catalogue Oracle, et indexAccuracyQuery({ indexName, queryVector, topK, targetAccuracy }) pour exécuter DBMS_VECTOR.INDEX_ACCURACY_QUERY sur des index approximatifs.
configureVectorMemory()Lien direct vers configurevectormemory
Alloue la mémoire Oracle Vector Pool requise par les index HNSW. Cette méthode appelle ALTER SYSTEM SET VECTOR_MEMORY_SIZE ; elle nécessite donc une connexion privilégiée telle que SYSDBA ou SYSTEM.
size:
K, M ou G (par exemple, "512M").scope?:
disconnect()Lien direct vers disconnect
Ferme le pool Oracle lorsque OracleVector a créé le gestionnaire de pool. Si vous fournissez pool ou poolManager, vous gérez ce cycle de vie.
Filtres de métadonnéesLien direct vers Filtres de métadonnées
OracleVector accepte la syntaxe standard de filtre de métadonnées de Mastra. Les filtres sont traduits en prédicats Oracle JSON avec valeurs liées :
- les comparaisons scalaires utilisent
JSON_VALUE - les vérifications de tableaux, d’existence et de correspondance d’éléments utilisent
JSON_EXISTS - les filtres regex utilisent
REGEXP_LIKE - les filtres « contient » sur les chaînes utilisent
LIKEsans distinction de casse
const results = await vector.query({
indexName: 'memory_messages',
queryVector,
topK: 5,
filter: {
resource_id: 'user-1',
tags: { $contains: 'support' },
score: { $gte: 0.8 },
$or: [{ source: 'docs' }, { source: 'tickets' }],
},
})
Les métadonnées sont stockées au format Oracle JSON natif ; les lignes sont donc également lisibles directement avec les outils JDBC Oracle standard, tels que DBeaver et SQL Developer.
Utilisez ORACLEDB_PROMPT lorsqu’un agent doit générer des filtres de métadonnées compatibles avec Oracle pour createVectorQueryTool() :
import { Agent } from '@mastra/core/agent'
import { createVectorQueryTool } from '@mastra/rag'
import { fastembed } from '@mastra/fastembed'
import { ORACLEDB_PROMPT } from '@mastra/oracledb'
const vectorQueryTool = createVectorQueryTool({
vectorStoreName: 'oracle',
indexName: 'support_articles',
model: fastembed,
enableFilter: true,
})
export const ragAgent = new Agent({
id: 'oracle-rag-agent',
name: 'Oracle RAG Agent',
model: 'openai/gpt-5.6-sol',
instructions: `
Use the retrieval tool when you need source context.
Available metadata fields: resource_id, thread_id, source, category, tags.
${ORACLEDB_PROMPT}
`,
tools: { vectorQueryTool },
})
Types de réponseLien direct vers Types de réponse
Les résultats de requête sont renvoyés dans ce format :
interface QueryResult {
id: string
score: number
metadata: Record<string, any>
vector?: number[]
}
Exemple d’utilisationLien direct vers Exemple d’utilisation
import { Agent } from '@mastra/core/agent'
import { Memory } from '@mastra/memory'
import { fastembed } from '@mastra/fastembed'
import { OracleStore, OracleVector } from '@mastra/oracledb'
const storage = new OracleStore({
id: 'oracle-storage',
user: process.env.ORACLE_DATABASE_USER,
password: process.env.ORACLE_DATABASE_PASSWORD,
connectString: process.env.ORACLE_DATABASE_CONNECT_STRING,
})
const vector = new OracleVector({
id: 'oracle-vector',
poolManager: storage.getPoolManager(),
})
export const oracleAgent = new Agent({
id: 'oracle-agent',
name: 'Oracle Agent',
instructions: 'You are an assistant with OracleDB-backed memory and semantic recall.',
model: 'openai/gpt-5.6-sol',
memory: new Memory({
storage,
vector,
embedder: fastembed,
options: {
semanticRecall: { topK: 3, messageRange: 2 },
},
}),
})