通用自动化协议(UAP)

INFO

UAP让自动化变得易用、便携且跨平台持久化。

通用自动化协议(UAP)是胡浏览器创建的开放标准,用于在任何设备或平台上定义和运行自动化任务。无论你是初学者还是专家,UAP都让你可以以简单、可读的格式录制、导入和导出自动化任务。使用任何UAP兼容应用运行你的自动化——无厂商锁定。

TIP

如果你没有技术知识,你仍然可以阅读此页面并轻松理解和编写自己的自动化步骤。 如果你有技术知识,你将看到这如何适用于企业UI测试和跨平台自动化。

  • 人性化: 使用JSON便于阅读和编写。
  • 类型安全: 协议类型在TypeScript中定义以确保可靠性。
  • AI优先: 专为移动AI智能体的新时代而设计,解决Playwright或Selenium等传统标准无法解决的挑战。
  • 跨平台: 允许在平台之间共享自动化脚本——即使胡浏览器不支持iPhone,你的脚本仍然可以工作。

术语

  • 模式:我们支持的3种模式
    • instruction:自然语言指令
    • recording:录制的自动化步骤
    • script:脚本化的自动化步骤
  • 硬化:从更灵活的模式切换到更确定性的模式(例如从instructionscript),使自动化更快更精确。
  • 软化:从更确定性的模式切换到更灵活的模式(例如从scriptinstruction),使自动化更具适应性但可能更慢。

示例:UAP动作(JSON)

[
	{
		"goal": "提交表单"
	},
	{
		"displayMsg": "点击提交按钮"
	},
	{
		"displayMsg": "等待2秒"
	}
]

此示例显示了一个简单的表单填写工作流。UAP动作易于编写和理解。

自动化配置(TypeScript)

/**
 * AI动作的类型(仅规范)
 * 为AI时代改编Playwright和Puppeteer的最佳实践
 */

// 所有AI动作的通用基础
export interface CommonAIAction {
	/** 命令类型 */
	command: string
	/** 显示消息 */
	displayMsg?: string
	/** 是否等待 */
	noWait?: boolean
	/** 等待条件 */
	waitUntil?: string
}

export interface AIGoalAction extends CommonAIAction {
	command: 'goal'
	goal: string // 自然语言目标
}

export interface AITapAction extends CommonAIAction {
	command: 'tap'
	selector: string
}

export interface AIHoverAction extends CommonAIAction {
	command: 'hover'
	selector: string
}

export interface AIDragAction extends CommonAIAction {
	command: 'drag'
	sourceSelector: string
	targetSelector: string
}

export interface AITypeAction extends CommonAIAction {
	command: 'type'
	selector: string
	text: string
}

export interface AIKeyboardPressAction extends CommonAIAction {
	command: 'keyboard_press'
	keys: string[]
}

export interface AIScrollAction extends CommonAIAction {
	command: 'scroll'
	selector?: string
	direction: 'up' | 'down' | 'left' | 'right'
	amount?: number // 像素或百分比
}

export interface AIScrollToAction extends CommonAIAction {
	command: 'scroll_to'
	selector?: string
	edge: 'top' | 'bottom' | 'left' | 'right'
}

export interface AIWaitAction extends CommonAIAction {
	command: 'wait'
	duration: number // 毫秒
}

export interface AIOpenLinkAction extends CommonAIAction {
	command: 'open_link'
	url: string
}

export interface AIZoomAction extends CommonAIAction {
	command: 'zoom'
	zoomLevel: number // 例如 1.0 = 100%,2.0 = 200%
	selector?: string // 可选,用于缩放特定元素
}

export interface AIMultitouchAction extends CommonAIAction {
	command: 'multitouch'
	events: Array<{
		amount?: number // 用于捏合/展开(像素或百分比)
	}>
	selector?: string // 可选,用于定位特定元素
}

export interface AIGestureAction extends CommonAIAction {
	command: 'gesture'
	gestureType: 'rotate' | 'swipe' | 'tap' // 排除'pinch'和'zoom'以避免重叠
	start: { x: number; y: number }
	end?: { x: number; y: number }
	duration?: number // 毫秒,用于长按或按压
	fingers?: number // 默认1
	angle?: number // 用于旋转
	selector?: string // 可选,用于定位特定元素
}

export interface AIGoToTabAction extends CommonAIAction {
	command: 'go_to_tab'
	description: string
}

/**
 * AISetValueAction:设置输入或元素的值。
 */
export interface AISetValueAction extends CommonAIAction {
  command: 'set_value'
  selector: string
  value: string | number | boolean
}

/**
 * AIAssertAction:对UI或数据进行断言。
 */
export interface AIAssertAction extends CommonAIAction {
  command: 'assert'
  assertion: string
}

/**
 * AIActionType:接受任何已知动作类型,或带有任意参数的自定义命令。
 */
export type AIActionType = AIGoalAction | AITapAction | AIHoverAction | CustomAIAction

/**
 * 自定义AI动作
 */
export interface CustomAIAction extends CommonAIAction {
  [key: string]: any
}

通用结构控制

UAP使用熟悉的架构概念来保持定义清晰和可扩展:

  • properties:定义对象的属性。
  • anyOf:支持多种可能的类型或结构。
  • required:指定必须提供的字段。
  • type:限制值的数据类型。
  • default:提供默认值。
  • item_count_range:控制数组的最小和最大长度。

工具使用

UAP还支持以结构化方式描述工具和函数调用:

{
	"tool_choice": { "function": { "name": "" } },
	"tools": [
		{
			"function": {
				"description": "",
				"name": "",
				"parameters": {}
			},
			"type": "function"
		}
	]
}

此结构定义了如何在UAP中描述工具和函数。

维护和版本控制

  • 版本:v25.1
  • 开源许可证:Apache License 2.0
  • AI发展迅速,但我们努力保持变化可预测:
    • 最多2个月内1次破坏性更改,此时你需要重新下载自动化协议文件。
  • 优雅降级: 如果环境不支持某个动作,UAP兼容应用应确保你的自动化不会意外中断。