e-pigeon 后端 · LLM 调用场景索引

下列「system / 提示」摘录自仓库源码;人设全文见 persona/MATCHMAKER.md(或 MATCHMAKER_SOUL_FALLBACK_INLINE)。首页主体按主对话 system 物理注入先后顺序排列;下方新增单轮排查视图便于对照 message id 分析。文档可能滞后于代码。修改建议定稿:docs/llm-call-catalog/modification-notes.json;请通过 uvicorn 打开 /llm-call-catalog/(端口与启动命令一致)后点「保存此条」写回,或在编辑器中直接改 JSON。

单轮 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_gate
sugg-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_type
sugg-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_phase
FEIGE_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 内重复列出)。

  1. MATCHMAKER_SOUL · 人设正文(FEIGE 前缀第 1 段)

    FEIGE_ANTHROPIC_CACHE_PREFIX · MATCHMAKER_SOUL

    飞鸽人设灵魂;缺失时用内联兜底。全文见 persona/MATCHMAKER.md

  2. 【称呼与隐私】(FEIGE 前缀第 2 段)

    固定短文

    对用户称「你」、禁输出登记真实姓名等。

  3. COMBINED_CONDUCT_REPLY_INSTRUCTION(品行 JSON + 正文 · FEIGE 前缀第 3 段)

    COMBINED_CONDUCT_REPLY_INSTRUCTION

    品行评估 JSON + 分隔符 + 对用户正文;misconduct 与高姿态冷处理口径。

  4. _FEI_GE_RELAY_STATIC_INTRO 全文(FEIGE 前缀第 4 段)

    _FEI_GE_RELAY_STATIC_INTRO

    飞鸽传书自然语言说明;勿在用户可见正文写旧方括号/机器协议串。

  5. CHAT_OPERATION_TOPIC_BLOCK · 接在 FEIGE 前缀之后的运营短段(system_prefix

    CHAT_OPERATION_TOPIC_BLOCK

    运营话题:助手主动挑起的话题气泡须自然延展,不显摆后台模板。

  6. build_context_for_model · 记忆摘要(L1/L2/重要记忆)

    build_context_for_model

    普通回合前缀【记忆摘要·非落库事实】;查库回合另有更强非权威声明。好友/需求/名单事实以账户快照为准。

  7. system_body · 当轮业务大段(运行时拼装)

    labeling_addon + 门控头 + 账户快照 + 画像 + … + 写库 tool 说明

    含【用户账户快照·库内权威】五块(笔友/进行中需求/本月帮助/黑白名单)、门控 addon(含 tool-first 传话)、写库 tool system 段、持久化回执等。

  8. _build_persona_rag_context · 人设相关 RAG 追加

    _build_persona_rag_context_with_timeout

    人设相关 Milvus 追加上下文,按用户本轮合并输入检索。

  9. merchant_kb_ctx · 商家知识正文

    merchant_kb_ctx

    商家咨询链路下向量检索正文注入。

  10. merchant_kb_tool_suffix · 商家工具轮 system 尾部补注

    merchant_kb_tool_suffix

    工具轮可取块清单等动态尾段(speak 阶段可再追加)。

  11. build_progress_reply_context_before_chat · 需求进度上下文

    is_backend_records_inquiry

    查进度/查库类回合时并入需求进度简述。

  12. format_now_for_llm_system · 当前时间

    format_now_for_llm_system

    为模型注入可读「当前时间」短行。

  13. RELAY_MATCH_INVITE_TOOL_SYSTEM · 征询邀请 tool 说明

    use_relay_invite_tool

    active+requester 且有 pending 候选人时追加。

  14. 最近 N 条原始对话 · build_context_for_model(recent_raw_text)

    RECENT_MESSAGES_LIMIT / CHAT_SYSTEM_MAX_CHARS

    置尾;声明为语气承接、非落库事实;超长预算时优先削减此段。

  15. ★ speak 前 · prepare_system_for_main_llm_speak

    replace_account_snapshot_in_system_body + 置尾重申快照

    刷新中段【账户快照】并在最近原文之后追加【置尾重申】;写库回合 speak 与只读单轮均执行。

  16. ★ speak 前 · 本回合系统回执块

    append_receipt_block_to_system · feige_turn_receipts.py

    tool 阶段结束后注入;含「仅据 ok 回执声称已落实」指令。写库回合走 feige_speak_after_tool_receipts

未列入上表主 system 的 LLM:门控 classify_labeling_gateclassify_relay_turn_mes_type、回合 mes_type、传话摘要、画像/需求抽取、写库 tool 阶段小模型等,均为独立请求;逐项摘录见 门控 · 回合 mes · 传话 · 需求 · LLMClient 速查

文档目录:docs/llm-call-catalog/