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

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

分层记忆与评价(BackgroundTasks)

app/chat_helpers.py · run_chat_memory_layer_async

橙黄边条的是在后台任务链中发起的独立 LLM 摘要/评价。文末「挂载主对话」两条为终稿拼装消费说明,不是本节独立提示词常量本身。

会话话题摘要

summarize_chat_session_topic — system 见 llm_client(会话级 topic)。

展开:会话摘要 · 修改备忘
system(与源码一致):

你是对话主题提炼助手。输入是用户与 AI「飞鸽」的一次会话原文(用户与助手交替)。
任务:用**不超过 50 个汉字**输出**一行**概括,只写**用户本人**可用于婚恋/社交匹配的个人信息与特质(择偶、性格、职业、城市、兴趣、价值观等用户自述)。
若整段仅有飞鸽产品/功能交互(传话、匹配、设置、商家咨询等)而无用户个人信息,只输出:(无个人信息)
禁止编造;禁止 Markdown、编号、引号包裹。

user:「请提炼用户个人信息(≤50 汉字,单行;若无则输出:(无个人信息)):」+ history_text

chat_summaries→L1→L2、重要记忆

后台 run_chat_memory_layer_async 现行链路:chat_summaries(20 条有效话题,占位「(略)/(无个人信息)」不计数)extract_recurring_topics_from_chat_summaries_for_l1 → L1;L1(20 条)extract_recurring_topics_from_l1_summaries_for_l2 → L2;L1 批次后还有 evaluate_user_from_l1extract_frequent_topics_from_l1 → 重要记忆。L0(messages) 不直接写 L1,只供主对话「最近原文」与切分会话原料。下列 summarize_l0_to_l1 / summarize_l1_to_l2遗留未调用

展开:记忆层多条 system · 统一修改备忘
以下为 app/llm_client.py 各函数 **system** 正文(user 侧多为 JSON 任务或列表;仍以源码为准)。

【现行 · chat_helpers 会调用】

── extract_recurring_topics_from_chat_summaries_for_l1 · system ──
你是话题聚类助手:在多行相近短语中找出重复出现的语义簇并命名。
(输入:20 条有效 chat_summaries 短话题,占位不计入批次;输出:JSON 数组,≥2 条相近才成簇)

── extract_recurring_topics_from_l1_summaries_for_l2 · system ──
你是跨多条中层摘要的聚类助手。
(输入:20 条 L1 短话题;输出:JSON 数组)

── extract_frequent_topics_from_l1 · system ──
你是对话分析助手,从摘要中提取用户反复提及的话题。
(L1 ≥3 条时抽 1–3 条 → important_memories)

【遗留 · llm_client 仍有定义,当前 app/ 未调用】

── summarize_l0_to_l1 · system ──
你是一个对话摘要助手。根据用户与 AI 飞鸽的对话原文,提取对后续对话有帮助的要点,生成一段简洁的摘要。若每行前带有时间戳 [YYYY-MM-DD HH:MM],可在摘要中体现对话先后与大致间隔,便于后续评价守约、食言、真诚度变化。
(旧方案:40 条 L0 原文 → 1 段 L1 长摘要;已由 chat_summaries 层替代)

── summarize_l1_to_l2 · system ──
你是一个对话摘要与记忆管理助手,需要判断多条摘要是否围绕同一件事情。
(旧方案:10 条 L1 合并为 1 段 L2 + same_topic;已由 extract_recurring_topics_from_l1_summaries_for_l2 替代)

evaluate_user_from_l1

由 L1 摘要多维品行/匹配评价;system 为短心理学分析说明,长规则在 user 消息(见 L6728+)。

展开:system(evaluate_user_from_l1)
你是具备心理学训练的用户分析师与婚恋顾问。你必须在「上一次分数」基础上做连续、可解释的小步调整,各维度独立打分、禁止敷衍同分;信息不足则保持该维度上次分数基本不变。输出评价 JSON 时键名须与用户说明完全一致:dimensions、summary、suitable_buddy_summary。

user 侧长 prompt 含「上一次分数」与维度说明,修改时请同步 llm_client.py

build_context_for_model · 拼装进主对话的用户记忆上下文

app/memory.py · build_context_for_model

在组装主对话「用户记忆上下文」时使用:产出摘要段(记忆摘要:... 等);原文裁切段另见同页「最近原始对话摘录」条目。

展开:与主对话挂载关系 · 修改备忘
摘要段由 app/memory.py · build_memory_summaries_text / build_context_for_model 生成,按顺序拼接(仅在有内容时插入对应标题):

【用户重要长期记忆】
1. …
【高层摘要(L2)】
1. …
【中层摘要(L1,最近几条)】
1. …
【单次对话话题(最近若干次)】
1. …

(条数上限:重要记忆 10、L2 最近 2、L1 最近 5、单次会话话题 RECENT_CHAT_SUMMARIES_DISPLAY。启用 FEIGE_LLM_CONTEXT_CACHE_ENABLED 时摘要可能走缓存读。)

最近原始对话摘录 · build_context_for_model(recent_raw_text)

app/memory.py · build_context_for_model_assemble_chat_system_final 末尾拼接

主对话 system 尾部挂上「最近 N 条」对话原文裁切块;超长时组装循环会下调 recent_messages_limit(仅削减此段)。

展开:与主对话挂载关系 · 修改备忘
最近原文块格式(build_context_for_model):

【最近 {N} 条原始对话】
(生成回复时请与此处用户/助手原文连贯承接。)
[{可选时间戳}] 用户: …
[{可选时间戳}] 助手: …
[{可选时间戳}] 助手(你主动向用户发起的话题): …  ← mes_type 为运营话题时

条数 N = recent_messages_limit(默认 RECENT_MESSAGES_LIMIT,超长 system 时在 _assemble_chat_system_final 循环中下调)。时间戳由 format_message_ts_for_historyAPP_TIMEZONE 格式化。