豆包桌面版自动化(子 AI 通道)
豆包是创作类任务的主力子 AI:图片生成、视频生成、文档生成、写作、多模态。主 Agent 需要这些能力时,加载本 skill 驱动豆包——本 skill 就是"打开豆包"的遥控器。
历史版本(v1/v2)已归档,不随本目录分发;v1→v2→v3 变更见
CHANGELOG.md。
铁律:转述,不要设计
主 Agent 不擅长设计/创作,禁止替用户设计参数(不要自己编配色、构图、风格、文案结构——既费 token 又平庸)。
- ✅ 正确:把用户的原始意图直接转述给豆包(如"给这个模型生成个图标"→ 发给豆包"帮我给 Qwen3.6-35B-A3B 模型生成一个应用图标"),让豆包发挥创作能力。
- ❌ 错误:主 Agent 自己写"紫色渐变 #A78BFA→#7C3AED、白色粗圆环、3 个青色节点、扁平矢量风……"再让豆包执行。
- 主 Agent 的职责:理解意图 → 转述 → 等待生成 → 用下面的方式取回成品 → 交付。
铁律:直连模式,任务 + 硬性返回格式写进同一条消息
豆包本身是 AI,会遵守格式要求。主 Agent 直接通过本 skill 给豆包发消息时,把任务和硬性返回格式(JSON 骨架 + 约束)写在同一条消息里,豆包直接按格式返回。
- ✅ 正确:
-Action send -Text '请把结果严格按以下 JSON 返回,不要任何额外文字:{"status":"success","summary":"...","data":{}}。任务:……' - ❌ 错误:为"转述 + 把豆包回答改写成 JSON"再包一层子 Agent 当传话筒——中转多烧一层上下文,纯属浪费 token(详见
agent-delegation-slim的「委派的两种形态」) - 识别类同理:
-Files 图片/音频/视频上传 + 消息里附 JSON 格式指令,豆包直接返回结构化文本(主 Agent 的"伪多模态化"首选通道)
铁律:先确保窗口就位,再操作
任何需要窗口的动作(status/send/attach/read/wait/mode/newchat 等)都会自动前置 ensure,无需手动先跑:
- 豆包没运行 → 自动按安装路径/注册表/开始菜单搜索
Doubao.exe并拉起,最多等 45 秒主窗口出现 - 窗口最小化 → 自动还原
- 窗口中心不在主屏工作区(副屏、被拖出屏幕、离屏残留)→ 自动
MoveWindow回主屏工作区 - 最后统一
SW_MAXIMIZE放大化,保证全可见
主 Agent 不需要关心豆包"开没开、在哪块屏"——直接发动作指令即可。只有 probe-windows 是例外(纯诊断,不做 ensure,保证 ensure 本身出问题时也能排障)。
铁律:UI 发现方法链——锚点 → 候选 → 验证 → 降级
不写死坐标、不盲目信任控件名。 豆包改版/换分辨率/换屏后控件名、位置、菜单结构都可能变。当标准动作报错(DOUBAO_ERROR: 开头)时,按下面方法链逐步探测,自己找出正确目标:
第一步:锚点
一切定位先找最稳定的锚点——聊天输入框:-Action probe-buttons 输出的第一行「输入框(锚点)」。它是支持 ValuePattern 的 Edit 里最宽的那个,改版基本不会动它。
第二步:候选
在锚点的相对区域内按「角色 + 模式」收候选,不要只按名字(很多按钮无名或名字会变):
- 附件(+)按钮:输入框左下、支持 ExpandCollapse 模式的 Button
- 发送按钮:输入框右下、支持 Invoke 模式的 Button
- 模式芯片:输入行左侧、名字是四个模式名之一的 Button
-Action probe-buttons 会列出全部按钮的 Name | x,y,w,h | 模式 | 展开状态,直接对照挑选。
第三步:验证(点之前必须做)
候选要动手前先验证身份,标准做法:-Action probe-menu -ButtonAt 'x,y'(坐标取候选矩形内任一点)展开它,看菜单内容:
- 附件(+)按钮展开后应有「上传文件或图片」(附件的自动流程已内置此验证,会逐个候选展开核对,验证失败换下一个)
- 用户菜单按钮展开后是「设置/收藏夹/豆包官网…」——展开出这个说明选错了,换候选
- 模式芯片展开后是四个模式名
第四步:降级
- 菜单项找不到:菜单弹层挂在 RootElement 下,不在窗口内(v1 的 bug);probe-menu 已按"矩形中心落在窗口外扩 300px 内"过滤可见项,直接看它的输出
- 窗口元素坐标全负/异常:先
-Action probe-windows看主窗口 rect 是否在屏内、是否 iconic;不在屏内跑一次-Action ensure归位 - 豆包换了对话框样式(ctrlid 1148/1 找不到):
probe-windows找到对话框 hwnd,用EnumChildWindows枚举控件重新定位 - 全部探测失败 → 把 probe 输出带给用户,说明"豆包改版超出 skill 已知范围",请求人工确认,不要硬点
标准排障顺序:probe-windows(窗口层)→ probe-buttons(控件层)→ probe-menu(菜单层)→ 定位目标 → 用消息注入/Invoke 操作。每个探针输出都是结构化文本,读输出就能知道下一步。
用法(pwsh 工具;每个新进程先执行第一句)
$s = '<本 skill 目录>\scripts\doubao.ps1' # 已设 DSH_HOME 时也可:Join-Path $env:DSH_HOME 'skills\doubao\scripts\doubao.ps1'
Set-ExecutionPolicy -Scope Process Bypass -Force
& $s -Action status # 窗口/当前模式/输入框内容(自动 ensure)
& $s -Action ensure # 手动确保:启动/移回主屏/最大化
& $s -Action newchat # 开新会话
& $s -Action mode -Mode 快速 # 快速|专家|工作任务 Auto|工作任务 Turbo|工作任务 Pro
& $s -Action send -Text '你好' -WaitSec 30 -MaxLines 10 # 发消息,等回复稳定后打印最后10行
& $s -Action send -Text '描述这张图' -Files 'C:\a.png','C:\b.txt' -WaitSec 40 # 带附件发送(可多文件)
& $s -Action send -Text '...' -NewChat # 开新会话再发
& $s -Action attach -Files 'C:\x.pdf' # 只加附件不发送(挂载后自动验证附件条)
& $s -Action read -MaxLines 15 # 只读会话最后15行
& $s -Action wait -WaitSec 60 # 等生成结束再打印
& $s -Action extract -OutDir 'C:\out' -MinutesBack 10 -MinKB 100 # 从缓存提取最近生成的原文件(无损,首选)
& '<skill目录>\scripts\download-asset.ps1' -TargetName 'image' -SaveDir 'C:\out' -SaveFile 'icon' # UI 下载生成图片
& '<skill目录>\scripts\download-asset.ps1' -TargetName 'Asset cover' -SaveDir 'C:\out' -SaveFile 'doc' -WatchSec 300 # UI 下载文档
# 探测三件套(排障/方法链专用)
& $s -Action probe-windows # 主屏工作区 + 豆包全部顶层窗口(hwnd/class/title/rect/visible/iconic)
& $s -Action probe-buttons # 输入框锚点 + 全部按钮(名称/矩形/模式/展开状态)
& $s -Action probe-menu -ButtonAt '584,930' # 展开该坐标处按钮,列出可见菜单项(探测完自动收起)
- 失败输出以
DOUBAO_ERROR:开头:常规错误重试一次;重试仍失败走上面的 UI 发现方法链,不要硬点坐标;深入排障读references/troubleshooting.md(机制细节与常见问题)。 -WaitSec判定 = 消息区文本连续两轮(3s)不变;长回复给 60s+,或分次-Action read。- 改过 .ps1 后若报乱码解析错误:脚本必须带 UTF-8 BOM。补 BOM:
$p=$s; $c=[IO.File]::ReadAllText($p,[Text.UTF8Encoding]::new($false)); [IO.File]::WriteAllText($p,$c,[Text.UTF8Encoding]::new($true)) - DPI/缩放自适应:脚本启动时用
GetDpiForWindow探测豆包窗口实际 DPI,所有像素阈值按dpi/96自动缩放——多显示器、混 DPI、任意系统缩放均无需改代码;UIA 坐标是物理像素,所有定位相对输入框矩形推算。窗口被移回主屏后 DPI 变化也会自动跟随。 - 取回生成的原文件(图片/文档):完整流程(extract 缓存提取 → download-asset UI 下载 → 对话框处理 → 豆包下载目录
G:\下载)见references/download-extract.md。不要截图(多显示器/混 DPI 下易错位、PrintWindow 可能黑屏、且损失精度)。