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

分章浏览。完整说明见 首页

门控与标注流

多数在 app/chat_labeling_flow.pyprepare_turn_labeling 流程中调用 LLMClient 分类/抽取方法。

橙黄左边条单独一次 LLM 请求的提示词条目,其 system 作为固定常量拼入主对话 system_final白底常规卡片:仅为 system_body 等与终稿挂载相关的索引说明。

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

app/routers/matches.py · _assemble_chat_system_final 参数 system_body

承接门控标注状态、画像与真诚度摘要、开放需求与传话条件、对话摘录等多段子拼接结果;具体段落随路由分支变化,源码为准。本章收录的门控与下方章节的需求、传话等内容均为构造 system_body 时的典型调用,并非并列的另一条独立 system。

展开:索引跳转 · 修改备忘
首页「主对话注入顺序」表列出的是 **_assemble_chat_system_final** 终稿内的段落顺序;本条 system_body 是其中之一。前置另有独立 LLM(如 idle 的 classify_labeling_gate)不在该表中列出。画像/需求/传话细则见 needs-profile.html、relay.html 与本章各小节。

classify_labeling_gate

app/llm_client.py · classify_labeling_gate · 调用方见 chat_labeling_flow.py

idle 时判断用户是否在:新需求、延续 collecting、传话确认、仅了解笔友、帮忙话题偏好、取消需求等;强制工具 classify_labeling_gate。正文中含常量 LABELING_GATE_HELP_TOPIC_EXAMPLES

展开:system 主文(不含 LABELING_GATE_HELP_TOPIC_EXAMPLES 时请参考同文件常量)
你只负责调用工具 classify_labeling_gate,不要输出自然语言。核心:对照【collecting 主需求】列表判断本条是「已有需求上继续」还是「全新需求」。
suspect_pick_need:用户本条在语义上延续、补充、修改、追问或与列表中**某一条**明显同一主题的找人/帮忙诉求(含仅一条 collecting 时对该条的补充)。
suspect_new_need_confirm:用户像在登记**另一条**与列表中**任一条摘要都明显无关**的新需求;或列表为空且疑似新提找人/帮忙需求。
二者互斥:列表非空时,只要与任一条可对齐就不要选 suspect_new_need_confirm。
suspect_cancel_need_pick:用户明确**取消/撤回/不找了/作废**,或根据上下文推测用户可能要取消某条在收集中的需求,且 collecting 列表非空(不要与「暂时不接新单」等闲聊混淆)。
suspect_view_confirm:用户想**仅了解**某位笔友的背景(只读、非传话、非新需求登记);须 has_buddy=true 才有意义。
suspect_help_topics_confirm:用户在与**飞鸽帮忙匹配/征询**相关场景下,调整对某类话题今后**多推或少推、多问或少问**的态度(含记入白名单或黑名单)。典型对照:【见 LABELING_GATE_HELP_TOPIC_EXAMPLES 常量】
suspect_relay_confirm:**仅当 has_buddy=true** 且用户语义为请飞鸽向**已有笔友**做日常转告;has_buddy=false 时不得选用(应 dialogue)。
suspect_solicited_confirm / suspect_help_topics_confirm / suspect_relay_confirm / suspect_view_confirm / dialogue 的其余语义不变;传话与仅了解对方背景相冲突时优先 suspect_relay_confirm(须 has_buddy)。
若用户只是在调整**系统**将来匹配/征询时对某类话题的多推/少推态度、未指向向某位笔友带话,选 suspect_help_topics_confirm;若明确是请飞鸽向**某位笔友**转告日常内容,选 suspect_relay_confirm。
【现时地点附加字段】peer_must_be_now_at_named_place / now_place_anchor:本条若隐含或明确要求将通过飞鸽匹配到的**另一方/候选人**在**现在/现时/此刻/眼下**须在某一可被用作检索范围的**指定地点**(市/区/商圈/地标/站名等),则 peer_must=true 并填入最短地名短语;与「同城即可」「希望以后见面」「籍贯/老家」「长期在某城」等非「此刻在场」区分开;不涉及则 peer_must=false 且锚点省略。

