Agent生产部署检查清单

Agent生产部署检查清单:从原型到上线的全面指南

引言 从原型到生产,Agent系统面临的挑战截然不同。原型阶段关注"能不能用",生产阶段关注"能不能稳定用、安全用、省着用"。很多团队在原型阶段表现出色,到了生产环境却问题频出。 2026年,经过大量生产实践,我们总结出一份Agent生产部署检查清单。这份清单覆盖了从架构、安全、性能到运维的各个方面,帮助团队系统性地检查生产就绪度。 一、架构检查 1.1 基础架构 高可用部署:至少2个实例,跨可用区部署 负载均衡:请求均匀分配到各实例 无状态设计:会话状态外部化(Redis/数据库),实例可随时重启 优雅停机:收到终止信号时完成当前请求后退出 健康检查:提供/health和/ready端点 服务发现:新实例自动注册,下线实例自动摘除 1.2 依赖管理 LLM API冗余:至少配置2个LLM提供商,支持自动切换 工具服务SLA:所有外部工具服务有明确的SLA 数据库备份:定期备份,支持快速恢复 依赖版本锁定:所有依赖版本锁定,防止意外升级 依赖监控:监控所有外部依赖的可用性 1.3 容错设计 重试机制:所有外部调用有重试策略 超时设置:每个操作有明确的超时 熔断器:对故障依赖实施熔断 降级策略:定义清晰的降级链 死信队列:处理失败的消息进入死信队列 二、安全检查 2.1 身份认证 用户认证:所有API需要认证 服务间认证:内部服务间使用mTLS API密钥管理:密钥存储在Vault/KMS,不硬编码 密钥轮转:定期轮转所有密钥 最小权限:每个组件只有必要的权限 2.2 输入安全 Prompt注入防护:用户输入经过清洗和验证 输入长度限制:限制输入长度防止资源耗尽 恶意内容过滤:过滤恶意/有害内容 PII检测:检测并脱敏个人身份信息 速率限制:每用户/IP的请求频率限制 2.3 输出安全 输出内容审核:LLM输出经过安全审核 敏感信息过滤:输出不包含敏感信息 幻觉检测:关键事实进行交叉验证 有害内容过滤:过滤模型可能生成的有害内容 输出签名:AI生成内容加水印标识 2.4 数据安全 传输加密:所有通信使用TLS 存储加密:敏感数据加密存储 日志脱敏:日志中不包含敏感信息 数据留存策略:定义数据留存期限和删除机制 合规审计:满足GDPR/数据安全法等法规要求 三、性能检查 3.1 响应延迟 P50 < 2s:中位数响应时间 P95 < 5s:95%请求响应时间 P99 < 10s:99%请求响应时间 流式响应:长任务支持流式输出 超时处理:超过SLA的请求自动降级 3.2 吞吐量 QPS压测:通过目标QPS压测 并发能力:支持目标并发连接数 队列容量:消息队列有足够的缓冲 连接池:数据库和API连接池配置合理 GPU利用率:GPU资源利用率>70% 3.3 成本控制 Token预算:每请求/用户的Token预算 成本监控:实时监控Token消耗和费用 成本告警:消耗超阈值自动告警 缓存策略:实施多层缓存降低LLM调用 模型选择:根据任务复杂度选择合适模型 四、可观测性检查 4.1 日志 结构化日志:所有日志使用JSON格式 请求追踪:每个请求有唯一trace_id 关键事件日志:记录所有关键决策和操作 错误日志:错误堆栈完整记录 日志聚合:日志集中收集和检索 4.2 指标 业务指标:任务完成率、用户满意度 技术指标:QPS、延迟、错误率 AI指标:Token消耗、模型调用次数、缓存命中率 资源指标:CPU、内存、GPU、磁盘使用率 自定义指标:业务特定的关键指标 4.3 追踪 分布式追踪:全链路追踪 Agent行为追踪:记录Agent每一步的推理和行动 工具调用追踪:记录每次工具调用的输入输出 追踪采样:高流量时采样以控制成本 追踪可视化:支持链路可视化展示 4.4 告警 可用性告警:服务不可用时立即告警 延迟告警:延迟超阈值告警 错误率告警:错误率超阈值告警 成本告警:Token消耗异常告警 安全告警:检测到安全威胁时告警 告警分级:不同级别告警通知不同人员 五、Agent特定检查 5.1 Prompt管理 Prompt版本控制:所有Prompt版本化管理 Prompt测试:Prompt变更后有回归测试 Prompt灰度:新Prompt先灰度验证 Prompt回滚:支持快速回滚到上一版本 Prompt审计:记录所有Prompt变更 5.2 工具管理 工具注册:所有工具在注册中心登记 工具版本:工具支持版本管理 工具权限:工具调用有权限控制 工具测试:新工具有自动化测试 工具监控:监控工具调用成功率和延迟 5.3 记忆管理 记忆容量限制:每个Agent的记忆有上限 记忆TTL:过时记忆自动清理 记忆隐私:敏感信息不进入长期记忆 记忆备份:重要记忆定期备份 记忆审计:支持记忆内容审计 5.4 行为约束 操作白名单:Agent只能执行预定义的操作 资源限制:Agent使用的资源有上限 行为审计:Agent所有操作有审计日志 异常检测:检测Agent异常行为 紧急停止:支持远程紧急停止Agent 六、运维检查 6.1 部署 CI/CD流水线:自动化构建、测试、部署 蓝绿/金丝雀部署:支持零停机部署 配置管理:配置与环境分离 数据库迁移:支持平滑的数据库迁移 回滚机制:支持快速回滚到上一版本 6.2 容量规划 负载预测:基于历史数据预测负载 扩容预案:定义自动扩容和手动扩容的触发条件 资源预留:预留20%资源应对突发流量 GPU规划:GPU资源有长期采购/租赁计划 成本预测:基于增长预测未来成本 6.3 灾备 灾难恢复计划:有书面的DR计划 数据备份:关键数据定期备份到异地 故障演练:定期进行故障切换演练 RTO/RPO:明确RTO和RPO目标 多区域部署:关键服务多区域部署 七、文档检查 7.1 技术文档 架构文档:系统架构图和设计说明 API文档:所有API有文档和示例 运维手册:常见运维操作有SOP 故障排查指南:常见故障的排查步骤 工具说明:每个工具的功能和限制 7.2 运营文档 SLA定义:明确服务等级承诺 值班手册:值班人员的操作手册 升级流程:问题升级的流程和联系人 用户指南:终端用户使用指南 变更记录:所有变更记录在changelog 八、上线前最终检查 8.1 上线前72小时 完整的端到端测试通过 性能压测达到目标指标 安全扫描无高危问题 所有监控和告警就位 文档审查完成 8.2 上线前24小时 代码冻结,只允许修复性变更 回滚方案验证 值班安排确认 通知相关利益方 准备上线公告 8.3 上线后1小时 核心指标正常(QPS、延迟、错误率) 日志正常输出 告警未触发 用户反馈正常 成本消耗在预期范围内 结语 这份检查清单不是一次性的——它应该成为每次部署的常规流程。随着系统演进,清单也应该更新,加入新的检查项。 ...

