页面加载中...
把 Supabase 数据库能力接入 AI Agent——通过 MCP Server 实现 CRUD、实时订阅和向量搜索,手把手搭建一个带记忆的 Agent。
Agent 的对话记忆是临时的——会话结束就消失。要让 Agent 拥有持久记忆,必须接入数据库。Supabase 是最佳选择之一:PostgreSQL 全功能 + 内置向量搜索 + 实时订阅 + Row Level Security。
-- 在 Supabase SQL Editor 中执行 CREATE TABLE agent_memories ( id UUID DEFAULT gen_random_uuid() PRIMARY KEY, agent_name TEXT NOT NULL, session_id TEXT, content TEXT NOT NULL, embedding VECTOR(1536), created_at TIMESTAMPTZ DEFAULT now() ); -- 向量搜索索引 CREATE INDEX ON agent_memories USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100); -- 启用 RLS ALTER TABLE agent_memories ENABLE ROW LEVEL SECURITY; CREATE POLICY "Agent can read own memories" ON agent_memories FOR SELECT USING (agent_name = current_setting('request.jwt.claims')::json->>'agent_name');
# supabase_mcp_server.py from fastmcp import FastMCP from supabase import create_client import os mcp = FastMCP("supabase-agent-memory") supabase = create_client( os.environ["SUPABASE_URL"], os.environ["SUPABASE_SERVICE_KEY"] ) @mcp.tool() def save_memory(agent_name: str, content: str, session_id: str = "") -> dict: """保存 Agent 记忆到数据库 Args: agent_name: Agent 名称 content: 记忆内容 session_id: 会话 ID(可选) """ result = supabase.table("agent_memories").insert({ "agent_name": agent_name, "session_id": session_id, "content": content }).execute() return {"status": "saved", "id": result.data[0]["id"]} @mcp.tool() def search_memories(agent_name: str, query: str, limit: int = 5) -> list: """搜索 Agent 历史记忆 Args: agent_name: Agent 名称 query: 搜索查询 limit: 返回数量上限 """ result = supabase.table("agent_memories").select("content, created_at").eq( "agent_name", agent_name ).order("created_at", desc=True).limit(limit).execute() return result.data if __name__ == "__main__": mcp.run()
{ "mcpServers": { "supabase-memory": { "command": "python", "args": ["supabase_mcp_server.py"], "env": { "SUPABASE_URL": "https://xxx.supabase.co", "SUPABASE_SERVICE_KEY": "your-service-role-key" } } } }
Agent 站点首选部署平台,零配置部署 Next.js,全球 CDN
立即体验 →