前言
欢迎来到 AutoHunter 部署与使用指南!本文旨在为安全研究人员和开发者提供一份详尽的 AutoHunter 系统部署手册。AutoHunter 是一个自动化 SRC 漏洞挖掘系统,集成了 FOFA 资产测绘与 LLM 多 worker 自主挖掘/审核/情报沉淀功能,能够显著提升漏洞挖掘效率。
无论你是安全新手还是经验丰富的渗透测试人员,本指南都将帮助你快速搭建并运行 AutoHunter 系统。我们将从最基础的 Docker 部署开始,逐步深入到本地源码部署、环境变量配置、常见问题排查等各个环节,确保你能够顺利启动并使用这个强大的自动化工具。
在开始之前,请确保你已经准备好以下资源:
- 一个可用的 FOFA 账号(或 Hunter 等其他网络空间测绘引擎的 API Key)
- AI 大模型的 API Key(如 DeepSeek、通义千问等)
- 基本的命令行操作知识
- Python 3.9+ 和 Node.js 16+ 环境(如果选择本地源码部署)
让我们开始吧!
下载资源
GitHub – StanleyNull/AutoHunter: 自动化 SRC 漏洞挖掘系统:FOFA 资产测绘 + LLM 多 worker 自主挖掘/审核/情报沉淀。Powered By StanleyNull · GitHub

