# Vector DB

## **Visão geral**

O conector **Vector DB** desempenha um papel central em seu pipeline ao executar o processo de **ingestão de dados**. Ele converte informações em uma **representação vetorial** que pode ser utilizada posteriormente para **busca e recuperação semântica**. Quando um prompt é recebido, cálculos de similaridade identificam os vetores mais relevantes, e seus textos correspondentes são recuperados para enriquecer o contexto fornecido ao modelo de linguagem (LLM).

Diferente dos bancos de dados tradicionais, que armazenam texto ou dados estruturados, um banco de dados vetorial armazena **embeddings**, que são representações numéricas que capturam o significado do conteúdo. Esses embeddings permitem que modelos de IA encontrem informações relacionadas com base em similaridade, em vez de correspondência exata de palavras-chave.

## **Como funciona**

O funcionamento do conector envolve um processo sequencial com três etapas principais:

{% stepper %}
{% step %}

#### **Ingestão de dados**

O conector recebe dados de uma etapa anterior do pipeline. Esses dados podem vir de várias fontes, como o trigger ou outro conector da plataforma.

Você pode definir o tipo de origem por meio do parâmetro **Source Type**:

* **Text**: Para processar conteúdo de texto bruto.
* **File**: Para processar um documento armazenado.
  {% endstep %}

{% step %}

#### **Geração de embedding**

O conteúdo recebido é processado usando o **Embedding Model** configurado, que converte os dados em um vetor (uma lista de números que representa seu significado semântico). Esses vetores não são legíveis por humanos, mas são essenciais para buscas e recuperação baseadas em IA nas etapas seguintes.

Fornecedores de modelos de embedding suportados incluem:

* **Local (default):** Um modelo de embedding local leve (**all-MiniLM-L6-v2**) útil para casos de uso básicos ou testes.
* **Fornecedores externos:** Você pode selecionar opções mais avançadas, como:
  * **Hugging Face**: Oferece uma variedade de modelos de texto e multimodais.
  * **OpenAI**: Suporta modelos como `text-embedding-3-small` e `text-embedding-3-large`.
  * **Google Vertex AI**: Permite geração de embeddings em nível empresarial.
    {% endstep %}

{% step %}

#### **Armazenamento de vetores**

Após a geração dos embeddings, eles são armazenados no **Vector Store** configurado. Atualmente, o conector suporta:

* **Neo4j** (banco de dados baseado em grafos).
* Bancos de dados compatíveis com **Postgres**.
  {% endstep %}
  {% endstepper %}

## **Dimensões de vetores**

Cada modelo de embedding produz vetores com uma **dimensão** específica (por exemplo, 3072 valores). A dimensão usada no modelo deve **corresponder exatamente** à dimensão definida na tabela do vector store de destino. Caso contrário, o processo de ingestão falhará.

Quando a opção **Auto-Create** está ativada, o conector cria automaticamente uma nova tabela com a dimensão correta de acordo com o modelo de embedding selecionado.

## **Operações suportadas**

No estágio atual, o conector suporta apenas operações de **ingestão**:

* **Insert:** Armazena os embeddings gerados no vector store.
* **Metadata:** É possível incluir metadados (pares chave–valor adicionais) ao armazenar embeddings, mas filtros baseados em metadata ainda não estão disponíveis.

## **Output**

O conector retorna uma **mensagem de confirmação** indicando o resultado do processo de ingestão.

Se suportado pelo modelo de embedding, a resposta também pode incluir informações adicionais, como o **número de tokens processados** durante a geração dos embeddings.

## **Configuração de parâmetros**

Configure o conector usando os parâmetros abaixo. Campos que suportam [expressões Double Braces](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces) estão marcados na coluna **Suporta DB**.

{% tabs fullWidth="true" %}
{% tab title="General" %}

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo</th><th>Suporta DB</th><th>Padrão</th></tr></thead><tbody><tr><td><strong>Alias</strong></td><td>Nome (alias) para a saída deste conector, permitindo que você o referencie posteriormente no fluxo usando Double Braces expressions.</td><td>String</td><td>✅</td><td>vector-db-1</td></tr><tr><td><strong>Source Type</strong></td><td>Define o tipo de dado que o conector irá processar. Tipos suportados: <strong>Text</strong> e <strong>File</strong>.</td><td>String</td><td>❌</td><td>N/A</td></tr><tr><td><strong>Metadata</strong></td><td>Armazena informações extras para identificar os vetores.</td><td>Key-value pairs</td><td>❌</td><td></td></tr></tbody></table>
{% endtab %}

{% tab title="Embedding Model" %}
Um modelo de embedding converte texto ou outros tipos de dados em vetores numéricos que representam seu significado semântico. Esses vetores permitem medir a similaridade entre conteúdos com base no significado, e não nas palavras exatas.

