Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Como funciona o embedding automatizado

Você pode configurar o MongoDB Vector Search para gerar e gerenciar automaticamente vector embeddings para os dados de texto em seu cluster. Você pode criar um índice de pesquisa semântica de IA com um clique em seu cluster e usar Voyage AI embedding model, simplificando a indexação, a atualização e a query com vetores.

Quando você ativa a Incorporação automatizada, o MongoDB pesquisa vetorial gera automaticamente embeddings usando o embedding model especificado no momento do índice para o campo de texto especificado em sua coleção e no momento da query para sua string de texto em sua query em relação ao campo indexado para embeddings automatizados.

Quando você cria um índice do MongoDB Vector Search para Automated Embedding, o MongoDB executa uma sincronização inicial para gerar embeddings para todos os existing documents em sua coleção:

  1. Digitaliza document.

    A pesquisa vetorial do MongoDB scans all documents na coleção que contêm o campo de texto indexado.

  2. Gera incorporações.

    Para cada document, o MongoDB Vector Search envia o texto do campo indexado para o embedding model Voyage AI para gerar vector embeddings.

  3. Armazena embedding.

    O MongoDB pesquisa vetorial armazena as embeddings geradas em uma coleção de sistema interno separado (__mdb_internal_search) no mesmo cluster para manter as embeddings isoladas dos dados do aplicativo e, ao mesmo tempo, manter a localidade dos dados.

  4. construir índice.

    Após as incorporações serem geradas, o MongoDB Vector Search cria o índice utilizando as incorporações geradas para habilitar a pesquisa vetorial.

Durante a sincronização inicial, o MongoDB processa documents em lotes e usa uma especial Flex inference processing tier para otimizar a taxa de transferência.

Observação

A duração da sincronização inicial depende do número de document, do comprimento do texto no campo indexado e da cota limite de taxa disponível. Pode levar várias horas para concluir a sincronização inicial para coleções grandes.

Após a sincronização inicial, o MongoDB pesquisa vetorial mantém os embeddings sincronizados automaticamente com seus dados à medida que eles são alterados.

Quando você insere um novo document com o campo de texto indexado, o MongoDB Vector Search automaticamente:

  1. Detecta o novo document por meio de fluxos de alteração.

  2. Gera embeddings para o campo de texto utilizando o model configurado.

  3. Armazena as incorporações na coleção do sistema.

  4. Atualiza o índice do MongoDB pesquisa vetorial para incluir as novas embeddings.

Quando você atualiza um document e o campo de texto indexado é alterado, o MongoDB pesquisa vetorial automaticamente:

  1. Detecta a alteração de campo por meio de change streams.

  2. Gera novas incorporações para o texto atualizado.

  3. Substitui os antigos embeddings na coleção do sistema.

  4. Atualiza o índice do MongoDB pesquisa vetorial com os novos embeddings.

Observação

A MongoDB pesquisa vetorial não trigger a regeneração de embedding para atualizações de campos que não estejam indexados para Embedding Automático.

Quando você exclui um document, o MongoDB pesquisa vetorial remove automaticamente os embeddings correspondentes da coleção do sistema e atualiza o índice.

A incorporação automatizada usa os embedding models da Voyage AI, que são hospedados e gerenciados pelo MongoDB em um ambiente de vários inquilinos:

  • Serviço hospedado: todos os modelos de embedding model são hospedados e mantidos pelo MongoDB. A plataforma de inferência do model é executada na infraestrutura do MongoDB na nuvem do Google Cloud em uma região dos EUA. Você não precisa implantar, configurar ou gerenciar nenhuma infraestrutura de model.

  • Acesso baseado em API: para implantações autogerenciadas configuradas para usar a chave de API do Voyage AI, o MongoDB envia texto para os pontos de extremidade de API do Voyage AI para gerar embeddings. As incorporações são devolvidas ao MongoDB e armazenadas em seu cluster.

  • Arquitetura multilocatária: o serviço de embedding é compartilhado por vários usuários. Este multi-tenant model fornece:

    • Eficiência de custos por meio de infraestrutura compartilhada

    • Atualizações e melhorias automáticas do model

    • Alta disponibilidade e escalabilidade

  • O texto enviado para o serviço de Incorporação Automática é usado apenas para gerar embeddings e não é armazenado ou usado para treinamento de model.

  • As incorporações são retornadas ao cluster MongoDB e armazenadas em seu próprio banco de dados.

  • Toda comunicação com o serviço de embedding Automática ocorre por conexões criptografadas.