如何部署
要将 AutoHunter 部署到本地电脑,推荐优先使用 Docker 方式(最省心,环境隔离好),其次是 本地源码运行。以下是具体步骤:
一、Docker 部署(推荐)
项目根目录包含 Dockerfile,说明支持容器化部署,这是最简单的方式。
安装 Docker Desktop
- Windows/Mac:前往官网下载并安装 Docker Desktop。
- Linux:使用包管理器安装 docker.io 和 docker-compose。
克隆项目代码
git clone https://github.com/StanleyNull/AutoHunter.git
cd AutoHunter
配置环境变量
-
复制 .env.example 为 .env
cp .env.example .env
-
编辑 .env 文件,填入你的 API Key、数据库地址、FOFA Token 等必要配置。
构建并启动容器
docker compose up –build -d
若无 docker-compose.yml,可手动构建镜像并运行:
docker build -t autohunter .
docker run -d –name autohunter -p 8000:8000 –env-file .env autohunter
访问服务
- 前端页面:http://localhost:8000(端口根据实际配置调整)
- 后端 API:通常在 http://localhost:8000/api 或类似路径
二、本地源码部署(适合开发者调试)
安装依赖环境
- Python ≥ 3.9(项目语言占比76%)
- Node.js ≥ 16(前端 Vue 项目)
- PostgreSQL / MySQL(根据 .env 配置选择数据库)
克隆并进入项目
git clone https://github.com/StanleyNull/AutoHunter.git
cd AutoHunter
安装 Python 依赖
pip install -r requirements.txt
安装前端依赖并构建
cd frontend
npm install
npm run build
cd ..
配置环境变量
- 同 Docker 部署步骤,复制并编辑 .env 文件。
- (这步不清楚的可以看翻到后面,我写了两种方法)
初始化数据库
解释:这条命令会自动检测数据库变化并更新表结构。如果看到类似 INFO [alembic.runtime.migration] Context impl SQLiteImpl 或 Running upgrade 的字样且没有报错,就说明成功了。(若有报错,可往后翻,有详细解决办法)
# 或
alembic upgrade head # Flask + SQLAlchemy 项目
启动服务
AutoHunter 是前后端分离的架构,你需要分别启动后端和前端。请打开两个终端窗口(或者在一个终端里分步操作):
1. 启动后端 (核心服务)
这一步负责调用 AI 和 FOFA 接口。(若报错,往后翻,有详细解决方法)
确保终端路径在 E:\\desktop\\AutoHunter (项目根目录)。
输入以下命令并回车:
uvicorn main:app –reload
成功标志:看到类似 Uvicorn running on http://127.0.0.1:8000 的绿色字样,且没有红色报错。
2. 启动前端 (网页界面)
这一步让你能通过浏览器访问工具。
现在打开浏览器,访问前端终端里显示的那个地址(通常是 http://localhost:5173),你应该就能看到 AutoHunter 的登录或主界面了!
🚀 开始使用

不要关闭上面的后端终端,新开一个终端窗口。
先进入前端文件夹:
cd frontend
启动开发服务器:
npm run dev
成功标志:看到 Local: http://localhost:5173/ (端口号可能是 5173 或 3000)。
✅ 你现在可以做的下一步操作:
点击顶栏「新建」按钮(截图中右上角“任务”按钮旁边应该有个“+”或“新建”入口)
(我上面那个夜间模式的截图是还没认证的)要在令牌输入一开始.env文件中设置的密码认证了才会显示,(若存在疑问,可以往后翻,有详细解决步骤)
,尝试创建第一个漏洞挖掘任务。 观察控制台:按 F12 打开浏览器开发者工具 → 切换到 Network(网络)标签页 → 点击“新建”或任何按钮时,看是否有请求发送到 http://127.0.0.1:8001。
- 如果看到 200 状态码 → 前后端通信正常!
- 如果看到红色报错(如 CORS、404、500)→ 别慌,往后翻,我帮你定位问题。
#问题原因解决 1 看不到「新建任务」按钮 未认证,authRoleRef !== 'full' 输入令牌登录 2 FOFA 报「不符合规范」 FOFA 账号是注册用户,无 API 配额(0/0) 换用 Hunter 等其他免费引擎 3 API 请求 404 Vite 代理端口写错(8000),且该端口上跑的是别的程序 改用 18800 端口 4 API 请求 500 后端跑在 8000,Vite 代理指向 18800(空端口) 统一端口为 18800
测试后端接口:打开 http://127.0.0.1:8001/docs,看看 FastAPI 自动生成的 Swagger 文档里有没有 /tasks 或 /create 之类的接口,可以手动点“Try it out”测试一下。
💡 小提醒:
第二种本地源码方式如何部署环境变量
"复制并编辑 .env 文件"听起来很专业,其实操作非常简单。你可以把它理解为给软件填写“账号密码”和“设置”的过程。
因为项目作者不能把他的私人密钥公开,所以他提供了一个模板文件(.env.example)。你需要把这个模板复制一份,改个名字,然后填入你自己的信息,程序才能跑起来。
以下是针对 Windows 和 Mac 用户的“保姆级”操作教程:
第一步:找到文件
在你克隆下来的 AutoHunter 文件夹里,你会看到两个长得很像的文件:
第二步:复制并重命名(二选一)
方法 A:使用命令行(最快,推荐)
如果你已经打开了终端(Terminal / CMD / PowerShell)并且停留在项目目录下,直接运行这一行命令:
-
Windows (PowerShell):
copy .env.example .env
-
Mac / Linux:
cp .env.example .env
运行完后,文件夹里会多出一个叫 .env 的新文件。
方法 B:手动操作(鼠标流)
第三步:编辑内容(填空)
这个 .env 文件虽然看起来很长,但其实你只需要关注最前面的几个核心配置,后面的大部分参数保持默认即可。
-
根据文件开头的注释提示,我为你整理了“三步极简配置法”:
第一步:配置 AI 大模型(必填)
这是整个系统的大脑,不填这个程序无法运行。 找到文件开头的 【必填】AI / LLM 通道 区域,默认已经帮你选好了 DeepSeek,你只需要填入你的 API Key:

-
我是用的阿里云的api,操作步骤网站上写的很详细了,我就不多说了



💡 提示:如果你没有 Key,可以去 DeepSeek 开放平台注册获取。如果你用的是其他模型(如通义、Kimi),请修改对应的 BASE_URL 和 MODEL。
第二步:配置 FOFA 测绘 Key(强烈推荐)
这个工具是用来自动搜集目标资产的,如果不填,你只能手动录入目标,会失去很多自动化功能。

找到 【推荐】FOFA 网络空间测绘 Key 区域:

# 👉 【在这里填入你的 FOFA Key】
FOFA_KEY=你的FOFA_Key
下面的保持留空即可
FOFA_BASE_URL=
FOFA_ALLOWED_HOSTS=💡 提示:去 FOFA 官网 (fofa.info) 登录个人中心(或者直接访问网络空间测绘,网络空间安全搜索引擎,网络空间搜索引擎,安全态势感知 – FOFA网络空间测绘系统),复制你的 API Key 填进去。

第三步:配置访问控制令牌(保护你的控制台)
为了防止别人偷偷访问你的本地服务,强烈建议设置一个访问密码。
找到 【强烈建议】访问控制令牌 区域:
# 👉 【在这里填入一个足够长的随机字符串作为密码】
AUTOHUNTER_API_TOKEN=MySuperSecretPassword123!
下面两个只读和观摩权限,本地自己用可以留空
AUTOHUNTER_READ_TOKEN=
AUTOHUNTER_OBSERVER_TOKEN=🛑 剩下的需要改吗?
完全不需要! 文件里剩下的 服务监听、内置应用层 WAF、Worker 挖掘预算、并发与线程池 等几百行参数,作者已经为你调好了默认值,直接保持原样,千万不要去动它们。
第四步:保存
填好后,直接按 Ctrl + S (Windows) 或 Command + S (Mac) 保存,然后关掉文件。
确保文件名是 .env(不要变成 .env.txt)。
确认无误后,你就可以回到上面
打开终端执行 python manage.py migrate 开始启动啦!
初始化数据库常见问题
问题1:
这个错误是因为 Alembic 找不到迁移脚本的配置路径,通常发生在项目结构不完整或配置文件缺失时。

1. 检查项目根目录是否存在 alembic.ini 文件
- 打开你的 AutoHunter 项目文件夹(就是 E:\\desktop\\AutoHunter)。
- 确认根目录下有一个名为 alembic.ini 的文件。如果没有,说明项目初始化不完整,需要从源码重新拉取或手动创建。
2. 检查 alembic 文件夹是否存在
- 在根目录下,应该有一个名为 alembic 的文件夹(注意不是 alembic.ini)。
- 这个文件夹里必须包含 env.py 和 versions/ 子文件夹。如果缺少,说明迁移环境未初始化。
✅ 修复方法
如果上述文件缺失,你需要重新初始化 Alembic 环境:
# 在项目根目录执行
alembic init alembic
这会创建 alembic.ini 和 alembic/ 文件夹。
然后再次运行:
alembic upgrade head
⚠️ 特别注意
- 不要手动删除 alembic 文件夹:它包含数据库版本历史,删了会导致数据丢失。
- 如果项目是克隆的 Git 仓库:检查 .gitignore 是否误忽略了 alembic/versions/,导致迁移文件未下载。
- Windows 路径问题:确保项目路径中没有中文或特殊字符(如 E:\\desktop\\AutoHunter 是安全的,但 E:\\桌面\\AutoHunter 可能出问题)。
完成以上步骤后,数据库初始化就能正常进行了。
问题2:
这个错误是因为 Alembic 在尝试连接数据库时,找不到你配置的数据库驱动(dialect)。从报错 sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:driver 来看,问题出在 alembic.ini 文件里的数据库连接字符串配置不正确。
按上述步骤还是报错

问题原因
Alembic 依赖 SQLAlchemy 来连接数据库。SQLAlchemy 需要知道你要连的是什么数据库(比如 SQLite、MySQL、PostgreSQL),以及用什么驱动去连。你的配置里写的是 driver,这不是一个真实的数据库类型,所以 SQLAlchemy 找不到对应的“方言包”来翻译指令。
解决方法
你需要打开项目根目录下的 alembic.ini 文件,找到 sqlalchemy.url 这一行,把它改成正确的数据库连接地址。
如果你用的是 SQLite(推荐新手使用)若不知道自己用的是什么,那大概率就是这个
这是最简单的方案,不需要安装额外的数据库软件。把 sqlalchemy.url 改成:
sqlalchemy.url = sqlite:///./app.db
这会在你当前目录下创建一个名为 app.db 的 SQLite 数据库文件。
如果你用的是 MySQL
你需要先安装 MySQL 驱动:
pip install pymysql
然后把 sqlalchemy.url 改成:
sqlalchemy.url = mysql+pymysql://用户名:密码@localhost:3306/数据库名
如果你用的是 PostgreSQL
你需要先安装 PostgreSQL 驱动:
pip install psycopg2-binary
然后把 sqlalchemy.url 改成:
sqlalchemy.url = postgresql+psycopg2://用户名:密码@localhost:5432/数据库名
修改后再次执行
保存 alembic.ini 文件后,回到终端重新运行:
alembic upgrade head
如果配置正确,这次就不会报错了,数据库表结构会自动创建成功。
启动服务常见问题
后端问题1:
这个错误 Could not import module "main" 意思是:Uvicorn 在当前目录下找不到名为 main.py 的文件。

这通常是因为你运行命令的目录不对,或者项目的主入口文件名字不叫 main.py。请按以下步骤排查:
确认主入口文件名
- 如果没有:找找有没有叫 app.py、server.py 或者 run.py 的文件?如果有,把启动命令里的 main 换成那个文件名(例如:uvicorn app:app –reload)。
- 如果有:请继续看下一步。
确认当前终端路径
虽然你的截图显示路径是 E:\\desktop\\AutoHunter,但有时候终端的“视觉路径”和“实际工作目录”不一致。 请在当前终端输入以下命令并回车,强制刷新一下路径:
cd E:\\desktop\\AutoHunter
然后再重新运行启动命令:
uvicorn main:app –reload
检查文件是否被隐藏或后缀名错误
有时候 Windows 会隐藏已知文件类型的扩展名。
- 你可能看到了一个叫 main 的文件,但它实际可能是 main.txt 或者 main.py.txt。
- 解决方法:在文件夹上方的菜单栏点击“查看”,勾选“文件扩展名”,确保那个文件确实叫 main.py。
若找不到.py文件(如图所示)根目录下确实没有 main.py,但是有一个 app 文件夹。

最后发现在app文件夹里有

现在,请回到你的终端(PowerShell),输入下面这个绝对正确的命令
uvicorn app.main:app –reload
💡 命令解析
- app (第一个):代表项目根目录下的 app 文件夹。
- main:代表文件夹里的 main.py 文件。
- :app (第二个):代表代码里定义的那个 FastAPI 实例变量名(通常都叫 app)。
执行后观察: 如果看到绿色的 Uvicorn running on http://127.0.0.1:8000,就说明后端启动成功了!
后端问题2:
若还是报错:端口被占用和模块导入路径错误。

🔧 第一步:解决 WinError 10013(端口被占)
这个错误 以一种访问权限不允许的方式做了一个访问套接字的尝试,99% 的情况是因为 8000 端口被其他程序占用了(比如之前的 Uvicorn 进程没关干净,或者微信、其他开发工具占了)。
✅ 解决方法:换一个端口启动
在终端里输入以下命令,把端口从 8000 改成 8001:
uvicorn app.main:app –reload –port 8001
如果 8001 也被占了,就换 8002、8080 等,直到成功为止。
🛠️ 进阶:找出并杀掉占用端口的进程(可选)
如果你想彻底解决,可以查一下谁占了 8000 端口:
netstat -ano | findstr :8000
你会看到一个 PID(比如 12345),然后用任务管理器或命令杀掉它:
taskkill /PID 12345 /F
📦 第二步:解决 Attribute "app" not found(模块导入错误)
这个错误 Error loading ASGI app. Attribute "app" not found in module "app",说明你运行的命令 uvicorn app:app –reload 是错的——它试图把整个 app 文件夹当作一个模块,但里面没有直接定义一个叫 app 的变量。
✅ 正确命令(再次强调)
你必须指定到具体的文件:
uvicorn app.main:app –reload
- app.main → 进入 app 文件夹,找到 main.py
- :app → 在 main.py 里找那个叫 app 的 FastAPI 实例
🚀 最终推荐启动命令(一步到位)
结合上面两点,最稳妥的启动方式是:
uvicorn app.main:app –reload –port 8001
执行后,如果看到绿色的 Uvicorn running on http://127.0.0.1:8001,就说明后端成功了!
认证令牌常见问题
问题一:看不到「新建任务」和「设置」按钮
现象:页面显示「还没有任务」,顶部导航栏没有「新建」按钮。
根本原因:前端有访问控制,App.vue:175-178 代码中写了:
<router-link v-if="authRoleRef === 'full'" to="/create" …>
<span>新建</span>
</router-link>
只有当用户的认证角色为 full 时,这两个按钮才会渲染。没有令牌 = 未认证 = 角色为 null = 按钮被隐藏。
解决:在顶部导航栏点击「令牌」按钮,输入 .env文件自己设置的密码即可。
问题二:FOFA 报「不符合规范」
现象:在任务中使用 FOFA 引擎搜索时,返回错误提示。
根本原因:FOFA 账号类型为「注册用户」(免费账号),API 配额为 0/0。FOFA 当前政策是:注册账号仅能通过 Web 界面使用,API 接口需要付费会员或单独购买 API 点数。截图显示:
身份权限: 注册用户
API查询次数余额: 0/0
API数据返回额度: 0/0

这不是账号密码错误,是账号类型本身就没有 API 调用权限。
解决:改用其他免费有 API 的引擎。已在 .env 第 65 行配置了 Hunter(奇安信)的 Key:HUNTER_KEY=ff.。。。。(自己的API)。创建任务时把引擎选为「Hunter」即可。

问题三:修改 .env 后令牌仍然无效
现象:修改了 AUTOHUNTER_API_TOKEN 为。。。(.env文件自己设置的的密码),前端输入后提示令牌无效。
根本原因:有两个叠加问题:
解决:后端重启 + 浏览器清缓存(localStorage.clear() + 删除 cookie)。
问题四:API 请求返回 404({"detail":"Not Found"})
现象:所有 /api/* 请求(/api/auth/status、/api/tasks、/api/settings 等)均返回 404。
根本原因:vite.config.js:13 中 Vite 代理配置的端口写错了:
"/api": { target: "http://localhost:8000", … }

端口 8000 上运行的不是 AutoHunter 后端,而是一个 Acunetix 漏洞扫描系统。访问 http://localhost:8000/docs 可以看到那是一个完全不同的 Swagger 文档(路由是 /api/v1/configuration、/api/v1/plugins 等)。所以 Vite 把前端请求转发到了 Acunetix 的后端,Acunetix 不认识 AutoHunter 的 /api/auth/status 等路由,返回 404。
解决:将 Vite 代理端口改为 AutoHunter 实际运行的端口(18800)。但最初改好后又出现了问题五。
问题五:API 请求返回 500(Internal Server Error)
现象:把 Vite 代理改到 18800 后,请求返回空的 500 错误(响应体为空,Content-Type 为 text/plain)。
根本原因:之前为了修复问题四,临时把 Vite 代理从 8000 改成了 18800,但后端仍然跑在 8000 端口(uvicorn app.main:app –reload –port 8000)。所以请求被转发到了 18800 端口,而那个端口上没有任何服务在监听 → 空连接 → 500 错误。
解决:将后端也改为 18800 端口启动:uvicorn app.main:app –reload –port 18800,同时 Vite 代理保持 18800。前后端端口统一后问题消失。
若F12之后
- 点击「响应」标签(在「标题」旁边)
- 里面的内容(错误堆栈)是空的 说明后端在返回响应之前就崩溃了。这不是令牌问题,是后端本身的问题。
-
1. 确认后端是否在运行
curl -s http://localhost:18800/health
或(在powershel里)
curl.exe -s http://localhost:18800/health
- 如果返回 {"ok": true} — 后端在跑
- 如果连接失败 — 后端根本没启动
- 也在浏览器里测试一下:访问 http://localhost:8000/docs (FastAPI 自带的 Swagger 文档),看看能不能打开。这样能确认后端是否真的正常启动了。
- 若浏览器访问显示:
则localhost:8000 上跑的根本不是 AutoHunter 的后端,而是另一个 Acunetix 漏洞扫描系统的后端(看 /docs 里的路由:/api/v1/configuration、/api/v1/plugins 这些)。
所以你现在有两个选择:
方案一:让 AutoHunter 跑在别的端口(推荐)
在 AutoHunter 后端的终端里,先按 Ctrl+C 停掉当前的 uvicorn,然后用一个不同的端口重新启动:
cd e:\\desktop\\AutoHunter
uvicorn app.main:app –reload –port 18800
然后把 Vite 代理也改成 18800:
但这样你就需要停掉现在跑在 8000 端口的东西。你可以先看看:
netstat -ano | findstr :8000
然后把 Vite 代理改回 8000,确保前端代理到正确的后端。
第一步:停掉当前后端,改用 18800 端口启动
在后端终端(跑 uvicorn 的那个)按 Ctrl+C 停掉,然后执行
cd e:\\desktop\\AutoHunter
uvicorn app.main:app –reload –port 18800
第二步:重启 Vite 前端
在前端终端(跑 npm run dev 的那个)按 Ctrl+C 停掉,然后执行:
cd e:\\desktop\\AutoHunter\\frontend
npm run dev
第三步:验证后端
在浏览器访问 http://localhost:18800/docs ,应该能看到 AutoHunter 的 Swagger 文档(而不是之前的 Acunetix)。
第四步:清除浏览器缓存并登录
在浏览器控制台执行:
localStorage.clear();
document.cookie = 'ah_api_token=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/';
location.reload();
然后在令牌输入框粘贴之前.env文件,你自己填入的密码
再检查一下后端运行情况:

同时请在另一个终端执行:
curl.exe -s http://localhost:18800/health

显示这样就是没问题啦,再重新启动一下服务,浏览器刷新一下

功能都完整就可以开始漏洞扫描啦!
💡 常见问题(避坑指南)
- 有些系统会隐藏以 . 开头的文件。请在文件夹上方点击“查看”,勾选“隐藏的项目”。
- 这是 Windows 新手的经典坑。记事本默认会加个 .txt 后缀。你需要开启Windows的“显示文件扩展名”功能,把后面的 .txt 删掉,确保它就叫 .env。
- 这个项目主要依赖 FOFA(网络空间测绘)和 LLM(大模型,如 ChatGPT/DeepSeek)。你需要去 FOFA 官网注册获取 Key,以及去大模型服务商后台获取 API Key,填进去才能工作。
注意事项
- API Key 安全:切勿将真实密钥提交到 Git,.env 文件应加入 .gitignore。
- 端口冲突:若 8000 端口被占用,可在 .env 或启动命令中修改。
- 日志与调试:查看容器日志 docker logs autohunter,或本地运行时观察终端输出。
- 更新代码:定期 git pull 获取最新修复和功能。
🚀 每日启动标准流程
以后每次启动这个项目,你都需要同时运行两个服务(后端和前端)。
为了让你操作更熟练,我把标准流程整理成了“傻瓜式”步骤。建议你在桌面上建个记事本,或者直接记住下面这套连招:
你需要打开 两个 终端窗口(或者在 VS Code 里 split 两个终端)。
终端 1:启动后端 (Python)
打开终端,确保在项目根目录 AutoHunter 下。
输入启动命令(记得带上端口号,因为你之前 8000 被占用了):
uvicorn app.main:app –reload –port 8001
注:如果下次 8001 没被占用,也可以试着去掉 –port 8001,直接用默认的 8000。
终端 2:启动前端 (Node.js)
打开一个新的终端窗口。
进入前端文件夹:
cd frontend
启动开发服务器:
npm run dev
(如果这个报错,试一下 npm run serve)
💡 几个让开发更爽的小技巧
关于“不用每次都输命令”
- 后端:如果你用的是 VS Code,可以配置 .vscode/launch.json,按 F5 就能直接启动后端,不用手敲命令。
- 前端:同理,VS Code 也可以配置一键启动前端。
关于“端口被占用”的终极解决
如果你不想每次都加 –port 8001,可以在每次关闭程序时,确保在终端里按 Ctrl + C 彻底停止服务,而不是直接叉掉窗口。这样端口通常会立即释放。
关于“依赖安装”
- 不需要每次都运行 pip install -r requirements.txt (后端) 或 npm install (前端)。
- 只有当你更新了代码库(git pull)或者换了电脑时,才需要重新安装依赖。平时直接启动即可。
我下次打开的步骤(每个人可能有区别)
需要启动 3 个服务:
第一步:启动后端(端口 18800)
打开一个终端:
PowerShell
cd e:\\desktop\\AutoHunter
uvicorn app.main:app –reload –port 18800
第二步:启动前端(端口 5173)
再开一个终端:
PowerShell
cd e:\\desktop\\AutoHunter\\frontend
npm run dev
第三步:访问并登录
浏览器打开 http://localhost:5173 ,点击顶部「令牌」按钮,输入.env文件中自己设置的
注意事项
- 顺序无所谓,两个终端都启动好就行
- 不要关终端,关了对应服务就停了
- 如果之前那个 Acunetix 服务占着 8000 端口,不用管,AutoHunter 用的是 18800,不冲突
- FOFA 没 API 配额,创建任务时用 Hunter 引擎(已在 .env 配置了 Key)





