大数跨境
0
0

附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用!

附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用! 阿里云开发者
2025-07-25
48

基于RDS Supabase构建Agentic RAG应用:高效开发AI智能系统

通过全托管PostgreSQL与Supabase能力,实现知识处理与智能决策一体化的快速落地

本文介绍如何利用云数据库RDS PostgreSQL全托管Supabase服务,快速构建具备知识处理与智能决策能力的Agentic RAG应用。从数据准备到部署上线,全流程开发效率显著提升,适用于企业级AI应用创新场景。

前言

云数据库RDS PostgreSQL全托管Supabase服务,正在成为AI应用开发的新范式。相比传统架构,其一体化服务能力大幅缩短开发周期,并在成本、可扩展性方面展现出显著优势。

  • 开发部署效率:传统应用多层耦合,开发周期以月计;RDS Supabase提供开箱即用的一体化后端能力,支持天级部署上线。
  • 成本优化:全托管模式降低资源与人力维护成本,综合开销可减少50%以上。
  • 可扩展性:基于PostgreSQL插件生态和Serverless弹性架构,轻松应对业务流量增长。

什么是Supabase?

Supabase是开源的后端即服务(BaaS)平台,基于PostgreSQL构建,旨在替代Firebase等商业方案。它整合多个开源框架,提供API化的数据库管理、用户认证、对象存储及实时通信能力,极大简化全栈开发流程,避免复杂基础设施维护问题。

Supabase适用场景

Supabase集成数据库、认证、存储和实时通信等核心功能,实现“开发即交付”的MVP快速验证模式。开发者可快速搭建产品原型,显著降低试错成本,适用于初创项目及企业创新探索。

Supabase核心能力

Supabase提供认证、数据库管理、实时通信和对象存储四大核心能力,全面支撑现代应用开发需求。

认证 & 用户管理 (Auth)

  • 用户管理:支持注册、注销、角色管理及匿名用户机制。
  • 认证授权:通过GoTrue实现邮箱密码、手机登录、无密码登录、SSO及OAuth(支持GitHub、Google等第三方平台)。
  • 会话控制:基于JWT实现细粒度权限管理。
  • 安全隔离:用户角色与PostgreSQL行级安全策略(RLS)绑定,确保数据访问隔离,如“仅查看本人任务”。

数据库管理 (REST & GraphQL)

Supabase通过RESTful和GraphQL接口直接操作数据库对象,无需额外开发DAO层,大幅提升开发效率。

  • RESTful接口:基于PostgREST实现API到SQL自动转换,内置连接池保障高并发稳定性。
  • GraphQL支持:通过pg_graphql插件提供灵活查询能力,返回结构化JSONB格式数据。

例如,创建messages表后,系统自动生成/rest/v1/messages端点,支持增删改查操作。

实时通信(Realtime)

基于WebSocket协议和PostgreSQL逻辑复制机制,Realtime组件可监听数据变更并实时推送至客户端,适用于聊天应用、协作工具等高交互场景。

当用户A发送消息时,所有订阅该频道的设备(如用户B)将即时收到更新,无需轮询。

Storage(兼容S3的对象存储)

封装兼容S3标准的OSS接口,利用PostgreSQL存储Bucket与文件元信息,并结合Auth的RLS策略实现细粒度访问控制。

RDS Supabase:全托管+BaaS企业级解决方案

RDS Supabase是基于阿里云RDS PostgreSQL的全托管Supabase平台,融合BaaS服务与企业级数据库能力,提供免运维、高可用、易扩展的后端架构,加速AI应用上线进程。

整体架构

RDS Supabase增强能力

基于阿里云RDS PostgreSQL构建,100%兼容开源Supabase,支持通过控制台或OpenAPI进行实例管理,在性能、弹性、容灾和AI能力上实现全面增强。

性能优化

