fix(consult): 每一轮回答前都必须调用排盘工具
This commit is contained in:
@@ -12002,3 +12002,35 @@
|
||||
- 相关记录:BUG-695、BUG-920
|
||||
- 复发自:无
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-922 | 咨询追问被提示词允许跳过排盘工具,整轮失败
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-17
|
||||
- 最近更新:2026-09-17
|
||||
- 影响面:`windowJyotishInstructions`、`jyotishInstructions`
|
||||
- 用户现象:申报时段会话连发短追问得不到回答,提示「Agent 未完成必要的方法与计算步骤,本次不会扣点」。
|
||||
- 触发条件:本命或申报时段模式下发「?」「你在说什么鬼」一类追问。
|
||||
- 根因:系统指令写「简单追问可复用已有 packet / context、不调工具」;`contractReady()` 却要求每次请求恰好一次成功排盘调用。跨请求没有可复用 packet(缓存只在单次请求内)。
|
||||
- 修复:两处指令改为每一轮(含短追问、澄清、抱怨)都必须先调用排盘工具,并写明计算只在本请求内有效。
|
||||
- 验证:`consultation-birth-time-mode.test.ts` 契约;既有 Agent 暴露工具测试仍绿。
|
||||
- 防复发:不得再写「follow-ups may use the existing」。
|
||||
- 相关记录:BUG-205、BUG-214、BUG-286、BUG-923
|
||||
- 复发自:无
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-923 | 第 0 步未强制排盘工具,提示词与运行合同对不齐
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-17
|
||||
- 最近更新:2026-09-17
|
||||
- 影响面:`consultationNatalPrepareStep`、`consultationWindowPrepareStep`、`consult/route.ts` 申报时段分支
|
||||
- 用户现象:同 BUG-922。回执只有 skill 与 runtime-contract-retry,没有任何 tool 步骤。
|
||||
- 触发条件:同上。
|
||||
- 根因:提示词是软约束,`toolChoice: "auto"` 不能保证第 0 步调用排盘工具。申报时段路线甚至没有 `prepareStep`。
|
||||
- 修复:第 0 步 `activeTools` 仅排盘工具且 `toolChoice: "required"`;后续步骤 `"auto"`。窗口路线对称加 `prepareStep`,首次 stream 与合同 retry 使用它。`retryForAnswer` / 续写 / 分段仍不强制。未改 `contractReady()`。
|
||||
- 验证:natal / window prepareStep 单测;`route.ts` 源码契约。既有「失败后重试成功仍过门禁」「契约未绿文本丢弃」仍绿。
|
||||
- 防复发:本命与窗口第 0 步必须 `required`。思考模式供应商历史上拒 named/required,本仓 Mastra 类型接受 `'required'`;若线上某模型拒收,另立单,不得静默改回 auto 而不改提示词。
|
||||
- 相关记录:BUG-214、BUG-286、BUG-922
|
||||
- 复发自:无
|
||||
- 修复版本:待发布
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# 进度 · 咨询追问轮必须先调排盘工具(2026-09-17)
|
||||
|
||||
基线:`origin/staging` @ `6d097de9`。
|
||||
分支:`codex/consult-followup-tool-contract-20260917`。
|
||||
BUG:922、923。Skill 未 bump。
|
||||
|
||||
## 做了什么
|
||||
|
||||
- **T1 / BUG-922**:删掉本命与窗口两处「简单追问可复用 existing packet/context」。`frontend/src` 已无 `follow-ups may use`。
|
||||
- **T2 / BUG-923**:`consultationNatalPrepareStep` 第 0 步 `toolChoice: "required"`。新增 `consultationWindowPrepareStep`,申报时段首次 stream 与合同 retry 走 `windowStreamOptions`。`retryForAnswer` / 续写 / 分段不带强制。
|
||||
- **prepareStep 类型**:`@mastra/core/dist/agent/types.d.ts` 的 `toolChoice` 为 `'auto' | 'none' | 'required' | { type: 'tool'; ... }`。本仓接受 `"required"`,未升级依赖。源码注释里曾写「思考模式供应商拒 named/required」;产品拍板每轮必调工具,仍上 `required`。若某模型线上拒收,另立单。
|
||||
- **T4 第一轮取证**(执行方无 VPS,留给产品/部署):
|
||||
|
||||
```bash
|
||||
cd /opt/jyotisha-production
|
||||
docker compose -f deploy/docker-compose.server.yml logs web --since 2026-09-17T00:00:00 \
|
||||
| grep agent-observability | grep '<该会话的 sessionId>' | head
|
||||
```
|
||||
|
||||
三条 `run.failed` 若都没有 `tool` 步骤,即本单同一根因;若第一轮有 `tool` 且 `status: failed`,另立单。
|
||||
|
||||
## 测试
|
||||
|
||||
| 项 | 结果 |
|
||||
| --- | --- |
|
||||
| `tsc --noEmit` | 0 错 |
|
||||
| 改动文件 eslint | 0 error |
|
||||
| `consultation-workflow-contract` + voice | **14 passed / 0 fail**(含 BUG-922/923 契约) |
|
||||
| `consultation-agentic-runtime` / `consultation-birth-time-mode` | 本机 Windows EPERM symlink(skill runtime alias),Linux CI 不受影响。断言已写在这两个文件里。 |
|
||||
| Python | 未改 |
|
||||
| 客户端 bundle | 未改,gzip 应为 0 |
|
||||
|
||||
T4 第一轮失败原因需 VPS `agent-observability` 日志,本机做不了。
|
||||
@@ -129,7 +129,7 @@
|
||||
| `TASK-rectification-tiebreak-card-loss-20260915.md` | `PROGRESS-rectification-tiebreak-card-loss-20260915.md` | **P0**:点卡上「再答两道参考题」交付卡消失(BUG-706);按钮亮但选项建不出变成裸题(BUG-708);旁白写「相对支持度」并与卡上入口打架(BUG-709)。卡上入口删除,出卡前收集,有活题时卡留下、采用置灰 | 待验收 | `codex/rectification-p0-20260915` |
|
||||
| `TASK-rectification-p0-fix-20260915.md` | `PROGRESS-rectification-p0-fix-20260915.md` | **验收修复单**:`f51e494c` 六条缺陷全部实现且方式正确,但 `page.tsx` 从 1951 涨到 1964 行,撞了 `chart-view-route.test.ts` 的 `<= 1951` 上限(AGENTS.md §6 增长冻结)。全量 fail 32→33,就这一条。门禁红很可能是 staging 停在 `2d7698ea`、6 个提交未部署的原因。修法是把 BUG-705 的十来行接线搬出 page.tsx,不放宽上限 | 待验收 | `codex/rectification-p0-fix-20260915` |
|
||||
| `TASK-settings-dialog-size-and-nav-20260915.md` | — | **复发单**:设置弹窗四个分区尺寸仍随内容跳变(BUG-698,复发自 BUG-554——旧防复发只查「有没有写 height」,查不到「写了没生效」);首要嫌疑是 `.settings-modal` 的 `dvh` 没有 `vh` 回退,不支持时整条 `height` 作废退化成内容高度,需先复现确认。另按产品要求去掉分区菜单左侧强调条,并拆开与悬停共用的选中态 | 待领取 | `codex/settings-dialog-size-and-nav-20260915` |
|
||||
| `TASK-consult-followup-tool-contract-20260917.md` | `PROGRESS-consult-followup-tool-contract-20260917.md` | 真机:申报时段会话连发「?」「你在说什么鬼」都 `run.failed runtime_contract_incomplete`,回执无任何 `tool` 步骤。根因是 Agent 系统指令写明「简单追问可复用已有 packet / context、不调工具」,而 `contractReady()` 要求每次请求恰好一次成功排盘调用;「已有 packet」跨请求并不存在(缓存只在单次请求内)。本命与窗口两个 Agent 同构。**产品拍板方案 1**:每轮必调工具(BUG-922 删例外句 + BUG-923 第 0 步 `toolChoice: required`);否决「没调工具就走不扣点纯对话」。第一轮正经问题为何失败留 T4 取证(回执只在 web 容器日志) | 待领取 | — |
|
||||
| `TASK-consult-followup-tool-contract-20260917.md` | `PROGRESS-consult-followup-tool-contract-20260917.md` | 真机:申报时段会话连发「?」「你在说什么鬼」都 `run.failed runtime_contract_incomplete`,回执无任何 `tool` 步骤。根因是 Agent 系统指令写明「简单追问可复用已有 packet / context、不调工具」,而 `contractReady()` 要求每次请求恰好一次成功排盘调用;「已有 packet」跨请求并不存在(缓存只在单次请求内)。本命与窗口两个 Agent 同构。**产品拍板方案 1**:每轮必调工具(BUG-922 删例外句 + BUG-923 第 0 步 `toolChoice: required`);否决「没调工具就走不扣点纯对话」。第一轮正经问题为何失败留 T4 取证(回执只在 web 容器日志) | 待验收 | `codex/consult-followup-tool-contract-20260917` |
|
||||
|
||||
### 个人报告
|
||||
|
||||
|
||||
Reference in New Issue
Block a user