分享一个实验性的 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 的内容,分享也渐渐的变得没意思了。

相关推荐
doiito1 天前
【Agent Harness】Gliding Horse 的 L2 作战地图:让多 Agent 协作从“摸黑”变成“透明”
ai·rust·架构设计·系统设计·ai agent
xiezhr1 天前
逛GitHub发现一款免费带有AI功能的数据库管理工具DBX
ai·开源软件·自然语言·数据库管理工具
垚森3 天前
我用 GLM-5.2 造了个炸裂主题后台:16 套主题随心切,可在线体验
ai·react
doiito3 天前
【Agent Harness】Gliding Horse 工具结果压缩体系:如何用“指针”驯服上下文膨胀
ai·rust·架构设计·系统设计·ai agent
doiito4 天前
【Agent Harness】Gliding Horse 上下文动态感知与智能压缩:让 Agent 真正“听得进”每一句话
ai·rust·架构设计·系统设计·ai agent
探索云原生5 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
Zy宇5 天前
从养 OpenClaw 到养社区 AI:一套 Multi-Agent 社区的设计思路
人工智能·ai
doiito5 天前
【Agent Harness】Gliding Horse 记忆系统深度剖析:像 CPU 一样思考的 AI 记忆架构
ai·rust·架构设计·系统设计·ai agent
mobility6 天前
免费AI视频生成器:我如何用零成本做出带旁白字幕的多场景AI视频
ai·vibe coding
doiito6 天前
【Agent Harness】Gliding Horse 给 Agent OS 装上双曲空间引擎与默克尔树边云同步
ai·rust·架构设计·系统设计·ai agent