LangChain & Supabase - 为您的网站创建一个ChatGpt聊天机器人
使用LangChain、Supabase、Typescript、Openai和Next.js为您的网站创建一个Chatgpt聊天机器人。LangChain是一个框架,可以更轻松地构建可扩展的AI/LLM应用程序。Supabase是一个开源的Postgres数据库,可以使用pg vector扩展来存储嵌入向量。
此仓库和教程的视觉指南位于visual guide
文件夹中。
开发
- 克隆仓库
git clone [github https url]
- 安装包
pnpm install
- 设置
.env
文件
- 将
.env.local.example
复制到.env
您的.env
文件应如下所示:
OPENAI_API_KEY=
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
-
在
config
文件夹中,将数组中的urls替换为您的网站urls(脚本需要多个url)。 -
在
utils/custom_web_loader.ts
中的load
函数中,将title
、date
和content
的值替换为您希望从给定网页中提取的文本的css元素。您可以在这里了解有关如何使用Cheerio的更多信息。
您可以根据需要将自定义元素添加到元数据中,但请注意,默认加载格式如下所示,期望返回值中至少包含一个字符串 pageContent
和一个包含 source
属性的 metadata
:
async load(): Promise<Document[]>{
const $ = await this.scrape();
const text = $("body").text();
const metadata = { source: this.webPath };
return [new Document({ pageContent: text, metadata })];
}
pageContent
和 metadata
将稍后存储在您的supabase数据库表中。
- 在supabase SQL编辑器中复制并运行
schema.sql
- 检查数据库中是否存在
documents
表以及match_documents
函数。
🧑 抓取和嵌入的说明
要运行 scripts/scrape-embed.ts
中的抓取和嵌入脚本,只需运行:
npm run scrape-embed
该脚本将访问 config
文件夹中记录的所有urls,并提取 custom_web_loader.ts
文件中指定的数据。
然后它将使用OpenAI的Embeddings(text-embedding-ada-002
)将您抓取的数据转换为向量。
运行应用
一旦您确认嵌入和内容已成功添加到您的supabase表中,您可以运行应用 npm run dev
并输入问题以询问您的网站。
致谢
该仓库的前端受到langchain-chat-nextjs的启发。
该仓库使用生产力专家Thomas Frank的网站上的深入Notion指南。