无头向量搜索
提供任何文档站点的向量/相似性搜索。它是无头的,因此您可以将其集成到现有网站中。
它是如何工作的:
- 这个仓库在您的数据库中初始化一个新的
docs
模式。 - 配套的GitHub Action 将您的 markdown 文档作为嵌入内容摄入到您的数据库中。
- 该仓库提供了一个处理用户查询的 Edge Function,将其转换为 ChatGPT 类似的响应。
技术栈:
- Supabase:数据库及 Edge Functions。
- OpenAI:嵌入和补全。
- GitHub Actions:用于摄入您的 markdown 文档。
设置
首先创建一个新的 Supabase 项目:database.new。
- 克隆这个仓库
- 将仓库链接到您的远程项目:
supabase link --project-ref XXX
- 应用数据库迁移:
supabase db push
- 将您的 OpenAI 密钥设为秘密:
supabase secrets set OPENAI_API_KEY=sk-xxx
- 部署 Edge Functions:
supabase functions deploy --no-verify-jwt
- 在 Supabase 仪表板的设置 >
API 设置
>暴露的模式
中通过 API 暴露docs
模式 - 在您的知识库仓库中设置
supabase-vector-embeddings
GitHub action。GitHub Action 运行后,您将在数据库中看到填充的嵌入。
使用
- 在仪表板的函数部分中找到
vector-search
Edge Function 的 URL。 - 在您的应用程序中,可以将用户查询发送到此端点以接收来自 OpenAI 的流响应。
查看 cURL 示例
curl -i --location --request GET 'https://your-project-ref.functions.supabase.co/vector-search?query=What%27s+Supabase%3F'
查看 EventSource 示例
const onSubmit = (e: Event) => {
e.preventDefault()
answer.value = ""
isLoading.value = true
const query = new URLSearchParams({ query: inputRef.current!.value })
const projectUrl = `https://your-project-ref.functions.supabase.co`
const queryURL = `${projectURL}/${query}`
const eventSource = new EventSource(queryURL)
eventSource.addEventListener("error", (err) => {
isLoading.value = false
console.error(err)
})
eventSource.addEventListener("message", (e: MessageEvent) => {
isLoading.value = false
if (e.data === "[DONE]") {
eventSource.close()
return
}
const completionResponse: CreateCompletionResponse = JSON.parse(e.data)
const text = completionResponse.choices[0].text
answer.value += text
});
isLoading.value = true
}
展示
- docs.supabase.com - 使用 cmd+k 访问。
许可证
MIT