O serviço de embedding é multilocatário. Portanto, o MongoDB impõe limites de taxa para garantir o uso leal em todos os clientes. Para aprender mais sobre os limites de taxa e como eles afetam as operações de embedding automatizada, consulte Limites de taxa.

Quando você executa uma query de pesquisa vetorial usando a Incorporação automatizada, o MongoDB lida automaticamente com a geração de embedding para seu texto de query:

  1. Envio de Query Text: Você fornece uma string de texto no campo query do estágio $vectorSearch em vez de um vetor pré-gerado.

  2. Embedding Generation: o MongoDB envia seu texto de query para o serviço de Automated Embedding para gerar embeddings usando o mesmo model especificado no índice (ou um model compatível se você o substituir pela opção model).

  3. Pesquisa Vetorial: as embeddings de query geradas são usadas para pesquisar as embeddings indexadas usando a função de similaridade configurada (cosine, dotProduct ou euclidean).

  4. Resultados retornados: o MongoDB retorna documentos classificados por similaridade com sua query.

Cada query que usa o embedding automatizado conta para os seus limites de taxa de embedding automatizado porque requer uma chamada de API para gerar embeddings. Para saber mais sobre como gerenciar a taxa de transferência e os custos da query, consulte Limites de taxa.

  • Collections grandes podem levar um tempo significativo para concluir a sincronização inicial se você atingir os limites de taxa.

  • O MongoDB tenta novamente automaticamente solicitações de embedding com falha e implementa backoff exponencial.

  • Você pode monitorar o progresso da sincronização através do monitoramento de pesquisa.

  • As atualizações de documentos são processadas à medida que ocorrem, sujeitas a limites de taxa.

  • Se as atualizações excederem os limites de taxa, elas serão enfileiradas e processadas quando a capacidade ficar disponível.

  • Seu aplicativo continua funcionando normalmente; apenas a geração embedding pode ser adiada.

  • Os limites da taxa de query afetam o número de pesquisas simultâneas que você pode realizar.

  • Se você exceder os limites de taxa de query, as consultas retornarão um erro indicando que o limite de taxa foi excedido.

  • Considere armazenar em cache os resultados de query usados com frequência ou atualizar para uma tier paga para maior taxa de transferência.

A incorporação automatizada usa um banco de dados de reserva separado para armazenar vector embeddings. Você pode localizar a coleção de incorporações gerada para um índice e recuperar as incorporações da coleção de incorporações gerada.

Armazenamento de incorporações

O MongoDB armazena as incorporações geradas de forma assíncrona e as persiste em uma coleção de incorporações geradas internas. Esta coleção de incorporações gerada existe em um banco de dados interno dedicado denominado __mdb_internal_search no mesmo cluster. Cada índice de incorporação automática no cluster tem exatamente uma coleção de incorporações gerada correspondente dentro desse banco de dados. Para aprender mais, consulte Coleção de embeddings gerados.

Aviso

O banco de dados __mdb_internal_search é um namespace interno reservado criado e gerenciado pelo MongoDB. Não manipule este banco de dados ou suas coleções. Se você modificar esse namespace reservado, isso poderá resultar em falhas de índice e resultados de pesquisa inconsistentes.

Estrutura da embedding de coleção gerada

A coleção de embeddings gerada contém um document por document de coleção de origem. Cada **document** de **coleção** de **embedding** gerado tem o mesmo _id que a origem, cópias dos campos de **filtro** da origem e o vetor de **embedding** gerado para cada **campo** de Embedding automatizada.

Você pode visualizar os seguintes campos:

Campo
Tipo
Descrição

_id

ObjectId

Same _id as the source document.

<filter-field>

Any

cópia do campo de filtro do document de origem.

_autoEmbed

Objeto

Contém o vetor de embedding para cada campo de Embedding automatizada .

_autoEmbed.
<fieldPath>

Array de float ou vetores quantizados

Contém o vetor de embedding gerado para o campo Incorporação automatizada.

Aviso

O banco de dados __mdb_internal_search é um namespace interno reservado criado e gerenciado pelo MongoDB. Não manipule este banco de dados ou suas coleções. Se você modificar esse namespace reservado, isso poderá resultar em falhas de índice e resultados de pesquisa inconsistentes.

Use o mongosh para encontrar a coleção de embeddings gerada para um índice de embedding automatizada.