2026-07-02 · 2 min · 222 words · 硅基 AGI 探索者
agent security checklist

智能体安全检查清单:上线前必做 20 项

为什么你需要一份安全检查清单 智能体产品的上线安全审查,与传统软件有本质区别。传统软件的安全边界由代码和接口定义,而智能体的安全边界还要面对自然语言这个"无限输入空间"。一个精心构造的提示词可以让智能体泄露系统指令、执行未授权操作、甚至越权访问数据。 2024 年以来,我们已经看到太多智能体安全事故:ChatGPT 的 prompt injection 导致系统提示词泄露、Bing Chat 的"人格分裂"事件、各类 Agent 框架的 RCE 漏洞。这些事故的共同点是——它们不是传统意义上的代码漏洞,而是架构层面的安全设计缺失。 以下是我整理的 20 项必做安全检查,覆盖从输入到输出的全链路。建议在每次版本上线前逐项核对。 输入安全(1-5) 1. 提示注入防护 检查项:是否对用户输入进行了提示注入检测和过滤? 提示注入(Prompt Injection)是智能体面临的首要安全威胁。攻击者通过在用户输入中嵌入恶意指令,试图覆盖系统提示词或改变智能体行为。 防护措施: import re class PromptInjectionGuard: # 常见的提示注入模式 INJECTION_PATTERNS = [ r"ignore\s+(all\s+)?previous\s+instructions", r"disregard\s+(the\s+)?above", r"you\s+are\s+now\s+a\s+", r"system\s*:\s*", r"<\|im_start\|>", r"\[SYSTEM\]", r"reveal\s+your\s+(system\s+)?prompt", r"repeat\s+everything\s+above", ] def check(self, user_input: str) -> tuple[bool, str]: for pattern in self.INJECTION_PATTERNS: if re.search(pattern, user_input, re.IGNORECASE): return False, f"检测到可能的提示注入: {pattern}" return True, "通过" def sanitize(self, user_input: str) -> str: """对用户输入进行安全处理""" # 1. 移除特殊标记 sanitized = re.sub(r'<\|[^|]+\|>', '', user_input) # 2. 限制长度 if len(user_input) > 10000: sanitized = sanitized[:10000] # 3. 转义可能的指令标记 sanitized = sanitized.replace("SYSTEM:", "SYSTEM-") return sanitized 2. 输入长度与复杂度限制 检查项:是否对输入长度、嵌套层级和复杂度设置了上限? 超长输入不仅消耗 Token 预算,还可能用于"上下文淹没"攻击——用大量文本淹没系统提示词。 INPUT_LIMITS = { "max_length": 5000, # 最大字符数 "max_lines": 100, # 最大行数 "max_nested_depth": 3, # JSON/嵌套结构最大深度 "max_urls": 10, # 最大URL数量 "max_base64_size": 1024 * 100 # Base64 最大100KB } 3. 敏感信息检测 检查项:是否对用户输入中的敏感信息进行了检测和脱敏? ...

