7/17/2026
问题
你看一下test.txt,这是我从数据库里取出来的一个客户和系统的对话.具体路由分配的agent可以从data/logs/wenwen_routing.jsonl里看到当前分配的路由agent.
现在的问题是
1.系统设计时是可以通过聊天上下文给客户聊天提到的家庭关系,比如父母,子女,亲人建立健康档案的,但你可以通过上下文看出,返回的关系是错乱的,把客人的血糖定义为他父亲的血糖等.
2.系统设计时,是有拉回主题的能力的,但你可以看到,客人聊了很久,还是没有拉回我们的产品
最终修复计划
PR 1 — Bug 3 止血:整段回复重复
根因:onboarding_stage >= 4 后 onboarding 透传不写 reply(graph_nodes/onboarding.py:237-246),旧 reply 经 PG checkpoint 恢复,被 safety_outbound 复审通过、send_reply 重发。
- graph_nodes/safety_inbound.py:图入口无条件重置 per-turn 输出 reply=""、reply_bubbles=[]、safety_outbound={}、handoff_requested=False(顺带修 handoff_requested 只置不重置的同类隐患)
- graph_nodes/send_reply.py + 各专家节点:写 reply 时同写 reply_event_id,send_reply 校验与当前 event_id 一致,不等拒发+告警
- graph_nodes/dispatcher.py prompt:onboarding_stage >= 4 不再路由 onboarding
- 测试:graph_nodes/tests/test_reply_freshness.py(入口重置、新鲜度闸拒发旧 reply)
PR 2 — 问题 1:家人数据错乱(全链路)
读侧: - subject_resolver.py:1036 rule 3 豁免:裸数值短答 + current_subject 为家人且 TTL 未过期 + 上一轮 assistant 在追问该家人 → 允许继承,不强制 self;保留其余 T21 反污染约束
- graph_nodes/dispatcher.py:handler 描述加主体限定("drug_reduction:客户本人问减药"),user prompt 传 effective_subject 和家人话题标记
- graph_nodes/onboarding.py:290-303:补传 effective_subject
写侧守卫: - graph_nodes/drug_reduction.py:入口主体闸,非 self 不进本人减药状态机、不写本人 profile,改走家人用药咨询话术
- memory_writers.py:1605 补传 recent_context;health_background.py:19 删"没明说则 self",无法判定即丢弃
- memory_writers.py:1083 _sync_health_write 按 effective_subject;memory_lenses.py:110 同改
家人档案接通: - ProfileWriter(memory_writers.py:563-776):非 self 组健康字段写入 profile.subjects[称谓](放开 _apply_subject_isolation 白名单对应字段),死代码 summarizer.py:232 接线或删除
- 测试:graph_nodes/tests/test_subject_isolation.py(爸爸 7.8 不落本人档、"家里几个人血糖高"答出三人各自值、妈妈二甲双胍不触发本人减药)
PR 3 — 问题 2:拉回主题(轻量,N=5) - graph_nodes/dispatcher.py:从 state agent_used 尾部计连续健康闲聊轮数(health_consult/onboarding/drug_reduction),≥5 且高购买意向=false 时输出 pivot_hint=true
- health_consult.py / runner.py:pivot_hint 时条件注入"答完健康问题后自然带一句产品引导"指令块(仿 runner.py:2213-2228 家人轮硬约束的条件注入模式)
- 测试:graph_nodes/tests/test_pivot_hint.py(连续 5 轮后触发、pivot 指令注入、有购买意向时不触发)
验证与纪律
- 每 commit push 前 scripts/ai_review/review_commit.sh
- pytest agents/wechat_sales/graph_nodes/tests/ -v + 全量 pytest
- 用 test.txt 对话序列做端到端回归
- 域属 agents/wechat_sales/(朱果 review);顺序 PR1→PR2→PR3 独立提交
计划就绪,退出 plan mode 后从 PR 1 开始执行。