1
2

Execute a seguinte query após substituir os seguintes placeholders:

  • <database_name> - Nome do banco de dados que contém o índice de embedding Automática.

  • <collection_name> - Nome da coleção que contém o índice de embedding automático.

  • <index_name> - Nome do índice de embedding Automática.

Exemplo: GET a ID do índice de embedding automatizada
1use <database_name>
2db.<collection_name>.aggregate( [ { $listSearchIndexes: { name: "<index_name>" } } ] )
Exemplo: GET a ID do índice de embedding automatizada
1[
2 {
3 id: '69f382ecd6fa583100184fe7',
4 name: 'auto-embed-index',
5 type: 'vectorSearch',
6 status: 'READY',
7 numDocs: 0,
8 latestDefinition: { ... },
9 statusDetail: [ ... ]
10 }
11]
3

Execute a seguinte query após substituir <index_id> pelo ID do índice de embedding Automática retornado pelo comando na etapa anterior.

Exemplo: GET a coleção de embeddings gerada
1use __mdb_internal_search
2db.getCollectionNames().filter(n => n.startsWith("<index_id>"))
Exemplo: GET a coleção de embeddings gerada
[ '69f382ecd6fa583100184fe7-96dad03b0a735a19fd9f1a22f9694efc-1-0' ]

A saída é o nome da coleção de embedding gerada.

Use o mongosh para encontrar o número de documents na coleção de embeddings gerada para um índice de embedding automatizada.

1
2

Execute a seguinte query após substituir os seguintes placeholders:

  • <generated_embeddings_collection_name> - Nome da coleção de incorporações gerada.
Exemplo: Verificar quantos document foram criados
1use __mdb_internal_search
2const mvColl = "<generated_embeddings_collection_name>"
3db.getCollection(mvColl).countDocuments()
Exemplo: Verificar quantos document foram criados
1100

Você pode verificar o tamanho do armazenamento das coleções de embeddings geradas para entender o consumo de espaço em disco e índice a partir dos embeddings gerados. Isso é útil para planejar a capacidade, depurar crescimento inesperado e validar a limpeza após descartar ou redefinir um índice.

Importante

Antes de verificar o tamanho do armazenamento, localize o nome da coleção de incorporações gerada. Para aprender mais, consulte Localizar a Coleção de Embeddings Geradas.

Use ``mongosh`` para encontrar o tamanho de armazenamento da coleção de embedding gerada.

1
2

Execute a seguinte query após substituir o <generated_embeddings_collection_name> pelo nome da coleção de embeddings gerada:

Exemplo: verificar o tamanho do armazenamento da coleção de embeddings gerada
1use __mdb_internal_search
2const mvColl = "<generated_embeddings_collection_name>"
3db.getCollection(mvColl).stats()

O comando collStats fornece métricas de armazenamento detalhadas para embeddings gerados coleções. Use essa abordagem quando precisar de acesso com scripts, agregação de cluster fragmentado ou monitoramento agendado.

Os seguintes campos do collStats fornecem informações de armazenamento:

Campo
Descrição

count

Número de document na coleção de embedding gerada. Existe um document para cada document de origem com incorporações geradas.

size

Tamanho lógico não compactado de todos os document, em bytes.

storageSize

Tamanho em disco dos arquivos de dados da coleção após a compactação WiredTiger, em bytes.

totalIndexSize

Tamanho em disco de todos os índices do MongoDB na coleção de embeddings gerada, em bytes.

totalSize

Soma de storageSize e totalIndexSize. Representa o uso total do disco.

avgObjSize

Tamanho médio do document descompactado. Útil para validar o tamanho de embedding por document.

Observação

  • storageSize e totalIndexSize refletem o uso real do disco.

  • size é a visualização lógica descompactada e normalmente é maior.

  • Essas métricas mostram o armazenamento apenas no cluster MongoDB . Elas não incluem disco usado pelo índice vetorial Lucene no host mongot.

Use o mongosh ou o PyMongo para verificar o tamanho de armazenamento da coleção de embeddings gerada em um conjunto de réplicas.

Execute os seguintes comandos no banco de dados do __mdb_internal_search :

