Agent 的權限與稽核:受監管環境的實作
讓 Agent 代替人操作系統,稽核要求會立刻浮現。這是可通過檢核的設計。
當 Agent 能夠修改資料、發起交易或存取個資時,它就進入了稽核範圍。稽核人員會問三個問題:誰授權的、依據什麼、能不能還原。
這三個問題都必須有系統化的答案,而不是「看日誌」。
一、身分與授權鏈
Agent 執行的每個動作都必須能追溯到一個真實的人。Agent 沒有自己的權限,它只是代理使用者行使權限。
@dataclass
class ActorChain:
human_id: str # 發起任務的真人
agent_run_id: str # 本次執行
delegated_scopes: list # 使用者授予本次任務的權限範圍
expires_at: datetime # 授權有效期
# 每次工具呼叫都帶著這條鏈,並在服務端驗證
def dispatch(name, args, chain: ActorChain):
scope = TOOL_SCOPES[name]
if scope not in chain.delegated_scopes:
raise PermissionDenied(f'本次任務未授權 {scope}')
if datetime.utcnow() > chain.expires_at:
raise PermissionDenied('授權已過期')
return TOOLS[name](**args, actor=chain.human_id)二、決策依據要留存
- 當時使用的提示版本與模型版本。
- 檢索到的資料(或其雜湊與 id)。
- 模型的推理輸出(若有)。
- 套用了哪些業務規則。
稽核時要能回答「為什麼系統在那個時間點做出這個決定」。少了任何一項,這個問題就只能用「模型判斷的」來回答,在受監管的行業是不可接受的。
三、可還原性
# 有副作用的工具必須成對定義
TOOLS = {
'cancel_order': {'fn': cancel_order, 'undo': 'restore_order',
'scope': 'orders:write', 'reversible': True},
'send_email': {'fn': send_email, 'undo': None,
'scope': 'comms:send', 'reversible': False},
}不可還原的操作應該有更高的確認門檻,且在稽核報告中單獨標示。
稽核報告的產出
稽核不該是「需要時去撈日誌」,而應該能一鍵產出報告:某段期間內、某個 Agent、所有有副作用的操作清單,含授權人、時間、依據與結果。
SELECT e.ts, e.run_id, r.human_id, e.payload->>'tool' AS tool,
e.payload->>'args_redacted' AS args,
e.payload->>'prompt_version' AS prompt_ver
FROM agent_events e JOIN agent_runs r USING (run_id)
WHERE e.type = 'tool_call'
AND e.payload->>'has_side_effect' = 'true'
AND e.ts BETWEEN $1 AND $2
ORDER BY e.ts;資料保存期限
- 稽核紀錄的保存期限依產業規定,通常五到七年。
- 個資的保存期限通常較短,需要分離儲存並各自套用期限。
- 設計時就要能「刪除個資但保留稽核軌跡」——用假名化而非直接刪除。
稽核設計要在專案初期就做,不要等上線後補。事後補的最大問題是歷史資料沒有那些欄位,等於前面幾個月無法稽核。
訂閱後繼續閱讀全文
本篇為訂閱者專屬內容。訂閱後可取得下列權限:
- 解鎖全部內容權限
- 閱讀不限篇數
- 全站移除廣告
月卡
NT$240
開通 30 天
一次付清,開通 30 天
季卡
NT$620
開通 90 天
一次付清,開通 90 天,每天約 NT$7
年卡
NT$2,160
開通 365 天
一次付清,開通 365 天,每天約 NT$6
一次性付款,付款成功後立即開通,到期自動結束,不會再次扣款,也不需要取消訂閱。
立即訂閱
金額均為新臺幣(TWD),即實際扣款金額,不另收手續費
支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
購買須知與退款政策