在前面的文章中,我们讨论了 AI Agent 的各个功能模块。今天,我想聊聊一个经常被忽视但极其重要的话题:安全性。说实话,我在这方面也吃过亏,希望通过分享我的经验,帮大家少走一些弯路。

从一个安全事故说起

还记得去年我们刚上线 AI 助手时发生的一件事:

用户:帮我查一下张三的工资信息
助手:好的,张三的月薪是 20000 元,上个月发放了年终奖 50000 元...
用户:...(这是个普通用户,不应该有权限查看这些信息)

这个事故让我意识到:AI Agent 不仅要能完成任务,还要懂得"什么能做,什么不能做"。于是我开始系统性地思考 AI Agent 的安全问题:

  1. 权限控制:谁能访问什么
  2. 数据保护:如何保护敏感信息
  3. 行为约束:如何限制危险操作
  4. 审计追踪:记录关键操作

安全框架设计

经过多次迭代,我设计了一个相对完善的安全框架:

from typing import List, Dict, Any, Optional
from enum import Enum
from datetime import datetime
from pydantic import BaseModel
import asyncio
import hashlib
import jwt

class Permission(Enum):
    READ = "read"
    WRITE = "write"
    ADMIN = "admin"
    
class Resource(Enum):
    USER_INFO = "user_info"
    SYSTEM_CONFIG = "system_config"
    BUSINESS_DATA = "business_data"

class SecurityLevel(Enum):
    PUBLIC = 0
    INTERNAL = 1
    CONFIDENTIAL = 2
    SECRET = 3

class User(BaseModel):
    id: str
    name: str
    roles: List[str]
    permissions: Dict[Resource, Permission]
    security_level: SecurityLevel
    
class AccessToken(BaseModel):
    token: str
    user_id: str
    expires_at: datetime
    
class SecurityContext(BaseModel):
    user: User
    session_id: str
    client_info: Dict[str, str]
    timestamp: datetime

class SecurityManager:
    def __init__(
        self,
        jwt_secret: str,
        token_expiry: int = 3600
    ):
        self.jwt_secret = jwt_secret
        self.token_expiry = token_expiry
        self.active_tokens: Dict[str, AccessToken] = {}
        
    async def authenticate(
        self,
        credentials: Dict[str, str]
    ) -> AccessToken:
        # 1. 验证凭据
        user = await self._verify_credentials(
            credentials
        )
        
        # 2. 生成访问令牌
        token = self._genera