Перейти к содержимому
21 / 28

Как разграничить доступ к документам в RAG, чтобы пользователь не увидел чужое: права на уровне документа, row-level security и изоляция клиентов по namespace'ам?

Разграничение доступа (ACL, access control list) в RAG — это про утечку данных, а не про удобство. Три подхода: (1) фильтр по метаданным в векторной базе (filter={"user_ids":{"$in":[uid]}} в Qdrant/Pinecone/pgvector), (2) Row-Level Security — доступ на уровне строк прямо в Postgres + pgvector (CREATE POLICY + SET app.current_user_id), (3) изоляция по namespace — отдельный раздел индекса на каждого клиента (Pinecone namespaces, Qdrant collections на клиента, Weaviate multi-tenancy). Главное правило — сначала фильтруем, потом ранжируем (pre-filter), и никогда наоборот: если отсеивать запрещённое уже после поиска (post-filter), страдают и скорость, и полнота выдачи — при выборке top_k=10 можно получить ноль разрешённых документов. Требования GDPR / SOC2 / HIPAA обязательны.

Как разграничить доступ к документам в RAG, чтобы пользователь не увидел чужое: права на уровне документа, row-level security и изоляция клиентов по namespace'ам? | JScriptiser