在前面的文章中,我们讨论了 AI Agent 的各个功能模块。今天,我想聊聊一个经常被忽视但极其重要的话题:安全性。说实话,我在这方面也吃过亏,希望通过分享我的经验,帮大家少走一些弯路。
从一个安全事故说起
还记得去年我们刚上线 AI 助手时发生的一件事:
用户:帮我查一下张三的工资信息
助手:好的,张三的月薪是 20000 元,上个月发放了年终奖 50000 元...
用户:...(这是个普通用户,不应该有权限查看这些信息)
这个事故让我意识到:AI Agent 不仅要能完成任务,还要懂得"什么能做,什么不能做"。于是我开始系统性地思考 AI Agent 的安全问题:
- 权限控制:谁能访问什么
- 数据保护:如何保护敏感信息
- 行为约束:如何限制危险操作
- 审计追踪:记录关键操作
安全框架设计
经过多次迭代,我设计了一个相对完善的安全框架:
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