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

分章浏览。完整说明见 首页�?/p>

门控与标注流

多数�?app/chat_labeling_flow.py �?prepare_turn_labeling 流程中调�?LLMClient 分类/抽取方法�?/p>

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

system_body · 当轮业务大段(运行时拼装�?/h3>
app/routers/matches.py · _assemble_chat_system_final 参数 system_body

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

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

classify_labeling_gate

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

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

展开:system 主文(不�?LABELING_GATE_HELP_TOPIC_EXAMPLES 时请参考同文件常量�?/summary>
你只负责调用工具 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 且锚点省略�?/pre>
          

其它门控/分类(均为专�?system + 强制 tool �?JSON�?/h3>
app/llm_client.py · 多在 prepare_turn_labeling�?code>app/chat_labeling_flow.py)链路中调用

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

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

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

你只负责调用工具 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�?/pre>
          
classify_peer_now_place_requirement �?「对方此刻须在指定地点」类现时在场约束(工具同名)

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

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

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

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

classify_active_user_aborts_topic �?active 下用户是否明示中止当前绑定话题(工具�?classify_active_user_topic_abort�?/summary>

【会�?lane】{lane_hint �?未知}
取值含义:requester|solicited=需�?征询链;relay|receive=传话相关�?
【用户本条�?�?
你只负责调用工具 classify_active_user_topic_abort,不要输出自然语言�?仅在「是否明确中止当�?active 这一条业务话题」上作答�?/pre>
          
classify_need_segment_should_close �?是否应结束某条需求段(工�?classify_need_segment_close�?/summary>

你只负责调用工具 classify_need_segment_close,不要输出自然语言�?/pre>
            

user 块由代码拼为「【用户本轮】�?「【飞鸽本轮回复】」两段正文�?/p>

classify_labeling_confirmation_reply �?通用确认流(await_*)回复解�?/summary>

你只负责调用工具 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�?/pre>
            

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

pick_relevant_need_id_for_message �?多条并行 need 择一绑定(工具名 pick_relevant_need_for_message�?/summary>

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

── 仅有笔友候选、无 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�?/pre>
            

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