feat(#115): move PDD recognition aliases into rules

This commit is contained in:
QiuSW
2026-08-27 18:19:33 +08:00
parent 3619435a97
commit e117fd222d
11 changed files with 389 additions and 96 deletions
+3 -2
View File
@@ -2,8 +2,8 @@
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
wiki_page: Business-Rules-and-Glossary
wiki_url: https://git.ilapage.cn/OPC/goauto/wiki/Business-Rules-and-Glossary.-
wiki_revision: 26618d4312a1e7091f6b483111c31e67f70f26eb
synchronized_at: 2026-08-27T09:57:37Z
wiki_revision: b208729957c26801012279a8e89fc18b350f3a87
synchronized_at: 2026-08-27T10:14:02Z
<!-- gitea-wiki-mirror:end -->
# 业务规则与术语
@@ -171,6 +171,7 @@ synchronized_at: 2026-08-27T09:57:37Z
- 服务端顺云宝(SYB)登录例外:允许调用配置的线上 OCR 服务识别登录验证码(见 [#48](https://git.ilapage.cn/OPC/goauto/issues/48))。验证码图片会离开本项目发送到该服务,更换服务地址前必须重新评估。此例外只适用于 SYB 登录,不扩大到 Agent 端或任何 PDD 相关流程。
- 采购阶段的规格匹配由服务端决策(见 [#46](https://git.ilapage.cn/OPC/goauto/issues/46)、[#62](https://git.ilapage.cn/OPC/goauto/issues/62)):Agent 本地不得自行猜测规格或点击相近候选,只执行服务端下发的精确规格;AI Provider 只有一个 OpenAI-compatible 配置,由管理员维护。根据 #62 已确认的内部部署例外,API Key 明文保存在专用设置表,并只向管理员设置接口返回以便查看和替换;它仍不得写入代码、日志、工单、Wiki、任务快照、采购员接口或 Android 接口。Provider Base URL 不限制内网或公网,支持 HTTP/HTTPS;HTTP 不加密传输中的 API Key,生产环境建议 HTTPS。
- 采购规则的 `openSpecPanel` 默认不写死页面文字。Agent 只在已由页面语义确认的规格入口或底部购买入口中选择;规则若提供 `textAliases`,只能进一步缩小这些安全候选,不能把任意同名页面文字变成可点击入口。
- PDD 采集规则的 `collector.textAliases` 是规格面板、维度标题、选择摘要、评价入口、售罄主商品证据和购买入口等只读识别文案的服务端下发事实源;缺省字段只为旧快照兼容使用 Agent 内置默认值。颜色/尺码分类不得再用代码字面量扩大 `dimensionAliases`。订单和支付文字可以参与只读页面判定,但 Agent 内不可配置的创建订单/确认订单/支付/付款点击拒绝清单始终优先,规则不能放宽;修改地址和收货地址在只读及点击字段中都禁止。
- 正式采购规则可以调用独立审核的改地址、创建待付款订单和只读核单动作;采集规则和演练规则不能调用。真机首次安装或验证仍需独立人工授权。
- 系统当前不提供自动支付、实时屏幕或管理端远程控制。付款、免密支付及任何等价动作不能配置为点击目标;只读识别字段可以包含支付或订单文字。后续若新增支付能力,必须由独立工单和显式控制重新评估。
+4 -4
View File
@@ -2,8 +2,8 @@
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
wiki_page: Android-Agent-API-Contract
wiki_url: https://git.ilapage.cn/OPC/goauto/wiki/Android-Agent-API-Contract.-
wiki_revision: 3d6a43359e015d4d6eaeb896f63dc1920ca601f6
synchronized_at: 2026-08-27T09:58:31Z
wiki_revision: 0bbe3f1041a0795a156dcd1205dbe85474e80f8c
synchronized_at: 2026-08-27T10:14:59Z
<!-- gitea-wiki-mirror:end -->
# MVP 共享 API 契约
@@ -153,9 +153,9 @@ v2 完整示例见 [PDD 商品详情规则](rules/pdd-product-detail-v2.proposed
- `pageEvidence`:精确的 PDD 包名、Activity 和非空节点证据。
- `collector.collectorId: pddProductDetailV1`:引用 Agent 中经过测试的类型化能力,不下发可执行代码。
- `hooks.afterSpecPanelOpen`:固定阶段的安全动作;当前只允许对语义目标 `specPanel` 执行 `swipe`,方向为上下左右、单动作次数 1~5、等待 0~2000 毫秒,单阶段最多 8 个动作。
- `pageRecovery.transientSoldOut`:商品详情页精确显示“商品已售罄”,或顶部区域出现固定兜底标题“相似商品”且缺少主商品规格/购买强证据时,允许对商品页执行一次有界恢复;默认下拉 2 次、间隔 1000 毫秒。推荐卡片自身的标题、价格和销量不属于主商品证据。`fallbackTopText` 缺省时 Agent 使用“相似商品”兼容旧快照。Agent 必须声明无障碍手势能力,且只把系统回调完成的下拉计为成功。规格面板内的 SKU 售罄不触发。恢复后仍异常时失败码为 `PDD_GOODS_SOLD_OUT`。
- `pageRecovery.transientSoldOut`:商品详情页出现规则配置的 `exactText`,或顶部区域出现 `fallbackTopText` 且缺少主商品规格/购买强证据时,允许对商品页执行一次有界恢复;内置默认值仍为“商品已售罄”与“相似商品”,默认下拉 2 次、间隔 1000 毫秒。推荐卡片自身的标题、价格和销量不属于主商品证据。`fallbackTopText` 缺省时 Agent 使用“相似商品”兼容旧快照。Agent 必须声明无障碍手势能力,且只把系统回调完成的下拉计为成功。规格面板内的 SKU 售罄不触发。恢复后仍异常时失败码为 `PDD_GOODS_SOLD_OUT`。
- `navigationRecovery.reopenBrowser`:首次跳转未通过精确商品详情页证据时,Agent 重新显式打开任务 `urlSnapshot` 并重放安全导航步骤;最多恢复 1 次,重开后等待 500~5000 毫秒。登录、验证码、风控、无效链接和进入详情页后的采集失败不触发。
- `collector.dimensionAliases`、`timeoutsMs` 和 `limits`:分别管理规格标题别名、超时和遍历/SKU 上限。
- `collector.dimensionAliases`、`collector.textAliases`、`timeoutsMs` 和 `limits`:分别管理颜色/尺码分类别名、只读页面识别文案、超时和遍历/SKU 上限。`textAliases` 可选;旧规则快照缺省时 Agent 使用当时内置默认值。新规则可在 `specPanel`、`dimension`、`selection`、`review`、`soldOut`、`purchase` 六组中配置面板、维度、选择摘要、评价入口、主商品证据和购买入口文字;每个数组为 1~20 项、单项不超过 30 个 Unicode 字符、不得有首尾空白或重复项。维度分类只依据规则的 `dimensionAliases`,代码不再以“颜色/款式/尺码/尺寸”字面量兜底,因此规则可以真实收窄。订单和支付文字允许作为只读识别证据;`修改地址`、`收货地址` 始终拒绝。用于阻止创建订单、确认订单、支付和付款控件成为采集点击目标的拒绝清单固定保留在 Agent,不能由规则覆盖。
例如规格面板打开后向上滑动两次,只修改规则:
+36 -1
View File
@@ -83,9 +83,44 @@
"size": [
"尺码",
"尺寸",
"套餐"
"套餐",
"参考分类"
]
},
"textAliases": {
"specPanel": {
"titleAliases": ["确认款式", "確認款式"],
"closeAliases": ["关闭", "關閉"],
"confirmAliases": ["确定", "確定", "确认", "確認"],
"quantityDecreaseAliases": ["减少数量", "減少數量"],
"quantityIncreaseAliases": ["增加数量", "增加數量"],
"paymentAreaAliases": ["微信支付", "先用后付", "先用後付", "支付方式"],
"orderSubmitAliases": ["提交订单", "提交訂單"],
"quickBuyAliases": ["现在买", "現在買"]
},
"dimension": {
"colorSuffixes": ["颜色", "款式"],
"sizeSuffixes": ["尺码", "尺寸"],
"exactNames": ["规格", "型号", "容量", "类型", "版本", "口味"],
"adaptiveAliases": ["套餐"]
},
"selection": {
"summaryPrefixes": ["已选", "请选择", "已選", "請選擇"],
"selectedPrefixes": ["已选", "已選"],
"specEntryPrefixes": ["请选择", "选择", "已选"],
"submitHintAliases": ["选择", "選擇", "颜色", "顏色", "尺码", "尺碼", "规格", "規格"]
},
"review": {
"entryAliases": ["商品评价", "全部评价", "评价详情", "评论", "晒单", "问答"]
},
"soldOut": {
"mainProductExactAliases": ["进店", "单独购买", "发起拼单", "立即购买"],
"mainProductPrefixAliases": ["商品评价"]
},
"purchase": {
"buyWords": ["单独购买", "立即购买", "发起拼单", "去拼单", "免拼购买", "购买"]
}
},
"timeoutsMs": {
"page": 30000,
"specPanel": 10000,