基于Anthropic-Cybersecurity-Skills构建网络安全AI智能体实战指南

发布时间:2026/6/30 2:28:22
基于Anthropic-Cybersecurity-Skills构建网络安全AI智能体实战指南 最近在尝试构建一个面向企业安全的AI智能体时发现市面上虽然有不少AI Agent框架但专门针对网络安全领域的、开箱即用的技能库却非常稀缺。要么需要从零开始编写复杂的提示词和工具链要么就是通用技能难以满足安全分析、漏洞评估等专业场景的需求。直到我发现了mukul975 / Anthropic-Cybersecurity-Skills这个宝藏项目它基于流行的agentskills.io架构提供了一套专门为Claude等大模型设计的网络安全技能库极大地简化了安全AI智能体的开发流程。本文将为你完整拆解这个项目的核心价值、架构设计并手把手带你完成从环境搭建、技能调用到构建一个简易漏洞扫描AI助手的全流程实战。无论你是想快速集成AI能力到现有安全运维SecOps流程中的工程师还是对AI Agent开发感兴趣的研究者这篇文章都能提供一套可直接复用的解决方案。1. 项目背景与核心概念为什么需要网络安全AI技能库在深入代码之前我们首先要理解这个项目解决了什么痛点。传统的安全运营中心SOC或渗透测试工作流高度依赖专家的经验判断和繁琐的手动工具操作效率瓶颈明显。而大语言模型LLM如Anthropic的Claude虽然拥有强大的推理和代码生成能力但要让它们真正“理解”并“执行”网络安全任务面临几个关键挑战领域知识鸿沟通用LLM不了解Nmap扫描结果的含义、不会解析Burp Suite的代理日志、也不熟悉CVE漏洞数据库的结构。工具集成困难LLM本身无法直接调用命令行工具或访问内部API需要一套可靠的“手和脚”即工具调用能力。提示词工程复杂为每一个安全任务如子域名枚举、SQL注入检测设计高效、准确的提示词是一项耗时且需要反复调试的工作。工作流编排缺失一个完整的安全评估往往包含多个步骤需要智能体在不同技能间自主切换和决策。Anthropic-Cybersecurity-Skills项目正是为了解决这些问题而生。它不是一个独立的AI Agent框架而是一个构建在agentskills.io生态系统之上的技能Skills仓库。agentskills.io是什么你可以将其理解为一个“AI技能的应用商店”或标准化框架。它定义了一套统一的规范让开发者可以像编写函数一样封装AI可调用的能力技能并方便地被各种AI Agent框架如LangChain、CrewAI、自定义Agent集成和调用。Anthropic-Cybersecurity-Skills是什么这是一个专门针对网络安全领域按照agentskills.io规范实现的具体技能集合。它预置了诸如网络扫描、漏洞查询、日志分析、密码强度检查等安全工程师常用的能力。核心价值该项目将网络安全领域的专业知识和工具调用封装成标准化、可复用的“技能包”。开发者无需再从零开始可以直接引入这些技能快速组装出一个具备专业安全分析能力的AI助手从而专注于更高层次的智能体逻辑和业务流程设计。2. 环境准备与项目初始化在开始实战前我们需要准备好开发环境。本项目主要使用Python并假设你已经有了基本的Python开发环境。2.1 基础环境要求操作系统Linux (推荐Ubuntu/Debian)、macOS 或 Windows Subsystem for Linux (WSL2)。部分安全工具在原生Windows上可能兼容性不佳。Python版本 3.9。建议使用3.10或3.11以获得更好的兼容性。包管理工具pip最新版。版本控制git。Anthropic API密钥你需要一个有效的Anthropic API密钥来调用Claude模型。可以访问Anthropic官网申请。2.2 克隆项目与安装依赖首先我们将项目代码克隆到本地。# 克隆项目仓库 git clone https://github.com/mukul975/Anthropic-Cybersecurity-Skills.git cd Anthropic-Cybersecurity-Skills查看项目结构这对理解后续操作很重要。# 查看项目根目录结构 ls -la典型的项目结构可能包含├── skills/ # 核心技能目录每个技能一个子文件夹 │ ├── nmap_scan/ │ ├── cve_lookup/ │ ├── log_analyzer/ │ └── ... ├── examples/ # 使用示例 ├── requirements.txt # Python依赖列表 ├── README.md └── ...接下来创建一个独立的Python虚拟环境并安装依赖。这是最佳实践可以避免包冲突。# 创建虚拟环境以venv为例 python -m venv venv # 激活虚拟环境 # Linux/macOS source venv/bin/activate # Windows (cmd) # venv\Scripts\activate.bat # Windows (PowerShell) # venv\Scripts\Activate.ps1 # 安装项目依赖 pip install -r requirements.txt注意如果项目没有提供requirements.txt你可能需要根据skills/目录下各子文件夹中的pyproject.toml或setup.py文件来手动安装每个技能包的依赖。通常一个agentskills.io规范的技能包可以通过pip install .在其目录下进行安装。2.3 配置API密钥与环境变量安全地管理你的API密钥。不要将其硬编码在代码中。# Linux/macOS: 将你的API密钥添加到当前shell会话的环境变量中 export ANTHROPIC_API_KEYyour_anthropic_api_key_here # Windows (cmd) # set ANTHROPIC_API_KEYyour_anthropic_api_key_here # Windows (PowerShell) # $env:ANTHROPIC_API_KEYyour_anthropic_api_key_here为了持久化你可以将export ANTHROPIC_API_KEY...这行命令添加到你的~/.bashrc或~/.zshrc文件末尾。3. 核心技能架构与使用模式解析在agentskills.io的范式下一个“技能”通常包含以下几个核心部分技能描述Skill Description用自然语言描述这个技能能做什么供AI模型理解。输入模式Input Schema定义调用该技能时需要提供的参数及其类型如字符串、整数、布尔值。执行函数Execution Function包含实际业务逻辑的代码例如调用一个命令行工具、查询一个API或处理一段数据。输出模式Output Schema定义技能执行后返回的数据结构。3.1 查看一个现有技能Nmap扫描让我们以最经典的网络安全技能——端口扫描为例看看它是如何实现的。进入skills/nmap_scan目录假设目录存在。# 示例一个简化的 nmap_skill.py 可能的结构 # 注意以下代码是基于 agentskills.io 理念的示意非项目原文件。 from typing import TypedDict import subprocess import json # 1. 定义输入参数的类型 class NmapScanInput(TypedDict): target: str # 扫描目标如 “example.com” 或 “192.168.1.0/24” scan_type: str # 扫描类型如 “-sS” (SYN扫描), “-sV” (版本探测) ports: str # 端口范围如 “1-1000” 或 “80,443,22” # 2. 技能描述通常会在装饰器或配置文件中 SKILL_DESCRIPTION Performs a network port scan using the Nmap security scanner. Useful for discovering open ports, services, and their versions on a target host or network. # 3. 核心执行函数 def execute_nmap_scan(input_data: NmapScanInput) - str: 执行Nmap扫描并返回格式化结果。 target input_data.get(target) scan_type input_data.get(scan_type, -sS) ports input_data.get(ports, 1-1000) if not target: return Error: Target host or network is required. # 构建命令避免命令注入风险 cmd [nmap, scan_type, -p, ports, target] try: # 执行命令并捕获输出 result subprocess.run(cmd, capture_outputTrue, textTrue, timeout300) if result.returncode 0: # 这里可以添加更复杂的解析逻辑将文本输出转为结构化JSON return result.stdout else: return fNmap scan failed with error:\n{result.stderr} except subprocess.TimeoutExpired: return Nmap scan timed out after 5 minutes. except FileNotFoundError: return Error: Nmap command not found. Please ensure Nmap is installed and in your PATH. except Exception as e: return fAn unexpected error occurred: {str(e)} # 4. 技能的“注册”或暴露点取决于具体框架实现 # 在 agentskills.io 中可能会使用一个装饰器来注册这个技能 # skill(namenmap_scan, descriptionSKILL_DESCRIPTION, input_schemaNmapScanInput) # def nmap_skill(input_data: NmapScanInput) - str: # return execute_nmap_scan(input_data)关键点解析封装与安全技能将底层的、可能复杂的nmap命令调用封装成一个简单的函数并处理了错误和超时。这比让AI直接生成并执行系统命令要安全得多。结构化接口通过定义TypedDict明确了AI需要提供哪些参数避免了模糊的自然语言指令可能导致的歧义。模型可理解SKILL_DESCRIPTION让Claude这样的LLM能够准确理解何时以及如何使用这个技能。3.2 如何调用单个技能在集成了agentskills.io的AI Agent框架中调用一个技能通常非常简单。以下是一个使用原始Anthropic Messages API并结合技能描述的模拟示例展示了其工作原理。# 示例模拟AI Agent调用Nmap技能的过程 import os from anthropic import Anthropic # 初始化客户端 client Anthropic(api_keyos.environ.get(ANTHROPIC_API_KEY)) # 1. 将技能描述和可用性告知AI模型 system_prompt f You are a cybersecurity assistant. You have access to the following tool (skill): Tool Name: nmap_scan Description: {SKILL_DESCRIPTION} Parameters: - target (string, required): The hostname, IP address, or network range to scan. - scan_type (string, optional): Nmap scan type flags. Default is -sS (SYN stealth scan). - ports (string, optional): Ports to scan. Default is 1-1000. When you need to use this tool, you MUST respond in the following JSON format: {{ tool: nmap_scan, input: {{ target: value_here, scan_type: value_here, ports: value_here }} }} Only respond with this JSON when using the tool. Otherwise, provide normal text answers. # 2. 用户提出一个需要扫描的请求 user_query 请帮我扫描一下 example.com 的开放端口特别是web服务端口。 # 3. 发送请求给Claude message client.messages.create( modelclaude-3-5-sonnet-20241022, # 使用合适的模型版本 max_tokens1000, systemsystem_prompt, messages[ {role: user, content: user_query} ] ) # 4. 解析Claude的回复 assistant_response message.content[0].text print(Claude的回复可能是JSON或文本:) print(assistant_response) # 5. 假设Claude返回了JSON格式的工具调用请求 import json try: tool_call json.loads(assistant_response) if tool_call.get(tool) nmap_scan: input_data tool_call.get(input) # 6. 在实际的技能执行环境中这里会路由到对应的 execute_nmap_scan 函数 scan_result execute_nmap_scan(input_data) print(\nNmap扫描结果:) print(scan_result) # 7. 将结果反馈给Claude进行后续分析多轮对话 # ... 将 scan_result 作为新的 user 或 assistant 消息继续对话 except json.JSONDecodeError: # Claude直接进行了文本回复没有调用工具 print(Claude选择了直接回答。)这个示例清晰地展示了人机协作的流程用户用自然语言提问 - AI理解意图并选择技能 - AI输出结构化的调用请求 - 后端执行技能 - 结果返回给AI进行总结或下一步决策。4. 完整实战构建一个简易的漏洞扫描AI助手现在我们将利用Anthropic-Cybersecurity-Skills项目中的多个技能构建一个能够接受自然语言指令自动执行扫描和漏洞查询的AI助手。假设项目已提供了nmap_scan和cve_lookup两个技能。4.1 项目结构设计我们创建一个新的项目目录来组织我们的AI助手。my_cybersecurity_agent/ ├── skills/ # 存放从原项目链接或复制的技能 │ ├── nmap_scan/ # Nmap扫描技能包 │ └── cve_lookup/ # CVE查询技能包 ├── agent_core.py # AI Agent核心逻辑 ├── skill_registry.py # 技能注册与管理 ├── requirements.txt └── .env # 存储环境变量如API KEY4.2 安装与注册技能首先确保技能包可用。如果原项目技能包是可安装的Python包我们可以用pip install -e .进行开发模式安装。# 在 my_cybersecurity_agent 目录下 # 安装 nmap_scan 技能 cd skills/nmap_scan pip install -e . cd ../.. # 安装 cve_lookup 技能 cd skills/cve_lookup pip install -e . cd ../..接下来创建skill_registry.py用于集中管理和加载所有可用技能。# skill_registry.py import importlib from typing import Dict, Any, Callable class SkillRegistry: 简单的技能注册表 def __init__(self): self._skills {} # name - {description: str, function: Callable, input_schema: dict} def register_skill(self, name: str, description: str, function: Callable, input_schema: Dict[str, Any]): 注册一个技能 self._skills[name] { description: description, function: function, input_schema: input_schema } print(fRegistered skill: {name}) def get_skill(self, name: str): 根据名称获取技能信息 return self._skills.get(name) def list_skills(self): 列出所有已注册技能 return list(self._skills.keys()) def execute_skill(self, name: str, input_data: Dict[str, Any]): 执行指定技能 skill_info self.get_skill(name) if not skill_info: raise ValueError(fSkill {name} not found.) # 这里可以添加输入数据验证根据input_schema return skill_info[function](input_data) # 创建全局注册表实例 registry SkillRegistry() # 动态导入并注册技能假设技能包提供了标准的导出方式 # 例如技能包可能有一个 __skill__ 模块属性 try: from nmap_scan import __skill__ as nmap_skill_module registry.register_skill( namenmap_skill_module.name, descriptionnmap_skill_module.description, functionnmap_skill_module.execute, input_schemanmap_skill_module.input_schema ) except ImportError as e: print(fWarning: Failed to load nmap_scan skill: {e}) try: from cve_lookup import __skill__ as cve_skill_module registry.register_skill( namecve_skill_module.name, descriptioncve_skill_module.description, functioncve_skill_module.execute, input_schemacve_skill_module.input_schema ) except ImportError as e: print(fWarning: Failed to load cve_lookup skill: {e}) # 也可以手动注册如果技能没有标准导出 # def manual_cve_lookup(input_data): # # ... 实现代码 # registry.register_skill(cve_manual, Look up CVE details, manual_cve_lookup, {cve_id: string})4.3 实现AI Agent核心创建agent_core.py这里我们使用anthropicSDK 并实现一个简单的工具调用循环。# agent_core.py import os import json import re from anthropic import Anthropic from skill_registry import registry class CybersecurityAgent: def __init__(self, modelclaude-3-5-sonnet-20241022): self.client Anthropic(api_keyos.environ.get(ANTHROPIC_API_KEY)) self.model model self.conversation_history [] def _build_system_prompt(self): 构建系统提示词包含所有可用技能的描述和调用格式 skills_text [] for skill_name in registry.list_skills(): skill_info registry.get_skill(skill_name) desc skill_info[description] params json.dumps(skill_info[input_schema], indent2) skills_text.append(fTool Name: {skill_name}\nDescription: {desc}\nParameters Schema:\n{params}) skills_block \n\n.join(skills_text) system_prompt fYou are a professional cybersecurity analyst AI assistant. You have access to the following tools (skills) to help with security tasks: {skills_block} **CRITICAL INSTRUCTION:** When you decide to use a tool, you MUST output a JSON object in your response, and ONLY that JSON object, with the following structure: {{ tool: tool_name, input: {{ ... }} // 对应工具的参数对象 }} Do not include any other text, explanation, or markdown formatting before or after the JSON. The user will parse this JSON and execute the tool. If you dont need to use any tool, respond with normal, helpful text. return system_prompt def _extract_tool_call(self, response_text: str): 尝试从AI回复中提取JSON格式的工具调用。 # 使用正则表达式查找JSON块 json_pattern r\{.*?tool.*?input.*?\} match re.search(json_pattern, response_text, re.DOTALL) if match: try: return json.loads(match.group()) except json.JSONDecodeError: pass return None def chat_cycle(self, user_input: str): 处理一轮用户输入可能包含多轮工具调用。 self.conversation_history.append({role: user, content: user_input}) max_iterations 5 # 防止无限循环 for i in range(max_iterations): # 准备消息历史 messages_for_api [] # 添加系统提示词通常只在第一条消息 if i 0: messages_for_api.append({role: system, content: self._build_system_prompt()}) # 添加历史对话简化处理实际可能需截断 for msg in self.conversation_history[-6:]: # 保留最近几轮 messages_for_api.append(msg) # 调用Claude API response self.client.messages.create( modelself.model, max_tokens1500, messagesmessages_for_api ) assistant_response response.content[0].text print(f\n[AI Response {i1}]: {assistant_response[:200]}...) # 打印部分 # 尝试提取工具调用 tool_call self._extract_tool_call(assistant_response) if tool_call: tool_name tool_call.get(tool) tool_input tool_call.get(input, {}) print(f\n[Detected Tool Call]: {tool_name} with input {tool_input}) # 执行工具 try: tool_result registry.execute_skill(tool_name, tool_input) # 将工具执行结果作为新的用户消息让AI继续处理 result_message fThe tool {tool_name} returned the following result:\n{tool_result}\n\nPlease analyze this result and respond to the users original request. self.conversation_history.append({role: user, content: result_message}) print(f[Tool Result Received, length: {len(str(tool_result))}]) # 继续循环让AI基于结果生成回复 except Exception as e: error_message fError executing tool {tool_name}: {str(e)} self.conversation_history.append({role: user, content: error_message}) print(f[Tool Execution Error]: {error_message}) else: # AI没有调用工具直接返回文本回复 self.conversation_history.append({role: assistant, content: assistant_response}) return assistant_response # 返回最终答案 return Reached maximum iteration limit. The analysis may be incomplete. # 简易的聊天循环 if __name__ __main__: agent CybersecurityAgent() print(Cybersecurity AI Agent 已启动。输入 quit 退出。) while True: try: user_input input(\nYou: ) if user_input.lower() in [quit, exit, q]: break response agent.chat_cycle(user_input) print(f\nAssistant: {response}) except KeyboardInterrupt: break print(会话结束。)4.4 运行与验证安装依赖确保安装了anthropic和技能包依赖。pip install anthropic # 其他依赖根据技能包要求安装如 pip install requests 用于CVE查询设置环境变量在项目根目录创建.env文件或直接在终端导出。ANTHROPIC_API_KEYsk-ant-...运行Agentpython agent_core.py进行测试场景一端口扫描You: 扫描一下 scanme.nmap.org 的常用端口看看有什么服务。AI应该会输出一个调用nmap_scan工具的JSON。后台执行后会将扫描结果文本返回给AIAI最终会生成一个总结性回复如“扫描发现端口22(SSH)、80(HTTP)开放...”。场景二漏洞查询You: 帮我查一下CVE-2021-44228的详细信息。AI会调用cve_lookup技能查询并返回该Log4j漏洞的详情。场景三组合任务如果AI能处理You: 先扫描一下 example.com 的80和443端口如果发现是nginx服务再查一下nginx近两年有没有高危漏洞。这是一个多步骤任务考验AI的规划能力。我们的简易Agent通过循环机制可以依次执行扫描和查询。4.5 结果说明通过这个实战我们成功构建了一个能够理解自然语言安全需求、自动调用底层工具技能并整合结果的AI助手原型。它的核心优势在于降低了使用门槛安全分析师可以用对话的方式操作专业工具。提升了效率AI可以自动解析工具输出提炼关键信息无需人工在命令行和浏览器间切换。可扩展性强新的安全工具或检查项只需按照agentskills.io规范封装成技能即可无缝接入现有Agent。5. 常见问题与排查思路在开发和运行此类AI网络安全智能体时你可能会遇到以下典型问题。问题现象可能原因排查思路与解决方案ModuleNotFoundError: No module named nmap_scan1. 技能包未正确安装。2. 虚拟环境未激活或不对。3.PYTHONPATH未包含技能目录。1. 进入技能目录执行pip install -e .。2. 确认终端处于正确的虚拟环境中 (which python)。3. 在代码开头通过sys.path.append(‘path/to/skill’)临时添加路径。Anthropic API 调用失败错误码 401/4031. API密钥未设置或错误。2. 密钥权限不足或已失效。3. 环境变量未在当前Shell生效。1. 检查echo $ANTHROPIC_API_KEY(Linux/macOS) 或echo %ANTHROPIC_API_KEY%(Windows)。2. 前往Anthropic控制台验证密钥状态和额度。3. 重启终端或IDE或直接在代码中os.environ[‘ANTHROPIC_API_KEY’] ‘key’临时设置。AI不调用工具总是直接回答1. 系统提示词System Prompt不够强制或清晰。2. 模型版本可能影响工具使用倾向。3. 用户查询过于简单AI认为无需工具。1. 强化提示词使用“MUST”、“ONLY JSON”等词并给出严格的输出格式示例。2. 尝试使用更新的模型如claude-3-5-sonnet通常比claude-3-haiku更擅长遵循复杂指令。3. 在提示词中明确“你必须使用工具来完成用户请求”。工具调用JSON解析失败1. AI的输出包含了额外的文本或Markdown格式。2. JSON格式不正确缺少引号、括号。1. 优化_extract_tool_call函数使用更健壮的JSON解析如json5库容忍小错误。2. 在提示词中强调“输出必须且只能是纯JSON不能有任何其他字符”。工具执行超时或卡住1. 底层命令执行时间过长如全端口扫描。2. 网络请求超时。3. 技能代码存在死循环。1. 在技能执行函数中设置超时参数如subprocess.run(..., timeout60)。2. 为网络请求添加超时设置。3. 对用户输入的目标范围或参数进行限制避免过大的操作。技能执行返回错误如nmap not found1. 系统未安装该命令行工具。2. 工具不在系统的PATH环境变量中。1. 根据技能文档安装必备工具如sudo apt install nmap。2. 在技能代码中使用绝对路径或检查并修正系统PATH。6. 最佳实践与工程建议将AI技能库用于生产环境或严肃的安全工作流时需要考虑以下工程化因素安全第一输入验证与净化在技能执行函数中必须对所有用户输入来自AI进行严格的验证和净化防止命令注入、路径遍历等攻击。避免使用shellTrue。权限最小化运行AI Agent的进程应具有尽可能低的系统权限。不要以root身份运行。网络隔离考虑在隔离的网络环境如Docker容器、专用虚拟机中运行可能执行扫描或探测任务的Agent避免对生产网络造成意外影响。审计日志记录所有AI发起的工具调用、输入参数和执行结果便于事后审计和问题追溯。技能设计规范清晰的描述技能描述应准确、无歧义让AI能准确判断使用场景。完备的模式定义input_schema应使用标准的JSON Schema明确参数类型、是否必需、默认值及枚举值这能极大提高AI调用的准确性。结构化的输出尽量让技能返回结构化的JSON数据而非纯文本。这有利于AI解析和后续技能链的自动化处理。例如Nmap扫描结果可以解析为{“open_ports”: […], “services”: […]}的格式。错误处理技能函数应有完善的异常捕获并返回对人类和AI都友好的错误信息而不是任由Python异常抛出。Agent性能与稳定性上下文管理Claude等模型有上下文长度限制。需要设计机制来修剪或总结过长的对话历史和工具执行结果避免超出限制。失败重试与降级对于暂时性的API或工具调用失败应实现重试逻辑。对于关键技能失效应有降级方案如返回缓存数据或提示用户手动操作。成本控制监控Anthropic API的调用量和费用。对于内部工具可以考虑使用开源模型通过LiteLLM等网关作为备选以降低成本。与现有工作流集成作为聊天机器人集成到Slack、Microsoft Teams或钉钉等企业协作平台安全团队可以随时随地通过自然语言交互获取信息。作为自动化流程节点在SOAR安全编排、自动化与响应平台中将AI Agent作为一个智能决策节点用于分析告警、判断误报、推荐处置动作。生成报告让AI Agent在完成一系列调查后自动生成结构化的安全事件报告或漏洞评估摘要。持续迭代与评估技能测试集为每个技能建立测试用例确保功能正确性。端到端评估设计典型的用户查询场景评估AI Agent最终输出的准确性和有用性。反馈循环建立机制收集真实用户的反馈用于优化提示词和技能设计。通过mukul975 / Anthropic-Cybersecurity-Skills这个项目我们获得了一个高起点的网络安全AI技能库。真正的价值在于你如何利用它结合上述最佳实践构建出贴合自身业务、安全可靠且智能高效的网络安全辅助系统。从简单的信息查询助手开始逐步扩展到复杂的自动化调查工作流AI正在成为安全工程师力量倍增器的道路上稳步前进。