1use __mdb_internal_search
2
3const mvColl = "<generated_embeddings_collection_name>";
4
5db.runCommand({ collStats: mvColl }).count
6db.runCommand({ collStats: mvColl, scale: 1024 * 1024 })
1{
2 ns: '__mdb_internal_search.69f382ecd6fa583100184fe7-96dad03b0a735a19fd9f1a22f9694efc-1-0',
3 size: 5142,
4 count: 1250000,
5 avgObjSize: 4312,
6 numOrphanDocs: 0,
7 storageSize: 1830,
8 freeStorageSize: 7,
9 capped: false,
10 wiredTiger: { ... },
11 nindexes: 1,
12 indexDetails: { ... },
13 indexBuilds: [],
14 totalIndexSize: 42,
15 indexSizes: { _id_: 0 },
16 totalSize: 1872,
17 scaleFactor: 1048576,
18 ok: 1,
19 '$clusterTime': {
20 clusterTime: Timestamp({ t: 1777646199, i: 1 }),
21 signature: {
22 hash: Binary.createFromBase64('pomqluUIpiZzLro3VWhO4dt2LKE=', 0),
23 keyId: Long('7634583163557117960')
24 }
25 },
26 operationTime: Timestamp({ t: 1777646199, i: 1 })
27}

Para um resumo formatado, execute:

1const s = db.runCommand({ collStats: mvColl, scale: 1024 * 1024 });
2({
3 count: s.count,
4 avgObjSizeKB: (s.avgObjSize / 1024).toFixed(2),
5 dataMB: s.size,
6 storageMB: s.storageSize,
7 indexesMB: s.totalIndexSize,
8 totalMB: s.totalSize,
9})
1{
2 "count": 1250000,
3 "avgObjSizeKB": "4.21",
4 "dataMB": 5142,
5 "storageMB": 1830,
6 "indexesMB": 42,
7 "totalMB": 1872
8}
1from pymongo import MongoClient
2
3MV_DATABASE = "__mdb_internal_search"
4MB = 1024 * 1024
5
6def get_mv_storage_stats(client, mv_collection_name):
7 """Return storage metrics for a generated embeddings collection."""
8 db = client[MV_DATABASE]
9 stats = db.command("collStats", mv_collection_name, scale=MB)
10 return {
11 "count": stats["count"],
12 "avg_obj_kb": round(stats["avgObjSize"] / 1024, 2),
13 "data_mb": stats["size"],
14 "storage_mb": stats["storageSize"],
15 "indexes_mb": stats["totalIndexSize"],
16 "total_mb": stats["totalSize"],
17 }
18
19client = MongoClient("mongodb+srv://<user>:<pwd>@<cluster>/")
20print(get_mv_storage_stats(client, "<generated_embeddings_collection_name>"))

Saída de amostra:

{'count': 1250000, 'avg_obj_kb': 4.21, 'data_mb': 5142, 'storage_mb': 1830, 'indexes_mb': 42, 'total_mb': 1872}

Query cada shard para obter métricas de armazenamento em todo o cluster.

Em coleções de origem fragmentadas, cada fragmento tem sua própria coleção de embeddings gerada no banco de dados do __mdb_internal_search. mongos não vê essas coleções, então você deve consultar o mongod de cada fragmento diretamente e somar os resultados.

1

Execute o seguinte comando para listar todos os shards:

db.adminCommand({ listShards: 1 })
2

Para cada fragmento, conecte-se diretamente ao seu conjunto de réplicas.

3

Execute o comando collStats na coleção de incorporações gerada neste fragmento.

4

Adicione count, storageSize, totalIndexSize e totalSize em todos os fragmentos para obter os totais em todo o cluster.

O script a seguir se conecta a cada fragmento, consulta a query de embeddings gerada e retorna métricas por fragmento e totais:

