ChatGPT es excelente para las preguntas de preguntas de uso general casual, pero se queda corto cuando se necesita un conocimiento específico del dominio. Además, constituye respuestas para llenar sus vacíos de conocimiento y nunca cita sus fuentes, por lo que realmente no se puede confiar. Esta aplicación de inicio utiliza incrustaciones junto con la búsqueda vectorial para resolver esto, o más específicamente, para mostrar cómo la API de finalización de chat de OpenAI se puede usar para crear interfaces conversacionales para el conocimiento específico del dominio.
Los incrustaciones, representados por vectores de números de punto flotante, miden la "relación" de las cadenas de texto. Estos son súper útiles para clasificar los resultados de búsqueda, la agrupación, la clasificación, etc. La relación se mide por similitud de coseno. Si la similitud cosena entre dos vectores está cerca de 1, los vectores son muy similares y apuntan en la misma dirección. En el caso de los incrustaciones de texto, una alta similitud de coseno entre dos vectores de incrustación indica que las cadenas de texto correspondientes están altamente relacionadas.
Esta aplicación de inicio utiliza incrustaciones para generar una representación vectorial de un documento, y luego utiliza la búsqueda de vectores para encontrar los documentos más similares a la consulta. Los resultados de la búsqueda de vectores se utilizan para construir un aviso. La respuesta se transmite al usuario. Echa un vistazo a las publicaciones de blog de Supabase en PGVector y OpenAI Increddings para obtener más antecedentes.
Tecnologías utilizadas:
Creación y almacenamiento de los incrustaciones:
Respondiendo a las consultas:
La siguiente guía de configuración asume al menos la familiaridad básica que desarrolla aplicaciones web con React y NextJS. La experiencia con API y Supabase de Operai es útil, pero no se requiere que las cosas funcionen.
Database → Extensions . También puede hacer esto en SQL ejecutando: 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 . La clave API debe almacenarse en la variable SUPABASE_ANON_KEY y la URL del proyecto debe almacenarse en NEXT_PUBLIC_SUPABASE_URL .API Keys . La tecla API debe almacenarse en la variable OPENAI_API_KEY .OPEAI_PROXY se proporcionará para habilitar su proxy personalizado de la API de OpenAI. Lo dejó "" para llamar a la API oficial directamente.SPLASH_URL se proporcionará para habilitar su Splash (Splash es un servicio de representación JavaScript. Es un navegador web ligero con una API HTTP, implementado en Python 3 utilizando API Twisted y QT5). Lo dejó "" para obtener URL directamente.npm run dev