Pular para o conteúdo principal

AI FileVectorStore

Armazenamento vetorial baseado em ficheiro JSON local.

Permite guardar, pesquisar e gerir documentos com os seus embeddings vetoriais em coleções persistidas num único ficheiro JSON. Suporta pesquisa por similaridade coseno, filtragem por metadados e inserção em lote com controlo de concorrência por bloqueio de ficheiro.

Indicado para desenvolvimento, prototipagem ou aplicações com volumes reduzidos de documentos. O ficheiro de armazenamento é criado automaticamente na primeira inicialização, por omissão em storage/vector_store.json.

const vector = _ai.vector('default')
const client = _ai.client()
const chunker = _ai.contextRetrievalChunker()

// Criar a coleção se ainda não existir
if (!vector.collectionExists('netuno')) {
vector.createCollection('netuno', 768)
}

// Recolher todos os ficheiros Markdown recursivamente
const files = collectFiles(_app.folder(_app.pathStorage() + '/netuno_docs'))

for (const path of files) {
const file = _app.file(path)
if (file.exists()) {
const content = file.input().readAllAndClose()
const chunks = chunker.markdown(content, 1500 * 3, 400)
for (const chunk of chunks) {
const options = _val.init()
.set('encoding_format', 'float')
.set('dimensions', 768)
const embeddingResponse = client.embeddings(
'embeddinggemma:latest',
chunk.get('text'),
options
)
const embedding = embeddingResponse.get('data').get(0).get('embedding')
vector.add('netuno', embedding, chunk.get('text'), null)
}
}
}

function collectFiles(folder) {
const list = _val.list()
folder.list().forEach(item => {
if (item.isDirectory()) {
collectFiles(item).forEach(f => list.add(f))
} else {
const path = item.fullPath()
if (path.endsWith('.md') || path.endsWith('.mdx')) {
list.add(path)
}
}
})
return list
}

add


add(colecao: string, id: string, embedding: Values, texto: string, metadados: Values) : void

Descrição

Insere ou atualiza um documento numa coleção com um ID explícito. Se a coleção ainda não existir, é criada automaticamente com as dimensões do embedding fornecido. Se já existir um documento com o mesmo ID, o conteúdo, embedding e metadados são substituídos.

Como Usar
const options = _val.init()
.set('encoding_format', 'float')
.set('dimensions', 768)

const embeddingResponse = client.embeddings('embeddinggemma:latest', 'Texto do documento.', options)
const embedding = embeddingResponse.get('data').get(0).get('embedding')

vector.add('netuno', 'doc-001', embedding, 'Texto do documento.', _val.map().set('fonte', 'web'))
Atributos
NOMETIPODESCRIÇÃO
colecaostringNome da coleção onde o documento será inserido.
idstringIdentificador único do documento. Se nulo ou vazio, é gerado automaticamente um UUID.
embeddingValuesLista de valores numéricos que representam o vetor do documento.
textostringConteúdo textual do documento a guardar.
metadadosValuesObjeto com metadados arbitrários associados ao documento, utilizável para filtragem em pesquisas. Pode ser nulo.
Retorno

( void )


add(colecao: string, embedding: Values, texto: string, metadados: Values) : void

Descrição

Insere ou atualiza um documento numa coleção com um ID gerado automaticamente. Se a coleção ainda não existir, é criada automaticamente com as dimensões do embedding fornecido. Se já existir um documento com o mesmo ID, o conteúdo, embedding e metadados são substituídos.

Como Usar
const options = _val.init()
.set('encoding_format', 'float')
.set('dimensions', 768)

const embeddingResponse = client.embeddings('embeddinggemma:latest', 'Texto do documento.', options)
const embedding = embeddingResponse.get('data').get(0).get('embedding')

vector.add('netuno', embedding, 'Texto do documento.', _val.map().set('fonte', 'web'))
Atributos
NOMETIPODESCRIÇÃO
colecaostringNome da coleção onde o documento será inserido.
embeddingValuesLista de valores numéricos que representam o vetor do documento.
textostringConteúdo textual do documento a guardar.
metadadosValuesObjeto com metadados arbitrários associados ao documento, utilizável para filtragem em pesquisas. Pode ser nulo.
Retorno

( void )


addBatch


addBatch(colecao: string, documentos: Values) : void

Descrição

Insere ou atualiza múltiplos documentos numa coleção numa única transação atómica. Se algum documento falhar, toda a operação é revertida. Cada item da lista deve ser um objeto com os campos text (obrigatório), embedding (obrigatório), id (opcional, gerado automaticamente se ausente) e metadata (opcional).

Como Usar
const options = _val.init().set('encoding_format', 'float').set('dimensions', 768)

const documentos = _val.list()

const textos = _val.list().add('Primeiro documento.').add('Segundo documento.')
const embeddingResponse = client.embeddings('embeddinggemma:latest', textos, options)

const data = embeddingResponse.get('data')

for (let i = 0; i < data.size(); i++) {
const item = data.get(i)

documentos.add(
_val.map()
.set('text', textos.get(i))
.set('embedding', item.get('embedding'))
.set('metadata', _val.map().set('index', i))
)
}

vector.addBatch('netuno', documentos)
Atributos
NOMETIPODESCRIÇÃO
colecaostringNome da coleção onde os documentos serão inseridos.
documentosValuesLista de documentos. Cada item deve conter: text (texto do documento), embedding (vetor numérico), id (opcional) e metadata (opcional).
Retorno

( void )


collectionExists


collectionExists(colecao: string) : boolean

Descrição

Verifica se uma coleção existe no ficheiro de armazenamento.

