Armazenamento vetorial Supabase para recuperação de agentes de IA

Descreva o problema/erro/pergunta

Oi, então tenho esse erro com o armazenamento de vetores do Supabase (novamente) quando tentei conectá-lo com a ferramenta de agente de IA e realmente testá-lo para o documento que criei.
O erro é (PGRST202) ele simplesmente não consegue retornar com as informações de dados e não sei por quê. Encontrei um tópico antigo perguntando pelo mesmo erro exato:

E novamente, o código do editor SQL tinha algo a ver com isso, então copiei e colei o código que foi oferecido como solução, infelizmente, recebi exatamente o mesmo erro :frowning:

Qual é a mensagem de erro (se houver)?

Erro ao pesquisar documentos: PGRST202 Não foi possível encontrar a função public.match_documents(filter, match_count, query_embedding) no cache do schema Pesquisou pela função public.match_documents com parâmetros filter, match_count, query_embedding ou com um parâmetro json/jsonb sem nome único, mas nenhuma correspondência foi encontrada no cache do schema.

Por favor, compartilhe seu workflow

Informações sobre sua configuração n8n

  • Versão n8n: 2.35.7
  • Banco de dados (padrão: SQLite):
  • Configuração n8n EXECUTIONS_PROCESS (padrão: own, main):
  • Executando n8n via (Docker, npm, n8n cloud, aplicativo de desktop): Navegador
  • Sistema operacional: Windows 11 Home

Oi @Mazen_Hassan
As chamadas de recuperação do Supabase do n8n correspondem a match_documents com os argumentos nomeados filter, match_count e query_embedding, e a função da sua configuração SQL no tópico de ontem é declarada com match_threshold em vez de filter, então o PostgREST não encontra nenhuma função com essa assinatura, que é exatamente o que PGRST202 relata. Colar o bloco do tópico antigo não pôde corrigir: esse bloco começa com create extension vector sem if not exists, o editor SQL executa toda a colagem como um lote, e a primeira instrução gera erro no seu projeto, então o create function na parte inferior nunca foi executado.
Execute apenas isto em uma nova consulta do editor SQL, remove a assinatura antiga e cria a que o n8n espera contra sua tabela:

drop function if exists match_documents(vector, float, int);

create or replace 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 - (knowledge_chunks.embedding <=> query_embedding) as similarity
  from knowledge_chunks
  where metadata @> filter
  order by knowledge_chunks.embedding <=> query_embedding
  limit match_count;
end;
$$;

notify pgrst, 'reload schema';

Toda a configuração de armazenamento vetorial e RAG no n8n é coberta aqui:
https://axshul.site/n8n/guide/vector-stores-and-rag/

Oi @Anshul_Namdev, li sua resposta e consegui entender melhor o que está sendo solicitado, mas testei seu código novamente no editor SQL e tentei meu workflow de novo. Ainda dá o mesmo erro :frowning:

PGRST202 persistindo após esse create significa que o banco de dados com o qual seu workflow se comunica ainda não tem match_documents com esses três parâmetros nomeados, então a declaração não chegou onde o node está procurando. Execute isto no editor SQL e observe a saída:

select n.nspname as schema, p.proname, pg_get_function_identity_arguments(p.oid) as arguments
from pg_proc p
join pg_namespace n on n.oid = p.pronamespace
where p.proname = 'match_documents';

Sem linhas: o bloco nunca foi executado. Execute novamente por conta própria e leia o painel de resultados procurando por texto de erro em vermelho, e compare a referência do projeto na URL do editor SQL com o Host na sua credencial Supabase do n8n. Editar um projeto enquanto o workflow chama outro produz exatamente isto.
Uma linha onde schema não é public, ou arguments não são nomeados query_embedding, match_count e filter: execute o bloco da minha resposta anterior novamente como postado.
Uma linha com schema public e esses três nomes: execute notify pgrst, 'reload schema'; por conta própria, aguarde um minuto e teste o workflow novamente.
Cole a saída da query aqui se ainda assim falhar após isso.

(post deletado pelo autor)

„Success. No rows returned

Parece que sim, muito obrigado @Anshul_Namdev :smile: — Só espero que não quebre de novo sozinho, você disse que eu desse um tempo para atualizar e foi exatamente isso : )