分享一个实验性的 DAG 流程审计 Skill

背景

随着 AI 能力的不断提升,AI 在代码审计领域已经有了一席之地。我也尝试过去设计不同方法论的审计 skill 去让大模型从不同的角度对代码进行审计,但之前的审计流程编排大多都是串联的,或者说是大阶段串联,每个阶段内部并联执行。这种编排方式也有一定的局限性,当你想设计更为灵活和复杂的流程时,流程梳理起来会变得"糊成一团",且容易发生耦合的情况。因为每个环节通过文本内容指向下一个环节,在不断迭代的过程中由于缺乏框架性的设计而变得难以梳理。所以,就抱着"能不能做一个调理清晰的执行流程"这个想法,尝试性地用 DAG (有向无环图)的形式构造了一个简单的审计 Skill。

项目地址:https://github.com/ACaiSec/acai-dag-auditor

项目介绍

目前项目的内容只是为了展示架构的使用,所以比较简单,一共 5 个 node:

  1. env_setup:根据开发框架下载依赖库,完成编译
  2. project_parsing:根据编译内容以及合约代码对项目的函数调用与业务流程进行解析与总结
  3. business_flow_analysis:分析合约项目在业务流程层面的安全问题
  4. fund_flow_analysis:分析合约在资金层面的安全问题
  5. summary_output:问题去重,确认,输出漏洞报告

其中 3 和 4 是并行执行的。

每个节点首先都需要在 workflow.dag.yaml 文件中进行登记(max_parallel_nodes 为最大并行数量):

yaml 复制代码
version: 1
name: solidity_audit

runtime:
  max_parallel_nodes: 2

nodes:
  - id: env_setup
    module: nodes/env_setup

  - id: project_parsing
    module: nodes/project_parsing

  - id: fund_flow_analysis
    module: nodes/fund_flow_analysis

  - id: business_flow_analysis
    module: nodes/business_flow_analysis

  - id: summary_output
    module: nodes/summary_output

为了避免 context 占用过高,每个 node 都采用 sub-agent 的形式进行调用,调用结果通过输出文件进行返回。所以每个节点之间的关系(在 DAG 中对应 edge 的概念)根据是节点间的输入输出文档进行关联,比如:Node1 的输出文档为 node1-output.md,Node2 的输入文档也是 node1-output.md,那么就认为存在一条 Node1 --> Node2 的边。

每个节点的输入输出文档定义在节点目录下的 node.yaml 文件中实现,比如

上游节点 project_parsing 的输出内容定义为

yaml 复制代码
  outputs:
    - name: project_overview
      path: project_overview.md
      format: markdown
      description: High-level project summary, contract roles, and business flow

    - name: call_graph
      path: call_graph.yaml
      format: yaml
      description: Compressed call graph per ast_compress_template.yaml

    - name: business_flows
      path: business_flows.yaml
      format: yaml
      description: Structured function call chains for each business flow

而它的下游节点 business_flow_analysis 的输入定义,刚好为上游节点的输出。

yaml 复制代码
artifacts:
  output_dir: ./acai-dag-auditor/artifacts/business_flow_analysis/
  inputs:
    - name: project_overview
      source: upstream:project_parsing
      path: project_overview.md
      required: true
      description: Project architecture, contract roles, and business flow

    - name: business_flows
      source: upstream:project_parsing
      path: business_flows.yaml
      required: true
      description: Structured function call chains for each business flow

    - name: call_graph
      source: upstream:project_parsing
      path: call_graph.yaml
      required: true
      description: Compressed call graph with function call edges and risk annotations

当上游节点执行完毕,且目录中所输出的文件满足了下游节点的输入文件要求时,Agent 将会启动 sub-agent 执行下游节点的任务。

整个项目最核心的内容就介绍完了,接下你就可以根据你自己的需求设计和添加各种节点,搭建你自己的审计流程。

后记

因为这个项目是先有一个想法,然后根据这个想法来实现的一个 demo。可能想法并不成熟,实现过程中也有很多没考虑到的地方。就当是一个积聚内心想法的分享,也非常希望大家能够交流一下看法,毕竟现在很难找到一个交流的平台和社区,长时间的闭门造车最终也只能是在不断的自我否定中止步不前。尤其是现在 AI 时代,分享自己的想法变得困难重重,初步的浅显的想法提出来好像不如 AI 生成的质量高,深刻的详细的想法提出来下一秒就会为别人的 AI 所用。然后大家都开始用 AI 生成内容了,反正质量不会太差,你嫖走得到的也是 AI 的内容,分享也渐渐的变得没意思了。

相关推荐
xinxin_09165 小时前
Luma 视频生成 API 集成指南
ai
巴巴博一6 小时前
2026 最新:Trae / Cursor 一键接入 taste-skill 完整教程(让 AI 前端告别“AI 味”)
前端·ai·ai编程
kishu_iOS&AI6 小时前
NLP —— 英译法实例
人工智能·ai·自然语言处理
ApacheSeaTunnel7 小时前
AI 让 SeaTunnel 读源码和调试过时了吗?
大数据·ai·开源·数据集成·seatunnel·技术分享·数据同步
go不是csgo8 小时前
s01 搭建第一个对话智能体
服务器·网络·python·ai
xixixi777778 小时前
AI的“账号”与“钱包”:AWS与Circle同日出手,AI正从工具进化
人工智能·安全·ai·大模型·云计算·aws
_oP_i8 小时前
https://github.com/langgenius/dify查看设置的apikey
ai
SEO_juper10 小时前
谷歌本地 GEO 权重拆解,全域 SEO 落地实操
大数据·网络·ai·seo·跨境电商·geo·跨境电商独立站
哥布林学者10 小时前
深度学习进阶(二十二)T5:NLP任务的首次大一统
机器学习·ai