RDS PostgreSQL在计算与存储层均支持弹性扩展:

  • 传统Serverless:适用于开发测试或流量波动大的场景,按需自动扩缩容。
  • 承诺型Serverless:采用“急弹缓降+本地扩容”策略,确保业务无损:
    • 性能兜底保障核心业务稳定。
    • 突破I/O瓶颈,单实例吞吐可达4GB/s。
    • 动态资源池化提升资源利用率与响应速度。

容灾能力

开放物理复制权限,结合云盘快照与全托管CEN网络,支持一键跨Region容灾、云上云下同步及PITR恢复,满足不同RTO/RPO要求,保障数据安全。

AI增强能力

RDS PostgreSQL提供100+可扩展插件,支持构建GraphRAG、知识库混合搜索等AI应用:

  • 通过pgvector实现向量检索。
  • 集成Apache Age支持图数据库。
  • 使用RUM优化全文检索。

针对高维大数据集场景,传统ivfflatHNSW索引表现不佳,RDS引入开源disk_ann索引,在保证精度前提下显著提升构建速度与空间效率;结合承诺型Serverless与高性能云盘,进一步加速向量查询性能。

实战:构建简易Agentic RAG应用

项目背景

本项目演示如何基于RDS Supabase与LangChain快速搭建Agentic RAG系统,实现知识处理与智能决策闭环。

核心能力

知识处理链路

  • 向量化:使用DashScope Embedding将PDF/Word文档转换为向量。
  • 向量存储:依托RDS Supabase + pgvector构建高性能向量数据库。
  • 智能决策:通过LangChain的tool_call机制动态调度检索-生成流程。

对话交互系统

  • 大模型驱动:集成通义千问实现自然语言理解与生成。
  • 会话管理:采用Streamlit框架维护上下文状态,支持多轮对话。

该类Agentic RAG应用广泛适用于智能客服、企业知识库、自动化报告生成等实际场景。

基于RDS Supabase构建智能问答系统:快速实现PDF/Word语义检索

通过阿里云RDS与DashScope集成,高效部署支持多模态内容处理的Agentic RAG应用

  • 企业知识库问答:构建支持PDF/Word文档语义检索的智能助手;
  • 医疗健康咨询:基于专业医学文献提供个性化健康建议;
  • 多模态客服系统:结合Qwen多模态能力,处理图文混合咨询场景。

该方案支持开发者在RDS控制台完成从数据准备到应用部署的全流程,显著提升开发效率。

操作步骤

  1. 登录云数据库RDS控制台,创建RDS Supabase实例;
  2. 安装vector插件并建表,启用PostgreSQL的向量处理能力:
-- Enable the pgvector extension to work with embedding vectors
create extension if not exists vector;

-- Create a table to store your documents
create table documents(
  id uuid primary key,
  content text, -- corresponds to Document.pageContent
  metadata jsonb, -- corresponds to Document.metadata
  embedding vector(1536) -- 1536 works for OpenAI embeddings, change if needed
);

-- Create a function to search for documents
create function match_documents(
  query_embedding vector(1536),
  filter jsonb default '{}'
) returns table(
  id uuid,
  content text,
  metadata jsonb,
  similarity float
) language plpgsql as formula-0;
  1. 配置环境变量:
DASHSCOPE_API_KEY = "sk-*****"
SUPABASE_URL = "http://*.*.*.*:*"
SUPABASE_SERVICE_KEY = "eyJhbGc****BBNWN8Bu4GE"
  1. 对documents/目录下的PDF文件进行Embedding处理,并将结果存入Supabase:
import os
from dotenv import load_dotenv

# import langchain
from langchain_community.document_loaders import PyPDFDirectoryLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import SupabaseVectorStore

from langchain_community.embeddings.dashscope import DashScopeEmbeddings

# import supabase
from supabase import create_client, Client

# 加载环境变量
load_dotenv()

# 获取配置
supabase_url = os.environ.get("SUPABASE_URL")
supabase_key = os.environ.get("SUPABASE_SERVICE_KEY")

# 简化初始化
supabase: Client = create_client(supabase_url, supabase_key)
# initiate embeddings model
embeddings = DashScopeEmbeddings(model="text-embedding-v2", dashscope_api_key=os.environ.get("DASHSCOPE_API_KEY"))