Modelos de embedding são comumente usados para tarefas como semantic **search**, **clustering** e **Retrieval-Augmented Generation (RAG)**, permitindo comparação e recuperação eficientes de informações contextualmente relevantes.

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo</th><th>Suporta DB</th><th>Padrão</th></tr></thead><tbody><tr><td><strong>Embedding Provider</strong></td><td>O fornecedor do modelo de embedding a ser utilizado. Opções: <strong>Local (all-MiniLM-L6-v2)</strong>, <strong>OpenAI</strong>, <strong>Google Vertex AI</strong> e <strong>Hugging Face</strong>.</td><td>String</td><td>❌</td><td>Local (all-MiniLM-L6-v2)</td></tr></tbody></table>

#### **Local (all-MiniLM-L6-v2)**

Não há parâmetros configuráveis para este fornecedor. Entretanto, o conector ainda utiliza uma **Vector Dimension** interna, que define a dimensão dos vetores de embedding. Essa dimensão deve **corresponder exatamente** ao tamanho do vetor do modelo. Se a tabela não existir, o auto-create utilizará esta dimensão; tabelas com dimensões divergentes causarão erros. Para este fornecedor, a **dimensão padrão é 384**.

#### **OpenAI**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo</th><th>Suporta DB</th><th>Padrão</th></tr></thead><tbody><tr><td><strong>Embedding Model Name</strong></td><td>Define o nome do modelo de embedding a ser usado, como <code>text-embedding-3-large</code>.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Embedding Account</strong></td><td>Especifica a conta configurada com credenciais OpenAI. Tipo suportado: <a href="https://app.gitbook.com/s/cO0A6g1dOsu8BiHYqO67/platform-administration/settings/accounts"><strong>Secret Key</strong></a>.</td><td>Select</td><td>❌</td><td>N/A</td></tr><tr><td><strong>Vector Dimension</strong></td><td>Define a dimensão dos vetores de embedding. Deve corresponder exatamente ao tamanho do vetor do modelo. Se a tabela não existir, o auto-create usa esta dimensão; tabelas divergentes causam erros.</td><td>Integer</td><td>❌</td><td>N/A</td></tr><tr><td><strong>Timeout</strong></td><td>Define o tempo máximo (em segundos) para a operação antes de ser abortada. Por exemplo, <code>120</code> equivale a 2 minutos.</td><td>Integer</td><td>❌</td><td><code>30</code></td></tr></tbody></table>

#### **Google Vertex AI**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo</th><th>Suporta DB</th><th>Padrão</th></tr></thead><tbody><tr><td><strong>Embedding Model Name</strong></td><td>Define o nome do modelo de embedding a ser usado, como <code>textembedding-gecko@003</code>.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Embedding Account</strong></td><td>Especifica a conta configurada com credenciais do Google Cloud. Tipo suportado: <a href="https://app.gitbook.com/s/cO0A6g1dOsu8BiHYqO67/platform-administration/settings/accounts"><strong>Google Key</strong></a>.</td><td>Select</td><td>❌</td><td>N/A</td></tr><tr><td><strong>Vector Dimension</strong></td><td>Define a dimensão dos vetores de embedding. Deve corresponder exatamente ao tamanho do vetor do modelo. Se a tabela não existir, o auto-create usa esta dimensão; tabelas divergentes causam erros.</td><td>Integer</td><td>❌</td><td>N/A</td></tr><tr><td><strong>Project ID</strong></td><td>Define o ID do projeto do Google Cloud associado à conta.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Location</strong></td><td>Especifica a região onde o modelo Vertex AI está implantado, como <code>us-central1</code>.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Endpoint</strong></td><td>Define o endpoint do modelo de embedding, como <code>us-central1-aiplatform.googleapis.com:443</code>.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Publisher</strong></td><td>Especifica o publisher do modelo, geralmente <code>google</code>.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Max Retries</strong></td><td>Define o número máximo de tentativas em caso de falhas temporárias na API.</td><td>Integer</td><td>❌</td><td>3</td></tr><tr><td><strong>Timeout</strong></td><td>Define o tempo máximo (em segundos) para a operação antes de ser abortada.</td><td>Integer</td><td>❌</td><td><code>30</code></td></tr></tbody></table>

#### **Hugging Face**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo</th><th>Suporta DB</th><th>Padrão</th></tr></thead><tbody><tr><td><strong>Embedding Model Name</strong></td><td>Define o nome do modelo de embedding a ser usado, como <code>sentence-transformers/all-mpnet-base-v2</code>.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Embedding Account</strong></td><td>Especifica a conta configurada com credenciais Hugging Face. Tipo suportado: <a href="https://app.gitbook.com/s/cO0A6g1dOsu8BiHYqO67/platform-administration/settings/accounts"><strong>Secret Key</strong></a>.</td><td>Select</td><td>❌</td><td>N/A</td></tr><tr><td><strong>Vector Dimension</strong></td><td>Define a dimensão dos vetores de embedding. Deve corresponder exatamente ao tamanho do vetor do modelo. Se a tabela não existir, o auto-create usa esta dimensão; tabelas divergentes causam erros.</td><td>Integer</td><td>❌</td><td>N/A</td></tr><tr><td><strong>Wait for Model</strong></td><td>Determina se o sistema deve esperar o modelo carregar antes de gerar embeddings (<code>true</code>) ou retornar erro se o modelo não estiver pronto (<code>false</code>).</td><td>Boolean</td><td>❌</td><td>True</td></tr></tbody></table>
{% endtab %}

