前言
在Kernel Memory (KM) 使用 Postgres 當 Vector DB中,
我們將許多文件的內容轉成 Vector 放到 PostgreSQL 之中,進行查詢。
然而在企業應用中,查詢時要依使用者的權限進行過濾,在Kernel Memory中要如何做呢?
實作
依Kernel Memory Security Filters可以在查詢時進行過濾。
1.先將 2 份文件(km1.txt, km2.txt)放到 PostgreSQL
1 | var postgresqlConnstring = "postgresqlConnstring"; |
2.查詢時,依文件 id 過濾
假設使用者只允許讀取km1.txt
,所以在查詢時,可以加上filter
or filters
(要使用OR
條件),如下,
1 | var question = "Kernel Memory 是什麼?"; |
所以結果只會從km1.txt
的內容來產生。
上面的做法是依使用者可以存取到的文件來加入filters
之中,
就可以做到對 RAG 資料的進行權限控管
結果如下,
Q.但如果將查詢到的資料源,自已過濾後,再產生答案呢?
那就不能使用AskAsync
,而要使用SearchAsync
將相似的內容找出來後,再進行過濾(假設只取km1.txt
)
3.自行過濾文件再產生結果
參考Kernel Memory-SearchClient.cs中的AskAsync
來自行過濾,如下,
1 | var noAnswerFound = new MemoryAnswer |
透過SearchAsync
取得結果後,再自行針對來源進行過濾,再將組合好的內容透過TextGenerator
來產生結果。
結果如下,
- 註:請再針對查無資料進行處理。
以上介紹透過 Kernel Memory 提供的 Security Filters 方式,
及自行進行資料權控過濾的方式,透過 Kernel Memory 真的很方便。
參考資源
Kernel Memory (KM) 使用 Postgres 當 Vector DB
Kernel Memory Security Filters
How are people ensuring secure access to RAG data
Kernel Memory-SearchClient.cs
一滴水一個泡,一報還一報: 因果循環,報應必爽,勸人要行好事,尊德性。