Exemplo: verificar o armazenamento em um cluster fragmentado
1from pymongo import MongoClient
2
3MV_DATABASE = "__mdb_internal_search"
4MB = 1024 * 1024
5
6def _resolve_mv_name(client, source_db, source_collection, index_name):
7 """Find the generated embeddings collection name for an index."""
8 src = client[source_db][source_collection]
9 indexes = list(src.aggregate([{"$listSearchIndexes": {"name": index_name}}]))
10 if not indexes:
11 raise LookupError(f"No search index named {index_name!r}")
12 index_id = indexes[0]["id"]
13 matches = [n for n in client[MV_DATABASE].list_collection_names()
14 if n.startswith(index_id)]
15 if not matches:
16 return None
17 matches.sort(reverse=True)
18 return matches[0]
19
20def get_mv_storage_per_shard(shard_uris, source_db, source_collection, index_name):
21 """Get per-shard and total storage for a sharded cluster."""
22 per_shard = {}
23 totals = {"count": 0, "data_mb": 0, "storage_mb": 0,
24 "indexes_mb": 0, "total_mb": 0}
25
26 for shard_name, uri in shard_uris.items():
27 client = MongoClient(uri)
28 mv_name = _resolve_mv_name(client, source_db, source_collection, index_name)
29
30 if mv_name is None:
31 per_shard[shard_name] = {"note": "no MV found (still building?)"}
32 continue
33
34 s = client[MV_DATABASE].command("collStats", mv_name, scale=MB)
35 row = {
36 "mv": mv_name,
37 "count": s["count"],
38 "data_mb": s["size"],
39 "storage_mb": s["storageSize"],
40 "indexes_mb": s["totalIndexSize"],
41 "total_mb": s["totalSize"],
42 }
43 per_shard[shard_name] = row
44
45 for k in totals:
46 totals[k] += row[k]
47
48 return {"per_shard": per_shard, "totals": totals}
49
50# Usage
51shard_uris = {
52 "shard-00": "mongodb://<user>:<pwd>@shard-00.example.net:27017/?replicaSet=shard-00",
53 "shard-01": "mongodb://<user>:<pwd>@shard-01.example.net:27017/?replicaSet=shard-01",
54 "shard-02": "mongodb://<user>:<pwd>@shard-02.example.net:27017/?replicaSet=shard-02",
55}
56
57result = get_mv_storage_per_shard(
58 shard_uris,
59 source_db="<source_db>",
60 source_collection="<source_collection>",
61 index_name="<index_name>",
62)
63
64for shard, row in result["per_shard"].items():
65 print(shard, row)
66print("TOTAL:", result["totals"])
Exemplo: verificar o armazenamento em um cluster fragmentado
shard-00 {'mv': '69e183...-1-3', 'count': 416000, 'data_mb': 1714, 'storage_mb': 612, 'indexes_mb': 14, 'total_mb': 626}
shard-01 {'mv': '69e183...-1-3', 'count': 418200, 'data_mb': 1721, 'storage_mb': 615, 'indexes_mb': 14, 'total_mb': 629}
shard-02 {'mv': '69e183...-1-3', 'count': 415800, 'data_mb': 1707, 'storage_mb': 603, 'indexes_mb': 14, 'total_mb': 617}
TOTAL: {'count': 1250000, 'data_mb': 5142, 'storage_mb': 1830, 'indexes_mb': 42, 'total_mb': 1872}

Obtenha a marca total da embedding automatizada em todos os índices.

Para verificar o armazenamento de todos os índices de Automated embedding em um cluster, some collStats para cada collection no __mdb_internal_search. Isso é útil para revisões de capacidade e identificação de coleções de embeddings geradas órfãs.

Execute o seguinte no mongosh em um único conjunto de réplicas ou em cada fragmento para clusters fragmentados:

1use __mdb_internal_search
2
3const MB = 1024 * 1024;
4const rows = db.getCollectionNames().map(name => {
5const s = db.runCommand({ collStats: name, scale: MB });
6return {
7 collection: name,
8 count: s.count,
9 storageMB: s.storageSize,
10 indexesMB: s.totalIndexSize,
11 totalMB: s.totalSize,
12};
13});
14
15const total = rows.reduce((a, r) => ({
16storageMB: a.storageMB + r.storageMB,
17indexesMB: a.indexesMB + r.indexesMB,
18totalMB: a.totalMB + r.totalMB,
19}), { storageMB: 0, indexesMB: 0, totalMB: 0 });
20
21print("Per-collection:");
22printjson(rows);
23print("Cluster total:");
24printjson(total);
1Per-collection:
2[
3 { "collection": "69e183...-1-3", "count": 1250000, "storageMB": 1830, "indexesMB": 42, "totalMB": 1872 },
4 { "collection": "71fa42...-1-1", "count": 84000, "storageMB": 121, "indexesMB": 3, "totalMB": 124 }
5]
6Cluster total:
7 { "storageMB": 1951, "indexesMB": 45, "totalMB": 1996 }
8}

Observação

Em clusters fragmentados, execute este comando em cada fragmento e some os resultados.

Use o mongosh para recuperar incorporações da coleção de incorporações gerada.

1
2