{% tab title="Vector Store" %}
Um vector store é um banco de dados especializado em armazenar e recuperar representações vetoriais de dados (embeddings). Ele permite buscas por similaridade comparando vetores numéricos em vez de textos exatos, proporcionando resultados mais relevantes e semânticos.

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo</th><th>Suporta DB</th><th>Padrão</th></tr></thead><tbody><tr><td><strong>Vector Store Provider</strong></td><td>Define o fornecedor do banco de dados usado para armazenar e consultar embeddings. Opções: <strong>PostgreSQL (PGVector)</strong> e <strong>Neo4j</strong>.</td><td>Select</td><td>❌</td><td>N/A</td></tr></tbody></table>

#### **PostgreSQL (PGVector)**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo</th><th>Suporta DB</th><th>Padrão</th></tr></thead><tbody><tr><td><strong>Host</strong></td><td>Define o hostname ou IP do servidor PostgreSQL.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Port</strong></td><td>Define a porta usada para conectar ao servidor PostgreSQL.</td><td>Number</td><td>❌</td><td><code>5432</code></td></tr><tr><td><strong>Database Name</strong></td><td>Define o nome do banco de dados PostgreSQL que contém a tabela de vetores.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Vector Store Account</strong></td><td>Especifica a conta configurada com credenciais PostgreSQL.</td><td>Select</td><td>❌</td><td>N/A</td></tr><tr><td><strong>Table Name</strong></td><td>Define o nome da tabela onde os vetores são armazenados.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Auto-Create Table</strong></td><td>Cria automaticamente a tabela se não existir (<strong>somente PGVector</strong>).</td><td>Boolean</td><td>❌</td><td>True</td></tr><tr><td><strong>Clear Table Before Ingest</strong></td><td>Remove todos os registros existentes antes de ingerir novos dados (<strong>somente PGVector</strong>).</td><td>Boolean</td><td>❌</td><td>False</td></tr><tr><td><strong>Auto-Create Index</strong></td><td>Cria automaticamente o índice vetorial se não existir.</td><td>Boolean</td><td>❌</td><td>True</td></tr></tbody></table>

#### **Neo4j**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo</th><th>Suporta DB</th><th>Padrão</th></tr></thead><tbody><tr><td><strong>Database Name</strong></td><td>Define o nome do banco de dados Neo4j onde o índice vetorial é armazenado.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Vector Store Account</strong></td><td>Especifica a conta configurada com credenciais Neo4j.</td><td>Select</td><td>❌</td><td>N/A</td></tr><tr><td><strong>Index Name</strong></td><td>Define o nome do índice usado para armazenar e consultar vetores.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>URI</strong></td><td>Define o URI de conexão com a instância Neo4j.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Node Label</strong></td><td>Define o label atribuído aos nodes que contêm dados de embedding.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Embedding Property</strong></td><td>Define a propriedade do node usada para armazenar o vetor de embedding.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Text Property</strong></td><td>Define a propriedade do node usada para armazenar o texto ou documento original.</td><td>String</td><td>✅</td><td>N/A</td></tr></tbody></table>
{% endtab %}

{% tab title="Ingestion Process" %}

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo</th><th>Suporta DB</th><th>Padrão</th></tr></thead><tbody><tr><td><strong>Splitting Strategy</strong></td><td>Define como os documentos são divididos em pedaços menores para geração de embeddings.</td><td>String</td><td>❌</td><td>Recursive Character Splitter (Recommended)</td></tr><tr><td><strong>Max Segment Size</strong></td><td>Número máximo de caracteres permitidos por pedaço. Valores maiores geram menos segmentos, porém mais longos.</td><td>Integer</td><td>❌</td><td><code>500</code></td></tr><tr><td><strong>Segment Overlap</strong></td><td>Número de caracteres compartilhados entre pedaços consecutivos para preservar o contexto.</td><td>Integer</td><td>❌</td><td><code>50</code></td></tr></tbody></table>
{% endtab %}

{% tab title="Documentation" %}

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo</th><th>Suporta DB</th><th>Padrão</th></tr></thead><tbody><tr><td><strong>Documentation</strong></td><td>Campo opcional para descrever a configuração do conector e quaisquer regras de negócio relevantes.</td><td>String</td><td>❌</td><td>N/A</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