# load pdf docs from folder 'documents'
loader = PyPDFDirectoryLoader("documents")

# split the documents in multiple chunks
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
docs = text_splitter.split_documents(documents)

# store chunks in vector store
vector_store = SupabaseVectorStore.from_documents(
  docs,
  embeddings,
  client=supabase,
  table_name="documents",
  query_name="match_documents",
  chunk_size=1000,
)
  1. 构建Agentic RAG系统,使用Qwen作为对话大模型进行单次问答:
# import basics
import os
from dotenv import load_dotenv

from langchain.agents import AgentExecutor
from langchain.agents import create_tool_calling_agent
from langchain_community.vectorstores import SupabaseVectorStore
from langchain import hub

from supabase.client import Client, create_client
from langchain_core.tools import tool
from langchain_community.embeddings.dashscope import DashScopeEmbeddings
from langchain_community.chat_models.tongyi import ChatTongyi

# load environment variables
load_dotenv() 

# initiate supabase database
supabase_url = os.environ.get("SUPABASE_URL")
supabase_key = os.environ.get("SUPABASE_SERVICE_KEY")

supabase: Client = create_client(supabase_url, supabase_key)

# initiate embeddings model
embeddings = DashScopeEmbeddings(model="text-embedding-v2", dashscope_api_key=os.environ.get("DASHSCOPE_API_KEY"))

# initiate vector store
vector_store = SupabaseVectorStore(
  embedding=embeddings,
  client=supabase,
  table_name="documents",
  query_name="match_documents",
)

# initiate large language model (temperature = 0)
llm = ChatTongyi(streaming=True)

# fetch the prompt from the prompt hub
prompt = hub.pull("hwchase17/openai-functions-agent")

# create the tools
@tool(response_format="content_and_artifact")
def retrieve(query: str):
  """Retrieve information related to a query."""
  retrieved_docs = vector_store.similarity_search(query, k=2)
  serialized = "\n\n".join(
    (f"Source: {doc.metadata}\n" f"Content: {doc.page_content}")
    for doc in retrieved_docs
  )
  return serialized, retrieved_docs

# combine the tools and provide to the llm
tools = [retrieve]
agent = create_tool_calling_agent(llm, tools, prompt)

# create the agent executor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# invoke the agent
response = agent_executor.invoke({"input": "why is agentic rag better than naive rag?"})

# put the result on the screen
print(response["output"])

基于Streamlit构建支持会话的智能RAG聊天机器人

结合Supabase向量库与LangChain实现实时多轮对话

通过Streamlit维护会话状态,开发者可快速搭建具备多轮对话能力的Agentic RAG聊天机器人。

streamlit run agentic_rag_streamlit.py

核心实现流程包括:加载环境变量,初始化Supabase客户端及DashScope嵌入模型,构建基于Supabase的向量存储,并集成ChatTongyi大语言模型。通过LangChain框架调用预设Prompt模板("hwchase17/openai-functions-agent"),创建具备工具调用能力的Agent,结合自定义的检索工具实现知识库查询。

系统采用SupabaseVectorStore进行相似性搜索,返回Top 2相关文档并格式化输出源信息与内容。聊天界面通过Streamlit构建,自动管理用户与AI消息的历史记录(st.session_state.messages),支持持续对话。

每轮交互中,用户输入触发Agent执行流程,结合聊天历史调用agent_executor.invoke生成响应,并将人机双方消息持续追加至会话状态,实现上下文连贯的交互体验。

该架构有效融合RDS、Supabase与AI模型能力,显著降低AI应用开发成本,提升构建效率,推动“代码即基础设施”理念落地。

【声明】内容源于网络
0
0
阿里云开发者
阿里巴巴官方技术号,关于阿里的技术创新均呈现于此。
内容 3573
粉丝 0
阿里云开发者 阿里巴巴官方技术号,关于阿里的技术创新均呈现于此。
总阅读16.7k
粉丝0
内容3.6k