Execute a seguinte query após substituir os seguintes placeholders:

  • <generated_embeddings_collection_name> - Nome da coleção de incorporações gerada.

  • <document_id> - _id do document na coleção de origem.

  • <auto_embed_field> - Nome do campo indexado para embedding Automatizado.

Exemplo: recuperar incorporações da coleção de incorporações gerada
1use __mdb_internal_search
2const mvColl = "<generated_embeddings_collection_name>"
3db.getCollection(mvColl).findOne(
4 { _id: "<document_id>" },
5 { _id: 1, "_autoEmbed.<auto_embed_field>": 1 }
6)
Exemplo: recuperar incorporações da coleção de incorporações gerada
1[
2 { _autoEmbed: {}, _id: "ObjectId('573a1390f29313caabcd5c0f')" },
3 { _autoEmbed: {}, _id: "ObjectId('573a1390f29313caabcd5c0f')" },
4 {
5 _autoEmbed: {
6 fullplot: Binary.fromInt8Array(new Int8Array([
7 5, -30, 16, 4, -57, -8, -17, -13, 16, 11, -22, 15,
8 -7, 13, 8, -2, -1, -14, 27, 10, -9, 20, 14, -2,
9 3, -56, -21, 10, -24, 12, 10, 9, 12, 7, 4, 14,
10 -7, -24, -15, 16, 13, 21, -4, -16, -12, -15, 3, -33,
11 5, -21, 2, -1, 0, 16, 7, 13, 19, 4, 5, -14,
12 -34, 7, -16, 38, 4, 4, 7, -22, 8, 14, 15, -14,
13 -4, 6, 22, -17, 8, 27, 8, 13, 46, -12, -7, -9,
14 -20, 13, 10, 4, -14, -11, 31, -7, 0, -3, 1, 16,
15 9, 5, 6, -2,
16 ... 924 more items
17 ]))
18 },
19 _id: "ObjectId('573a1390f29313caabcd5c0f')"
20 },
21 {
22 _autoEmbed: {
23 fullplot: Binary.fromInt8Array(new Int8Array([
24 -5, -22, 22, -6, -43, -13, -5, 4, 5, 2, 4, 13,
25 0, -3, -3, -50, -5, -2, -2, 27, -5, 36, 27, 12,
26 -12, -6, -1, 9, -7, 25, 4, -28, 3, 9, 3, 23,
27 8, 11, 11, 25, -19, 27, 17, 18, -1, 0, 5, -12,
28 13, -5, -3, 3, -17, 16, -15, 43, -1, 1, 1, -6,
29 -26, 16, -11, 13, 14, 0, -9, -23, 25, -16, 11, -25,
30 7, 9, -1, 0, 33, -8, -3, -18, 3, 4, -20, -14,
31 17, -2, -2, -10, 17, -25, -11, 9, 1, 2, -8, 7,
32 20, 18, 17, -2,
33 ... 924 more items
34 ]))
35 },
36 _id: "ObjectId('573a1390f29313caabcd5c0f')"
37 },
38 {
39 _autoEmbed: {
40 fullplot: Binary.fromInt8Array(new Int8Array([
41 0, -1, 47, 6, -20, -14, 29, -2, 13, -1, 20, 11,
42 -18, -7, 12, -10, -25, 10, 7, -15, 11, 9, -14, 12,
43 -9, -22, 16, 0, 18, 5, 9, -26, 14, -27, 6, 20,
44 -19, -8, 1, -5, 21, 13, -37, -7, 0, -21, -51, 1,
45 -38, -14, 4, 6, -23, 15, 19, 33, 8, 0, -7, -3,
46 -25, 8, -29, 25, -1, 12, 4, -21, -1, 0, -14, -3,
47 -6, -3, 7, 30, 8, -8, 34, -19, -12, -29, -15, -14,
48 1, -4, 6, -2, -36, -18, -2, 4, 23, 17, -13, 1,
49 0, 7, 25, -19,
50 ... 924 more items
51 ]))
52 },
53 _id: "ObjectId('573a1390f29313caabcd5c0f')"
54 }
55]

Use o mongosh para recuperar incorporações da coleção de incorporações gerada.

1
2

Execute a seguinte query após substituir os seguintes placeholders:

  • <generated_embeddings_collection_name> - Nome da coleção de incorporações gerada.

  • <document_id> - _id do document na coleção de origem.

  • <auto_embed_field> - Nome do campo indexado para embedding Automatizado.

  • <number_of_documents> - Número de documentos a retornar.

