1. 从零拆解 security-audit-skill:一个给编码助手装上安全大脑的实战项目
第一次看到security-audit-skill这个标题,我的直觉是:这大概率是一个围绕“安全审计能力”做封装的项目,而且它多半不是给人直接用的独立工具,而是挂载在某个编码助手(coding agent)身上的技能模块。为什么这么判断?因为skill这个词在当下的技术语境里,几乎已经和“给 AI 助手扩展能力”画上了等号。它不像scanner、linter那样暗示一个独立运行的命令行程序,也不像framework那样指向一套完整的开发体系,skill更像是一份“能力说明书”——告诉助手在什么场景下该调用什么工具、按什么顺序执行、输出什么样的结果。
这个判断很关键,因为它直接决定了整个项目的设计走向。如果security-audit-skill是一个独立扫描器,那核心工作是写规则引擎、做 AST 解析、处理误报;但如果它是一个挂载在编码助手上的技能,那核心工作就变成了“如何把安全审计的领域知识,翻译成助手能理解、能执行、能稳定复现的指令集与工具链”。这两条路的技术栈、难点、验证方式完全不同。我倾向于后者,因为标题里的skill加上热搜词里的coding-agent,已经把答案写得很清楚了。
那这个项目到底解决什么问题?说白了,就是让编码助手在写代码、改代码、审代码的时候,不只是关注“能不能跑通”,还能关注“跑通了会不会出事”。传统的编码助手擅长的是功能实现:你说要一个登录接口,它三下五除二给你写出来,语法正确、逻辑通顺、测试能过。但这段代码有没有 SQL 注入?有没有硬编码密钥?有没有越权风险?它默认是不管的。security-audit-skill要做的,就是把这部分“安全自觉”补上,让助手在生成代码的同时,或者在你主动触发审计的时候,能像一位有经验的安全工程师那样,把风险点一个个拎出来。
适合谁来参考这个项目?我觉得有三类人。第一类是正在做编码助手产品化的开发者,你们需要给助手加安全能力,但不知道怎么把安全知识结构化地喂给模型;第二类是安全工程师,你们懂安全但不太懂怎么和 AI 助手协作,这个项目能给你们一个“把安全经验产品化”的参考路径;第三类是普通开发者,你们想在自己的工作流里加一道安全防线,但又不想引入太重的外部系统,这个技能模块的思路可以直接借鉴。不管你是哪一类,接下来的内容都会从设计思路、核心细节、实操落地、问题排查四个层面,把这个项目拆得明明白白。
2. 内容整体设计与思路拆解
2.1 为什么是“技能”而不是“工具”
在动手之前,先想清楚一个根本问题:为什么要把安全审计做成一个skill,而不是直接写一个独立的扫描脚本?这个问题我问过自己很多次,也踩过坑。早期我试过写一个独立的 Python 脚本,用正则匹配常见漏洞模式,跑一遍输出报告。结果呢?误报率高得离谱,而且完全无法理解上下文。比如它看到eval(就报警,但那段代码其实是在一个受控的沙箱里执行固定字符串,根本没有风险。独立工具最大的问题是“没有上下文”,它只能看到代码文本,看不到这段代码在整个项目里的角色、调用链、数据流向。
而skill的形态天然解决了这个问题。因为技能是挂载在编码助手上的,助手本身已经理解了整个项目的结构、依赖关系、业务逻辑。当技能被触发时,助手可以带着这些上下文去执行审计任务。举个例子,同样是eval(,助手知道这个函数是在一个内部管理后台里调用的,参数来自管理员配置而非用户输入,那它就可以判断风险等级较低,甚至直接忽略。这种“带上下文的审计”是独立工具很难做到的。
另一个原因是可组合性。编码助手的能力是不断扩展的,今天加安全审计,明天可能加性能优化,后天加代码规范检查。如果每个能力都做成独立工具,那助手就要维护一堆外部依赖,调用链路复杂,用户体验割裂。而skill的形态让这些能力可以像插件一样挂载、卸载、组合。安全审计技能可以和代码生成技能联动:生成代码后自动触发审计,发现问题直接反馈给生成环节修正。这种联动在独立工具模式下几乎不可能流畅实现。
提示:如果你正在设计类似的技能模块,一定要先想清楚“这个能力为什么必须依赖助手的上下文”。如果答案是“不依赖也能做”,那它可能更适合做成独立工具,而不是技能。
2.2 技能的核心架构:三层结构
确定了skill的形态之后,接下来要设计它的内部结构。我采用的是三层架构:触发层、执行层、输出层。这三层各司其职,又相互配合,构成了一个完整的审计闭环。
触发层负责判断“什么时候该审计”。它需要定义清晰的触发条件,比如用户显式请求审计、代码生成后自动触发、代码提交前钩子触发等。触发层的设计难点在于“平衡”:触发太频繁会干扰正常开发流程,触发太少又可能漏掉关键风险。我的做法是设置分级触发:高风险操作(如涉及认证、授权、数据查询的代码变更)强制触发,低风险操作(如纯样式调整)仅在用户主动请求时触发。
执行层是核心,负责“怎么审计”。它需要把安全审计的领域知识拆解成助手能执行的步骤。这里的关键是“结构化”。安全审计不是一句“帮我看看有没有漏洞”就能搞定的,它需要一套系统的方法论。我把它拆成了四个阶段:资产识别、威胁建模、漏洞检测、风险评估。资产识别是搞清楚这段代码涉及哪些敏感资源(数据库、文件、网络、密钥);威胁建模是分析这些资源可能面临哪些攻击路径;漏洞检测是具体检查代码中是否存在已知的漏洞模式;风险评估是结合上下文判断漏洞的实际危害等级。
输出层负责“怎么呈现结果”。安全审计的结果不能只是一堆报警,那样用户根本不知道先修哪个。我的设计是输出一份分级报告:严重、高危、中危、低危、信息五个等级,每个等级附带具体的代码位置、风险描述、修复建议、参考案例。更重要的是,输出层还要和助手的其他能力联动,比如直接生成修复补丁、或者把问题反馈给代码生成环节重新生成。
2.3 知识库的构建:把安全经验变成可执行指令
技能的核心竞争力在于知识库。一个没有知识库的安全审计技能,就像一个没有案例库的律师,只能泛泛而谈,无法给出具体判断。构建知识库的过程,本质上就是把安全工程师脑子里的经验,翻译成助手能理解、能执行的指令集。
我构建知识库的方式是“模式+上下文+决策树”。模式是具体的漏洞特征,比如 SQL 注入的模式是“用户输入直接拼接进 SQL 语句”;上下文是判断这个模式是否真正构成风险的环境信息,比如“这个输入是否经过了参数化处理”“这个接口是否对外网开放”;决策树是把模式和上下文串起来的判断逻辑,比如“如果存在注入模式且输入未经过滤且接口对外网开放,则判定为高危”。
这个知识库不是一次性写完的,而是在实际使用中不断迭代。每遇到一个新的漏洞案例,就把它抽象成模式加入知识库;每发现一次误报,就调整决策树的判断条件。我大概花了三个月时间,才让知识库的准确率达到可用的水平。这个过程很枯燥,但必不可少。
2.4 与编码助手的集成方式
技能最终要挂载到编码助手上,集成方式直接决定了用户体验。我试过三种集成方式,各有优劣。
第一种是指令式集成:用户通过特定指令触发审计,比如输入/security-audit。这种方式最直接,用户控制权最大,但依赖用户主动触发,容易漏掉风险。第二种是钩子式集成:在代码生成、代码提交等关键节点自动触发审计。这种方式覆盖率高,但可能干扰正常流程,用户可能觉得烦。第三种是混合式集成:高风险操作自动触发,低风险操作手动触发,兼顾覆盖率和体验。
我最终选择了混合式。具体来说,当助手生成涉及认证、授权、数据库操作、文件操作、网络请求的代码时,自动触发审计;其他情况仅在用户主动请求时触发。这个策略在实际使用中效果不错,既没有漏掉关键风险,也没有让用户觉得被频繁打扰。
3. 核心细节解析与实操要点
3.1 审计规则的编写规范
审计规则是知识库的基本单元,每一条规则都对应一类安全风险。编写规则时,我遵循一套固定的模板,确保规则的可读性、可维护性、可扩展性。一条完整的规则包含以下字段:
| 字段名 | 说明 | 示例 |
|---|---|---|
| rule_id | 规则唯一标识 | SEC-SQL-001 |
| rule_name | 规则名称 | SQL 注入检测 |
| severity | 默认风险等级 | high |
| pattern | 漏洞模式描述 | 用户输入直接拼接进 SQL 语句 |
| context_check | 上下文判断条件 | 输入未经过参数化处理 |
| false_positive | 常见误报场景 | 内部管理后台的固定查询 |
| fix_suggestion | 修复建议 | 使用参数化查询或 ORM |
| reference | 参考资料 | 内部安全编码规范第 3.2 节 |
这个模板看起来简单,但每个字段都有讲究。pattern不能写得太宽泛,否则误报率会飙升;也不能写得太具体,否则会漏掉变种。我的经验是,pattern描述“行为特征”而不是“代码文本”,比如描述“用户输入直接拼接进 SQL 语句”而不是“代码里出现了+和SELECT”。context_check是降低误报的关键,它需要结合助手的上下文理解能力,判断这个模式是否真的构成风险。
注意:规则编写最容易犯的错误是“只写模式不写上下文”。这样写出来的规则,在独立工具里可能勉强能用,但在技能模式下就是浪费了助手的上下文能力,误报率会很高。
3.2 触发条件的精细设计
触发条件的设计直接决定了技能的“存在感”。设计得太敏感,用户会觉得烦;设计得太迟钝,用户会觉得没用。我经过多轮调整,最终确定了一套分级触发策略。
强制触发场景包括:代码中出现了新的数据库查询语句、新的文件读写操作、新的网络请求、新的认证授权逻辑、新的密钥或凭证处理。这些场景的共同特点是“一旦出错,后果严重”,所以必须审计。
建议触发场景包括:代码中出现了用户输入处理、序列化反序列化、加密解密、日志记录。这些场景风险相对较低,但也不容忽视,所以助手会在生成代码后提示用户“建议进行安全审计”。
手动触发场景包括:用户主动请求审计、代码提交前钩子、定期扫描。这些场景由用户或流程控制,技能不主动介入。
这套策略在实际使用中,强制触发的误报率控制在 15% 以内,建议触发的用户采纳率在 60% 左右,整体体验比较平衡。
3.3 上下文信息的采集与利用
技能相比独立工具的最大优势就是上下文。但上下文不会自动出现,需要主动采集和利用。我在技能中定义了四类上下文信息,每类都有对应的采集方式和利用策略。
项目结构上下文:通过分析项目目录、依赖文件、配置文件,了解项目的技术栈、框架、第三方库。这些信息用于判断某些模式是否真的构成风险。比如同样是eval(,在 Python 项目里风险较高,在 JavaScript 项目里如果配合了 CSP 可能风险较低。
调用链上下文:通过分析函数的调用关系,了解当前代码在整个数据流中的位置。比如一个 SQL 查询函数,如果它只被内部管理后台调用,风险等级可以降低;如果它被对外 API 调用,风险等级就要提高。
数据流上下文:通过分析变量的赋值、传递、使用路径,了解数据从哪里来、到哪里去。这是判断注入类漏洞的关键。如果用户输入经过了参数化处理、白名单过滤、类型转换,那即使它最终进入了 SQL 语句,也不构成注入。
业务上下文:通过分析代码所在的业务模块、注释、文档,了解这段代码的业务角色。比如支付模块的代码,安全要求天然比日志模块高。
采集这些上下文需要助手具备一定的代码理解能力。好在现代编码助手在这方面已经比较成熟,技能只需要定义“需要哪些上下文”和“如何利用这些上下文”,具体的采集工作可以交给助手完成。
3.4 风险评估的量化模型
发现漏洞只是第一步,判断漏洞的严重程度才是决定用户是否优先修复的关键。我设计了一个简单的量化模型,从四个维度评估风险:
- 可利用性:攻击者利用这个漏洞的难易程度。需要复杂条件才能触发的漏洞,评分低;直接可触发的漏洞,评分高。
- 影响范围:漏洞被利用后影响的数据或功能范围。只影响单个用户的漏洞,评分低;影响全部用户或核心数据的漏洞,评分高。
- 数据敏感性:涉及的数据敏感程度。公开数据评分低,个人隐私、密钥、支付数据评分高。
- 现有防护:系统是否已有其他防护措施。有 WAF、有权限校验、有加密的,评分低;完全裸奔的,评分高。
每个维度按 1-5 分打分,最后加权求和,映射到五个风险等级。这个模型不追求绝对精确,但能保证排序合理,让用户知道先修哪个。
4. 实操过程与核心环节实现
4.1 环境准备与技能挂载
动手实现之前,先确认你的编码助手支持技能扩展。目前主流的编码助手大多提供了技能或插件机制,具体名称可能不同,但核心思路一致:你提供一份技能描述文件,助手在运行时加载它。技能描述文件通常包含技能名称、触发条件、执行逻辑、依赖工具等字段。
我以一份通用的技能描述文件为例,说明挂载过程。首先创建技能目录,通常放在助手的技能目录下,比如skills/security-audit-skill/。然后在目录下创建主描述文件skill.yaml,内容大致如下:
name: security-audit-skill version: 1.0.0 description: 对代码进行安全审计,识别常见漏洞并给出修复建议 triggers: - type: code_generation condition: contains_any(["sql", "query", "auth", "file", "http", "crypto"]) - type: user_command command: "/security-audit" - type: pre_commit enabled: true capabilities: - code_analysis - context_awareness - report_generation knowledge_base: ./knowledge/这份描述文件告诉助手:这个技能叫什么、什么时候触发、需要什么能力、知识库在哪里。挂载完成后,助手在启动时会加载这个技能,并在满足触发条件时调用它。
提示:不同助手的技能描述格式可能不同,但核心字段大同小异。建议先查阅你所使用助手的官方文档,确认具体的字段名称和格式要求。
4.2 知识库的初始化与填充
知识库是技能的核心资产,初始化时不需要追求大而全,先覆盖最常见的几类漏洞即可。我建议从以下五类开始:注入类(SQL 注入、命令注入、模板注入)、认证授权类(弱密码、越权、会话固定)、敏感数据类(硬编码密钥、日志泄露、不安全存储)、加密类(弱算法、不当填充、密钥管理)、配置类(调试模式、默认配置、错误信息泄露)。
每类漏洞先写 3-5 条规则,覆盖最常见的场景。比如 SQL 注入,先写三条规则:用户输入直接拼接、用户输入经过简单转义但转义不完整、ORM 使用不当导致注入。这三条规则能覆盖大部分实际场景。
知识库的文件组织方式我推荐按漏洞类型分目录,每个目录下按规则一条一个文件。这样便于维护和扩展。文件格式用 YAML 或 JSON 都可以,YAML 可读性更好,JSON 解析更方便。我选的是 YAML,因为规则需要经常人工审阅和修改。
4.3 审计流程的完整实现
审计流程是技能的执行核心,我把它拆成了六个步骤,每个步骤都有明确的输入、处理、输出。
第一步:代码解析。助手读取目标代码,解析成抽象语法树或中间表示。这一步依赖助手自身的代码理解能力,技能只需要指定“解析哪些文件、解析到什么粒度”。
第二步:资产识别。遍历解析结果,识别出敏感资产:数据库操作、文件操作、网络请求、认证逻辑、密钥使用。每个资产记录其位置、类型、相关变量。
第三步:模式匹配。用知识库中的规则去匹配资产,找出可能存在风险的代码片段。这一步是“粗筛”,宁可多报不可漏报,后续步骤会过滤误报。
第四步:上下文验证。对每个匹配到的风险点,采集上下文信息,验证是否真正构成风险。比如匹配到 SQL 注入模式,就检查输入是否经过参数化处理、调用链是否来自外部、数据流是否可控。
第五步:风险评估。对确认的风险点,用量化模型评估严重程度,确定风险等级。
第六步:报告生成。把所有风险点按等级排序,生成结构化报告,附带代码位置、风险描述、修复建议、参考案例。
这六个步骤串起来,就是一个完整的审计流程。实际实现时,可以把每一步封装成一个函数或模块,便于测试和调试。
4.4 修复建议的生成策略
发现漏洞只是开始,给出可落地的修复建议才是终点。修复建议的生成策略我总结了三种:直接替换、模式改写、架构调整。
直接替换适用于修复方式明确且唯一的场景。比如硬编码密钥,直接建议“将密钥移至环境变量或密钥管理服务”。这种建议最容易被用户采纳,因为操作简单、风险低。
模式改写适用于需要调整代码结构的场景。比如 SQL 注入,建议“将字符串拼接改为参数化查询”,并给出改写前后的代码对比。这种建议需要用户理解改写逻辑,但一旦理解,修复效果最好。
架构调整适用于根因在架构层面的场景。比如越权问题,根因可能是权限模型设计不合理,单纯改代码无法根治。这种建议需要用户做较大改动,采纳率较低,但价值最高。
我的策略是:优先给直接替换建议,如果不行再给模式改写,最后才给架构调整。同时,每条建议都附带“为什么这样改”的解释,帮助用户理解背后的安全原理。
5. 常见问题与排查技巧实录
5.1 误报率居高不下怎么办
误报是安全审计技能的头号敌人。我刚开始做的时候,误报率一度超过 50%,用户根本不愿意用。排查下来,原因主要有三个:规则写得太宽泛、上下文利用不充分、风险评估过于保守。
解决误报的第一步是“收紧模式”。把pattern从“代码里出现了eval”改成“代码里出现了eval且参数来自用户输入”。这一步能砍掉大量误报。第二步是“加强上下文验证”。对每个匹配到的风险点,强制要求采集至少两类上下文信息,验证不通过的直接丢弃。第三步是“调整风险评估”。把一些实际危害较低的漏洞从“高危”降到“中危”或“低危”,减少对用户的干扰。
经过这三步调整,我的误报率从 50% 降到了 15% 左右。剩下的 15% 主要是边界情况,需要人工判断,这个比例我认为是可以接受的。
5.2 漏报问题如何排查
漏报比误报更危险,因为用户不知道有风险,就不会去修。排查漏报的思路是“反向验证”:拿一批已知有漏洞的代码,跑一遍审计,看技能能不能全部识别出来。如果有漏掉的,分析原因。
常见的漏报原因有三个:规则覆盖不全、模式匹配太严格、上下文验证误杀。规则覆盖不全需要补充规则;模式匹配太严格需要放宽条件;上下文验证误杀需要调整验证逻辑。我建议定期做这种反向验证,每次补充新规则后都跑一遍,确保没有引入新的漏报。
5.3 性能问题的优化思路
安全审计技能的性能问题主要体现在两个方面:审计耗时长、上下文采集开销大。审计耗时长通常是因为规则太多、代码量太大。优化思路是“分级审计”:先跑快速规则(模式匹配),再跑慢速规则(上下文验证),最后跑深度规则(数据流分析)。这样大部分代码只需要跑快速规则,只有少数可疑代码需要跑慢速和深度规则。
上下文采集开销大通常是因为采集范围太广。优化思路是“按需采集”:只采集与当前风险点相关的上下文,而不是全量采集。比如验证 SQL 注入时,只需要采集输入来源、处理方式、调用链,不需要采集整个项目的依赖关系。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 误报率高 | 规则太宽泛 | 检查 pattern 字段 | 收紧模式,增加上下文验证 |
| 漏报严重 | 规则覆盖不全 | 用已知漏洞代码反向验证 | 补充规则,放宽匹配条件 |
| 审计太慢 | 规则太多或代码量大 | 统计各规则耗时 | 分级审计,按需采集上下文 |
| 用户不采纳建议 | 建议不可落地 | 收集用户反馈 | 优先给直接替换建议,附带解释 |
| 触发太频繁 | 触发条件太敏感 | 统计触发次数和采纳率 | 调整触发策略,分级触发 |
| 上下文采集失败 | 助手能力不足 | 检查助手版本和配置 | 降级为无上下文模式,或升级助手 |
5.5 独家避坑技巧
做了这么久,我踩过的坑不少,这里分享几个最有价值的。
第一个坑是“追求大而全的知识库”。刚开始我想把所有漏洞类型都覆盖,结果规则写了上千条,维护成本极高,而且很多规则根本用不上。后来我改成“按需扩展”:先覆盖最常见的五类漏洞,等用户反馈需要更多类型时再补充。这样知识库始终保持精简,维护成本低,效果反而更好。
第二个坑是“忽略用户反馈”。安全审计技能的价值最终由用户评判,如果用户觉得误报多、建议不实用,那技能就是失败的。我后来加了一个反馈机制:用户可以对每条审计结果标记“有用”或“无用”,我定期收集这些反馈,用来调整规则和风险评估模型。这个机制让技能的准确率提升了不少。
第三个坑是“不做版本管理”。知识库和规则是不断迭代的,如果没有版本管理,很容易出现“改了规则导致旧问题复现”的情况。我后来给知识库加了版本号,每次修改都记录变更内容,方便回溯和对比。
注意:安全审计技能不是一劳永逸的,它需要持续迭代。建议每周花一点时间 review 审计结果和用户反馈,持续优化规则和策略。
6. 技能扩展与工作流联动
6.1 从单点审计到全流程防护
安全审计技能如果只停留在“发现问题”层面,价值是有限的。真正有价值的做法是把它嵌入到整个开发工作流中,形成“预防-检测-修复-验证”的闭环。
预防阶段,技能可以在代码生成时实时审计,发现问题直接反馈给生成环节,让助手重新生成安全的代码。检测阶段,技能可以在代码提交前自动扫描,拦截有风险的提交。修复阶段,技能可以生成修复补丁,用户一键应用。验证阶段,技能可以在修复后重新审计,确认问题已解决。
这个闭环的实现需要技能和助手的其他能力深度联动。比如修复补丁的生成,需要技能把漏洞信息和修复建议传递给代码生成能力;验证环节需要技能能够对比修复前后的代码差异。这些联动在技能架构下是可行的,但需要仔细设计接口和数据格式。
6.2 与代码审查流程的集成
代码审查是发现安全问题的传统方式,但人工审查效率低、容易漏。安全审计技能可以作为代码审查的“第一道防线”:在人工审查之前,先跑一遍自动审计,把明显的安全问题过滤掉,让人工审查聚焦在业务逻辑和架构设计上。
集成方式有两种:一种是把审计报告作为代码审查的附件,审查者参考报告进行审查;另一种是把审计结果直接嵌入代码审查工具的评论中,审查者可以在具体代码行看到风险提示。第二种方式体验更好,但需要技能和代码审查工具有较好的集成。
6.3 多语言与多框架适配
实际项目中,一个代码库可能涉及多种语言和框架。安全审计技能需要具备多语言适配能力。我的做法是“核心逻辑统一,语言适配层分离”:审计流程、风险评估、报告生成这些核心逻辑是语言无关的;模式匹配、上下文采集这些依赖语言特性的部分,做成适配层,每种语言一个适配器。
比如 SQL 注入检测,核心逻辑是“检查用户输入是否直接进入 SQL 语句”,这个逻辑对所有语言都一样。但具体怎么解析 SQL 语句、怎么追踪数据流,Python 和 Java 的实现不同,所以需要各自的适配器。这种架构让技能可以快速支持新语言,只需要写一个适配器即可。
6.4 团队协作与知识共享
安全审计技能不仅是个工具,还可以成为团队安全知识共享的载体。团队里的安全专家可以把经验写成规则,沉淀到知识库中;普通开发者在使用技能的过程中,也能通过修复建议学习安全编码规范。这种“专家写规则、全员用规则”的模式,能有效提升团队的整体安全水平。
我建议团队定期 review 知识库,把新发现的漏洞模式补充进去,把过时的规则清理掉。同时,鼓励开发者对审计结果给出反馈,形成“使用-反馈-优化”的正循环。
7. 我在实际使用中的几点体会
做security-audit-skill这个项目,最大的体会是:安全审计的本质不是“找漏洞”,而是“帮人做决策”。用户面对一段代码,他不知道有没有风险、风险有多大、要不要修、怎么修。技能的价值就是帮他回答这四个问题。所以技能的设计不能只关注“检测能力”,还要关注“表达能力”和“决策支持能力”。
另一个体会是:技能的效果高度依赖助手的上下文理解能力。如果助手对项目的理解不够深,技能就只能退化成独立工具,误报率和漏报率都会上升。所以做技能之前,先确认你的助手有没有足够的代码理解能力。如果没有,可能先做独立工具更实际。
最后分享一个小技巧:技能的知识库不要闭门造车,多参考公开的安全编码规范、漏洞库、最佳实践。这些资料是无数安全工程师经验的结晶,直接拿来用能少走很多弯路。当然,拿来之后要结合自己的项目特点做调整,不能照搬。
这个项目后续还可以往几个方向扩展:一是增加自动修复能力,不只是给建议,还能直接生成修复补丁;二是增加合规检查能力,对照行业合规标准做审计;三是增加趋势分析能力,统计项目安全状况的变化趋势,帮助团队持续改进。这些方向我都在探索中,有新的进展再和大家分享。