headless-vector-search:为文档站点提供向量/相似度搜索
项目介绍
headless-vector-search 是一个开源项目,旨在为任何文档站点提供向量搜索和相似度搜索功能。它的设计理念是“无头”(headless),这意味着它可以无缝集成到现有的网站中,为用户提供类似 ChatGPT 的搜索体验。
项目技术分析
headless-vector-search 的技术架构基于以下几个核心组件:
- Supabase:作为一个全栈平台,Supabase 提供了数据库和边缘函数(Edge Functions)的支持。这使得 headless-vector-search 能够在 Supabase 的基础设施上运行,简化了部署和维护过程。
- OpenAI:项目使用 OpenAI 的嵌入技术(Embeddings)和完成技术(Completions),为文档内容创建向量表示,并生成类似人类的响应。
- GitHub Actions:用于将 Markdown 文档转换为嵌入,并将其存储到数据库中。这个过程自动化了文档的预处理和更新。
项目及技术应用场景
headless-vector-search 的主要应用场景是为文档站点提供高效的搜索功能。以下是一些具体的应用案例:
- 知识库搜索:在企业的知识库或帮助中心中,用户可以通过自然语言提问,系统会返回最相关的文档段落或答案。
- 在线教程查询:在线教程和教学平台可以使用 headless-vector-search,帮助用户快速定位到他们需要的教程部分。
- 技术文档检索:技术团队可以集成此项目到他们的技术文档中,使得开发者能够快速找到所需的API文档或代码示例。
项目特点
headless-vector-search 项目具有以下几个显著特点:
- 高度集成性:由于其 headless 设计,项目可以轻松集成到现有网站中,无需对现有系统进行大规模修改。
- 强大的搜索能力:利用 OpenAI 的嵌入技术,headless-vector-search 能够提供接近人类搜索体验的搜索结果。
- 自动化处理:通过 GitHub Actions,项目可以自动化地将 Markdown 文档转换为向量表示,并存储到数据库中,大大降低了维护成本。
- 易于部署:项目基于 Supabase 平台,使得部署过程变得简单快捷。
以下是具体的使用步骤:
- 创建 Supabase 项目:访问 database.new 创建一个新项目。
- 克隆项目仓库:将仓库克隆到本地。
- 链接远程项目:使用
supabase link --project-ref XXX
命令链接到你的远程项目。 - 应用数据库迁移:执行
supabase db push
命令。 - 设置 OpenAI 密钥:使用
supabase secrets set OPENAI_API_KEY=sk-xxx
命令设置 OpenAI 密钥。 - 部署边缘函数:运行
supabase functions deploy --no-verify-jwt
命令。 - 配置 API:在 Supabase 仪表板的 API 设置中暴露
docs
模式。
在实际使用中,开发者可以通过获取边缘函数的 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
});
}
headless-vector-search 项目已经在 Supabase 的官方文档网站 docs.supabase.com 中得到应用,用户可以通过按下 cmd+k
快捷键来访问搜索功能。
通过以上分析,headless-vector-search 无疑是一个值得推荐的开源项目,它为文档站点提供了强大的搜索能力,同时具有良好的集成性和易用性。无论你是网站开发者还是产品经理,都应该考虑使用这个项目来提升你的文档搜索体验。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考