单轮 POST /api/chat · 调用链(排查用)
主路径源码:app/routers/matches/chat.py · chat()。按时间顺序执行;带 ★ 的为独立 LLM 请求(各自 system / tool,不拼进终稿 system_final)。
| 顺序 | 阶段 | 何时触发 | 模型 / catalog key | token 调试 context | 说明 |
|---|---|---|---|---|---|
| 1 | prepare_turn_labeling |
每轮 user 落库后 | ★ classify_labeling_gatesugg-labeling-gate |
— | idle 分流 → labeling_addon、phase 迁移;传话见 suspect_relay_confirm。详 门控。 |
| 2 | resolve_turn_write_policy |
每轮 | ★ 可选 classify_feige_turn_readonly_inquiry |
— | 只读 → 关闭全部写库 tool;否则 Phase1 向主路径开放符合条件的写库 tool 集合。 |
| 3 | 传话 bind 判路(门控降级等) | gate=suspect_relay_confirm 时 |
★ classify_relay_turn_mes_typesugg-matches-relay §2 |
— | 返回「对话」→ relay_turn_blocks_new_relay_write → 门控降级、不写库。失败时空 mes_type 亦当「对话」。详 传话章。 |
| 4 | _assemble_chat_system_final |
每轮(tool 阶段之前) | 无 LLM | — | 拼 system_final(见下表);此时尚未含本回合 tool 写库结果。 |
| 5a | 写库 tool 阶段 | use_feige_write_tools 或商家/邀请 tool 开放 |
run_feige_write_tool_phaseFEIGE_TOOL_DEEPSEEK_* · sugg-feige-write-tools |
feige_write_tool_phase |
小模型只选 tool,不生成用户可见正文。至多一个写库 tool / 回合。 |
| 5b | 主 LLM speak | 5a 之后(或有 tool 的回合) | 主飞鸽模型 | feige_speak_after_tool_receipts |
prepare_system_for_main_llm_speak 刷新账户快照 + 置尾重申 → 注入回执块 → 生成可见回复。 |
| 5c | 主 LLM 单轮 | 无写库/商家/邀请 tool 的只读回合 | 主飞鸽模型 | feige_combined_user_turn |
同样经 prepare_system_for_main_llm_speak 刷新快照后出话。 |
| 6 | 传话送达 / fulfill | tool 成功写 relay 锚点后 | ★ summarize_relay_content 等 |
— | 后台 pipeline,非主对话 system 一段。见 传话章。 |
写库 tool 开放条件(resolve_feige_write_tools_open):非只读 + phase/lane/笔友/ collecting 数。传话 tool 需 has_formal_buddy 且非 active+relay。开放 ≠ 一定调用:还取决于 tool 阶段模型与 require_confirm_intent 等服务端校验。
回执真源:TurnReceiptCollector · messages.action_receipts_json · chat_labeling_state.recent_turn_receipts_json。用户可见「已登记/已传达」应以 status=ok 回执为准。流程图:Tool/回执/回复(同目录)。
现象 → 优先查什么
| 用户可见现象 | 库内 / 回执信号 | 优先排查 |
|---|---|---|
| 飞鸽说「帮你传/帮你问」但对方没收到 | 无 relay_messages 新行;无 relay_delivered ok;action_receipts_json 空 |
① tool 阶段是否调 confirm_daily_relay_to_buddy ② _relay_write_intent 是否命中(如「帮我问她」)③ speak 空诺(无 ok 回执仍承诺)④ classify_relay_turn_mes_type 是否失败降级 |
| 传话被拒(「没法传/不合适」) | 同上;phase 仍 idle | ① 主模型内容策略(表白等)② 门控未进 suspect_relay_confirm / 无 tool-first addon ③ 最近原文权重盖过快照(见 最近原文) |
| 黑白名单/需求/好友与库内不一致 | 快照块与 DB 不一致 | ① speak 前是否 prepare_system_for_main_llm_speak ② tool 写库后快照是否刷新 ③ 记忆摘要/最近原文当事实(应认【账户快照·库内权威】) |
| 话题偏好改了但 UI 无回执 | help_topic_saved 无 ok |
tool 是否 confirm_save_help_topics;门控是否仅 pending(PHASE_AWAIT_HELP_TOPICS) |
| 登记/取消说了但没发生 | 对应 action 无 ok | tool 阶段 + seed_receipts_from_labeling_snap expect 是否覆盖该 action |
按 message id 排查:查 messages 行 → 同轮 user 文本 → recent_turn_receipts_json → 是否走 5a/5b → 对照上表。Admin 若启用 feige_turn_audit 可看完整 trace。
写库 tool · 开放 / 路由 / 回执
| Tool | 开放条件(摘要) | intent 启发式 | 回执 action | catalog |
|---|---|---|---|---|
confirm_daily_relay_to_buddy |
有正式笔友;idle/active;非 active+relay | _relay_write_intent · _user_text_implies_new_relay_request(不含「帮我问她…」等问句 — 已知缺口) |
relay_delivered(seed 未默认 expect) |
relay.html · sugg-feige-write-tools |
confirm_save_help_topics |
idle 或 await_help_topics | 明确指令或确认 + pending | help_topic_saved |
labeling.html |
batch_cancel_collecting_needs |
collecting ≥ 1 | 取消意图 | batch_cancel |
labeling.html |
confirm_register_collecting_need |
idle/active | 登记 / 确认新需求 | need_registered |
needs-profile.html |
bind_collecting_need |
idle + collecting ≥ 1 | 延续已有 collecting | — | labeling.html |
主对话 · system_final 物理注入顺序
组装函数:app/routers/matches/chat.py · _assemble_chat_system_final。下表为拼进主模型 system 的正文段顺序。★ 标注段落在 speak 出话前还会经 prepare_system_for_main_llm_speak 刷新账户快照并在最近原文之后追加置尾重申(不在 assemble 内重复列出)。
-
COMBINED_CONDUCT_REPLY_INSTRUCTION(品行 JSON + 正文 · FEIGE 前缀第 3 段)
品行评估 JSON + 分隔符 + 对用户正文;misconduct 与高姿态冷处理口径。
-
CHAT_OPERATION_TOPIC_BLOCK · 接在 FEIGE 前缀之后的运营短段(
system_prefix)运营话题:助手主动挑起的话题气泡须自然延展,不显摆后台模板。
-
build_context_for_model · 记忆摘要(L1/L2/重要记忆)
普通回合前缀【记忆摘要·非落库事实】;查库回合另有更强非权威声明。好友/需求/名单事实以账户快照为准。
-
system_body · 当轮业务大段(运行时拼装)
含【用户账户快照·库内权威】五块(笔友/进行中需求/本月帮助/黑白名单)、门控 addon(含 tool-first 传话)、写库 tool system 段、持久化回执等。
-
★ speak 前 · prepare_system_for_main_llm_speak
刷新中段【账户快照】并在最近原文之后追加【置尾重申】;写库回合 speak 与只读单轮均执行。
app/user_account_chat.py·chat.py -
★ speak 前 · 本回合系统回执块
tool 阶段结束后注入;含「仅据 ok 回执声称已落实」指令。写库回合走
feige_speak_after_tool_receipts。
未列入上表主 system 的 LLM:门控 classify_labeling_gate、classify_relay_turn_mes_type、回合 mes_type、传话摘要、画像/需求抽取、写库 tool 阶段小模型等,均为独立请求;逐项摘录见 门控 · 回合 mes · 传话 · 需求 · LLMClient 速查。