Exemplo: recuperar incorporações da coleção de incorporações gerada
1use __mdb_internal_search
2const mvColl = "<generated_embeddings_collection_name>"
3db.getCollection(mvColl).find(
4 {},
5 { _id: "<document_id>", "_autoEmbed.<auto_embed_field>": { $slice: 5 } }
6).limit(<number_of_documents>)
Exemplo: recuperar incorporações da coleção de incorporações gerada
1[
2 { _autoEmbed: {}, _id: "ObjectId('573a1390f29313caabcd5c0f')" },
3 { _autoEmbed: {}, _id: "ObjectId('573a1390f29313caabcd5c0f')" },
4 {
5 _autoEmbed: {
6 fullplot: Binary.fromInt8Array(new Int8Array([
7 5, -30, 16, 4, -57, -8, -17, -13, 16, 11, -22, 15,
8 -7, 13, 8, -2, -1, -14, 27, 10, -9, 20, 14, -2,
9 3, -56, -21, 10, -24, 12, 10, 9, 12, 7, 4, 14,
10 -7, -24, -15, 16, 13, 21, -4, -16, -12, -15, 3, -33,
11 5, -21, 2, -1, 0, 16, 7, 13, 19, 4, 5, -14,
12 -34, 7, -16, 38, 4, 4, 7, -22, 8, 14, 15, -14,
13 -4, 6, 22, -17, 8, 27, 8, 13, 46, -12, -7, -9,
14 -20, 13, 10, 4, -14, -11, 31, -7, 0, -3, 1, 16,
15 9, 5, 6, -2,
16 ... 924 more items
17 ]))
18 },
19 _id: "ObjectId('573a1390f29313caabcd5c0f')"
20 },
21 {
22 _autoEmbed: {
23 fullplot: Binary.fromInt8Array(new Int8Array([
24 -5, -22, 22, -6, -43, -13, -5, 4, 5, 2, 4, 13,
25 0, -3, -3, -50, -5, -2, -2, 27, -5, 36, 27, 12,
26 -12, -6, -1, 9, -7, 25, 4, -28, 3, 9, 3, 23,
27 8, 11, 11, 25, -19, 27, 17, 18, -1, 0, 5, -12,
28 13, -5, -3, 3, -17, 16, -15, 43, -1, 1, 1, -6,
29 -26, 16, -11, 13, 14, 0, -9, -23, 25, -16, 11, -25,
30 7, 9, -1, 0, 33, -8, -3, -18, 3, 4, -20, -14,
31 17, -2, -2, -10, 17, -25, -11, 9, 1, 2, -8, 7,
32 20, 18, 17, -2,
33 ... 924 more items
34 ]))
35 },
36 _id: "ObjectId('573a1390f29313caabcd5c0f')"
37 },
38 {
39 _autoEmbed: {
40 fullplot: Binary.fromInt8Array(new Int8Array([
41 0, -1, 47, 6, -20, -14, 29, -2, 13, -1, 20, 11,
42 -18, -7, 12, -10, -25, 10, 7, -15, 11, 9, -14, 12,
43 -9, -22, 16, 0, 18, 5, 9, -26, 14, -27, 6, 20,
44 -19, -8, 1, -5, 21, 13, -37, -7, 0, -21, -51, 1,
45 -38, -14, 4, 6, -23, 15, 19, 33, 8, 0, -7, -3,
46 -25, 8, -29, 25, -1, 12, 4, -21, -1, 0, -14, -3,
47 -6, -3, 7, 30, 8, -8, 34, -19, -12, -29, -15, -14,
48 1, -4, 6, -2, -36, -18, -2, 4, 23, 17, -13, 1,
49 0, 7, 25, -19,
50 ... 924 more items
51 ]))
52 },
53 _id: "ObjectId('573a1390f29313caabcd5c0f')"
54 }
55]

Use o PyMongo para recuperar incorporações da coleção de incorporações gerada.

Para recuperar embeddings da coleção de embeddings gerada, você pode usar o seguinte script Python. Para executar o script, instale o Driver do PyMongo.

