▲ 认识行为树工具 · 视频教程
行为树(Behavior Tree)最初是人工智能领域用于控制智能体决策逻辑的树形结构。近年来被引入自动化领域,成为一种直观、灵活的流程编排方式。
核心理念:将复杂的自动化流程拆解为一个个独立的"节点",通过树形结构组织起来,自顶向下依次执行。
行为树由三个基本要素构成:
引擎采用 Tick 机制:从根节点发起信号,沿连接向下传递,每个节点执行自身逻辑并返回 SUCCESS 或 FAILURE,父节点根据子节点结果决定下一步。
| 特性 | 标准版 | DD 版 |
|---|---|---|
| 输入方式 | PyAutoGUI 模拟 | DD64.dll 硬件模拟 |
| 应用兼容性 | 一般 | 优秀 |
| 反检测能力 | 无 | 强 |
| 使用场景 | 普通应用自动化 | 客户端自动化 |
选择建议:目标应用不检测模拟输入 → 标准版 | 需要绕过输入检测 → DD 版
drivers/VC_redist.x64.exeCtrl+N 新建行为树Space 开始运行编辑器采用三栏结构 + 工具栏:
| 操作 | 方式 |
|---|---|
| 缩放画布 | 鼠标滚轮(0.25x ~ 4.0x) |
| 平移画布 | 右键拖拽 |
| 框选节点 | 左键拖动空白区域 |
| 多选节点 | Ctrl + 单击 / Ctrl + 框选 |
| 删除节点 | 选中后按 Delete |
| 撤销 / 重做 | Ctrl+Z / Ctrl+Y |
| 重置视图 | 工具栏【重置】按钮 |
| 状态 | 说明 |
|---|---|
| ⚪ 空闲 | 未运行 |
| 🟢 闪烁 | 运行中 |
| ✅ 成功 | 执行成功 |
| ❌ 失败 | 执行失败 |
| ⏹ 已中止 | 手动停止 |
共 18 种内置节点,分为三大类别,通过颜色区分。
| 节点 | 说明 |
|---|---|
| 顺序节点 | 按序执行子节点,全部成功才返回成功 |
| 选择节点 | 依次尝试子节点,任一成功即返回成功 |
| 并行节点 | 同时执行所有子节点 |
| 随机节点 | 随机执行一个子节点 |
| 节点 | 说明 |
|---|---|
| 文字检测 | OCR 识别屏幕区域是否包含目标文字 |
| 图像匹配 | 模板匹配检测屏幕是否包含目标图像 |
| 颜色检测 | 检测屏幕区域是否包含目标颜色 |
| 数字比较 | 识别屏幕数字并与目标值比较 |
| 变量判断 | 判断黑板变量是否满足条件 |
| 节点 | 说明 |
|---|---|
| 按键 | 模拟键盘按键操作 |
| 鼠标点击 | 模拟鼠标点击操作 |
| 鼠标移动 | 移动鼠标到指定位置 / 拖拽 |
| 鼠标滚轮 | 滚轮滚动 |
| 延时 | 等待指定时间 |
| 设变量 | 设置 / 修改黑板变量 |
| 脚本执行 | 执行外部 TXT 脚本文件 |
| 代码执行 | 执行外部程序 / 代码 |
| 报警 | 播放报警音效 |
| 快捷键 | 功能 |
|---|---|
| Ctrl + N | 新建行为树文件 |
| Ctrl + O | 打开已有文件 |
| Ctrl + S | 保存当前文件 |
| Ctrl + Shift + S | 另存为 |
| Ctrl + E | 导出项目为 ZIP |
| 快捷键 | 功能 |
|---|---|
| Ctrl + Z | 撤销 |
| Ctrl + Y | 重做 |
| Ctrl + Shift + Z | 重做(备选) |
| Ctrl + C | 复制选中节点 |
| Ctrl + V | 粘贴节点 |
| Ctrl + X | 剪切节点 |
| Ctrl + D | 快捷复制 |
| Delete / Backspace | 删除选中 |
| 快捷键 | 功能 |
|---|---|
| Space | 开始运行 |
| Escape | 停止执行 |
| F10 | 开始运行(备选) |
| F12 | 停止执行(备选) |
| 操作 | 功能 |
|---|---|
| 鼠标滚轮 | 缩放画布(0.25x ~ 4.0x) |
| 右键拖动 | 平移画布 |
| 左键拖动空白 | 框选多个节点 |
| Ctrl + 单击 | 多选(追加选择) |
| Ctrl + 左键拖动 | 追加框选 |
| 单击空白 | 取消所有选中 |
drivers/VC_redist.x64.exe 安装drivers/DD64.dll 文件存在QQ群:298117299(进群密码:autodoor)
▲ 组合节点与行为树运行逻辑 · 视频教程
很多初学者会把所有节点直接挂在开始节点下面,虽然这样确实能按顺序执行,但会带来两个问题:
而使用组合节点包裹子节点后,可以提供判断逻辑——顺序节点在某一步失败时立即停止,选择节点能自动尝试备用方案。逻辑结构清晰,方便后续拓展。
行为树的运行核心是 Tick 机制。可以理解为引擎发出的一个"执行指令":
SUCCESS(成功)、FAILURE(失败)、RUNNING(运行中)条件节点(文字检测、图像匹配等)检测到返回成功,检测不到返回失败。动作节点(鼠标点击、按键等)执行完毕返回成功,出错返回失败。
组合节点本身不执行具体任务,而是接收子节点的返回值,根据返回值决定下一步操作——就像阀门控制水流的走向,这就是组合节点能够提供判断逻辑的原因。
子节点执行完毕返回结果后,父节点会根据返回值决定下一步。不同的父节点有不同的决策逻辑:
| 父节点 | 决策逻辑 | 说明 |
|---|---|---|
| 开始节点 | 失败继续 | 不管子节点返回成功还是失败,都继续执行下一个子节点 |
| 顺序节点 | 一败即停 | 子节点返回成功则继续,一旦失败立即停止并返回失败 |
| 选择节点 | 一成即停 | 子节点返回失败则继续尝试下一个,一旦成功立即停止并返回成功 |
组合节点的价值就在于提供不同的"判断策略",它们赋予了行为树真正的判断能力。
顺序节点是最常用的组合节点,按顺序依次执行子节点:全部成功才返回成功,一败即停。
例如将"文字检测 → 鼠标点击 → 延时"放到顺序节点下:检测到按钮 → 点击 → 等待,全部成功则返回成功。但如果文字检测失败,顺序节点立即停止,不再执行点击和延时。
| 参数 | 说明 |
|---|---|
| 子节点间隔 | 设置每个子节点执行完后的等待时间 |
| 失败后继续执行 | 开启后即使中间节点失败也会继续执行后续节点,相当于变为"失败继续"模式 |
并行节点同时启动所有子节点,让它们一起运行,适合需要同时完成多个独立任务或进行多路检测的场景。
| 参数 | 说明 |
|---|---|
| 成功策略:全部成功 | 所有子节点都返回成功,并行节点才返回成功。适合同时检测屏幕多个区域 |
| 成功策略:任一成功 | 只要有一个子节点返回成功就立即返回成功。适合多路检测同一目标(如同时用文字检测和图像匹配) |
选择节点的策略与顺序节点相反:一成即停。子节点返回失败就继续尝试下一个,一旦有子节点返回成功就立即停止。只有所有子节点都失败才返回失败。适合实现"多方案备选"的逻辑。
随机节点不会按固定顺序执行,而是随机选择一个子节点来执行。成功策略与并行节点一致。
| 参数 | 说明 |
|---|---|
| 成功策略 | 控制随机执行后的成功判定方式 |
| 失败继续 | 随机到失败的操作依旧能随机执行别的子节点 |
| 完全随机 | 开启后不标记已执行节点,可能重复随机到同一个;关闭后已执行的节点不会再被随机到 |
随机节点适合模拟随机行为的场景,比如随机选择不同的操作路径来避免被检测到规律。
| 节点 | 执行策略 | 一句话概括 |
|---|---|---|
| 顺序节点 | 按部就班 | 全部成功才成功,一败即停 |
| 选择节点 | 多方案尝试 | 任一成功即成功,全败才失败 |
| 并行节点 | 同时执行 | 所有子节点同时启动 |
| 随机节点 | 随机选择 | 随机挑选一个子节点执行 |
▲ 节点参数详解 · 视频教程
通用参数是大部分节点都会使用的参数,每个节点的装饰参数就是通用参数,常用于整体控制节点的运行时长、运行次数。以下表格汇总了 6 个通用参数的作用和适用范围:
| 参数名称 | 适用节点 | 默认值 | 作用说明 |
|---|---|---|---|
| 结果取反 | 条件节点 | 关闭 | 反转节点的执行结果。开启后,检测到目标返回失败,检测不到反而返回成功。最常用于"等待消失"场景,例如等待弹窗消失后再继续操作。配合选择节点还可实现 if-else 分支逻辑。 |
| 失败重试 | 条件节点、组合节点 | 0 | 节点执行失败后自动重试的次数。中间任何一次成功就立即返回,不会浪费重试次数。常用于等待界面加载等不稳定延迟场景,实现"循环直到成功"的运行流程。 |
| 超时时间 | 条件节点、组合节点、动作节点 | 0(不生效) | 为节点的执行设置最长时限。超过设定时间后立即中止任务并返回失败,用于防止循环节点导致流程阻塞,或为无限循环任务设置定时中止。注意:大于 0 即生效,触发时会无视一切逻辑强制判定失败。 |
| 检测间隔 | 条件节点 | 300ms | 条件节点检测失败后,等待该间隔再进行下一次检测。默认 300ms(每秒约检测 3 次)。间隔越短响应越快但 CPU 占用越高;间隔越长资源占用越低但响应变慢。一般场景 300ms 即可,快速响应可调至 100ms。 |
| 重复次数 | 组合节点、动作节点 | 0(不重复) | 节点执行成功后重复执行的次数。设为 N 则执行 N 次,设为 -1 则无限循环。与失败重试互补:失败重试是"失败才重复",重复次数是"成功才重复"。 |
| 重复间隔 | 组合节点、动作节点 | 100ms | 每次重复执行之间的等待时间。最常用的组合是:组合节点设置重复次数 -1 + 重复间隔 3000ms,实现每隔 3 秒无限循环执行,几乎所有持续运行的行为树都会用到。 |
💡 随机范围:这是一个可附加在多种时间参数上的特殊参数(延时时长、点击间隔、按住时长、重复间隔、拖拽时长等)。设为时长的 10%~20% 可让操作节奏产生自然波动,避免被识别为自动化操作。例如延时时长 1000ms + 随机范围 200ms,实际延时在 800~1200ms 之间随机。
将通用参数组合起来,可以实现各种常用的行为树运行逻辑。以下表格提炼了 4 种最常用的参数组合方案:
| 组合名称 | 适用节点 | 参数设置 | 运行效果 | 使用场景 |
|---|---|---|---|---|
| 无限循环监控 | 组合节点 | 重复次数 = -1 重复间隔 = 3000ms |
整个流程每隔 3 秒执行一次,无限循环 | 持续运行的行为树,如定时检测界面状态、周期性执行任务 |
| 带重试的检测 | 条件节点 | 失败重试 = 3 检测间隔 = 500ms |
失败后自动重试 3 次,每次间隔 500ms,总计最多等待 1.5s | 界面加载有延迟的场景,如等待页面跳转、元素出现 |
| 等待消失 | 条件节点 | 结果取反 = 开启 超时时间 = 10000ms |
检测不到目标才返回成功,最多等待 10 秒,超时则失败 | 等待弹窗关闭、加载动画消失、临时元素消失后继续操作 |
| 自然节奏的重复操作 | 动作节点 | 重复次数 = 10 重复间隔 = 500ms 随机范围 = 100ms |
连续执行 10 次,每次间隔在 400~600ms 之间随机波动 | 需要模拟真人操作节奏的场景,避免固定间隔被识别 |
核心原则:通用参数改变执行行为,功能参数定义执行内容,两者配合就能实现精细的流程控制。
▲ 条件节点详解(上)— 文字检测与图像匹配 · 视频教程
▲ 条件节点详解(下)— 颜色检测、数字比较与文本提取 · 视频教程
条件节点的作用是检测环境状态,然后告诉行为树"我检测到了"或者"我没检测到"。它是整个行为树感知外部环境的眼睛,没有条件节点,行为树就像一个瞎子,什么都看不到。
条件节点一共有 6 种,各有不同的检测能力:
所有条件节点都有两个共同的参数:检测区域(定义在屏幕的哪个范围进行检测)和坐标偏移(对检测到的位置进行微调)。
以下表格汇总了 6 种条件节点的参数、使用方法和适用场景:
| 节点名称 | 核心参数 | 使用方法 | 适用场景 |
|---|---|---|---|
| 文字检测 | 检测区域、关键词、语言、图像预处理模式、坐标偏移 | 设置检测区域,输入要检测的关键词,选择语言类型。支持多个关键词(逗号分隔),检测到任一关键词即返回成功。 | 检测按钮文字、状态提示、界面标签等。使用频率最高,优先考虑。 |
| 图像匹配 | 检测区域、模板路径、匹配阈值、坐标偏移 | 点击"截图"按钮框选目标图案作为模板,设置匹配阈值(建议 80~90)。阈值越高匹配越严格,可通过日志查看实际匹配度来调整。 | 检测图标、UI 元素、游戏图案等。当 OCR 无法识别时使用。 |
| 颜色检测 | 检测区域、目标颜色、容差、最小像素数 | 用吸管工具吸取目标颜色,设置容差(建议 5~10)和最小像素数。容差越大允许的颜色差异越大,最小像素数可避免误检测。 | 检测按钮变色、指示灯亮起、状态色块等对颜色变化敏感的场景。 |
| 数字比较 | 检测区域、提取模式、比较运算符、比较值 | 设置检测区域包含数字,选择提取模式(无规则/x/y/自定义),选择比较运算符(大于/小于/等于等)和比较值。 | 倒计时检测、分数判断、数量统计等需要数值判断的场景。 |
| 变量判断 | 变量名、比较运算符、比较值 | 设置要判断的变量名,选择比较运算符和比较值。用于在黑板变量系统中进行逻辑判断。 | 流程控制、状态标记、循环计数等需要逻辑判断的场景。 |
| 文本提取 | 检测区域、语言、关键词、输出方式 | 设置检测区域和语言,可选设置关键词过滤。输出方式有"全部输出"和"关键词输出"。提取的文字可供文本输入节点使用。 | 读取屏幕数值、获取提示信息、文字搬运等需要获取信息的场景。 |
选择建议:优先使用文字检测和图像匹配,它们能解决大部分问题。颜色检测和数字比较用于特定场景,文本提取用于获取信息,变量判断用于逻辑控制。
▲ 动作节点详解(上)— 键盘与鼠标操作 · 视频教程
▲ 动作节点详解(下)— 延时、脚本、代码、报警、文本输入 · 视频教程
动作节点的作用是执行操作,产生执行动作。比如按键、点击、移动鼠标、延时等等。这些操作会改变外部环境的状态。
动作节点一共有 10 种,覆盖了自动化操作的各种需求:
以下表格汇总了 10 种动作节点的参数、使用方法和适用场景:
| 节点名称 | 核心参数 | 使用方法 | 适用场景 |
|---|---|---|---|
| 按键 | 按键、动作类型、按住时长 | 选择要按下的键,动作类型有 press(按下松开)、down(按下不松)、up(松开)。down 和 up 配合可实现长按或组合键。 | 模拟快捷键、组合键(如 Ctrl+C)、长按操作等键盘输入场景。 |
| 鼠标点击 | 按钮、动作、按住时长、位置、点击次数、点击间隔 | 选择鼠标按键(左/右/中键),设置点击位置(可手动选择或使用最近检测点),点击次数设为 2 可实现双击。 | 单击按钮、双击打开、右键菜单、拖拽配合等鼠标点击场景。使用频率最高。 |
| 鼠标移动 | 起点位置、操作类型、增量移动、终点位置、移动时长 | 设置起点和终点,操作类型可选"移动"或"拖拽"。开启增量移动可用相对坐标。移动时长大于 0 时平滑移动更自然。 | 移动鼠标到目标位置、拖拽文件、滑动选择等鼠标移动场景。 |
| 鼠标滚轮 | 滚动距离、滚动次数、滚动方向 | 设置滚动距离(单位为刻度)和滚动次数。滚动方向可快速设置向上/向下/向左/向右。需实际测试感受刻度数值。 | 页面滚动、列表浏览、缩放操作等滚轮场景。 |
| 延时 | 延时时长、延时随机范围 | 设置延时时长(毫秒),随机范围可让每次延时略有不同(建议设为时长的 10%~20%),模拟更自然的操作节奏。 | 等待界面加载、操作间隔、模拟人工节奏等需要暂停的场景。 |
| 脚本执行 | 脚本路径、循环执行 | 使用脚本录制功能录制操作序列,保存为 TXT 文件后选择。脚本格式为每行一条指令(鼠标移动、点击、按键、延时)。 | 快速创建固定流程的自动化操作,录制一次反复使用。 |
| 代码执行 | 代码路径、代码类型、命令行参数、等待执行完成 | 选择代码文件,代码类型支持自动识别、Python、批处理、PowerShell。"等待执行完成"关闭后代码在后台运行。 | 调用外部程序、实现复杂逻辑、扩展内置节点无法满足的功能。 |
| 报警 | 音频文件、音量、等待播放完成 | 选择音频文件(支持 mp3、wav 等),默认使用系统报警音。设置音量和是否等待播放完成。 | 任务完成提示、异常告警、需要声音提醒的场景。 |
| 设变量 | 变量名、操作类型、变量值 | 设置变量名,选择操作类型(设置/增加/减少),输入变量值。用于在黑板变量系统中存储和修改数据。 | 循环计数、状态标记、条件判断配合等需要数据存储的场景。 |
| 文本输入 | 输入模式、输入间隔、输入前清空 | 输入模式有"文本提取值"(配合文本提取节点)、"预设文本"、"文件"。输入间隔为 0 时快速粘贴,大于 0 时逐字符输入。 | 填写表单、输入账号密码、文字搬运等文本输入场景。 |
核心原则:条件节点负责检测,动作节点负责操作,通过组合节点把它们串联起来,实现"检测→操作"的基本模式。