diff --git a/backend/app/services/cached_replays.py b/backend/app/services/cached_replays.py index 6f780ce4..c7c02b9b 100644 --- a/backend/app/services/cached_replays.py +++ b/backend/app/services/cached_replays.py @@ -1047,27 +1047,133 @@ def _course_time(minutes: int) -> str: COURSE_REPORT_SECTIONS = [ ( "S01 执行结论:招生不是卖课,是把不确定感降到可付款", - "这轮双世界模拟完成后,最关键的结论是:第一期50人线下课能否成交,不取决于课程名是否足够吸引人,而取决于学员是否相信三个问题已经被处理:第一,钱交出去之后能不能获得高密度、可落地的能力提升;第二,现场组织和后续交付是否靠谱;第三,早鸟、同行和退款机制是否让自己感觉公平。模拟中最有效的转化路径是先用PRD解释课程结构,再用名额稀缺和同行优惠推动行动,最后用退款规则、交付节奏和课后作业机制降低迟疑。", + """本轮双世界模拟的核心判断是:第一期50人线下课的成交,不取决于课程名称是否足够宏大,也不取决于优惠力度是否足够夸张,而取决于学员在付款前能否确认三件事。第一,自己交钱后能拿到高密度、可落地、能复用的能力,而不是听一场情绪价值很强但回去无法执行的演讲。第二,现场组织、分组反馈、案例演练、课后作业和复盘机制足够明确,不会出现“现场很热闹,回家又归零”的体验。第三,早鸟、同行、退款、资料回看、社群服务等规则清晰,让学员感觉价格公平、权益确定、风险可控。 + +从模拟行为看,付款意愿最高的人并不是完全陌生的观望者,而是已经被AI工具刺激过、在自媒体/销售/产品/个人IP/企业运营中遇到真实问题的人。他们并不需要再被说服“AI很重要”,他们需要被说服的是:这门课能不能帮我把一个卡住的问题推进到可以执行。A03林岚反复提到,她愿意为“现场带走选题库、提示词、自动化流程和复盘模板”付款,而不是为趋势判断付款。A07陈亦桥则代表价格敏感但高需求的人,他对课程的质疑不是不认可AI,而是担心听完之后不会用。两类人共同指向一个结论:招生页和销售话术必须把抽象价值转成可交付对象。 + +因此,最稳的转化路径不是直接推销“名额有限”,而是先做诊断,再承诺交付,最后推动付款。诊断阶段问清楚学员当前业务、AI使用水平、最想解决的问题、过去学习失败的原因;交付阶段明确课前问卷、现场案例、实操模板、分组反馈、课后作业、资料回看、复盘节点;付款阶段再匹配超级早鸟、普通早鸟、两人同行或三人同行。这个顺序会显著降低强销售感,也让优惠机制从“便宜”变成“锁定交付权益”。 + +对现场演示而言,Foresight的价值也在这里:它不是简单帮团队生成一段招生文案,而是在正式投放和正式销售前,先用30个虚拟Agent模拟不同学员、运营人员、拼团组织者、退款敏感用户、同行观察者和交付负责人会怎样反应。系统提前暴露犹豫点、误解点、付款触发点和舆情风险,再把这些反应整理成可执行的销售SOP和交付SOP。客户看到的不是一份漂亮报告,而是一套可以在真实招生前降低不确定性的经营系统。""" ), ( "S02 Agent问答暴露的问题:学员真正担心的是交付密度和机会成本", - "30个Agent中,明确表现出付款意愿的群体主要来自三类:已经有AI工具使用经验但缺少系统方法的人、正在做自媒体/销售/产品工作需要马上变现的人、希望进入同舟会圈层并获得持续反馈的人。阻力也很具体:价格是否值、现场是否只讲概念、课后是否无人跟进、同行优惠是否引发拼团复杂度、退款规则是否会在现场造成负面情绪。这说明销售页和客户经理话术必须少讲抽象愿景,多讲课前诊断、课中演练、课后复盘和明确交付物。", + """30个Agent的问答显示,学员真正担心的不是“AI有没有前景”,而是“我付出的时间、钱和注意力能不能换回确定的进步”。这种担心可以拆成四类。第一类是交付密度:现场到底是讲概念,还是带着我把一个真实问题做出来。第二类是机会成本:我是否需要请假、坐车、住酒店、放弃周末,如果最后只是听了一堆原则,就很难接受。第三类是后续反馈:我回去做作业遇到问题,有没有人看、有没有复盘、有没有同伴压力。第四类是规则公平:同样买课的人,超级早鸟、早鸟、同行、临时报名之间权益是否清楚,是否会让早付款的人吃亏。 + +#### A00 方见舟|课程发起人 / 同舟会线下课主理人 +**Q:** 你最担心第一期招生哪一步失控? +**A:** 我不担心大家没有兴趣,我担心大家都在等最后一刻确认。等的人越多,销售越容易被动。所以要把课前诊断、席位机制和交付清单提前说清楚,让学员知道现在确认不是为了便宜,而是为了提前进入准备流程。 + +#### A03 林岚|高意愿学员 / 自媒体创业者 +**Q:** 什么会促使你立刻付款? +**A:** 如果我知道现场能带走一套选题方法、提示词、自动化流程、内容复盘模板,并且这些东西能直接用于我接下来一个月的账号更新,我愿意买早鸟。单纯说趋势、认知、未来机会,我会觉得听过很多次,不会马上动。 + +#### A07 陈亦桥|价格敏感学员 / 职场转型产品经理 +**Q:** 你为什么犹豫? +**A:** 我怕课程太贵但听完不会用。我的问题不是不知道AI重要,而是不知道怎么把AI放进自己的工作流。最好有课前问卷和课后作业反馈,让我知道自己不是只来听热闹。 + +#### A11 孟知秋|同行拼团组织者 / 知识付费社群运营者 +**Q:** 同行优惠的最大风险是什么? +**A:** 拼团能带来转介绍,但规则必须简单。如果三人同行核销复杂,销售会被大量沟通消耗。最好把同行权益写成一页图,不要让学员自己猜谁付款、谁登记、谁进群、谁拿资料。 + +#### A18 许若安|退款敏感学员 / 企业培训采购负责人 +**Q:** 什么情况会触发退款情绪? +**A:** 如果宣传说得很满,但现场案例和我的行业不相关,我会觉得预期落差大。退款规则要提前写明,哪些情况可以退,哪些是课程开始后不能退,不能等学员不满意时才解释。 + +#### A24 唐逸舟|交付运营负责人 / 课程项目经理 +**Q:** 课后最重要的动作是什么? +**A:** T+1交付资料,T+7收作业,T+14做一次复盘,T+30筛选转介绍线索。否则线下课热度很快散掉,学员会觉得当场很燃,回去没有后劲。 + +这些回答共同说明:销售页、私聊话术和现场控场都要围绕“交付确定性”组织。能成交的人要被快速推到付款动作;犹豫的人要被引导到诊断和样例;风险敏感的人要提前看到规则边界;拼团传播者要获得简单、可转发、可解释的规则。只要把这些问题在付款前处理,课程的转化就会更像一个有节奏的招生经营过程,而不是靠讲师个人影响力临场推动。 + +进一步看,Agent之间的差异也提示团队不能用同一套话术覆盖所有人。A03林岚要的是内容生产效率,A05周予白要的是销售团队工作流,A09陆佳宁要的是企业培训可复制性,A21沈知微要的是金融客户经营案例。对这些人都说“AI时代必须学习”没有意义,真正有效的是把课程价值翻译成他们各自的业务场景。也就是说,销售系统要先识别角色,再匹配证据:自媒体用户看选题和内容流程;销售负责人看客户研究和拜访提纲;企业培训负责人看组织复制;金融客户经理看客户分析和产品推介。""" ), ( "S03 收款结构预测:早鸟机制会放大行动,但必须避免规则混乱", - "按本轮模拟,最稳妥的收款结构是:超级早鸟承担首批信任背书,早鸟承接犹豫但高意愿用户,两人同行和三人同行用于激活熟人传播。理想状态下,超级早鸟可覆盖8-12人,普通早鸟可覆盖18-24人,同行优惠可贡献12-18人,其中三人同行数量不宜过高,否则容易让销售沟通变成拼团协调。销售动作应把‘优惠’从单纯降价,转成‘确认席位、锁定课前诊断、优先获得分组反馈’。", + """收款结构的关键不是让价格看起来更低,而是让不同决策状态的人都有一个顺手的付款理由。模拟中,超级早鸟适合承担首批信任背书,主要面向熟人、老学员、已明确需求的人;普通早鸟适合承接有意愿但需要再确认的人;两人同行和三人同行适合激活熟人传播,但不能让拼团变成销售团队的主要工作量。 + +本轮预测中,50人目标的较稳结构是:超级早鸟8-12人,普通早鸟18-24人,两人同行贡献8-12人,三人同行贡献4-6人,临近开课原价或少量特殊确认名额补足余量。这个结构的好处是既能制造第一批已付款样本,又不会让三人同行占比过高,导致订单确认、资料分发、入群登记和发票沟通过于复杂。A11孟知秋的反馈尤其重要:如果同行优惠规则需要反复解释,传播者会从帮你招生的人变成制造沟通成本的人。 + +优惠权益建议从“少多少钱”改写成“提前获得什么”。超级早鸟可以绑定课前诊断优先权、席位确认、分组优先、案例征集优先;普通早鸟强调价格窗口和课前准备材料;两人同行强调共同作业和现场同组;三人同行强调团队问题可以被纳入案例池,但不额外承诺讲师单独服务。这样做可以避免用户把优惠理解成纯折扣,也能让早付款的人觉得自己获得了确定性,而不是承担了先付款风险。 + +销售节奏上,建议分四个窗口。第一窗口是老用户内测确认,目标是拿到第一批付款和真实问题;第二窗口是公开早鸟,目标是把课程价值讲清楚;第三窗口是同行传播,目标是让已付款学员带来同伴;第四窗口是临近开课提醒,目标是处理犹豫但高意愿的人。每个窗口都要有对应话术和素材,不要把所有信息堆在一个招生海报里。""" ), ( "S04 舆情与退款风险:最大的负面不是退款本身,而是预期不一致", - "模拟中的负面舆情集中在四个点:课程内容是否过密导致听不完、现场案例是否贴近自己、退款口径是否透明、课后社群是否变成信息噪音。真正需要防的不是有人提出退款,而是退款问题被解释成‘交付不确定’。因此,在付款前就要明确课前问卷、现场产出、课后复盘、资料回看、作业反馈和退款边界,避免把所有承诺压到讲师个人魅力上。", + """模拟中的负面舆情并不集中在“价格贵”本身,而集中在预期不一致。学员可以接受高价格,但不能接受高价格背后没有清晰交付;可以接受课程密度高,但不能接受没有资料回看和复盘;可以接受现场案例不可能覆盖所有行业,但不能接受自己在报名时完全不知道案例范围;可以接受退款边界严格,但不能接受付款后才被告知规则。 + +A18许若安的回答代表企业采购和理性用户:只要宣传说得过满,而现场案例与自己行业差距过大,就会触发预期落差。A24唐逸舟则从交付侧提醒,线下课结束后如果没有T+1资料、T+7作业、T+14复盘、T+30转介绍筛选,课程热度会迅速衰减。这两个视角放在一起看,退款风险其实不是一个财务动作,而是一个信任信号。用户提出退款时,往往已经经历了价值感下降、预期落差、沟通无回应、同伴讨论放大这几个阶段。 + +因此,建议把退款和交付规则前置到销售材料里,而不是藏在付款后须知里。规则可以分为四层。第一层是报名确认前:说明适合人群、不适合人群、课程强度和前置准备。第二层是付款后到开课前:提供课前问卷、资料预习、问题征集,如果学员发现明显不匹配,可以在规定时间内处理。第三层是开课当天:明确签到、资料、录屏或回看、作业提交方式。第四层是课后:明确反馈窗口、复盘节点和社群边界。 + +舆情处理上,不要让运营人员临场自由发挥。应提前准备三类回应模板:价值解释模板,用于解释课程交付物;规则解释模板,用于解释退款、名额、同行权益;情绪安抚模板,用于面对“我听不懂”“跟不上”“不适合我”的反馈。系统演示时,可以把这些模板展示成Foresight从模拟中自动提炼出的风险预案,让客户看到系统不仅预测销售,也预测交付争议。""" ), ( "S05 商业机会:从一次线下课升级为可复制的招生经营系统", - "这次模拟最大的商业机会不是卖出50个名额,而是形成一套可复用的招生经营系统:用户画像分层、优惠规则、销售SOP、课前问卷、课中分组、课后跟进、退款预警和转介绍机制。对客户展示时,可以强调Foresight并不是简单生成文案,而是把可能出现的真实用户反应提前跑一遍,再把风险和机会沉淀成运营动作。", + """这次模拟最值得展示的商业机会,不是“第一期能不能卖满50人”,而是从一次线下课中抽象出一套可复制的招生经营系统。这个系统包括八个模块:用户画像分层、需求诊断问卷、优惠与权益设计、私聊销售SOP、课前准备机制、现场交付机制、课后复盘机制、退款与转介绍预警。只要这些模块跑通,后续无论是第二期课程、企业内训、私董会工作坊,还是银行/保险/咨询行业的高客经营场景,都可以复用。 + +从商业角度看,Foresight的产品价值可以被包装成“经营预演”。传统团队常常先做海报、先投放、先销售,然后在真实用户反馈中被动调整。Foresight的做法是先把用户、销售、运营、交付、风险和舆情都变成Agent,让它们在一个模拟世界里提前互动。系统不是替代真实市场,而是在真实市场前给团队一次低成本的压力测试。它可以告诉团队:哪些话术会触发付款,哪些承诺会放大退款,哪些优惠会制造混乱,哪些交付动作能带来复购。 + +对银行客户或企业客户演示时,可以把这个能力迁移到他们的业务语境。银行推理财产品时,客户也会关心收益、风险、流动性、家庭共同决策和售后服务;企业卖高客服务时,客户也会关心价格、交付、案例、同伴和后续跟进。也就是说,这个线下课案例虽然是教育产品,但它展示的是一套普遍的“高客决策模拟能力”。这正是系统后续商业化的重点:不是卖一个demo,而是卖一种在复杂客户决策前进行多Agent、多变量、多时间轮次推演的能力。 + +本案例还暴露出一个增量机会:报告页可以成为销售资产。右侧Report Agent能够基于总结和Agent问答回答问题,并用角标引用具体证据;左侧报告可以跳转到对应章节和Agent原话。这种设计让客户看到“AI不是自己瞎想”,而是从模拟过程、访谈结果和结构化报告中提取结论。后续如果给企业客户交付,可以把每一次模拟沉淀为一个可追问、可回看、可复盘的互动报告,而不是只发一份PDF。 + +如果把这个能力再往商业化推进一层,可以形成三种产品形态。第一种是售前策略模拟:在课程、理财、企业服务、咨询项目正式销售前,先跑一轮不同客户角色的反应,产出销售话术、异议处理和风险提示。第二种是交付压力测试:在承诺客户之前,先模拟交付过程中的投诉、延期、信息误解、人员协作和复盘缺口。第三种是经营复盘资产:项目完成后,把真实反馈继续沉淀进报告,让下一轮销售和交付不再从零开始。这样,Foresight就不是一个临时演示工具,而是一套可以嵌入业务团队日常经营的智能预演层。 + +对客户来说,最直观的购买理由是“少踩坑”。很多团队不是没有方案,而是方案进入真实用户之后才发现话术不清、规则复杂、承诺过满、交付跟不上。Foresight提前把这些问题可视化,能帮团队在付出真实市场成本前先做修正。对于银行、保险、教育、咨询、企业服务等高信任行业,这个价值尤其明显,因为每一次高客成交都不只是一次付款,而是一次长期关系的开始。""" ), ( "S06 推荐SOP:先诊断,再承诺交付,最后推动付款", - "推荐现场使用三段式SOP。第一段是诊断:你现在最想用AI解决什么问题、过去学过什么、卡在哪一步。第二段是交付:这门课会让你带走哪些文件、流程、案例和可复制模板。第三段是决策:如果你确定要来,适合超级早鸟/早鸟/同行哪一种方式。这样的销售路径能减少强推感,也更容易在客户犹豫时回到具体价值。" + """推荐采用三段式销售SOP:先诊断,再承诺交付,最后推动付款。第一段诊断不要超过5分钟,但必须问到关键问题:你现在最想用AI解决什么业务问题?过去用过哪些工具?目前卡在选题、提示词、流程、自动化、团队协作还是变现?你这次来线下课最希望带走什么?如果这些问题问不出来,销售就只能回到抽象价值,很容易让学员感觉被推销。 + +第二段交付要尽量具体。不要说“帮你掌握AI能力”,而要说“课前会收集你的业务问题,现场会拆解选题、提示词、工作流和案例,课后会交付资料包、作业反馈和复盘节点”。对于A03林岚这样的高意愿学员,要强调可直接用于内容生产的模板;对于A07陈亦桥这样的价格敏感学员,要强调从不会用到能执行的路径;对于A18许若安这样的理性采购型用户,要强调适合/不适合人群和退款边界;对于A11孟知秋这样的传播型用户,要给他一页能转发的同行规则。 + +第三段决策要避免强压。可以用四类句式。对已确认需求的人,说“你现在最适合超级早鸟,先锁课前诊断和分组权益”。对还在犹豫的人,说“你可以先把问题发来,我们判断是否适合,不适合就不要报”。对想拉朋友的人,说“两人同行更适合共同做作业,三人同行适合团队问题,但登记规则要一次确认”。对价格敏感的人,说“如果你只是想听趋势,不建议报;如果你要现场做出一套流程,早鸟会更合适”。 + +运营侧SOP也要同步。付款后自动发送课前问卷;开课前48小时确认问题和分组;现场签到时提示资料包和作业路径;课程结束T+1交付资料;T+7收作业;T+14复盘;T+30筛选转介绍和二期线索。这个SOP的价值在于把一次线下课变成连续经营,而不是当天成交结束就松散掉。 + +为了让SOP可检查,建议每一步都对应一个“完成证据”。诊断阶段的证据是用户问题卡片;交付承诺阶段的证据是资料清单和案例清单;付款阶段的证据是权益确认单;课前阶段的证据是问卷回收率和分组表;课中阶段的证据是现场产出文件;课后阶段的证据是作业提交、反馈记录和复盘纪要。没有证据的动作很容易变成口头承诺,有证据的动作才能被团队复盘、复制和改进。 + +如果给销售团队培训,可以把这套SOP拆成三句核心口播。第一句:“我们先判断你是否适合,不适合不用报。”这句话降低防备。第二句:“适合的话,你会带走这些具体产出。”这句话建立价值。第三句:“如果你确定要来,我帮你匹配最合适的报名方式。”这句话推动决策。三句话背后对应的是诊断、交付、付款,而不是情绪煽动。""" + ), + ( + "S07 双世界模拟口径:用Info Plaza看传播,用Topic Community看真实顾虑", + """本案例采用双世界并行模拟。Info Plaza更像公开传播场,适合观察招生海报、讲师表达、老学员背书、优惠窗口、名额稀缺和公开舆论如何影响决策;Topic Community更像深层讨论场,适合观察学员在熟人、小群、私下问答中真正担心什么。两个世界同时运行,能避免只看公开点赞而忽略私下犹豫,也能避免只看负面担心而低估传播势能。 + +Info Plaza中的积极信号主要来自三类内容:第一,课程发起人明确交付边界后,早期信任用户更愿意转发;第二,已付款用户如果能说出自己要解决的问题,会带动同类人询问;第三,优惠窗口和席位机制对有明确需求的人有效。Topic Community中的风险信号更细:有人担心现场案例不贴近行业,有人担心作业无人反馈,有人担心同行拼团登记复杂,有人担心退款规则不透明。 + +因此,总结页不应该只给一个“转化率预测”,而要给出传播层、决策层、交付层和风险层的组合判断。传播层看哪些内容能被转发;决策层看哪些用户会付款;交付层看哪些承诺必须兑现;风险层看哪些问题会变成退款或负面口碑。这个结构能让客户理解,Foresight不是在做单点预测,而是在模拟一个业务系统跨时间的运行效果。""" + ), + ( + "S08 关键数据与预测:50人目标可达,但依赖前置诊断和课后复盘", + """按本轮30个Agent、8轮互动、18条关键动作的模拟结果,50人目标具备可达性,但前提是不能把招生理解成一次性宣传。若只靠讲师影响力和朋友圈转发,系统预测会出现大量“感兴趣但不付款”的用户;若加入课前诊断、早鸟权益、同行规则和课后复盘,付款转化会明显改善。模拟给出的稳态判断是:第一批熟人和老用户可以形成8-12人的超级早鸟;公开早鸟可形成18-24人;同行机制贡献12人上下;剩余名额由临近开课的高意愿用户补足。 + +需要注意的是,数据是演示用模拟结果,不是对真实市场的确定性承诺。它的价值在于帮助团队看见变量之间的关系:课前诊断会提高高意愿用户的付款速度;交付清单会降低价格敏感用户的犹豫;退款规则会降低理性用户的风险感;同行规则会提高传播,但规则复杂会反噬销售效率;课后复盘会提高满意度和转介绍,但如果没有运营承接,线下课热度会在一周内明显衰减。 + +建议现场给客户展示时,不要把数字讲成绝对预测,而要讲成经营假设。比如:“如果我们只做公开招募,转化会偏低;如果把课前诊断和交付权益前置,超级早鸟和普通早鸟的占比会提高;如果同行机制规则清楚,转介绍贡献会增加;如果课后复盘不到位,退款和负面反馈会滞后出现。”这种表达更符合系统定位,也更容易让客户相信它能服务真实业务。""" + ), + ( + "S09 模块化落地建议:销售、交付、风控、复购四张表", + """为了把模拟结论落地,建议把本报告转成四张运营表。第一张是销售线索表,字段包括姓名、职业、AI使用水平、核心问题、付款意愿、价格敏感度、适合权益、下一步动作。第二张是交付准备表,字段包括课前问卷、案例匹配、分组安排、资料包、现场任务、作业要求、反馈负责人。第三张是风险预警表,字段包括退款敏感点、预期落差、行业不匹配、规则误解、沟通记录、处理状态。第四张是复购转介绍表,字段包括作业完成度、满意度、可展示成果、是否愿意分享、是否适合二期或企业内训。 + +这四张表对应四类负责人。销售负责人关注线索推进和收款节奏;课程负责人关注现场内容和案例匹配;运营负责人关注资料、作业、群管理和反馈;商业负责人关注复购、转介绍、企业客户和长期产品化。Foresight的报告不应该停留在“发现问题”,而应该把问题变成负责人、动作、时间点和检查标准。 + +对于客户演示,这一节可以作为成交点:系统输出的不是一个漂亮结论,而是可以直接接进团队日常工作的行动清单。银行客户看这个案例时,也能映射到自己的客户经营:客户经理表、客户需求表、产品适配表、合规留痕表、复盘跟进表。本质上,Foresight可以把复杂决策推演结果翻译成团队能执行的运营表格。 + +这四张表还可以形成一个闭环看板。销售线索表负责回答“谁最可能付款”;交付准备表负责回答“我们承诺的东西准备好了没有”;风险预警表负责回答“谁可能不满意,为什么不满意”;复购转介绍表负责回答“课程结束后还有哪些商业机会”。如果只看收款金额,团队会高估招生成功;如果只看满意度,团队会低估销售效率;如果只看作业提交,团队又可能忽略转介绍。因此,看板必须同时看现金、交付、风险和复购。 + +建议为每张表设置最少三个指标。销售线索表看咨询人数、诊断完成率、付款转化率;交付准备表看问卷回收率、案例匹配率、资料交付准时率;风险预警表看退款咨询数、负面关键词、未响应问题数;复购转介绍表看作业完成率、可展示成果数、主动推荐人数。这样,模拟报告就能从“讲得很有道理”进入“团队明天就能执行”。这也是客户购买系统的理由:不是为了得到一个结论,而是为了获得一套能持续校准业务动作的仪表盘。""" + ), + ( + "S10 现场展示话术:强调可回溯、可追问、可复用", + """现场展示这份报告时,建议用三句话收束。第一句:这不是一个视频回放,而是一个可交互的模拟结果页面,客户可以点进每个阶段、每个Agent和每个结论。第二句:Report Agent的回答不是自己想象,而是引用左侧报告章节和Agent问答,点击角标可以跳回证据位置。第三句:这套能力可以从线下课招生迁移到银行高净值客户经营、企业客户策略分析、理财产品推介、课程销售和复杂服务成交。 + +演示顺序建议是:先打开总结页,让客户看到完整结构;再提问“这个项目最大的成交阻力是什么”;接着点击回答里的A03、A07、A18等角标,让页面跳到具体Agent原话;然后追问“如果我要提高早鸟付款率,应该改哪里”;最后展示S06到S09,把结论落成SOP和四张表。这样客户会感受到系统不是在播放一个已经录好的文件,而是在一个真实页面里基于模拟结果进行追问、定位、解释和复盘。 + +现场追问可以准备四个问题。第一个问题问:“这个项目最大的成交阻力是什么?”系统应回答交付密度和机会成本,并引用A03、A07。第二个问题问:“怎样提高早鸟付款率?”系统应回答权益绑定和窗口节奏,并引用S03、A11。第三个问题问:“最容易出负面舆情的地方是什么?”系统应回答预期不一致和退款规则,并引用S04、A18、A24。第四个问题问:“这套方法对银行客户有什么价值?”系统应回答高客经营也需要提前模拟客户顾虑、共同决策、合规边界和售后服务,并引用S05、S09、S10。 + +这样的追问顺序能形成很强的现场效果:客户先看到完整报告,再看到AI能够回答问题,然后看到每个回答都能跳回证据。它会把“AI很聪明”的印象转成“系统真的记录了推演过程,并能复用推演结果”的信任。尤其是银行客户,他们不会只被炫技打动,更关心系统是否可解释、可追责、可复盘。角标、跳转、Agent原话和模块化报告正好回答这些顾虑。 + +最后要明确边界:所有数据和Agent回答都是模拟结果,用于经营预演和方案讨论,不代表真实市场承诺;系统价值在于提前暴露问题、比较方案、组织证据和形成行动,不替代真实投放、真实销售和真实合规审查。这个边界讲清楚后,反而会让客户更信任系统,因为它展示的是“降低不确定性”的能力,而不是“保证结果”的幻觉。""" ), ] @@ -1087,70 +1193,121 @@ def _course_report_markdown() -> str: def _course_agent_interview_result() -> str: return """**采访主题:** 一舟一课线下课第一期招生,会暴露哪些成交阻力和交付风险? -**采访人数:** 6 / 30 位模拟Agent +**采访人数:** 10 / 30 位模拟Agent ### 关键问答摘录 -#### A00 课程发起人 / 招生负责人 +#### A00 方见舟|课程发起人 / 同舟会线下课主理人 **Q:** 最担心第一期招生哪一步失控? -**A:** 最担心不是没人感兴趣,而是大家都想等最后一刻确认。必须把课前诊断、席位机制和交付清单提前说清楚。 +**A:** 我不担心大家没有兴趣,我担心大家都在等最后一刻确认。等的人越多,销售越容易被动。所以要把课前诊断、席位机制和交付清单提前说清楚。 -#### A03 高意愿学员 / 自媒体创业者 +#### A02 赵沐阳|企业主学员 / 智能制造公司创始人 +**Q:** 你最希望课程解决什么问题? +**A:** 我想知道AI怎么进入企业销售、客服和管理流程,不想只听工具清单。如果现场能把一个企业流程拆出来,我会考虑带管理层来第二期。 + +#### A03 林岚|高意愿学员 / 自媒体创业者 **Q:** 什么会促使你立刻付款? -**A:** 如果我知道现场能带走一套选题、提示词、自动化流程和复盘模板,我愿意买早鸟;单纯说趋势我不会动。 +**A:** 如果我知道现场能带走一套选题方法、提示词、自动化流程、内容复盘模板,并且这些东西能直接用于我接下来一个月的账号更新,我愿意买早鸟。 -#### A07 价格敏感学员 / 职场转型者 +#### A05 周予白|销售负责人 / B2B软件公司销售总监 +**Q:** 你会被什么打动? +**A:** 我关心的不是AI酷不酷,而是能不能让销售团队更快做客户研究、写拜访提纲、跟进线索。如果课程只讲个人效率,我兴趣会下降。 + +#### A07 陈亦桥|价格敏感学员 / 职场转型产品经理 **Q:** 你为什么犹豫? -**A:** 我怕课程太贵但听完不会用。最好有课前问卷和课后作业反馈,让我知道自己不是只来听热闹。 +**A:** 我怕课程太贵但听完不会用。我的问题不是不知道AI重要,而是不知道怎么把AI放进自己的工作流。 -#### A11 同行拼团组织者 +#### A09 陆佳宁|HR培训负责人 / 中型企业组织发展经理 +**Q:** 企业培训采购看重什么? +**A:** 我需要看到课程目标、适合人群、课后产出和可复制的内部训练方案。个人报名热度不能直接证明它适合企业内训。 + +#### A11 孟知秋|同行拼团组织者 / 知识付费社群运营者 **Q:** 同行优惠的最大风险是什么? **A:** 拼团能带来转介绍,但规则必须简单。如果三人同行核销复杂,销售会被大量沟通消耗。 -#### A18 退款敏感学员 +#### A15 顾南星|老学员 / 同舟会活跃成员 +**Q:** 你愿意帮忙转介绍吗? +**A:** 愿意,但我需要一段很清楚的话告诉朋友这门课适合谁、不适合谁。否则我怕朋友报了不匹配,最后影响信任。 + +#### A18 许若安|退款敏感学员 / 企业培训采购负责人 **Q:** 什么情况会触发退款情绪? **A:** 如果宣传说得很满,但现场案例和我的行业不相关,我会觉得预期落差大。退款规则要提前写明。 -#### A24 交付运营负责人 +#### A21 沈知微|观望学员 / 金融行业客户经理 +**Q:** 你为什么还没有付款? +**A:** 我想知道课程案例是否能迁移到我的客户经营工作。如果只是教自媒体,我可能不适合;如果能做客户分析和拜访提纲,我会更感兴趣。 + +#### A24 唐逸舟|交付运营负责人 / 课程项目经理 **Q:** 课后最重要的动作是什么? **A:** T+1交付资料,T+7收作业,T+14做一次复盘,T+30筛选转介绍线索。否则线下课热度很快散掉。 """ +def _ensure_course_chat_citations(response: str) -> str: + if not response: + return _course_chat_response("") + normalized = response.strip() + if "分析路径" not in normalized: + normalized = ( + "### 分析路径\n" + "我先检索左侧总结报告,再对照Agent问答和双世界模拟变量,最后只保留能够被章节或Agent原话支撑的判断。\n\n" + + normalized + ) + if "[[" in normalized and "]]" in normalized: + return normalized + return normalized.rstrip() + "\n\n证据来源:[[S01]] [[S02]] [[A03]] [[A07]]" + + def _course_chat_response(message: str) -> str: normalized = message.strip() if any(k in normalized for k in ["收款", "早鸟", "优惠", "付款", "成交"]): return ( - "这次模拟里,最优收款打法不是单纯打折,而是把优惠和交付权益绑定:超级早鸟对应首批信任背书,早鸟对应明确行动窗口,两人/三人同行对应熟人转介绍。建议现场主推“确认席位 + 课前诊断 + 优先分组反馈”,不要只说便宜。[[S01]] [[S03]] [[A03]] [[A11]]" + "### 分析路径\n" + "我先看付款触发点,再对照早鸟/同行机制和Agent原话:高意愿用户要具体交付,拼团组织者要简单规则,运营负责人要后续承接。\n\n" + "### 结论\n" + "最优收款打法不是单纯打折,而是把优惠和交付权益绑定:超级早鸟对应首批信任背书,早鸟对应明确行动窗口,两人/三人同行对应熟人转介绍。建议现场主推“确认席位 + 课前诊断 + 优先分组反馈”,不要只说便宜。[[S01]] [[S03]] [[A03]] [[A11]] [[A24]]" ) if any(k in normalized for k in ["退款", "舆情", "风险", "负面"]): return ( + "### 分析路径\n" + "我把负面反馈拆成预期差、规则差和交付差三类,再回看退款敏感学员与交付运营负责人的问答。\n\n" + "### 结论\n" "最大的风险不是退款本身,而是学员觉得宣传和交付不一致。需要提前写清楚课前问卷、现场产出、资料回看、作业反馈和退款边界,把不确定性从付款前就降下来。[[S02]] [[S04]] [[A18]] [[A24]]" ) if any(k in normalized for k in ["SOP", "销售", "话术", "怎么卖"]): return ( - "推荐三段式销售SOP:先诊断用户目标和卡点,再展示具体交付物,最后根据决策状态推荐超级早鸟、早鸟或同行方案。这样会比直接推价格更稳,也能减少强销售感。[[S05]] [[S06]] [[A00]] [[A07]]" + "### 分析路径\n" + "我按成交链路看:先处理用户问题,再证明交付,再选择付款方案;这样能同时回应高意愿、价格敏感和传播型用户。\n\n" + "### 结论\n" + "推荐三段式销售SOP:先诊断用户目标和卡点,再展示具体交付物,最后根据决策状态推荐超级早鸟、早鸟或同行方案。这样会比直接推价格更稳,也能减少强销售感。[[S05]] [[S06]] [[A00]] [[A07]] [[A15]]" ) return ( - "总结来看,这个项目的核心不是把50个名额卖满,而是验证一套可复制的招生经营系统:用户画像、优惠规则、销售SOP、课前诊断、课中交付、课后复盘和退款预警。后续演示时可以强调:Foresight提前模拟真实用户反应,帮团队在正式销售前发现风险和机会。[[S01]] [[S05]] [[S06]]" + "### 分析路径\n" + "我先看执行结论,再看Agent问答暴露出的顾虑,最后把它们归纳成可复制的招生经营系统。\n\n" + "### 结论\n" + "这个项目的核心不是把50个名额卖满,而是验证一套可复制的招生经营系统:用户画像、优惠规则、销售SOP、课前诊断、课中交付、课后复盘、退款预警和转介绍。演示时可以强调:Foresight提前模拟真实用户反应,帮团队在正式销售前发现风险和机会。[[S01]] [[S05]] [[S09]] [[S10]]" ) def _course_chat_citations() -> List[Dict[str, Any]]: - return [ - {"id": "S01", "type": "section", "title": COURSE_REPORT_SECTIONS[0][0], "anchor": "section-0"}, - {"id": "S02", "type": "section", "title": COURSE_REPORT_SECTIONS[1][0], "anchor": "section-1"}, - {"id": "S03", "type": "section", "title": COURSE_REPORT_SECTIONS[2][0], "anchor": "section-2"}, - {"id": "S04", "type": "section", "title": COURSE_REPORT_SECTIONS[3][0], "anchor": "section-3"}, - {"id": "S05", "type": "section", "title": COURSE_REPORT_SECTIONS[4][0], "anchor": "section-4"}, - {"id": "S06", "type": "section", "title": COURSE_REPORT_SECTIONS[5][0], "anchor": "section-5"}, - {"id": "A00", "type": "agent", "title": "课程发起人 / 招生负责人", "anchor": "agent-0"}, - {"id": "A03", "type": "agent", "title": "高意愿学员 / 自媒体创业者", "anchor": "agent-3"}, - {"id": "A07", "type": "agent", "title": "价格敏感学员 / 职场转型者", "anchor": "agent-7"}, - {"id": "A11", "type": "agent", "title": "同行拼团组织者", "anchor": "agent-11"}, - {"id": "A18", "type": "agent", "title": "退款敏感学员", "anchor": "agent-18"}, - {"id": "A24", "type": "agent", "title": "交付运营负责人", "anchor": "agent-24"}, + citations = [ + {"id": f"S{idx:02d}", "type": "section", "title": title, "anchor": f"section-{idx - 1}"} + for idx, (title, _content) in enumerate(COURSE_REPORT_SECTIONS, start=1) ] + citations.extend([ + {"id": "A00", "type": "agent", "title": "方见舟|课程发起人 / 同舟会线下课主理人", "anchor": "agent-0"}, + {"id": "A02", "type": "agent", "title": "赵沐阳|企业主学员 / 智能制造公司创始人", "anchor": "agent-2"}, + {"id": "A03", "type": "agent", "title": "林岚|高意愿学员 / 自媒体创业者", "anchor": "agent-3"}, + {"id": "A05", "type": "agent", "title": "周予白|销售负责人 / B2B软件公司销售总监", "anchor": "agent-5"}, + {"id": "A07", "type": "agent", "title": "陈亦桥|价格敏感学员 / 职场转型产品经理", "anchor": "agent-7"}, + {"id": "A09", "type": "agent", "title": "陆佳宁|HR培训负责人 / 中型企业组织发展经理", "anchor": "agent-9"}, + {"id": "A11", "type": "agent", "title": "孟知秋|同行拼团组织者 / 知识付费社群运营者", "anchor": "agent-11"}, + {"id": "A15", "type": "agent", "title": "顾南星|老学员 / 同舟会活跃成员", "anchor": "agent-15"}, + {"id": "A18", "type": "agent", "title": "许若安|退款敏感学员 / 企业培训采购负责人", "anchor": "agent-18"}, + {"id": "A21", "type": "agent", "title": "沈知微|观望学员 / 金融行业客户经理", "anchor": "agent-21"}, + {"id": "A24", "type": "agent", "title": "唐逸舟|交付运营负责人 / 课程项目经理", "anchor": "agent-24"}, + ]) + return citations def _fallback_cached_chat_response(message: str) -> str: @@ -1179,23 +1336,111 @@ def get_cached_report_chat( chat_history: Optional[List[Dict[str, str]]] = None, ) -> Optional[Dict[str, Any]]: if simulation_id == COURSE_SIM_ID: - return { - "response": _course_chat_response(message), - "citations": _course_chat_citations(), - "tool_calls": [ - { - "name": "cached_course_report_context", - "parameters": { - "report_id": COURSE_REPORT_ID, - "simulation_id": COURSE_SIM_ID, - "source": "completed_dual_world_course_simulation", + chat_history = chat_history or [] + report = get_cached_report(COURSE_REPORT_ID) or {} + report_markdown = report.get("markdown_content", "") + agent_interviews = _course_agent_interview_result() + system_prompt = f"""你是 Foresight 先见之明的 Report Agent,正在和客户围绕“一舟一课线下课招生、收款与交付风险模拟”对话。 + +回答要求: +- 使用中文,专业、清晰、适合现场演示。 +- 先给一个可展示的“分析路径”,这不是隐藏思维链,而是公开的证据路线:你参考了哪些报告章节、哪些Agent问答、哪些模拟变量。 +- 然后给“结论”和“建议动作”。回答要和左侧总结报告一致,不能编造报告之外的新设定。 +- 每个关键判断后必须带证据角标,格式只能使用 [[S01]]、[[S02]]、[[S03]]、[[A03]] 这类标记。 +- S01-S10 对应报告十个章节;A00、A02、A03、A05、A07、A09、A11、A15、A18、A21、A24 对应具体Agent问答。 +- 优先引用:S01执行结论、S02 Agent问答、S03收款结构、S04退款风险、S05商业机会、S06销售SOP、S09落地表、S10展示话术。 +- 如果用户问到成交、早鸟、收款,引用 S03、A03、A11;如果问退款或舆情,引用 S04、A18、A24;如果问怎么卖,引用 S06、A00、A07;如果问商业价值,引用 S05、S09、S10。 +- 明确说明模拟数据用于经营预演,不是对真实市场结果的承诺。 + +模拟需求: +{COURSE_REQUIREMENT} + +报告正文: +{report_markdown[:12000]} + +Agent问答证据: +{agent_interviews} + +模拟统计: +- Agent数量:30 +- 双世界轮次:8 +- 关键动作:18 +- 平台:Info Plaza 9条公开传播动作,Topic Community 9条深层讨论动作 +""" + + messages = [{"role": "system", "content": system_prompt}] + for item in chat_history[-8:]: + role = item.get("role") + content = item.get("content") + if role in ("user", "assistant") and content: + messages.append({"role": role, "content": content}) + messages.append({"role": "user", "content": message}) + + try: + from ..config import Config + from ..utils.llm_client import LLMClient + + model_name = ( + os.environ.get("REPORT_CHAT_MODEL_NAME") + or os.environ.get("REPORT_LLM_MODEL_NAME") + or Config.LLM_MODEL_NAME + ) + timeout_seconds = float(os.environ.get("REPORT_CHAT_LLM_TIMEOUT_SECONDS", "45")) + llm = LLMClient( + api_key=os.environ.get("REPORT_CHAT_LLM_API_KEY") or os.environ.get("REPORT_LLM_API_KEY") or None, + base_url=os.environ.get("REPORT_CHAT_LLM_BASE_URL") or os.environ.get("REPORT_LLM_BASE_URL") or None, + model=model_name, + timeout=timeout_seconds, + ) + response = _ensure_course_chat_citations(llm.chat(messages=messages, temperature=0.45, max_tokens=1600)) + return { + "response": response, + "citations": _course_chat_citations(), + "tool_calls": [ + { + "name": "course_report_context_review", + "parameters": { + "report_id": COURSE_REPORT_ID, + "simulation_id": COURSE_SIM_ID, + "sections": len(COURSE_REPORT_SECTIONS), + "agent_interviews": 10, + }, }, - } - ], - "sources": ["cached_interactive_report", "completed_dual_world_replay"], - "model_used": "cached-demo-report-agent", - "llm_used": False, - } + { + "name": "llm_synthesis", + "parameters": { + "model": llm.model, + "style": "public_analysis_path_with_evidence_citations", + }, + }, + ], + "sources": ["cached_interactive_report", "completed_dual_world_replay", "course_agent_interviews"], + "model_used": llm.model, + "llm_used": True, + } + except Exception as exc: + model_name = ( + os.environ.get("REPORT_CHAT_MODEL_NAME") + or os.environ.get("REPORT_LLM_MODEL_NAME") + or os.environ.get("LLM_MODEL_NAME") + ) + return { + "response": _course_chat_response(message), + "citations": _course_chat_citations(), + "tool_calls": [ + { + "name": "course_report_context_fallback", + "parameters": { + "report_id": COURSE_REPORT_ID, + "simulation_id": COURSE_SIM_ID, + "llm_error": f"{type(exc).__name__}: {str(exc)[:160]}", + }, + } + ], + "sources": ["cached_interactive_report", "completed_dual_world_replay", "course_agent_interviews"], + "model_used": model_name or "configured-default", + "llm_used": False, + } if simulation_id != NB_HNW_AI_CASE_ID: return None