Cree un chatgpt chatbot para su sitio web con Langchain, Supabase, TypeScript, OpenAI y Next.js. Langchain es un marco que facilita la creación de aplicaciones AI/LLM escalables. Supabase es una base de datos Postgres de código abierto que puede almacenar incrustaciones utilizando una extensión de vector PG.
Video tutorial
Póngase en contacto a través de Twitter si necesita ayuda
La guía visual de este repositorio y tutorial se encuentra en la carpeta visual guide .
git clone [github https url]
pnpm install
.env.env.local.example en .env su archivo .env debería verse así: OPENAI_API_KEY=
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
.env . En la carpeta config , reemplace las URL en la matriz con las URL de su sitio web (el script requiere más de una URL).
En utils/custom_web_loader.ts dentro de la función load , reemplace los valores de title , date y content con los elementos CSS de texto que desea extraer de una página web determinada. Puedes aprender más sobre cómo usar Cheerio aquí
Puede agregar sus elementos personalizados a los metadatos para satisfacer sus necesidades, tenga en cuenta que el formato del cargador predeterminado según a continuación espera al menos una cadena para pageContent y metadata que contienen una propiedad source como un valor devuelto:
async load(): Promise<Document[]>{
const $ = await this.scrape();
const text = $("body").text();
const metadata = { source: this.webPath };
return [new Document({ pageContent: text, metadata })];
}
El pageContent y metadata se almacenarán más tarde en su tabla de base de datos Supabase.
schema.sql en su editor SQL de Supabasedocuments existe en la base de datos, así como en la función match_documents . Para ejecutar el script de raspado e incrustación en scripts/scrape-embed.ts simplemente ejecute:
npm run scrape-embed
Este script visitará todas las URL observadas en la carpeta config y extraerá los datos que especificó en el archivo custom_web_loader.ts .
Luego usará los incrustaciones de OpenAI ( text-embedding-ada-002 ) para convertir sus datos raspados en vectores.
Una vez que haya verificado que los incrustaciones y el contenido se hayan agregado correctamente a su tabla Supabase, puede ejecutar la aplicación npm run dev y escribir una pregunta para hacerle su sitio web.
Frontend of this Repo está inspirado en Langchain-chat-nextjs
Este repositorio utiliza guías de noción en profundidad del sitio web del experto en productividad, Thomas Frank.