Este repositorio contiene código sobre cómo almacenar y consultar sus propios datos utilizando incrustaciones de OpenAI y Supabase usando JavaScript.
Antes de comenzar, asegúrese de tener la siguiente configuración:
Clon el repositorio:
git clone https://github.com/muzammildafedar/custom-chatgpt-using-js.git
cd your-repoInstalar dependencias:
npm install openai
npm install @supabase/supabase-jsReemplace los valores del marcador de posición en el código con sus credenciales reales de Supabase y OpenAI:
const supabaseUrl = 'Your Supabase URL' ;
const supabaseKey = 'Your Supabase API Key' ;
const openaiConfig = {
apiKey : 'Your OpenAI API Key' ,
} ; Storeembedding (título, cuerpo, incrustación) Descripción: almacena el título, el cuerpo y la incrustación proporcionados en la base de datos Supabase.
QueryEmbeddings (consulta, coincidencia de combate, coincidencia) Descripción: Consultas Supabase para incrustaciones que coinciden con la consulta, umbral y recuento proporcionados.
Getanswer (consulta, publicaciones) Descripción: genera una respuesta de OpenAI GPT-3.5 basada en la consulta proporcionada y los documentos coincidentes.
Crear mesa para almacenar incrustaciones
create table posts (
id serial primary key,
title text not null,
body text not null,
embedding vector(1536)
);
Para "conectar" OpenAi a nuestros incrustaciones, necesitamos crear una función en Postgres, encuentre los valores coincidentes más cercanos cuando se les da un vector.
create or replace function match_posts (
query_embedding vector(1536),
match_threshold float,
match_count int
)
returns table (
id bigint,
body text,
title text,
similarity float
)
language sql stable
as $$
select
posts.id,
posts.body,
posts.title,
1 - (posts.embedding <=> query_embedding) as similarity
from posts
where 1 - (posts.embedding <=> query_embedding) > match_threshold
order by similarity desc
limit match_count;
$$;
Además, podemos crear un índice en nuestra tabla de publicaciones para acelerar la consulta.
create index on posts using ivfflat (embedding vector_cosine_ops)
with
(lists = 100);