其它门控/分类(均为专用 system + 强制 tool 或 JSON)

app/llm_client.py · 多在 prepare_turn_labelingapp/chat_labeling_flow.py)链路中调用

下方每一项可点击标题展开;左侧为与源码一致的 system 主文摘录,右侧为本条的修改建议草稿(独立保存键)。完整工具 schema 见同文件对应 async def

detect_help_topic_preference_signal — 本条是否像在调整帮忙话题偏好(工具同名)

你只负责调用工具 detect_help_topic_preference_signal,不要输出自然语言。
仅判断:本条**核心语义**是否在调整后续「帮忙匹配/征询」时对某类话题的多推或少推、是否要把某话题记入白名单/黑名单。
典型正向情形(字面不必完全一致):与本产品飞鸽有关的**话题偏好**,典型说法包括(字面不必一致):「别再给我推/别老是问我/别提…」某一类话题;「多给我推点/多问问我…」某一类话题;「把XXX设为白名单/黑名单」「加入白名单/记入黑名单」等;或从名单**去掉/删掉/移除/取消**某一话题(如「把健身从黑名单里删掉」)。整句核心是在调**以后匹配或征询时对某类内容的多推或少推**或维护对应名单。**不是**话题偏好:在登记一条**新的找人/帮忙需求**(应走需求确认链);明确请飞鸽向**某位笔友带话转告**(应走传话);泛泛提起「黑名单」「白名单」等与匹配偏好无关的闲聊。
若核心是在登记寻人需求、在向笔友带话转告、或只是闲聊不涉及上述设置 → adjusting_matching_topic_prefs=false。
ambiguous 偏保守时可 false。
extract_help_topic_setting — 抽取话题偏好操作(mutation / 白·黑 / topic_phrase / is_valid)

你只负责调用工具 extract_help_topic_setting,不要输出自然语言。
mutation=add:把 topic_phrase **新增**记入 list_kind(白或黑);
mutation=remove:从用户已保存名单中**删掉**与 topic_phrase 匹配的条目;
**list_kind** 必须对应用户**明确指出的那一侧**:说「黑名单」「少推/别推/别提」「不想被问」等为 **black**;
「白名单」「多问/多推」等为 **white**。从某一侧删除时,不得把用户说的「黑名单」误标为 white。
topic_phrase:要加或要删的**核心主题词**(如「二手交易」),从句中尽量原样抽取,勿留空(remove 时必填)。
white≈愿意多向您匹配或询问;black≈少推少问。
若非话题名单增减(如新需求、传话、闲聊)则 is_valid=false。
classify_peer_now_place_requirement — 「对方此刻须在指定地点」类现时在场约束(工具同名)

你只负责调用工具 classify_peer_now_place_requirement,不要输出自然语言。判断是否要求:通过飞鸽为某条找人/帮忙需求匹配的**候选人/对方**,在**现时/眼下/此刻**必须位于某一**具体**地点或可检索的地域锚点。与「同城」「离得近」「以后方便」「老家」区分开;若为真填入最短地名短语,否则 anchor 省略且 peer_must=false。
classify_await_relay_confirmation_reply — await 传话确认阶段用户答复(四类 outcome)

