本文是 AiCodeAudit 的2.0 大版本更新介绍 。如果你之前了解过 1.0 版本,本文将重点介绍静态解析引擎、Web 可视化界面及结构化报告等新特性;如果你是新用户,本文将作为完整的使用指南。
一、 工具简介




AiCodeAudit 是一个基于大语言模型(LLM)的自动化代码安全审计工具。与传统的正则匹配或纯 RAG(检索增强生成)方案不同,它通过构建项目的函数级调用图 ,结合局部子图上下文进行 AI 推理,显著提升了漏洞链路的识别准确率。
核心升级点(2.0 vs 1.0):
- 多语言静态解析 :引入 Tree-sitter 引擎,支持 Python、Java、Go 等 8+ 语言的 AST 依赖提取,大幅降低对 LLM 的依赖。
- Streamlit Web 服务:提供图形化界面,支持 ZIP 项目包上传、交互式依赖图谱可视化。
- 结构化审计报告:采用 XML-like 标签格式输出,便于自动化解析与集成。
项目地址 :https://github.com/xy200303/AiCodeAudit
二、 核心架构与技术原理
2.1 为什么是"调用图"而非"全文检索"?
传统的 AI 代码审计多将代码切片后存入向量库进行相似度检索。这种方式容易丢失调用链路信息。AiCodeAudit 的核心思路是:
- 构建知识图谱:将代码库解析为基本单元(函数、方法、类),并建立它们之间的调用关系(Call Graph)。
- 局部子图审计 :针对每个疑似风险点(如 SQL 执行函数),提取其上游调用路径 (数据来源)和下游调用路径(数据处理),形成一个局部的上下文子图。
- AI 上下文推理 :将子图代码块送入 LLM,让模型基于"数据流"而非"片段"判断是否存在"外部输入 → 危险操作 → 缺少校验"的完整漏洞链。
2.2 双引擎依赖解析(Tree-sitter + LLM)
2.0 版本最大的改进在于引入了静态分析,解决了 1.0 版本完全依赖 LLM 提取依赖导致的速度慢、成本高问题。
| 引擎 | 模式 | 说明 |
|---|---|---|
| Tree-sitter (默认) | auto / ast |
对 Python、Java、Go、JS 等主流语言,优先使用 AST 解析器提取函数定义与调用关系,速度快、精度高。 |
| LLM (Agent_1) | llm / 回退 |
当静态解析失败或遇到冷门语言时,回退至大模型进行代码理解,保证兼容性。 |
三、 2.0 版本新特性详解
3.1 多语言 Tree-sitter 静态解析
在 config.yaml 中,你可以配置依赖解析引擎:
yaml
# config.yaml 示例
dependency_parse_engine: "auto" # 可选: auto, ast, llm
- auto :对已接入的语言(如
.py,.java)使用 Tree-sitter,未接入的使用 LLM。 - ast:强制使用静态解析,失败则跳过(适合纯主流语言项目)。
- llm:强制使用 LLM(兼容 1.0 行为)。
3.2 Streamlit Web 可视化界面
无需命令行操作,一键启动 Web 服务进行审计。
启动方式:
bash
streamlit run app.py
Web 功能亮点:
- 项目上传:直接上传项目 ZIP 压缩包,自动解压分析。
- 三栏式布局 :
- 分析:配置并启动审计任务。
- 结果可视化:以表格形式查看"确认风险"、"可疑风险"及"审计通过"的漏洞详情。
- 依赖可视化:查看交互式调用图谱(基于 GraphML),支持节点搜索与关系查看。
- 中文优化:修复了图谱中文乱码问题,完美支持中文项目。
3.3 结构化审计报告
2.0 版本将原本的自然语言报告升级为稳定的标签化结构,便于 CI/CD 流水线解析。
报告示例:
xml
<审计报告>
<文件>
路径: /src/user/login.py
结论: 存在风险
<漏洞>
类型: SQL注入
等级: 高危
位置: L47-L49
<代码特征>
cursor.execute("SELECT * FROM users WHERE name = '" + username + "'")
</代码特征>
<攻击向量>
攻击者控制 username 并进入 SQL 拼接语句。
</攻击向量>
<潜在影响>
可导致任意用户数据查询和认证绕过。
</潜在影响>
<修复建议>
改为参数化查询,禁止字符串拼接 SQL。
</修复建议>
</漏洞>
</文件>
</审计报告>
四、 快速开始(安装与使用)
4.1 环境准备
bash
git clone https://github.com/xy200303/AiCodeAudit.git
cd AiCodeAudit
# 方式一:使用 requirements.txt
pip install -r requirements.txt
# 方式二:使用 pyproject.toml (推荐)
pip install -e .
4.2 配置 API 密钥
复制 config.example.yaml 为 config.yaml,并修改 OpenAI 相关配置:
yaml
openai:
api_key: "your-api-key" # 必填
base_url: "https://api.openai.com/v1" # 或你的兼容接口
model: "gpt-4o" # 推荐使用 GPT-4 系列模型
timeout_seconds: 120
max_retries: 3
4.3 命令行使用(CLI)
bash
# 基本用法(使用默认演示项目)
python main.py
# 指定项目目录和输出路径
python main.py -d ./your-project -o ./audit-results -b 10
# 如果使用 pip install -e . 安装,可直接运行
aicodeaudit -d ./your-project
4.4 Web 界面使用
bash
streamlit run app.py
访问 http://localhost:8501,在侧边栏"分析"页上传 ZIP 文件即可。
五、 实战效果演示
5.1 依赖图谱(Dependency Graph)
审计完成后,会在 output/ 目录生成 .graphml 文件,Web 界面可直接渲染。你可以清晰地看到函数之间的调用关系,这是发现"跨文件漏洞"的关键。
5.2 分层审计结果
- 确认风险:高置信度漏洞,如明确的 SQLi、XSS。
- 可疑风险:存在安全隐患但需人工复核的代码。
- 审计通过:未发现明显风险的代码块(Web 界面默认折叠,避免信息过载)。
六、 总结
AiCodeAudit 2.0 解决了什么痛点?
- 精准性:通过调用图局部子图,避免了 RAG 检索中常见的"上下文缺失"问题,让 LLM 能看到完整的漏洞链路。
- 效率:Tree-sitter 静态解析将依赖提取速度提升了数个数量级,并降低了 API 调用成本。
- 易用性:Streamlit Web 界面让安全人员无需搭建开发环境即可进行代码审计。
适用场景:
- 开源组件安全评估
- 企业自研代码的 CI 集成
- 红蓝对抗中的代码审计环节
注意:AiCodeAudit 是辅助工具,其输出结果仍需专业安全人员进行最终确认。建议在测试环境中使用,避免直接用于生产环境决策。
相关链接: