> For the complete documentation index, see [llms.txt](https://docs.flowiseai.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.flowiseai.com/espanol/documentacion-oficial/integraciones/langchain/vector-stores/supabase.md).

# Supabase

## Prerequisitos

1. Registra una cuenta en [Supabase](https://supabase.com/)
2. Haz clic en **New project**

<figure><img src="https://4068692976-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUiD7nOmFRK805sNuiieJ%2Fuploads%2Fgit-blob-c715f65183eee1d01b0936df3aafde0e3e751b4d%2Fimage%20(8)%20(2)%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

3. Ingresa los campos requeridos

| Nombre del Campo          | Descripción                               |
| ------------------------- | ----------------------------------------- |
| **Name**                  | nombre del proyecto a crear (ej. Flowise) |
| **Database** **Password** | contraseña para tu base de datos postgres |

<figure><img src="https://4068692976-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUiD7nOmFRK805sNuiieJ%2Fuploads%2Fgit-blob-e2b67a3295e23f5a96223d89314f29a8ea946ad4%2Fimage%20(25)%20(1)%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

4. Haz clic en **Create new project** y espera a que el proyecto termine de configurarse
5. Haz clic en **SQL Editor**

<figure><img src="https://4068692976-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUiD7nOmFRK805sNuiieJ%2Fuploads%2Fgit-blob-750a4decae55891ed08df36711cb34cbe3582f16%2Fimage%20(7)%20(2).png?alt=media" alt=""><figcaption></figcaption></figure>

6. Haz clic en **New query**

<figure><img src="https://4068692976-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUiD7nOmFRK805sNuiieJ%2Fuploads%2Fgit-blob-08d7ca748f5ed4b350ce65e13c047262f9cbbe90%2Fimage%20(36)%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

7. Copia y pega la siguiente consulta SQL y ejecútala con `Ctrl + Enter` o haciendo clic en **RUN**. Toma nota del nombre de la tabla y el nombre de la función.

* **Nombre de la tabla**: `documents`
* **Nombre de la consulta**: `match_documents`

```plsql
-- Habilita la extensión pgvector para trabajar con vectores de embeddings
create extension vector;

-- Crea una tabla para almacenar tus documentos
create table documents (
  id bigserial primary key,
  content text, -- corresponde a Document.pageContent
  metadata jsonb, -- corresponde a Document.metadata
  embedding vector(1536) -- 1536 funciona para embeddings de OpenAI, cambiar si es necesario
);

-- Crea una función para buscar documentos
create function match_documents (
  query_embedding vector(1536),
  match_count int DEFAULT null,
  filter jsonb DEFAULT '{}'
) returns table (
  id bigint,
  content text,
  metadata jsonb,
  similarity float
)
language plpgsql
as $$
#variable_conflict use_column
begin
  return query
  select
    id,
    content,
    metadata,
    1 - (documents.embedding <=> query_embedding) as similarity
  from documents
  where metadata @> filter
  order by documents.embedding <=> query_embedding
  limit match_count;
end;
$$;
```

En algunos casos, podrías estar usando [Record Manager](/espanol/documentacion-oficial/integraciones/langchain/record-managers.md) para hacer seguimiento de los upserts y prevenir duplicaciones. Como Record Manager genera un UUID aleatorio para cada embedding, tendrás que cambiar la entidad de la columna id a texto:

```sql
-- Habilita la extensión pgvector para trabajar con vectores de embeddings
create extension vector;

-- Crea una tabla para almacenar tus documentos
create table documents (
  id text primary key, -- CAMBIAR A TEXT
  content text,
  metadata jsonb,
  embedding vector(1536)
);

-- Crea una función para buscar documentos
create function match_documents (
  query_embedding vector(1536),
  match_count int DEFAULT null,
  filter jsonb DEFAULT '{}'
) returns table (
  id text, -- CAMBIAR A TEXT
  content text,
  metadata jsonb,
  similarity float
)
language plpgsql
as $$
#variable_conflict use_column
begin
  return query
  select
    id,
    content,
    metadata,
    1 - (documents.embedding <=> query_embedding) as similarity
  from documents
  where metadata @> filter
  order by documents.embedding <=> query_embedding
  limit match_count;
end;
$$;
```

<figure><img src="https://4068692976-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUiD7nOmFRK805sNuiieJ%2Fuploads%2Fgit-blob-fdb3193ea6882277c0e3efdcd6ee8eef9cd97eeb%2Fimage%20(19)%20(1)%20(1)%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

## Configuración

1. Haz clic en **Project Settings**

<figure><img src="https://4068692976-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUiD7nOmFRK805sNuiieJ%2Fuploads%2Fgit-blob-c6eed90fc783b65bf08a7441ae87d352cf0f489a%2Fimage%20(30)%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

2. Obtén tu **Project URL & API Key**

<figure><img src="https://4068692976-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUiD7nOmFRK805sNuiieJ%2Fuploads%2Fgit-blob-c8e345021e893bcc262913523101489b042cb57f%2Fimage%20(2)%20(3).png?alt=media" alt=""><figcaption></figcaption></figure>

3. Copia y pega cada detalle (*API Key, URL, Table Name, Query Name*) en el nodo **Supabase**

<figure><img src="https://4068692976-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUiD7nOmFRK805sNuiieJ%2Fuploads%2Fgit-blob-1e867fb8b25da69be87498ce357a8671085752cd%2Fimage%20(85).png?alt=media" alt="" width="331"><figcaption></figcaption></figure>

4. **Document** puede conectarse con cualquier nodo de la categoría [**Document Loader**](/espanol/documentacion-oficial/integraciones/langchain/document-loaders.md)
5. **Embeddings** puede conectarse con cualquier nodo de la categoría [**Embeddings**](/espanol/documentacion-oficial/integraciones/langchain/embeddings.md)

## Filtrado

Supongamos que tienes diferentes documentos insertados, cada uno especificado con un valor único bajo la clave de metadata `{source}`

<figure><img src="https://4068692976-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUiD7nOmFRK805sNuiieJ%2Fuploads%2Fgit-blob-1188256371a312e3c7a25391407dbc17735b5c70%2FUntitled.png?alt=media" alt=""><figcaption></figcaption></figure>

Puedes usar filtrado de metadata para consultar metadata específica:

**UI**

<figure><img src="https://4068692976-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUiD7nOmFRK805sNuiieJ%2Fuploads%2Fgit-blob-1484e2b01ac9581d5f3b184afedbd08ec22efc42%2Fimage%20(9)%20(1)%20(1)%20(1)%20(1)%20(2)%20(1).png?alt=media" alt="" width="232"><figcaption></figcaption></figure>

**API**

```json
"overrideConfig": {
    "supabaseMetadataFilter": {
        "source": "henry"
    }
}
```

## Recursos

* [LangChain JS Supabase](https://js.langchain.com/docs/modules/indexes/vector_stores/integrations/supabase)
* [Supabase Blog Post](https://supabase.com/blog/openai-embeddings-postgres-vector)
* [Metadata Filtering](https://js.langchain.com/docs/integrations/vectorstores/supabase#metadata-filtering)