你只负责调用工具 classify_await_relay_confirmation_reply,不要输出自然语言。
四选一 outcome:
affirmative:用户明确同意委托传话(是、好、对、嗯、可以、麻烦你帮我说一声等)。
negative:用户明确否认、拒绝传话、或否认「要给当前对象传话」这一前提,且**没有**补充新的传话对象或纠正性传话说明。
target_correction:用户否定上一确认中的对象或前提,但**同时**补充了真正的收件人、或说明了要给谁传话/带什么话(如「不是,是给B」「不对,我要找小李」「其实是让她帮我转达」)。
unclear:寒暄、跑题、语义不足以下判,或同时混杂多种无法归类的意图。
classify_await_help_topics_confirmation_reply — await 帮忙话题确认回复(工具名 classify_help_topic_confirmation

你只负责调用工具 classify_help_topic_confirmation,不要输出自然语言。
confirm_yes=用户明确同意按飞鸽确认的上述操作执行;
confirm_no_cancel=否定并取消、不要执行;
rephrase_intent=否定当前理解、换说法重述想**加删哪条**或**哪一侧名单**(系统会再提取);
unclear=短句附和或看不出来。

user 侧由代码拼装「待确认」操作类型、名单侧、话题短语及(可选)已确认话题事实块;与 classify_help_topic_confirmation 工具枚举对齐后归一。

classify_active_user_aborts_topic — active 下用户是否明示中止当前绑定话题(工具名 classify_active_user_topic_abort

【会话 lane】{lane_hint 或 未知}
取值含义:requester|solicited=需求/征询链;relay|receive=传话相关。

【用户本条】
…

你只负责调用工具 classify_active_user_topic_abort,不要输出自然语言。
仅在「是否明确中止当前 active 这一条业务话题」上作答。
classify_need_segment_should_close — 是否应结束某条需求段(工具 classify_need_segment_close

你只负责调用工具 classify_need_segment_close,不要输出自然语言。

user 块由代码拼为「【用户本轮】」+「【飞鸽本轮回复】」两段正文。

classify_labeling_confirmation_reply — 通用确认流(await_*)回复解析

你只负责调用工具 classify_labeling_confirmation_reply,不要输出自然语言。
await_pick_need:若用户明确写出候选中的 need_id、或列表序号对应的含义、或(候选仅 1 条时)用「是/好/对/确认」或明显在**延续讨论该条需求**而未否定,应判 pick_need 且 picked_need_id 为该条 id;若存在【系统预绑定 need_id】且用户只是肯定确认(如「是」「对」「嗯」),也应判 pick_need 且 picked_need_id=该预绑定 id。
多条候选时仅笼统同意而未指序号/未写 id 的用 unclear。
若用户明确拒绝或岔开话题用 confirm_no。勿编造候选外的 id。

user 块含当前待确认类型、候选 need_id、可选预绑定 id、可选 cancel_collecting_need 等语义提示;返回值 (outcome, picked_need_id)

pick_relevant_need_id_for_message — 多条并行 need 择一绑定(工具名 pick_relevant_need_for_message

你只负责调用工具 pick_relevant_need_for_message,不要输出自然语言。
须严格从用户文中的【允许的 need_id 列表】中选一条;不得编造列表外的 id。
用户明确讨论某条需求主题时,优先按 needs_desc 与近期带 need_id 的消息对齐该条。
若无法判断或与任一条均无关,need_id 填 -1。
pick_recent_binding_candidate_for_message — 近邻上下文下 need / 笔友绑定消歧(工具名 pick_recent_binding_candidate

── 仅有笔友候选、无 need 候选 ──
你只负责调用工具 pick_recent_binding_candidate,不要输出自然语言。
need_id 恒为 null。
根据用户消息与上文【笔友列表】,判断用户在指哪一位笔友,填写**buddy_user_id**(须与【允许 buddy_user_id 候选】或列表中的 buddy_user_id 字段完全一致,字符串逐字匹配)。
把用户提到的昵称/称呼与列表中的「昵称」对齐后选择对应 buddy_user_id。
能确定一位笔友时不得将 buddy_user_id 置为 null;列表中无任何匹配再 null。
不要填写 relay_buddy_id 数字。

── 仅有 need 候选、无笔友候选 ──
你只负责调用工具 pick_recent_binding_candidate,不要输出自然语言。
你必须严格从【允许 need_id 候选】中选择,buddy_user_id 恒为 null。

── need 与笔友候选同时存在 ──
你只负责调用工具 pick_recent_binding_candidate,不要输出自然语言。
你必须严格从允许候选中选择。
如果当前更像需求延续,优先给 need_id;如果更像指向某位笔友,优先给 buddy_user_id;无法判断则对应字段返回 null。

正文块前缀为允许的 need_id、buddy_user_id(字符串)候选行,后缀为格式化后的上下文(截断上限与代码一致)。