1
2
Exemplo: recuperar incorporações da coleção de incorporações gerada
1from pymongo import MongoClient
2
3MV_DATABASE = "__mdb_internal_search"
4
5def get_mv_collection(client, source_db, source_collection, index_name):
6 """Resolve the MV collection for an auto-embedding index."""
7 # 1. Look up the index ID via $listSearchIndexes on the source collection.
8 src = client[source_db][source_collection]
9 indexes = list(src.aggregate([{"$listSearchIndexes": {"name": index_name}}]))
10 if not indexes:
11 raise LookupError(f"No search index named {index_name!r} on {source_db}.{source_collection}")
12 index_id = indexes[0]["id"]
13
14 # 2. Find the MV collection in __mdb_internal_search whose name starts with the index ID.
15 mv_db = client[MV_DATABASE]
16 matches = [n for n in mv_db.list_collection_names() if n.startswith(index_id)]
17 if not matches:
18 raise LookupError(f"No MV collection found for index {index_id} (index may still be building)")
19 if len(matches) > 1:
20 # Possible briefly during an auto-embed field update; pick the newest.
21 matches.sort(reverse=True)
22 return mv_db[matches[0]]
23
24def get_embedding(client, source_db, source_collection, index_name, embed_path, source_id):
25 """Fetch the embedding for a single source document."""
26 mv = get_mv_collection(client, source_db, source_collection, index_name)
27 doc = mv.find_one(
28 {"_id": source_id},
29 {"_id": 1, f"_autoEmbed.{embed_path}": 1},
30 )
31 if doc is None:
32 return None
33 return doc["_autoEmbed"][embed_path]
34
35# --- Usage ---
36client = MongoClient("mongodb+srv://<user>:<pwd>@<cluster>/")
37
38embedding = get_embedding(
39 client,
40 source_db="<source_db>",
41 source_collection="<source_collection>",
42 index_name="<auto_embed_index_name>",
43 embed_path="<auto_embed_field>",
44 source_id="<document_id>",
45)
46
47print(f"dims: {len(embedding)}")
48print(f"first 5: {embedding[:5]}")
3
Espaço reservado
Descrição

<user>

Seu nome de usuário para a implementação do MongoDB .

<pwd>

Sua senha para a implantação do MongoDB .

<cluster>

A string de conexão do cluster para a implantação do MongoDB.

<source_db>

Nome do banco de dados que contém a coleção de origem.

<source_collection>

Nome da coleção de origem.

<index_name>

Nome do índice de embedding automatizada.

<source_id>

_id of the document in the coleção de origem.

<auto_embed_field>

Nome do campo indexado para embedding Automática.

<number_of_documents>

Número de document a retornar.

4
python get_embedding.py

Para transmitir embeddings da coleção de embeddings gerada, você pode usar o seguinte script Python.

1
2
Exemplo: transmitir incorporações da coleção de incorporações gerada
1from pymongo import MongoClient
2
3# --- Usage ---
4client = MongoClient("mongodb+srv://<user>:<pwd>@<cluster>/")
5
6mv = get_mv_collection(client, "<source_db>", "<source_collection>", "<auto_embed_index_name>")
7
8cursor = mv.find(
9 {},
10 {"_id": 1, "_autoEmbed.<auto_embed_field>": 1},
11 batch_size=500,
12)
13
14for doc in cursor:
15 src_id = doc["_id"]
16 vec = doc["_autoEmbed"]["<auto_embed_field>"]
3
Espaço reservado
Descrição

<user>

Seu nome de usuário para a implementação do MongoDB .

<pwd>

Sua senha para a implantação do MongoDB .

<cluster>

A string de conexão do cluster para a implantação do MongoDB.

<source_db>

Nome do banco de dados que contém a coleção de origem.

<source_collection>

Nome da coleção de origem.

<auto_embed_index_name>

Nome do índice de embedding automatizada.

<auto_embed_field>

Nome do campo indexado para embedding Automática.

4
python stream_embedding.py

As seções a seguir fornecem orientações para solucionar problemas comuns com o Automated Embedding.

Nenhuma coleção de embedding gerada corresponde ao ID do índice
Seu índice ainda pode estar no estado Building ou Pending. A coleção de embedding gerada é criada de forma preguiçosa na primeira gravar. Verifique o status usando o $listSearchIndexes.
document ausente para uma fonte _id
O embedding para o documento especificado ainda não foi gerado ou o documento foi filtrado pela expressão de filtro do índice.
Mais de uma coleção corresponde ao ID do índice
A configuração do campo de incorporação automática foi atualizada. Embora uma nova coleção de incorporações gerada tenha sido criada, a antiga pode permanecer brevemente até a limpeza.