概述
在复杂 AI 应用中,多个 Agent 需要协同工作(如 Planner + Researcher + Coder + Reviewer),它们之间需要共享上下文、传递结论、协调行动。腾讯云数据库 PostgreSQL 提供原生的多 Agent 共享记忆与项目协作能力。
多租户数据模型
核心实体
CREATE SCHEMA core;-- 租户表(企业 / 团队)CREATE TABLE core.tenants (id UUID PRIMARY KEY DEFAULT gen_random_uuid(),name TEXT NOT NULL,plan TEXT DEFAULT 'free',config JSONB DEFAULT '{}',created_at TIMESTAMPTZ DEFAULT NOW());-- Agent 注册表CREATE TABLE core.agents (id UUID PRIMARY KEY DEFAULT gen_random_uuid(),tenant_id UUID NOT NULL REFERENCES core.tenants(id),name TEXT NOT NULL,role TEXT NOT NULL, -- planner / researcher / coder / reviewercapabilities TEXT[], -- 能力标签config JSONB DEFAULT '{}',created_at TIMESTAMPTZ DEFAULT NOW());-- 项目表CREATE TABLE core.projects (id UUID PRIMARY KEY DEFAULT gen_random_uuid(),tenant_id UUID NOT NULL REFERENCES core.tenants(id),name TEXT NOT NULL,description TEXT,status TEXT DEFAULT 'active',created_at TIMESTAMPTZ DEFAULT NOW());-- 项目成员(Agent 参与项目)CREATE TABLE core.project_members (project_id UUID REFERENCES core.projects(id),agent_id UUID REFERENCES core.agents(id),role TEXT DEFAULT 'member', -- owner / member / readonlyjoined_at TIMESTAMPTZ DEFAULT NOW(),PRIMARY KEY (project_id, agent_id));
共享记忆表
-- 项目级共享记忆CREATE TABLE memory.shared_records (id UUID PRIMARY KEY DEFAULT gen_random_uuid(),tenant_id UUID NOT NULL,project_id UUID NOT NULL,author_agent_id UUID NOT NULL, -- 记忆创建者content TEXT NOT NULL,embedding vector(1024),record_type TEXT DEFAULT 'finding', -- finding / decision / context / artifactvisibility TEXT DEFAULT 'project', -- project / team / privatemetadata JSONB DEFAULT '{}',created_at TIMESTAMPTZ DEFAULT NOW());-- RLS:同项目的 Agent 可以互相访问记忆ALTER TABLE memory.shared_records ENABLE ROW LEVEL SECURITY;CREATE POLICY project_access ON memory.shared_recordsUSING (project_id IN (SELECT project_id FROM core.project_membersWHERE agent_id = current_setting('app.agent_id')::uuid));
协作模式
记忆共享(Agent A 的发现 → Agent B 可检索)
-- Researcher Agent 写入调研结论SET app.agent_id = 'researcher-001';INSERT INTO memory.shared_records(tenant_id, project_id, author_agent_id, content, embedding, record_type)VALUES (:tenant_id,:project_id,'researcher-001','竞品 PolarDB 的向量检索性能在 100 万级数据下 QPS 约 2000',tencentdb_ai.get_embedding('bge-m3', '竞品 PolarDB 向量检索性能'),'finding');-- Planner Agent 检索 Researcher 的发现SET app.agent_id = 'planner-001';SELECT content, author_agent_id, created_atFROM memory.shared_recordsWHERE project_id = :project_idORDER BY embedding <=> tencentdb_ai.get_embedding('bge-m3', '竞品性能数据')LIMIT 5;
任务委派与结果回传
-- 任务表CREATE TABLE core.tasks (id UUID PRIMARY KEY DEFAULT gen_random_uuid(),project_id UUID NOT NULL,assigner_id UUID NOT NULL, -- 分配者assignee_id UUID NOT NULL, -- 执行者title TEXT NOT NULL,description TEXT,status TEXT DEFAULT 'pending', -- pending / in_progress / completed / failedresult TEXT,created_at TIMESTAMPTZ DEFAULT NOW(),completed_at TIMESTAMPTZ);-- Planner 分配任务给 ResearcherINSERT INTO core.tasks (project_id, assigner_id, assignee_id, title, description)VALUES (:project_id, 'planner-001', 'researcher-001','调研 DiskANN 索引性能', '对比 HNSW 和 DiskANN 在 1000 万向量下的性能');-- Researcher 完成后更新UPDATE core.tasksSET status = 'completed',result = 'DiskANN 在 1000 万向量下 QPS 提升 40%,内存节省 60%',completed_at = NOW()WHERE id = :task_id;
决策记录
-- 记录团队决策INSERT INTO memory.shared_records(tenant_id, project_id, author_agent_id, content, record_type, metadata)VALUES (:tenant_id, :project_id, 'planner-001','决定采用 pgvectorscale DiskANN 作为向量索引方案','decision','{"reason": "性能更优,内存更省", "alternatives": ["HNSW", "IVFFlat"]}');
访问控制
三级可见性
级别 | 说明 | RLS 策略 |
private | 仅创建者可见 | author_agent_id = current_agent |
project | 项目成员可见 | 同项目的所有 Agent |
team | 租户内所有 Agent 可见 | 同 tenant_id |
读写分离
-- readonly 成员只能读取,不能写入CREATE POLICY readonly_member ON memory.shared_recordsFOR INSERTWITH CHECK (EXISTS (SELECT 1 FROM core.project_membersWHERE project_id = memory.shared_records.project_idAND agent_id = current_setting('app.agent_id')::uuidAND role IN ('owner', 'member')));
审计与追溯
实践
1. 按项目隔离:不同业务线的 Agent 团队使用不同 project。
2. 定期压缩:使用大模型对旧记忆进行总结压缩。
3. 标记决策:重要决策使用 decision 类型,方便后续追溯。
4. 权限最小化:只给 Agent 必要的 project 访问权限。