O ChatGPT é ótimo para respostas de perguntas casuais e de uso geral, mas fica aquém quando o conhecimento específico do domínio é necessário. Além disso, compõe respostas para preencher suas lacunas de conhecimento e nunca cita suas fontes, por isso não é realmente confiável. Este aplicativo inicial usa incorporação, juntamente com a pesquisa de vetores para resolver isso, ou mais especificamente, para mostrar como a API de conclusão de bate-papo do OpenAI pode ser usada para criar interfaces de conversação para conhecimentos específicos de domínio.
Incorporação, representada por vetores de números de ponto flutuante, medem a "relação" das seqüências de texto. Estes são super úteis para classificar os resultados da pesquisa, agrupamento, classificação etc. A relação é medida pela similaridade de cosseno. Se a semelhança de cosseno entre dois vetores estiver próxima de 1, os vetores são altamente semelhantes e apontam na mesma direção. No caso de incorporações de texto, uma alta similaridade de cosseno entre dois vetores de incorporação indica que as seqüências de texto correspondentes estão altamente relacionadas.
Esse aplicativo inicial usa incorporação para gerar uma representação vetorial de um documento e, em seguida, usa a pesquisa vetorial para encontrar os documentos mais semelhantes à consulta. Os resultados da pesquisa vetorial são usados para construir um prompt. A resposta é transmitida para o usuário. Confira as postagens do blog Supabase nas incorporações PGVector e OpenAI para obter mais antecedentes.
Tecnologias usadas:
Criando e armazenando as incorporações:
Respondendo às consultas:
O seguinte guia de configuração assume pelo menos familiaridade básica desenvolvendo aplicativos da Web com o React e NextJs. A experiência com as APIs OpenAI e Supabase é útil, mas não é necessária para fazer as coisas funcionarem.
Database → Extensions . Você também pode fazer isso no SQL executando: create extension vector;
create table documents (
id bigserial primary key ,
content text ,
url text ,
embedding vector ( 1536 )
); create or replace function match_documents (
query_embedding vector( 1536 ),
similarity_threshold float,
match_count int
)
returns table (
id bigint ,
content text ,
url text ,
similarity float
)
language plpgsql
as $$
begin
return query
select
documents . id ,
documents . content ,
documents . url ,
1 - ( documents . embedding <=> query_embedding) as similarity
from documents
where 1 - ( documents . embedding <=> query_embedding) > similarity_threshold
order by documents . embedding <=> query_embedding
limit match_count;
end;
$$;gh repo clone gannonh/chatgpt-pgvector cd chatgpt-pgvector
code .npm installcp .env.local.example .env.localProject → API . A chave da API deve ser armazenada na variável SUPABASE_ANON_KEY e o URL do projeto deve ser armazenado em NEXT_PUBLIC_SUPABASE_URL .API Keys . A tecla API deve ser armazenada na variável OPENAI_API_KEY .OPEAI_PROXY forneça para ativar sua proxy personalizada da API OpenAI. Deixou -o "" chamar a API oficial diretamente.SPLASH_URL é fornecido para ativar o seu Splash (Splash é um serviço de renderização de JavaScript. É um navegador leve com uma API HTTP, implementada no Python 3 usando a API Twisted e Qt5). Deixou -o "" buscar o URL direto.npm run dev