Como Usar
if (!vector.collectionExists('netuno')) {
vector.createCollection('netuno', 768)
}
Atributos
NOMETIPODESCRIÇÃO
colecaostringNome da coleção a verificar.
Retorno

( boolean )

Verdadeiro se a coleção existe, falso caso contrário.


count


count(colecao: string) : int

Descrição

Retorna o número total de documentos numa coleção no ficheiro de armazenamento. Retorna 0 se a coleção não existir.

Como Usar
const total = vector.count('netuno')
_log.info('Total de documentos indexados: ' + total)
Atributos
NOMETIPODESCRIÇÃO
colecaostringNome da coleção a contar.
Retorno

( int )

Número total de documentos na coleção. Retorna 0 se a coleção não existir ou estiver vazia.


createCollection


createCollection(colecao: string, dimensoes: int) : boolean

Descrição

Cria explicitamente uma coleção com um número fixo de dimensões no ficheiro de armazenamento. Se a coleção já existir, a operação é ignorada silenciosamente e retorna false. Normalmente não é necessário chamar este método diretamente, pois a coleção é criada automaticamente na primeira chamada a add ou addBatch.

Como Usar
if (!vector.collectionExists('netuno')) {
const criada = vector.createCollection('netuno', 768)
_log.info('Coleção criada: ' + criada)
}
Atributos
NOMETIPODESCRIÇÃO
colecaostringNome da coleção a criar.
dimensoesintNúmero de dimensões dos vetores desta coleção. Deve ser maior que zero e consistente com o modelo de embeddings utilizado.
Retorno

( boolean )

Verdadeiro se a coleção foi criada, falso se já existia.


delete


delete(colecao: string, id: string) : void

Descrição

Remove um documento específico de uma coleção pelo seu ID. Se o documento ou a coleção não existirem, a operação é ignorada silenciosamente.

Como Usar
vector.delete('netuno', 'doc-001')
Atributos
NOMETIPODESCRIÇÃO
colecaostringNome da coleção que contém o documento.
idstringIdentificador único do documento a remover.
Retorno

( void )


deleteCollection


deleteCollection(colecao: string) : void

Descrição

Remove uma coleção inteira e todos os seus documentos do ficheiro de armazenamento. Se a coleção não existir, a operação é ignorada silenciosamente.

Como Usar
vector.deleteCollection('netuno')
Atributos
NOMETIPODESCRIÇÃO
colecaostringNome da coleção a remover.
Retorno

( void )


getProvider


getProvider() : string

Retorno

( string )


init


init() : void

Retorno

( void )


isInitialized


isInitialized() : boolean

Retorno

( boolean )


listCollections


listCollections() : Values

Descrição

Lista todas as coleções existentes no ficheiro de armazenamento, incluindo o número de dimensões e o total de documentos em cada uma.

Como Usar
const colecoes = vector.listCollections()

for (const c of colecoes) {
_log.info(c.get('name') + ' | dims: ' + c.get('dimensions') + ' | docs: ' + c.get('count'))
}
Retorno

( Values )

Lista de coleções, cada uma com os campos: name (nome da coleção), dimensions (número de dimensões) e count (total de documentos).


provider


provider(provider: string) : org.netuno.tritao.ai.vector.VectorStore

Atributos
NOMETIPODESCRIÇÃO
providerstring
Retorno

( org.netuno.tritao.ai.vector.VectorStore )



search(colecao: string, embedding: Values, topK: int) : Values

Descrição

Pesquisa os documentos mais similares ao embedding fornecido numa coleção, utilizando distância coseno. Retorna os topK documentos mais próximos, ordenados por pontuação de similaridade decrescente.

Como Usar
const resultados = store.search('artigos', embedding, 5)

for (const r of resultados) {
_log.info('Score: ' + r.get('score') + ' | ' + r.get('text'))
}
Atributos
NOMETIPODESCRIÇÃO
colecaostringNome da coleção onde a pesquisa será realizada.
embeddingValuesVetor de consulta para comparação com os documentos armazenados.
topKintNúmero máximo de resultados a retornar.
Retorno

( Values )

Lista de documentos correspondentes, cada um com os campos: id, text, embedding, metadata, score (0.0–1.0) e timestamp.


search(colecao: string, embedding: Values, topK: int, filtro: Values) : Values

Descrição

Pesquisa os documentos mais similares ao embedding fornecido numa coleção, com filtragem adicional por metadados. O filtro é aplicado como correspondência exata por igualdade de valor em cada chave. Retorna os topK documentos mais próximos que satisfaçam o filtro, ordenados por pontuação de similaridade decrescente.

Como Usar
const options = _val.init().set('encoding_format', 'float').set('dimensions', 768)
const queryEmbedding = client.embeddings('embeddinggemma:latest', 'O que é o Netuno?', options)
.get('data').get(0).get('embedding')

const filtro = _val.map().set('fonte', 'pdf')

const resultados = vector.search('netuno', queryEmbedding, 5, filtro)

for (const r of resultados) {
_log.info('Score: ' + r.get('score') + ' | ' + r.get('text'))
}
Atributos
NOMETIPODESCRIÇÃO
colecaostringNome da coleção onde a pesquisa será realizada.
embeddingValuesVetor de consulta para comparação com os documentos armazenados.
topKintNúmero máximo de resultados a retornar.
filtroValuesObjeto de metadados para filtrar os resultados. Apenas documentos cujos metadados contenham todos os pares chave-valor iguais são retornados. Pode ser nulo para desativar a filtragem.
Retorno

( Values )

Lista de documentos correspondentes, cada um com os campos: id, text, embedding, metadata, score (0.0–1.0) e timestamp.