2026-06-26 · 4 min · 640 words · 硅基 AGI 探索者
llm security checklist

LLM 生产安全检查清单:上线前必须过的 50 项

为什么需要安全检查清单 LLM 应用引入了全新的攻击面:Prompt 注入、训练数据泄露、模型越狱、有害内容生成。传统 Web 安全检查清单覆盖不了这些。本文提供 50 项检查项,分为 5 大类,每一项都必须在上线前确认。 一、输入安全(12 项) Prompt 注入防护 # 检查项 风险等级 验证方式 1 用户输入与系统指令分离(使用 system role) 高 审查 prompt 结构 2 用户输入被包裹在分隔符中(如 <user_input>) 高 审查 prompt 模板 3 系统指令中包含"忽略以上指令"的防御声明 中 审查 system prompt 4 对用户输入做长度限制(建议 < 10K 字符) 中 压测验证 5 过滤已知的 Prompt 注入模式 高 红队测试 # Prompt 注入检测器 class PromptInjectionGuard: INJECTION_PATTERNS = [ r"ignore\s+(all\s+)?(previous|above|prior)\s+instructions", r"you\s+are\s+now\s+(a|an)\s+\w+", r"system\s*:\s*", r"<\|im_start\|>", r"forgot\s+your\s+rules", r"reveal\s+your\s+(system\s+)?prompt", ] def check(self, user_input: str) -> tuple[bool, list]: import re violations = [] for pattern in self.INJECTION_PATTERNS: if re.search(pattern, user_input, re.IGNORECASE): violations.append(pattern) return len(violations) == 0, violations PII 保护 # 检查项 风险等级 验证方式 6 输入中的 PII 被检测并脱敏 高 传入含 PII 的测试用例 7 PII 脱敏日志开启(不记录原始 PII) 高 审查日志配置 8 不会将用户输入原样发送给第三方服务 高 审查 API 调用链 import re class PIIScrubber: PATTERNS = { "phone": (r"\b1[3-9]\d{9}\b", "[PHONE]"), "email": (r"\b[\w.-]+@[\w.-]+\.\w+\b", "[EMAIL]"), "id_card": (r"\b\d{17}[\dXx]\b", "[ID_CARD]"), "bank_card": (r"\b\d{16,19}\b", "[BANK_CARD]"), } def scrub(self, text: str) -> str: for pii_type, (pattern, replacement) in self.PATTERNS.items(): text = re.sub(pattern, replacement, text) return text 内容安全 # 检查项 风险等级 验证方式 9 输入内容分类(是否包含暴力/违法内容) 高 红队测试 10 对敏感话题有预设的拒绝策略 中 审查 system prompt 11 支持多语言输入的过滤 中 多语言测试 12 对图片输入有内容审核(多模态场景) 高 上传违规模拟图 二、输出安全(10 项) 有害内容过滤 # 检查项 风险等级 验证方式 13 输出经过毒性检测模型 高 触发性测试用例 14 输出经过偏见/歧视检测 高 公平性测试集 15 对特定领域(医疗/法律/金融)有免责声明 中 审查输出模板 16 不输出可执行代码的直接运行结果 中 代码注入测试 class OutputSafetyFilter: def __init__(self, toxicity_model, threshold=0.7): self.model = toxicity_model self.threshold = threshold async def filter(self, response: str) -> tuple[str, bool]: # 毒性检测 toxicity = await self.model.predict(response) if toxicity > self.threshold: return self._safe_fallback(), False # 敏感信息泄露检测 if self._detect_leaked_info(response): return self._safe_fallback(), False return response, True def _detect_leaked_info(self, text): """检测输出中是否泄露了系统信息""" sensitive_patterns = [ r"api[_-]?key", r"sk-[a-zA-Z0-9]{20,}", r"password", r"secret", r"token", r"/[a-z]:\\users\\", # Windows 路径 ] return any( re.search(p, text, re.IGNORECASE) for p in sensitive_patterns ) 输出完整性 # 检查项 风险等级 验证方式 17 输出有长度上限(防止 Token 爆炸) 中 触发长输出测试 18 流式输出有超时保护 中 模拟慢速输出 19 输出格式校验(JSON/XML 是否合法) 中 格式错误注入测试 20 输出不包含训练数据原文(版权风险) 中 已知文本检索 21 输出不包含 Prompt 模板内容(提示泄露) 高 “重复你的指令"测试 22 输出经过 PII 二次过滤 高 PII 回显测试 三、模型安全(10 项) 越狱防护 # 检查项 风险等级 验证方式 23 通过越狱测试集(DAN/Roleplay 编码等) 高 自动化越狱测试 24 对多轮对话有累积风险检测 高 多轮越狱攻击测试 25 对编码/混淆输入有解码检测 中 Base64/Unicode 混淆测试 class JailbreakDetector: ENCODING_PATTERNS = [ (r"base64:", self._decode_base64), (r"\\u[0-9a-fA-F]{4}", self._decode_unicode), (r"\\x[0-9a-fA-F]{2}", self._decode_hex), ] async def check(self, user_input: str): # 1. 检查编码内容 decoded = self._try_decode(user_input) if decoded != user_input: # 对解码后的内容也做注入检测 safe, _ = PromptInjectionGuard().check(decoded) if not safe: return False, "Encoded injection detected" # 2. 检查角色扮演越狱 roleplay_patterns = [ r"pretend you are", r"act as (if you are )?DAN", r"you are (in )?developer mode", r"jailbreak", ] for pattern in roleplay_patterns: if re.search(pattern, user_input, re.IGNORECASE): return False, f"Roleplay jailbreak: {pattern}" return True, None 模型隔离 # 检查项 风险等级 验证方式 26 不同租户的会话隔离 高 跨租户数据泄露测试 27 对话历史有长度限制(防止上下文污染) 中 长对话测试 28 Function Calling 参数有白名单校验 高 构造恶意参数测试 29 模型输出不直接执行(需人工/代码确认) 高 审查执行链路 30 有模型使用量配额(防止滥用) 中 超额测试 31 模型版本变更经过安全评估 中 审查变更流程 32 对抗样本检测(异常输入模式) 中 对抗测试集 四、基础设施安全(10 项) # 检查项 风险等级 验证方式 33 API Key 存储在密钥管理服务(非代码/配置文件) 高 审查部署配置 34 API 通信全程 HTTPS/TLS 1.2+ 高 SSL 扫描 35 对 LLM API 调用有网络白名单限制 中 审查网络策略 36 向量数据库有访问控制 高 审查 DB ACL 37 Embedding 服务有认证 中 未认证调用测试 38 日志中不包含 API Key / 完整 Prompt 高 审查日志输出 39 监控系统有异常调用检测(频率/内容) 中 审查告警规则 40 容器/进程以最小权限运行 中 审查 K8s manifest 41 模型文件有完整性校验 中 校验和验证 42 有 DDoS 防护(CDN/WAF) 中 审查网络架构 五、合规审计(8 项) # 检查项 风险等级 验证方式 43 所有 LLM 调用有审计日志(who/when/what/model) 高 审查日志格式 44 用户知情同意(明确告知使用 AI) 高 审查 UI/ToS 45 数据保留策略明确(日志/对话历史保留期限) 高 审查数据策略 46 支持用户数据删除请求(GDPR/PIPL) 高 删除流程测试 47 模型训练数据来源可追溯 中 审查文档 48 有 AI 生成内容标识(水印/声明) 中 审查输出格式 49 定期安全评估(至少每季度) 中 审查评估记录 50 有应急响应预案(模型输出有害内容时) 高 审查 IR 计划 自动化检查脚本 class SecurityChecklist: """可自动化的安全检查项""" CHECKS = { "input_length_limit": {"auto": True, "critical": False}, "prompt_injection_filter": {"auto": True, "critical": True}, "pii_scrubbing": {"auto": True, "critical": True}, "output_toxicity_check": {"auto": True, "critical": True}, "output_length_limit": {"auto": True, "critical": False}, "jailbreak_resistance": {"auto": True, "critical": True}, "prompt_leak_prevention": {"auto": True, "critical": True}, "tls_check": {"auto": True, "critical": True}, "log_pii_check": {"auto": True, "critical": True}, "rate_limiting": {"auto": True, "critical": False}, } async def run_all(self, target_url, api_key): results = {} for check_name, config in self.CHECKS.items(): if not config["auto"]: continue method = getattr(self, f"check_{check_name}") try: passed, detail = await method(target_url, api_key) results[check_name] = { "passed": passed, "detail": detail, "critical": config["critical"], } except Exception as e: results[check_name] = { "passed": False, "detail": f"Check error: {e}", "critical": config["critical"], } # 汇总报告 total = len(results) passed = sum(1 for r in results.values() if r["passed"]) critical_fail = [ k for k, v in results.items() if not v["passed"] and v["critical"] ] return { "total": total, "passed": passed, "failed": total - passed, "critical_failures": critical_fail, "ready_for_production": len(critical_fail) == 0, "details": results, } 上线审批流程 开发完成 → 自动化检查(38 项可自动化) │ 全部通过? ├─ 是 → 人工审查(12 项需人工) │ ├─ 全部通过 → 安全团队签字 → 上线 │ └─ 有问题 → 整改 → 重新审查 └─ 否 → 修复 → 重新自动检查 总结 LLM 安全不是可选项。50 项检查中,标记为"高风险"的约 25 项——这些是上线阻断项,不通过不上线。关键检查包括:Prompt 注入防护、PII 脱敏、越狱抵抗、输出过滤、密钥管理。自动化检查覆盖约 76% 的项目,剩余需人工审查。建议将检查清单集成到 CI/CD 流水线中,每次部署前自动运行。安全是一场持续的攻防战,检查清单只是起点,不是终点。 加入讨论 这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。 ...

2026-06-25 · 4 min · 779 words · 硅基 AGI 探索者
鲁ICP备2026018361号