173 lines
28 KiB
Markdown
173 lines
28 KiB
Markdown
# 使用 AI 完成 Android 与电脑自动化
|
||
|
||
官方 `skills/artemis-use/` 随源码和 wheel 分发,包含执行、探索、诊断复盘及插件开发规范、模板和校验脚本。启动脚本、直接 `artemis ui` / `artemis-admin` 启动服务、显式 `artemis mcp --install codex` 共用同步逻辑;MCP 桥连接/握手不安装、不启动主程序。
|
||
|
||
默认安装到 `~/.agents/skills/artemis-use`;已有 `~/.codex/skills/artemis-use` 时复用该目录,显式设置 `CODEX_HOME` 时使用 `$CODEX_HOME/skills/artemis-use`。官方同名目录直接覆盖,不保留用户定制、不弹冲突提示;其他 Skill 不受影响。复制和内容校验成功后替换目录,内容未变不重写;同步失败保留旧版并告警,网页仍启动。记录版本与来源,较旧 ARTEMIS 不覆盖已安装的较新版官方 Skill;默认路径中的重复 artemis-use 合并为一份。Skill 成功安装后备份并移除 Codex 全局 AGENTS 文件内带 ARTEMIS 标记的旧规则块,保留其他内容。
|
||
|
||
目前只支持 Codex。源码环境执行 `uv run artemis mcp --install codex` 可手动修复集成,`--generate-config codex` 查看配置模板。安装器保留 MCP 启用/禁用、工具 allowlist/denylist 和审批策略;配置变化后重载 MCP,Skill 未显示时重启 Codex。`-SkipMcpSync` 跳过该次启动的 MCP 和 Skill 同步;直接启动可设置 `ARTEMIS_SKIP_CODEX_SYNC=1`。
|
||
|
||
可以向 AI 这样下达任务:
|
||
|
||
> 使用 artemis-use。在我指定的模拟器上验证系统设置首页能打开,不修改设置,输出 Word 和 Excel 报告。
|
||
|
||
> 校验这份 Excel 的测试用例,指出所有错误;先不执行。
|
||
|
||
> 在 emulator-5554 执行已校验用例,失败继续,完成后交付批次报告 ZIP。
|
||
|
||
> 搜索昨天包含“登录”的失败任务,根据截图与步骤说明失败原因,不重跑。
|
||
|
||
> 把当前安卓屏幕保存成 PNG 到本次任务的 trace 目录,并再保存一份到电脑桌面,返回实际文件路径。
|
||
|
||
Flash 和 Pro 都支持任务内的安卓文件工具 `android_file`:保存原生截图、列目录、读写 UTF-8 文本、在手机与任务目录/桌面之间传输文件。默认保存位置为 `traces/<trace_id>/artifacts/android/`,指定桌面时保留 trace 副本;Windows 会识别重定向的真实桌面。文本上限 64 KiB,单文件传输上限 64 MiB,每次 ADB 操作最多 60 秒,取消或超时会回收子进程。默认不覆盖已有文件,也不绕过 Android 文件访问权限。保存和传输会校验实际内容,返回文件路径、大小与 SHA-256;用例是否通过仍需结合画面和预期判断。
|
||
|
||
新保存的截图及下载文件会进入单任务“全部资料”和批次 ZIP 的 `任务文件/安卓/`。原有自动步骤截图仍位于 `traces/images/`,按步骤截图下载;二者用途不同,历史截图不能作为当前画面的新截图。
|
||
|
||
文件操作结果会进入任务执行记录,Flash 中也逐项记录操作步骤及校验结果,供终检和报告引用;不会只留下模型自行撰写的“已完成”说明。
|
||
|
||
## 短时安卓控件与精确拖动
|
||
|
||
Flash 和普通 Pro 都支持任务内原生 `action_sequence` 与 `drag`,外层 MCP 工具不变。
|
||
这是通用的安卓短动作组合器,不限于时间轴。短时面板每次操作优先使用 `[ensure_visible, click/drag]`:
|
||
AI 指定已观察到的面板内 target、入口 opener 资源 ID 和 target_description,工具现场判断是否已经显示;
|
||
需要时只点击入口一次,并在本机等目标出现(timeout_ms 默认 1500,上限 3000),再执行后续成员。
|
||
已显示时跳过打开,缺失、不唯一、层级不可用或超时则停止并保留回执,不重试已输入的动作。
|
||
它只准备界面,不用于业务提交;无原生 ID 时仍可组合已观察坐标的 click/wait/drag。
|
||
序列与校准拖动沿用小型动作的 16,384 字符参数流保护:异常膨胀时在执行前断流,
|
||
丢弃不完整参数,按已有的无效输出策略有限重试,不把截断内容派发到设备。
|
||
任务可以要求“先观察缩放弹层的真实滑块位置,恢复同布局后用一个连续动作打开、等待、拖动,
|
||
再检查刻度是否改变”。动作之间不再等待下一轮模型,适用于数秒后消失的控件。
|
||
序列使用 `pro.execution.max_burst_actions` 的数量限制(默认 4,等待也算一项),
|
||
Flash/Pro 的工具声明显示实际上限。每次反向调整也保持完整的打开、等待、操作组。
|
||
序列内 click 的 target 可直接使用观察列表中的完整资源 ID;执行时重新定位,缺失或不唯一时拒绝点击,
|
||
避免模型反复将原图像素换算成归一化坐标。
|
||
click 的 times 支持 1–10 次连点,delay_ms 默认 100;连点仍占一个成员,按资源 ID 定位时每次都重新确认目标。
|
||
普通元素索引点击也核对原资源 ID 是否仍覆盖记录的点击位置,控件消失或移位时不点击旧坐标。
|
||
安卓现场检查只读取实时 UI 层级,不等待截图稳定;目标在连点途中消失时停止,并保留 completed_taps。
|
||
该计数仅表示已派发且返回无错误的点击次数,不代表业务验证通过。Flash 在连续动作末尾立即保留截图,
|
||
避免多轮稳定截图将短时面板消失后的画面覆盖为唯一证据;即时截图的稳定状态为未知,不能据此宣称画面已稳定。
|
||
普通 Pro 同样在完整连续组结束后保存截图,供立即进行的检查点验收使用;即使图片哈希与操作前相同,
|
||
也保留这次真实采集对应的动作后证据,不将图片去重当作没有采集。
|
||
元素列表中的真实 `resource_id` 可用于 click 的 `unless_visible`(面板已显示时跳过打开按钮,不能加在实际操作按钮上)
|
||
及 drag 的 `require_visible`(面板消失时不拖动),现场检查不增加模型轮次;层级不可用时拒绝操作。
|
||
成员回执区分完成、跳过、结果不明和未执行;部分失败后不能将已成功或结果不明的输入整组重发。
|
||
“最大/最小”优先通过原生加减按钮调整,并核对继续同向调整后滑块、刻度是否停止变化,或读取明确的原生极值。
|
||
仅接近端点、变成分钟级、关闭面板或选中录像卡片均不能证明已到最大或最小;录像卡片时间也不是固定指针对应时间。
|
||
|
||
时间轴可使用原图像素和当前两个刻度校准拖动,避免细刻度被整数归一化坐标量化。
|
||
它仍受截图分辨率、刻度线性、应用吸附及实际拖动响应影响;应先放大、短距离拖动,
|
||
再读取同名刻度或选中时间作修正。工具成功和计算误差不等于业务时间已准确选中。
|
||
若松手后时间轴继续滑动,应减慢 pan 并等待刻度停止后复核;拖动浮层的时间可能只反映松手瞬间,
|
||
与固定指针对应刻度冲突时不能用来验收。常驻时间轴的拖动不依赖缩放弹层保持打开。
|
||
量化验收可对停稳后截图的真实刻度与指针位置作线性插值,并计入读图不确定性;
|
||
目标误差加不确定性不超过用户容差时才能确认,不强制要求秒级文字读数。
|
||
|
||
## MCP 能力
|
||
|
||
仅 PC 测试与网页“仅 PC”勾选项使用同一任务目标。先用 `mobile_workspace(include_devices=false)` 查看实际电脑插件,再提交 `mobile_run_task(task_desc="在电脑浏览器检查指定页面", model="Flash", request_id="本次提交唯一编号", runtime_overrides={"execution_target":"computer"})`。无需手机或模拟器在线;仍需可用模型和已启用并授权的电脑观察插件。`model="Pro"` 与 `mobile_exploration` 的 `task_config.execution_target="computer"` 同样适用。每项批量用例的 `task_config` 使用相同字段;插件参数见 [插件任务参数](../skills/artemis-use/references/plugins.md)。
|
||
|
||
| 工具 | 功能 |
|
||
| --- | --- |
|
||
| `mobile_diagnose` | 环境、凭据、设备诊断和自带修复 |
|
||
| `mobile_workspace` | 设备列表、统一队列、插件状态及按需连接诊断;include_development 返回插件开发环境 |
|
||
| `mobile_config` | 读取或明确保存非敏感模型、功能、报告默认设置 |
|
||
| `mobile_run_task` | 单任务执行(request_id 去重);`model=flash/pro` 表示执行模式 |
|
||
| `mobile_manage_task` | 单任务状态、提交反查、暂停/继续、指导和停止;删除预览及删除、代录用户人工复验 |
|
||
| `mobile_get_device_state` | 设备截图、界面层级 |
|
||
| `mobile_task_file` | XLSX 模板与导入校验 |
|
||
| `mobile_favorites` | 收藏独立任务/用例/批次模板、调整默认配置、按原配置复跑;run 使用稳定 request_id |
|
||
| `mobile_batch` | JSON 用例建批次、开始、暂停、继续、复制失败项、删除非活跃批次 |
|
||
| `mobile_search_history` | 全库搜索、日期/状态/批次筛选和分页 |
|
||
| `mobile_inspect_trace` | 只读步骤、截图和执行证据 |
|
||
| `mobile_export_report` | Word、Excel、步骤截图、录屏片段、单任务资料及批次 ZIP,返回本地绝对路径 |
|
||
| `mobile_exploration` | 探索对话、指导、人工示范、暂停续跑、用例版本、Flash/Pro 复跑和批次草稿 |
|
||
|
||
全部 MCP 工具连接用户手动启动的 ARTEMIS 网页主程序,共用配置、队列、历史、设备连接和报告。MCP 只运行轻量 stdio 连接进程,不启动后台、不独立执行任务,`ARTEMIS_STANDALONE` 不改变这一规则。主程序离线时 MCP 仍可握手并列出工具,调用时提示启动;启动网页后下一次调用会自动连接。调用断线不自动重放,避免重复提交。
|
||
|
||
使用前先运行 `start.bat` / `start-cn.bat` 或 `uv run artemis ui`。默认自动发现同一安装目录的唯一主程序(包括非默认端口);有多个数据空间时,在 MCP 环境变量中设置 `ARTEMIS_DAEMON_PORT` 选择。显式 `ARTEMIS_APP_DIR` / `ARTEMIS_TRACES_DIR` 必须匹配。升级后重启网页并重载旧 MCP,已运行的旧进程不会自动替换。标准 Codex 配置使用 `required = false`,避免 ARTEMIS 异常阻断整个 AI 会话,更新保留用户的禁用状态。
|
||
|
||
Windows 启动入口 `start.bat` / `start-cn.bat` 只检查并提示源码更新,`-SkipUpdate` 跳过提示。独立升级入口为 `update.bat` / `update-cn.bat`:先把升级程序复制到项目外的临时目录,检查本地修改,再终止本项目的 ARTEMIS 服务、MCP 和任务进程;之后仅做 Git 快进更新,并用新版启动程序准备环境,完成后由用户重新启动。其他项目、Codex、模拟器和共享 ADB 不受影响;运行中的任务会被中断,不会作为成功任务处理。1.1.1 及更新版本的发布 ZIP 含 Git 工作树,旧版无 `.git` 的 ZIP 需改用新版包或 Git 克隆。没有 Git、网络/认证失败、有本地修改或分支分叉时升级失败并保留现有源码,不重置或覆盖。
|
||
|
||
Python 按 `uv.lock` 同步缺失/变化的依赖;前端依据源码、资源及包锁指纹决定是否执行 `npm ci` 和构建,成功后才记录指纹。未运行过启动脚本的 Git 源码目录也可直接升级:先自动准备最小 Python 环境,快进源码后再安装新版依赖。国内升级入口继续使用镜像配置。升级与启动的环境准备互斥;升级失败不会自动启动服务或回滚用户配置,处理错误后可重试。双击升级失败时会保留原因并等待回车;自动化调用可设置 `ARTEMIS_NO_PAUSE=1`,输入重定向时也不会等待。
|
||
|
||
scrcpy 固定版本的国内下载采用多个来源,失败或 SHA256 不符时自动尝试下一来源,全部失败会显示 HTTP 状态、超时或校验原因。`config/downloads.json` 的 `overrides.scrcpy_url` 指定首选 HTTPS 地址,`overrides.scrcpy_fallback_urls` 指定备用地址数组;`null` 使用默认备用源,`[]` 禁用备用源。国内模式不自动回退到 GitHub 直连。
|
||
|
||
MCP 同步仅检查 `$CODEX_HOME/config.toml`;未设置或为空时使用当前用户的 `~/.codex/config.toml`。日志会显示实际路径,以及新装、更新、已是最新、未检测到或自定义跳过的结果。检测到目录但缺少 ARTEMIS 条目时安装当前源码的标准配置;已有标准配置即使指向旧解压目录,也会更新解释器、项目目录和环境路径,保留已有工具白名单。保留用户额外环境变量、禁用状态、`tools` 下的工具审批策略及其他服务;不会重建权限表、添加 `eager` 或删除旧工具策略。自定义启动包装器保持原样并提示。其他客户端的配置和规则文件不读取、不修改,其格式错误不会阻止启动。Codex 原配置无法解析,或同步程序生成的更新未通过校验时,均告警且不覆盖原文件,继续启动网页;日志会区分这两种原因,不把同步生成错误归因于用户配置。遇到后者请更新 ARTEMIS,不要删除有效的 `config.toml`;可使用 `-SkipMcpSync` 临时仅启动网页。首次修改保留备份。同步后需在 Codex 中重新加载 MCP 或重启 Codex,脚本无法替宿主重启已加载的 MCP 进程。
|
||
|
||
创建批次时必须提供唯一 `request_id`;请求超时后可以按编号查询或用相同内容重发,避免重复用例。创建只保存草稿,`start` 才执行。AI 无需先制造 Excel,也可直接提交 JSON;字段与示例见 [Skill 批量任务参考](../skills/artemis-use/references/batches.md)。
|
||
|
||
报告按任务或批次归档到 `artifacts/mcp_exports/`,包含本地路径及服务下载链接;删除批次时会清理对应导出副本。运行中导出是快照;执行完成不等于验证通过,报告会保留未验证、失败、跳过与中断状态。
|
||
|
||
新安装模型默认使用 `gpt-6-luna`,预设 `gpt-6-luna`、`gpt-6.1-terra`、`gpt-6.1-sol`、`gpt-6-astra`、`mimo-v2.6-pro`;首页、兜底模型与精选任务使用统一选择控件,也支持自定义模型名称。已保存的模型配置保留。思考强度最高支持 `max`,默认 `high`,选“由模型默认”不发送该参数;接口不支持时明确报错。单次请求 300 秒,首次失败后最多再试 5 次,普通错误每次等待 10 秒,429 每次等待 60 秒,SDK 不叠加重试。首选模型连续 3 次没有有效工具调用时,当前步骤改用 `gpt-6-luna`(high),最多再试 3 次;下一步重新使用首选模型。兜底模型及次数可通过 `.env.example` 中的 `OPENAI_TOOL_FALLBACK_*` 和 `ARTEMIS_TOOL_FALLBACK_MAX_NO_PROGRESS_ATTEMPTS` 配置。请求耗尽后沿用任务暂停/恢复机制,鉴权或非法参数立即失败。视频分析与录屏是独立开关,默认均关闭。每项批量用例可覆盖模式、模型、设备、录屏和超时等配置,不影响其他任务。暂停先返回 `pausing`,确认状态为 `task_paused` 才表示设备已释放;Pro 等待模型回复或只读诊断时可及时中断,恢复后重新观察设备。AI 可用 `mobile_manage_task(action="inject_instruction")` 提交指导并恢复;指导由执行器在安全检查点领取,可能中断当前模型等待并重新观察设备;接收回执不保证任务结束前已消费,已经开始的设备动作会安全结束。用 `guidance_history` 核对指导是否被领取、在任务流程中核对实际执行情况,或用 `resume` 单独恢复。
|
||
|
||
429 等待、兜底模型及次数也可在网页“模型配置 → 稳定性与兜底模型”或通过已授权的 `mobile_config(section="model")` 配置。批次 ZIP 还收录每项任务已保存的步骤截图和录屏。
|
||
|
||
批次任务在队列中使用“用例编号 + 用例名称”显示,提示词仍是模型实际收到的内容。任务历史展示失败原因、完成时间和总耗时;导出全部资料时以用例编号命名目录。删除非活跃批次会同步清理其任务记录、步骤、截图、录屏及生成的报告,删除后不能通过旧 `request_id` 重复执行。
|
||
|
||
保存全局配置要求用户明确指令;只读配置不包含密钥,MCP 不接收密钥。密钥仍在网页或 `.env` 中填写。设置对新任务生效,模型请求重试不会触发测试用例自动重跑。历史步骤证据保留,设备动作回放已移除。
|
||
|
||
执行保护默认总时限 1800 秒,单任务、批次和 MCP 都适用,排队及用户暂停不计时。设备观测默认 60 秒、最多 3 次,ADB 命令默认 10 秒;观测失败不会继续向模型发送占位图或旧元素索引。Flash 连续 3 次动作失败先重新观察再切换兜底,兜底仍失败则结束任务并保存原因。不能以提高步数或反复重提任务代替设备诊断。
|
||
|
||
UIAutomator2 启动失败时,先释放本次连接启动的服务,再按现有策略重试;最终错误保留设备编号、尝试次数和底层原因。初始化失败且没有操作步骤时,用例目标属于未执行、未验证,应先检查设备诊断和启动日志,不能据此认定被测功能失败。
|
||
|
||
Android 应用启动通过系统包管理器查找当前用户的桌面入口,再调用 `am start -W`,不依赖模拟器是否内置 `monkey`。检查命令退出码、错误输出和实际前台状态;应用未安装、没有桌面入口或权限拒绝等明确错误直接返回原因,不重复等待启动超时。ADB 通信异常沿用最多 3 次启动尝试;启动回执超时时先确认应用是否已进入前台,避免重复启动已成功打开的应用。
|
||
|
||
Flash 和 Pro 默认复用只读 Checker,以任务提示词和用户指导中的要求核对执行结论、步骤截图及探测证据,无需另填预期结果。`test_result` 包含 `status`(`passed`、`failed`、`inconclusive`、`blocked`)、中文 `reason` 和 `evidence`;任务列表、报告与 MCP 使用同一结论。`completed` 仍只代表执行结束,可同时存在测试不通过。Flash 只在退出时验收,不添加计划或中途检查;沿用 Checker 的超时和开关,关闭、超时或缺少证据时显示未验证,不重跑用例。
|
||
|
||
`mobile_run_task(runtime_overrides={"timeout_seconds":1800,"observation_timeout_seconds":60,"observation_max_attempts":3,"device_command_timeout_seconds":10,"action_failure_attempts":3})` 可为单任务覆盖执行保护;其中 `model` 是 API 模型名,外层 `model` 仍是 Flash/Pro 模式。相同字段也支持批次的 `task_config`。全局默认通过网页功能配置或明确授权的 `mobile_config(section="capabilities", changes={"task_timeout_seconds":1800}, persist_defaults=true)` 保存,对后续任务生效,不接受密钥。
|
||
|
||
Flash 最终 AI 判定与分析默认关闭。读取 `mobile_config(section="capabilities")` 的 `flash_final_check_enabled`;用户要求保存全局设置时,可用 `changes={"flash_final_check_enabled":true}` 和 `persist_defaults=true` 开启。它影响尚未开始的所有 Flash 任务,运行中的任务、Pro 和主动探索不变;不作为单任务或精选模板的覆盖项。关闭时 `test_result.status="inconclusive"`、`verification_skipped=true`、`source="system"`,表示未做 AI 判定,不是测试通过;执行异常仍按原失败状态记录。人工复验可随后给出独立结论。
|
||
|
||
任务已经产生最终结果,但 SDK 线程或资源清理仍卡住时,默认最多再等待 30 秒后回收工作进程,避免继续占用队列。全局可用 `ARTEMIS_WORKER_CLEANUP_TIMEOUT_SECONDS` 或功能配置的 `worker_cleanup_timeout_seconds` 调整,任务 JSON 同名字段可覆盖。原有结果与截图保留,未完成保存的录屏尽力恢复。
|
||
|
||
MCP 工具和单任务 HTTP 提交均拒绝未知顶层字段,在执行前返回错误。`mobile_run_task` 使用 `task_desc`,HTTP `/api/run` 使用 `goal`;两者不能混用来静默替换任务。结构化 JSON 工具结果同步保留 `structuredContent` 和原文本内容。`view_summary` 的文本保持 Markdown,结构化结果提供 `summary` 与 `steps={items,total,offset,limit,next_offset}`;按 `next_offset` 翻页,值为 null 才表示没有下一页,`items` 保留存储中的 `step_id/step_number`。
|
||
|
||
跨端阶段工具 `update_task_progress` 首次使用完整 `stages`;之后可提供 `stage_updates=[{id,status,evidence?}]` 和 `reason`。补丁只更新已存在的阶段,保留其顺序、范围、资源与未提及阶段;完整阶段和补丁只能选择一种。完成或阻塞仍需事实依据,校验或保存失败时不更新进度。来源清单与阶段完成都不能替代正式验收。
|
||
|
||
报告和证据索引的 `evidence_sources` 从已记录的插件来源汇总,区分安卓/电脑界面与接口、终端、文件等辅助来源,并保留实际步骤和调用编号。缺失来源显示未知,不按业务后台名称或网址推断执行平台;界面截图不能单独证明后端持久状态。该清单不改变 `test_result`、AI 原判或人工复验。
|
||
|
||
## 插件证据与留档参数
|
||
|
||
2.0.0 插件协议与可运行示例见 [开发规则](plugin-development.md)。单任务和批次全部资料包含各来源截图/录像、插件附件及包内证据索引。
|
||
|
||
Flash、Pro 与探索沿用现有执行上下文跟踪用户明确要求的前置条件、检查项和交付物,跨端及收尾时只补缺失证据。电脑操作或留存截图前核对窗口与页面身份;坐标以同一张最新插件截图及其编号为准,不使用手机归一化坐标或自行叠加 DPI。视觉与历史摘要保留来源、关键原文和待核实项,模糊文字或冲突读数不能直接成为已验证事实;需要时回查原图/控件树。本规则不新增规划、验收或摘要模型调用,不改变现有思考强度和输出预算。
|
||
|
||
通过 `mobile_config(section="capabilities")` 可读取 `recording` 参数;用户授权后可保存全局默认。单任务用 `runtime_overrides={"recording":{"codec":"h264","computer_scope":"window","max_long_edge":1280,"fps":15}}`,批次在 `task_config.recording` 提供同样对象。JSON 配置的 `agent.recording` 覆盖环境默认;不要把录像参数当作模型截图参数。录屏开关继续独立且默认关闭。
|
||
|
||
运行信息的上下文参照上限固定为 300,000 tokens,前后端使用相同口径。历史压缩预算默认 80,000,JSON 的 `agent.memory.transcript.context_budget_tokens` 可调但不能超过 300,000;这是压缩触发预算,不是单次生成的输出 token 数,也不是整项任务累计 token 的限额。
|
||
|
||
|
||
### 多轮上下文与缓存诊断
|
||
|
||
Flash、Pro(启用 transcript)和探索共用分阶段上下文。一个阶段内只追加新观察、工具结果和用户指导,保留此前发送的截图、元素列表和消息原文。行动只能使用同一来源的最新观察,旧画面不能证明当前状态。检查器和摘要模型保持独立职责,不混入执行模型的对话。
|
||
|
||
默认压缩预算为 80,000 tokens:估算占用达到 28,000 后开始后台准备摘要,56,000 后等待本批摘要齐备再一次性替换历史、清理旧观察,开始下一阶段;72,000 时可紧急折叠为带步骤索引的历史。摘要失败时原文保留至硬阈值,原始证据仍可经历史工具读取。触发估算包含本轮新消息和截图,不只看上一轮用量;没有上游 usage 时使用本地保守估算。该预算不是任务累计限额,也不改变 300k 上下文参照上限。
|
||
|
||
任务 trace 的 `llm_diagnostic` / `llm_request` 在原有 `usage`、耗时和 `prompt_cache_key` 外增加 `prefix_cache`:
|
||
|
||
- `append_only`、`shared_prefix_messages`:相对同任务、角色和端点上次调用,输入是否仅追加、共享多少完整消息。
|
||
- `first_changed_message`:首个变化消息的位置(从 1 开始);`tools_or_format_changed` 表示工具或格式参数发生变化。
|
||
- `context_phase`、`last_compaction`:上下文阶段与上次压缩前后的估算 token 数。
|
||
- `cold_start`:该角色/端点在当前进程内没有比较基准;重启后首次请求会重新建立基准。
|
||
|
||
以上为适配后消息的本地指纹比较,不是网关最终序列化后的 token 前缀,也不是命中率。诊断仅持有哈希,不额外保存提示词、图片正文或凭据。实际缓存率按上游返回的 `cached_tokens / input_tokens` 加权统计,usage 缺失不能当作零命中。首次请求、阶段压缩、模型/工具切换可能降低缓存率;网关的路由、缓存保留时间和实现也会影响结果。该实现使用完整多轮消息,不依赖网关支持 `previous_response_id`,也不承诺固定命中率。
|
||
|
||
执行模型、视觉摘要和历史摘要的 Responses 请求均按“探索会话(普通任务用任务 ID)+角色+模型”生成稳定的匿名 `prompt_cache_key`,并在 `Thread-Id`、`Session-Id` 请求头中发送相同值。标识符合 `^[-0-9A-Za-z._:]{1,128}$`;暂停继续时保持稳定,不同任务或角色隔离。网关可从头部或 JSON 字段提取路由键,不依赖特定 User-Agent,也不会伪装为 Codex。标识在每次调用时设置,不写入共享 HTTP 客户端,避免并发任务互相覆盖。显式传入的缓存键及会话请求头优先。
|
||
|
||
有请求诊断的调用同时发送 `X-Client-Request-Id`,默认与 trace 内的 `request_id` 一致,便于对照 API 日志。`request_sent_at` 表示实际发送时间;`routing_header_fingerprints` 只记录发送的会话头的哈希,`client_request_id_matches` 表示关联 ID 是否一致。不记录认证头或其他请求头正文。稳定标识提供路由亲和条件,实际命中仍取决于前缀和上游缓存。
|
||
|
||
辅助摘要继续独立处理各自片段,避免为了提高命中比例累积不相关的历史。视觉摘要中完全重复的插件执行结果与控件树只发送一份;独立错误、状态、不同观察及原始 trace 均保留。
|
||
|
||
## 指定任务诊断、复盘与管理
|
||
|
||
流式请求中的 `click`、`long_press`、`swipe`、`press_key`、`manage_app`、`wait_for_delay` 每次调用参数超过 16,384 字符时,会立即关闭该请求并丢弃未完成输出,避免持续生成异常参数直到超时。该保护只针对小型设备动作,不限制输入文本、笔记、报告或插件参数,也不改变模型思考强度与输出 token 配置。异常最多额外尝试一次(配置为不重试时不重试);仍异常时进入现有备用模型或暂停恢复流程。诊断记录保留 `invalid_output` 分类及 `stream_guard` 中的工具名、实际字符数和保护上限,不保存参数正文;无法据此断定异常来自模型生成还是 API 中转。
|
||
|
||
`mobile_inspect_trace` 增加 `view_report`、`view_usage`、`view_requests`、`view_logs`、`view_evidence`。这些动作复用 HTTP `/api/sessions/{id}/inspection`,不生成下载文件、不执行设备动作;`offset/limit` 控制分页。日志只读取有限尾部并脱敏,正文超限明确 text_truncated。用量展示缓存输入/总输入、角色及已记录的模型分组;未记录模型显示 unknown。
|
||
|
||
`mobile_run_task(request_id=...)` 在既有自动化存储中登记提交回执。同一个 ID/相同内容只派发一次;内容不同拒绝。连接断开先用 `mobile_manage_task(action="lookup", request_id=...)` 找 trace_id,查实际状态,未知结果不自动重跑。普通状态与报告统一读取人工复验结果,保留 AI 原判。
|
||
|
||
`mobile_manage_task(deletion_preview/delete)` 可预览和删除非活动任务;探索也有对应动作,并保留独立复跑。`delete` 需要 user_confirmed=true,表明用户明确要求删除,不强制重复确认。`review` 只代录用户明确给出的 review_status=passed/failed 和 review_reason,需 user_confirmed=true;Agent 自己的推断不能标成人工结论。
|
||
|
||
## 插件开发
|
||
|
||
使用官方 Skill 的 [插件开发参考](../skills/artemis-use/references/plugin-development.md),从自带模板开始。通过 `mobile_workspace(include_devices=false, include_development=true)` 找到当前服务的 Python;在任意目录均可调用 Skill 自带校验脚本。静态检查、MCP 握手与真实操作验收分别报告。市场发布需用户明确要求,验证未覆盖场景必须注明。
|