Page:
T-276
Pages
00-ai-start-here
01-vision
02-requirements
03-tech-stack
04-architecture
05-coding-rules
06-tasks
07-user-stories
08-interaction-checklist
Design
Home
Integrations-shunyunbao-contract
PPT
T-001
T-002
T-003
T-004
T-101
T-102
T-103
T-104
T-201
T-202
T-203
T-204
T-205
T-206
T-207
T-208
T-209
T-210
T-211
T-212
T-213
T-214
T-215
T-216
T-217
T-218
T-219
T-220
T-221
T-222
T-223
T-224
T-225
T-226
T-227
T-228
T-229
T-230
T-231
T-232
T-233
T-234
T-235
T-236
T-237
T-238
T-239
T-240
T-241
T-242
T-243
T-244
T-245
T-246
T-247
T-248
T-249
T-250
T-251
T-252
T-253
T-254
T-255
T-256
T-257
T-258
T-259
T-260
T-261
T-262
T-263
T-264
T-265
T-266
T-267
T-268
T-269
T-270
T-271
T-272
T-273
T-274
T-275
T-276
T-277
T-278
T-279
T-280
T-281
Task-Template
Tasks
agent-context
api
clean-state-checklist
current-state
routes
Clone
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
同步来源:
docs/tasks/T-276.md· commitafc651f75a3a
id: T-276 title: 将候选图片搜索收敛为两轮 phase: 2 deps:
- T-248
- T-250
- T-272
- T-275 status: DONE created: 2026-08-01 context_ref: 374bc6b work_branch: null write_paths:
- docs/tasks/T-276.md
- docs/current-state.md
- docs/04-architecture.md
- docs/05-coding-rules.md
- docs/api.md
- android-buyer/app/src/main/**
- android-buyer/app/src/test/**
- backend-api/internal/**
问题 / 背景
现有候选采集执行三轮图片搜索:前两轮执行相同的严格 SKU 匹配,第三轮再回传两个 默认排序结果。第二轮没有提供新的召回策略,却重复导入参考图、等待结果页和浏览商品, 增加任务耗时与拼多多页面漂移概率。
目标是在不降低身份、安全和审计要求的前提下改为两轮:第一轮扩大检查样本,第二轮 直接承担保底职责。
行为契约
- 每个 execution 最多执行两轮图片搜索;第一轮最多打开并检查 6 个不同候选,第二轮 最多打开并检查 2 个不同候选。
- 第一轮继续执行颜色/尺码严格匹配并增量回传,最多保存 5 个可确认候选;达到目标后 不执行第二轮。
- 第一轮结束仍不足目标时执行第二轮。第二轮优先保留已验证匹配结果;最终不足目标时,
可将默认排序前 2 个身份已解析商品作为
FALLBACK回传。 FALLBACK只能来自第二轮,必须保留search_round=2、result_rank=1..2,不得绕过 商品身份解析、证据、支付边界、登录、验证码或风控检查。- 后端拒绝
search_round>2、第二轮以外的FALLBACK和超过两个保底候选;Admin、 事件和诊断统一显示两轮口径。 - 升级前已被后台接受的三轮候选仍可查看;新 App 不得继续执行第三轮,也不得改写既有 审计记录。尚未上传的旧第三轮 outbox 不按新契约伪装,须由任务重试入口创建新 execution。
方案
- 将 Android 搜索计划从三个 attempt 改为两个明确阶段,并把每轮候选浏览上限固化为
6 / 2;复用既有进度快照和幂等增量回传。 - 第二轮沿用当前第三轮保底实现,但将合法轮次、耗尽判定、恢复逻辑和诊断字段统一改为 2。
- 后端数据库保留历史
search_round=3数据的读取能力,新提交接口只接受两轮规则; 不依赖客户端自报字段放宽校验。 - 更新架构、API 和编码约束,增加 Android 与 Go 回归测试。
验收要点
- 新 execution 最多两轮,第一轮最多检查 6 个、第二轮最多检查 2 个。
- 第一轮最多保存 5 个严格候选,达到目标后不启动第二轮。
- 第二轮可回传最多 2 个
FALLBACK,轮次和排序字段正确。 - 新请求的第三轮或非法保底候选被后端拒绝,历史三轮记录仍可读取。
- 重启恢复、增量回传、终态耗尽和诊断事件均使用两轮口径。
- Android 单测、Go 全量测试、lint 和 Debug/Release 构建通过。
边界
- 本任务不增加节点 JSON/LLM 解析,不改变规格选择算法或价格判断。
- 不放宽
goods_id、证据、候选唯一性、人工确认、授权、下单和支付边界。 - 不清理或迁移历史三轮候选审计数据。
执行记录
- 2026-08-01:根据两轮收敛方案创建任务,状态
TODO。 - 2026-08-01:Android 搜索门禁改为两轮,第一轮预算为 6 次候选打开、4 次滚动和 100 秒浏览,最多保存 5 个严格候选;第二轮预算为 2 次候选打开、0 次滚动和 45 秒 浏览,最多保存 2 个保底候选。节奏设置同步收敛为两轮,并从旧第三轮保底超时设置 一次性读取兼容值;新设置保存两轮版本标记。
- 2026-08-01:Android 证据、outbox 与 Go API 统一只接受新请求轮次
1..2;严格候选 固定第 1 轮、保底候选固定第 2 轮,累计最多 5 个且保底最多 2 个。历史数据库记录不做 迁移。Go 全量测试、Android Debug/Release 单测、lintDebug、assembleDebug和assembleRelease全部通过,状态改为DONE。