docs: import wiki at afc651f75a3a
+77
@@ -0,0 +1,77 @@
|
|||||||
|
<!-- docs-wiki-sync:docs/tasks/T-273.md@afc651f75a3abc2676bb13aa8a80f6aa6a25a72e -->
|
||||||
|
> 同步来源:[`docs/tasks/T-273.md`](/chengma/mroubao/src/commit/afc651f75a3abc2676bb13aa8a80f6aa6a25a72e/docs/tasks/T-273.md) · commit `afc651f75a3a`
|
||||||
|
|
||||||
|
---
|
||||||
|
id: T-273
|
||||||
|
title: 在 Roubao API 设置中测试本地模型配置
|
||||||
|
phase: 2
|
||||||
|
deps:
|
||||||
|
- T-207
|
||||||
|
- T-272
|
||||||
|
status: DONE
|
||||||
|
created: 2026-08-01
|
||||||
|
context_ref: c0011d4
|
||||||
|
work_branch: null
|
||||||
|
write_paths:
|
||||||
|
- docs/tasks/T-273.md
|
||||||
|
- docs/current-state.md
|
||||||
|
- docs/02-requirements.md
|
||||||
|
- docs/04-architecture.md
|
||||||
|
- docs/05-coding-rules.md
|
||||||
|
- android-buyer/app/src/main/**
|
||||||
|
- android-buyer/app/src/test/**
|
||||||
|
---
|
||||||
|
|
||||||
|
## 问题 / 背景
|
||||||
|
|
||||||
|
Roubao 设置页可以保存本机 provider、Base URL、API Key 和模型,也可以通过
|
||||||
|
`GET /models` 获取模型列表,但该请求不能证明所选模型支持实际采购链路使用的 OpenAI
|
||||||
|
兼容多模态 `chat/completions`。配置错误目前只能在领取任务后暴露,既浪费搜索轮次,也
|
||||||
|
容易把模型不可用误判为规格或自动化失败。
|
||||||
|
|
||||||
|
本任务在“API 配置”分组增加显式测试按钮,只检查当前手机本地配置,不经过 Admin。
|
||||||
|
|
||||||
|
## 行为契约
|
||||||
|
|
||||||
|
1. “测试模型”使用当前已保存的 provider、Base URL、API Key 和 model;测试开始前执行
|
||||||
|
与正式 VLM 相同的必填项和端点安全校验,不读取任务、相册、截图或采购数据。
|
||||||
|
2. 请求使用内置、固定且不含业务信息的测试图和固定提示词,对
|
||||||
|
`POST <baseUrl>/chat/completions` 发出一次多模态请求,以证明鉴权、模型名、请求格式和
|
||||||
|
图片输入均可用。不得自动重试或跟随重定向。
|
||||||
|
3. 按钮执行期间显示测试中并保持禁用,避免重复付费请求;离开页面或 Activity 销毁时
|
||||||
|
协程取消必须取消 HTTP call。
|
||||||
|
4. 成功只显示“模型可用”;失败按本地配置、端点安全、鉴权、模型不存在/不支持、限流、
|
||||||
|
服务端、网络/超时和响应格式分类。UI、日志和崩溃记录不得包含 API Key、完整 endpoint、
|
||||||
|
固定测试图 Base64 或供应商响应正文。
|
||||||
|
5. 测试结果只存在当前 UI 状态,不写 SharedPreferences、数据库、outbox 或 Admin;成功
|
||||||
|
也不替代真实任务质量验收。
|
||||||
|
|
||||||
|
## 方案
|
||||||
|
|
||||||
|
1. 增加 provider-neutral 的模型连通性测试器和稳定结果枚举,使用有界响应、单次请求、
|
||||||
|
禁止重定向的 OkHttp client。
|
||||||
|
2. 在设置页增加带状态的“测试模型”命令项,并由 `MainActivity` 使用当前设置执行测试。
|
||||||
|
3. 使用 MockWebServer 覆盖请求契约、Bearer 脱敏边界、成功、鉴权、模型、限流、服务端、
|
||||||
|
超大/非法响应、网络失败和协程取消。
|
||||||
|
|
||||||
|
## 验收要点
|
||||||
|
|
||||||
|
- [x] 配置完整时点击一次只产生一个带固定测试图的 `chat/completions` 请求。
|
||||||
|
- [x] 测试中不能再次触发;成功和分级失败均在设置页明确显示。
|
||||||
|
- [x] 非安全 endpoint、空 model 和要求凭证但 Key 为空时不发网络请求。
|
||||||
|
- [x] 响应正文、API Key、完整 endpoint 和图片 Base64 不进入 UI、日志或持久化。
|
||||||
|
- [x] Android 单测、lint、Debug/Release APK 构建通过。
|
||||||
|
|
||||||
|
## 边界
|
||||||
|
|
||||||
|
- 不新增后端模型代理、Admin 配置、数据库字段或任务 payload 字段。
|
||||||
|
- 不使用真实任务图片,不评价模型的商品匹配质量、价格或供应商稳定性。
|
||||||
|
- 不把测试成功作为自动下单授权,也不改变 execution 已冻结的模式。
|
||||||
|
|
||||||
|
## 执行记录
|
||||||
|
|
||||||
|
- 2026-08-01:根据设置页需要主动验证本机模型配置的需求创建任务,状态 `TODO`。
|
||||||
|
- 2026-08-01:完成设置页“测试模型”按钮、执行中防重、当前配置校验和无持久化结果;
|
||||||
|
新增单次固定红色测试图请求以及鉴权、模型、限流、服务端、网络、超时和响应异常分类。
|
||||||
|
Debug/Release 各 448 项单测、`lintDebug`、`assembleDebug`、`assembleRelease` 全部通过,
|
||||||
|
状态改为 `DONE`。真实 provider 未调用,本任务不声明真实供应商质量或稳定性。
|
||||||
Reference in New Issue
Block a user