EN

Supabase + pgvector:如何在Supabase应用中添加向量搜索(2026)

Supabase与pgvector完整集成指南

返回教程列表🌐 Read in English
进阶20 分钟

Supabase + pgvector:如何在Supabase应用中添加向量搜索(2026)

Supabase与pgvector完整集成指南

Supabase + pgvector 集成指南 2026 概述 本指南将精确展示如何使用Supabase和pgvector在Supabase应用中添加向量搜索。涵盖设置、核心集成和生产级模式。 先决条件 - Supabase环境已设置 - pgvector API密钥或访问凭证 - 对Supabase开发有基本了解

Supabase + pgvector 集成指南 2026

概述

本指南将精确展示如何使用Supabase和pgvector在Supabase应用中添加向量搜索。涵盖设置、核心集成和生产级模式。

先决条件

  • Supabase环境已设置
  • pgvector API密钥或访问凭证
  • 对Supabase开发有基本了解
  • 安装

    bash
    

    安装所需包

    npm install pgvector supabase-sdk

    pip install pgvector supabase

    快速设置

    javascript
    // 初始化pgvector客户端
    import { pgvectorClient } from 'pgvector';

    const client = new pgvectorClient({ apiKey: process.env.PGVECTOR_API_KEY, // 根据你的Supabase设置添加其他配置 });

    核心集成代码

    typescript
    // 完整的Supabase + pgvector集成
    import { OpenAI } from 'openai';
    import express from 'express';

    // AI端点 app.post('/api/ai', async (req, res) => { const { message, context } = req.body; try { const response = await openai.chat.completions.create({ model: 'gpt-4o-mini', messages: [ { role: 'system', content: 你已与Supabase集成。帮助在Supabase应用中添加向量搜索。 }, { role: 'user', content: message } ], stream: false }); res.json({ response: response.choices[0].message.content, usage: response.usage }); } catch (error) { res.status(500).json({ error: error.message }); } });

    app.listen(3000);

    Supabase特定集成

    javascript
    // Supabase特定的pgvector集成模式

    // 模式2:服务层 class AIService { constructor(private readonly client: typeof openai) {} async process(input: string, systemPrompt: string = ''): Promise { const response = await this.client.chat.completions.create({ model: 'gpt-4o-mini', messages: [ ...(systemPrompt ? [{ role: 'system' as const, content: systemPrompt }] : []), { role: 'user' as const, content: input } ] }); return response.choices[0].message.content || ''; } }

    // 模式3:React钩子(如果适用) function useAI() { const [response, setResponse] = useState(''); const [loading, setLoading] = useState(false); const query = async (message: string) => { setLoading(true); try { const res = await fetch('/api/ai', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message }) }); const data = await res.json(); setResponse(data.response); } finally { setLoading(false); } }; return { response, loading, query }; }

    流式支持

    typescript
    // 添加流式支持以改善用户体验
    app.post('/api/ai/stream', async (req, res) => {
      const { message } = req.body;
      
      res.setHeader('Content-Type', 'text/event-stream');
      res.setHeader('Cache-Control', 'no-cache');
      res.setHeader('Connection', 'keep-alive');
      
      const stream = await openai.chat.completions.create({
        model: 'gpt-4o-mini',
        messages: [{ role: 'user', content: message }],
        stream: true
      });
      
      for await (const chunk of stream) {
        const content = chunk.choices[0]?.delta?.content;
        if (content) {
          res.write(data: ${JSON.stringify({ content })}\n\n);
        }
      }
      
      res.write('data: [DONE]\n\n');
      res.end();
    });
    

    测试集成

    bash
    

    单元测试

    curl -X POST http://localhost:3000/api/ai \ -H "Content-Type: application/json" \ -d '{"message": "测试消息:在Supabase应用中添加向量搜索"}'

    预期输出:

    {"response": "AI响应...", "usage": {...}}

    负载测试

    ab -n 100 -c 10 -p test-payload.json -T application/json http://localhost:3000/api/ai

    生产部署

    yaml
    

    docker-compose.yml

    services: app: build: . environment: - OPENAI_API_KEY=${OPENAI_API_KEY} - NODE_ENV=production ports: - "3000:3000" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 30s

    常见问题

    问题:速率限制错误 解决方案:实现指数退避和请求队列

    问题:响应时间慢 解决方案:使用流式传输并向用户显示加载状态

    结论

    Supabase + pgvector 集成功能强大且相对简单。本指南为您在生产环境中向Supabase应用添加向量搜索奠定了基础。


    *Supabase + pgvector 集成指南 | 2026年5月*

    相关工具

    Supabasepgvector