From db8aa25da6df651f795dd6ea7a43e6dcbf947356 Mon Sep 17 00:00:00 2001 From: jiao Date: Fri, 5 Jun 2026 15:39:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8D=87=E7=BA=A7=E8=AF=9D=E6=9C=AF?= =?UTF-8?q?=E7=94=9F=E6=88=90=E8=83=BD=E5=8A=9B=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?prompt=E5=B7=A5=E7=A8=8B=E4=B8=8E=E5=89=8D=E7=AB=AF=E4=BA=A4?= =?UTF-8?q?=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 重构PromptEngine,拆分系统/用户提示词并新增多维度上下文支持 2. 为Doubao客户端新增temperature参数解析配置 3. 前端新增客户画像、对话历史、参考话术自动带入生成参数 4. 调整默认LLM模型为qwen-plus,优化返回结果格式与展示 --- .../generation/client/DoubaoClient.java | 26 ++++ .../controller/GenerationController.java | 18 ++- .../generation/service/PromptEngine.java | 128 ++++++++++++++++-- .../src/main/resources/application.yml | 2 +- .../target/classes/application.yml | 2 +- .../GenerationServiceApplication.class | Bin 922 -> 922 bytes .../generation/client/BailianClient.class | Bin 7001 -> 6659 bytes .../generation/client/DoubaoClient.class | Bin 5348 -> 5738 bytes .../generation/client/HunyuanClient.class | Bin 5409 -> 5032 bytes .../artedu/generation/client/LLMClient.class | Bin 554 -> 554 bytes .../generation/client/LLMClientFactory.class | Bin 2991 -> 2973 bytes .../generation/controller/EmbedRequest.class | Bin 2041 -> 1600 bytes .../controller/GenerateRequest.class | Bin 3195 -> 2674 bytes .../controller/GenerationController.class | Bin 6046 -> 6725 bytes .../controller/LlmModelController.class | Bin 7776 -> 7403 bytes .../artedu/generation/entity/LlmModel.class | Bin 7161 -> 6390 bytes .../generation/mapper/LlmModelMapper.class | Bin 766 -> 766 bytes .../generation/service/LlmModelService.class | Bin 7497 -> 7444 bytes .../generation/service/PromptEngine.class | Bin 2730 -> 5270 bytes .../generation/service/QianwenClient.class | Bin 6835 -> 6754 bytes .../generation-service-1.0.0-SNAPSHOT.jar | Bin 40369739 -> 40371647 bytes ...ration-service-1.0.0-SNAPSHOT.jar.original | Bin 35287 -> 37200 bytes .../src/components/ScriptRecommend.tsx | 83 +++++++++++- 23 files changed, 241 insertions(+), 18 deletions(-) diff --git a/backend/generation-service/src/main/java/com/artedu/generation/client/DoubaoClient.java b/backend/generation-service/src/main/java/com/artedu/generation/client/DoubaoClient.java index 219e863..76f2bad 100644 --- a/backend/generation-service/src/main/java/com/artedu/generation/client/DoubaoClient.java +++ b/backend/generation-service/src/main/java/com/artedu/generation/client/DoubaoClient.java @@ -59,6 +59,11 @@ public class DoubaoClient implements LLMClient { if (maxTokens != null) { requestBody.put("max_tokens", maxTokens); } + // 从 configJson 读取 temperature,默认 0.7 + Double temperature = parseTemperature(); + if (temperature != null) { + requestBody.put("temperature", temperature); + } try { HttpEntity> entity = new HttpEntity<>(requestBody, headers); @@ -100,4 +105,25 @@ public class DoubaoClient implements LLMClient { log.warn("豆包客户端暂不支持embedding,返回空向量"); return List.of(); } + + /** + * 从 configJson 中解析 temperature 参数 + */ + private Double parseTemperature() { + try { + String configJson = model.getConfigJson(); + if (configJson != null && !configJson.isEmpty()) { + Map config = JsonUtils.fromJsonMap(configJson); + if (config != null && config.get("temperature") != null) { + Object temp = config.get("temperature"); + if (temp instanceof Number) { + return ((Number) temp).doubleValue(); + } + } + } + } catch (Exception e) { + log.warn("解析 temperature 配置失败: {}", e.getMessage()); + } + return 0.7; + } } diff --git a/backend/generation-service/src/main/java/com/artedu/generation/controller/GenerationController.java b/backend/generation-service/src/main/java/com/artedu/generation/controller/GenerationController.java index 90bb25a..abeeb62 100644 --- a/backend/generation-service/src/main/java/com/artedu/generation/controller/GenerationController.java +++ b/backend/generation-service/src/main/java/com/artedu/generation/controller/GenerationController.java @@ -34,16 +34,26 @@ public class GenerationController { public Result> generateUtterance( @NotBlank(message = "message不能为空") @RequestParam("message") String message, @RequestParam(value = "context", required = false) String context, + @RequestParam(value = "customerProfile", required = false) String customerProfile, + @RequestParam(value = "conversationContext", required = false) String conversationContext, + @RequestParam(value = "referenceUtterances", required = false) String referenceUtterances, @NotBlank(message = "intent不能为空") @RequestParam("intent") String intent, - @NotBlank(message = "stage不能为空") @RequestParam("stage") String stage) { + @NotBlank(message = "stage不能为空") @RequestParam("stage") String stage, + @RequestParam(value = "stageLabel", required = false) String stageLabel, + @RequestParam(value = "intentLabel", required = false) String intentLabel) { - String prompt = promptEngine.buildUtterancePrompt(message, context, intent, stage); - String generated = qianwenClient.generate(prompt, 500); + String[] promptPair = promptEngine.buildUtterancePrompt( + message, context, customerProfile, conversationContext, + referenceUtterances, intent, stage, stageLabel, intentLabel); + String systemPrompt = promptPair[0]; + String userPrompt = promptPair[1]; + String generated = qianwenClient.generate(systemPrompt, userPrompt, 800); Map result = new HashMap<>(); result.put("content", generated); result.put("source", "LLM"); - result.put("model", "qwen-turbo"); + result.put("model", qianwenClient.getCurrentModel() != null + ? qianwenClient.getCurrentModel().getModelName() : "default"); return Result.success(result); } diff --git a/backend/generation-service/src/main/java/com/artedu/generation/service/PromptEngine.java b/backend/generation-service/src/main/java/com/artedu/generation/service/PromptEngine.java index 13d3065..2e135d8 100644 --- a/backend/generation-service/src/main/java/com/artedu/generation/service/PromptEngine.java +++ b/backend/generation-service/src/main/java/com/artedu/generation/service/PromptEngine.java @@ -7,18 +7,124 @@ import org.springframework.stereotype.Service; @Service public class PromptEngine { - public String buildUtterancePrompt(String message, String context, String intent, String stage) { + /** + * 构建生成话术的系统提示词(角色设定) + */ + public String buildSystemPrompt(String stageLabel, String intentLabel) { StringBuilder sb = new StringBuilder(); - sb.append("你是第九联盟(CG美术培训机构)的课程顾问助手。请根据学员的咨询消息,生成一段专业、友好、有说服力的回复话术。\n\n"); - sb.append("【机构背景】\n"); - sb.append("- 第九联盟专注CG数字艺术教育10年\n"); - sb.append("- 累计培养8000+学员,与腾讯、网易、米哈游等500+企业有就业合作\n"); - sb.append("- 6大校区:上海、西安、厦门、武汉、青岛、合肥\n\n"); - sb.append("【当前对话阶段】").append(stage).append("\n"); - sb.append("【学员意图】").append(intent).append("\n"); - sb.append("【对话上下文】\n").append(context != null ? context : "无").append("\n\n"); - sb.append("【学员最新消息】\n").append(message).append("\n\n"); - sb.append("请直接输出回复话术,不要包含任何解释或前缀。话术要自然、专业、符合顾问身份。"); + sb.append("你是「小九」,第九联盟(CG美术培训)的资深课程顾问,从业8年。"); + sb.append("第九联盟专注CG数字艺术教育10年,累计培养8000+学员,合作企业包括腾讯、网易、米哈游等500+家。"); + sb.append("6大校区:上海、西安、厦门、武汉、青岛、合肥。"); + sb.append("\n\n回复原则:\n"); + sb.append("1. 语气像微信聊天一样自然亲切,不要机械生硬、不要堆砌数据\n"); + sb.append("2. 结合学员具体情况给针对性建议,不要泛泛而谈\n"); + sb.append("3. 适当用学员成功案例或真实数据增强说服力,点到为止\n"); + sb.append("4. 长度控制在150-250字,简洁有力\n"); + sb.append("5. 如知道学员真实姓名则称呼姓名,不知道真实姓名时绝对不要编造名字,可以直接用自然的方式开头\n"); + if (stageLabel != null && !stageLabel.isEmpty()) { + sb.append("6. 当前处于「").append(stageLabel).append("」阶段,回复要匹配该阶段的沟通目标\n"); + } + return sb.toString(); + } + + /** + * 构建生成话术的用户提示词(具体任务) + */ + public String buildUserPrompt(String message, String context, + String customerProfile, String conversationContext, + String referenceUtterances, + String intent, String stage, + String stageLabel, String intentLabel) { + StringBuilder sb = new StringBuilder(); + + // 学员画像(精简) + if (customerProfile != null && !customerProfile.isEmpty()) { + sb.append("【学员画像】\n").append(customerProfile).append("\n\n"); + } + + // 对话历史(最多3轮) + String history = null; + if (conversationContext != null && !conversationContext.isEmpty()) { + history = conversationContext; + } else if (context != null && !context.isEmpty()) { + history = context; + } + if (history != null && !history.isEmpty()) { + sb.append("【最近对话】\n").append(history).append("\n\n"); + } + + // 阶段和意图 + String stageDisplay = (stageLabel != null && !stageLabel.isEmpty()) ? stageLabel : stage; + String intentDisplay = (intentLabel != null && !intentLabel.isEmpty()) ? intentLabel : intent; + sb.append("【当前阶段】").append(stageDisplay).append("\n"); + sb.append("【学员意图】").append(intentDisplay).append("\n\n"); + + // 参考话术(Few-shot,仅作为风格参考) + if (referenceUtterances != null && !referenceUtterances.isEmpty()) { + sb.append("【参考话术风格】(学习以下话术的表达方式,不要照搬内容)\n"); + sb.append(referenceUtterances).append("\n\n"); + } + + // 学员最新消息 + 任务 + sb.append("学员最新消息:\"").append(message).append("\"\n\n"); + sb.append("请直接生成回复内容,不要加任何前缀、标记或解释。"); + + return sb.toString(); + } + + /** + * 构建完整话术 Prompt(system + user 分离) + * 返回 String[]{systemPrompt, userPrompt} + */ + public String[] buildUtterancePrompt(String message, String context, + String customerProfile, String conversationContext, + String referenceUtterances, + String intent, String stage, + String stageLabel, String intentLabel) { + String system = buildSystemPrompt(stageLabel, intentLabel); + String user = buildUserPrompt(message, context, customerProfile, conversationContext, + referenceUtterances, intent, stage, stageLabel, intentLabel); + return new String[]{system, user}; + } + + /** + * 旧版兼容方法:返回合并后的单条 prompt(当模型不支持 system 分离时使用) + */ + public String buildUtterancePromptLegacy(String message, String context, + String customerProfile, String conversationContext, + String referenceUtterances, + String intent, String stage, + String stageLabel, String intentLabel) { + StringBuilder sb = new StringBuilder(); + sb.append("你叫「小九」,是第九联盟(CG美术培训)的资深课程顾问,从业8年。"); + sb.append("第九联盟专注CG数字艺术教育10年,累计培养8000+学员。6大校区:上海、西安、厦门、武汉、青岛、合肥。\n\n"); + + if (customerProfile != null && !customerProfile.isEmpty()) { + sb.append("【学员画像】\n").append(customerProfile).append("\n\n"); + } + if (conversationContext != null && !conversationContext.isEmpty()) { + sb.append("【最近对话】\n").append(conversationContext).append("\n\n"); + } else if (context != null && !context.isEmpty()) { + sb.append("【最近对话】\n").append(context).append("\n\n"); + } + + String stageDisplay = (stageLabel != null && !stageLabel.isEmpty()) ? stageLabel : stage; + String intentDisplay = (intentLabel != null && !intentLabel.isEmpty()) ? intentLabel : intent; + sb.append("【当前阶段】").append(stageDisplay).append("\n"); + sb.append("【学员意图】").append(intentDisplay).append("\n\n"); + + if (referenceUtterances != null && !referenceUtterances.isEmpty()) { + sb.append("【参考话术】\n").append(referenceUtterances).append("\n\n"); + } + + sb.append("学员最新消息:\"").append(message).append("\"\n\n"); + sb.append("请生成一段自然、专业、有说服力的回复。要求:\n"); + sb.append("1. 称呼学员姓名,结合其具体情况给针对性建议\n"); + sb.append("2. 语气自然亲切,像微信聊天,不要机械\n"); + sb.append("3. 适当用数据或案例增强说服力,点到为止\n"); + sb.append("4. 150-250字,简洁有力\n"); + sb.append("5. 直接输出回复内容,不要加任何前缀或解释"); + return sb.toString(); } diff --git a/backend/generation-service/src/main/resources/application.yml b/backend/generation-service/src/main/resources/application.yml index 0f1b0cb..2c72491 100644 --- a/backend/generation-service/src/main/resources/application.yml +++ b/backend/generation-service/src/main/resources/application.yml @@ -33,7 +33,7 @@ spring: llm: qianwen: api-key: sk-39ceb8d746014b349109e76f893acb18 - model: qwen-turbo + model: qwen-plus mybatis-plus: configuration: diff --git a/backend/generation-service/target/classes/application.yml b/backend/generation-service/target/classes/application.yml index 0f1b0cb..2c72491 100644 --- a/backend/generation-service/target/classes/application.yml +++ b/backend/generation-service/target/classes/application.yml @@ -33,7 +33,7 @@ spring: llm: qianwen: api-key: sk-39ceb8d746014b349109e76f893acb18 - model: qwen-turbo + model: qwen-plus mybatis-plus: configuration: diff --git a/backend/generation-service/target/classes/com/artedu/generation/GenerationServiceApplication.class b/backend/generation-service/target/classes/com/artedu/generation/GenerationServiceApplication.class index a773fc914ed607242d58e71e03464768a5f783e7..c97fc17296fcb34f4990d0c6c49e84439638dccb 100644 GIT binary patch delta 205 zcmbQmK8s!a)W2Q(7#J8#7?ijem>8JZ8CZB2SQ*$Rx+($L920p>dAS(47`WLPcz76i z8Tcl%GU`q?XUt=9&QD35Skbz95u+nxJv&e<2rw})f;0n3ejraDNHYRyR;}#}j2pqy z0zeWZ&A`CJAP6SG3K)bKgn>Lx1`!5PsAe;;VGIl$LhM>Q7&yZb`a$kw09wG#AOJOE IauTxz0KWef1ONa4 delta 208 zcmbQmK8v0A)W2Q(7#J9A8I;%=m?qkoGP5(VOcYlVWMp7*&QD3@Vqj+AluLxL4b*Y5u_SOvIBYgK$;OqvubT; z;MfS3<^qx+X$A%!25vA3RsiJj0(qPad<^_h&1PW37#KK&7`1jV2!tc_a{*--fa=&8 M1fXV2PGYtI0DpTGi~s-t diff --git a/backend/generation-service/target/classes/com/artedu/generation/client/BailianClient.class b/backend/generation-service/target/classes/com/artedu/generation/client/BailianClient.class index db32f545d1180d06f04ff7aece7b1dc79aa9c3bf..ea4b949e6844fe59aa43dabe4a20f390eb11fd2c 100644 GIT binary patch literal 6659 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 literal 7001 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 VEtK#&$qYW570pLq7mbDg{vQnMj==x` literal 5409 zcmbtYd3+S*8GgQ8v)K#*S3y=Opor!Gwu-215DkHlND?Rsp(xf)cE`<--JNB27Klf! zTB|5{##XfTs5 zyzlo;-ulm>Hvn9Te<>&ssEV1Xh-TS(JQqpmY2DIn!%RnFNkdQDk%nBlJEx`VoF@fE z0@Jo=+q6hhOD7_0JGSUCTS1Ayg{MSmYHD^71PYU8LLk&+T8T(DdE=#9B28u@p<6Wq z=dRDCZ6l>Ornebcqa&%;rqibFsFRf>BNnemeRMIR##-Z-ZA2U^}gj44=kf&(uTd9 zmQ+->3l!B6IEXVbUBOubXOFe3UW?hL)vaO%&K4+5=(cOG!2F7)QCHR_wQRPga=cqg zArMxfARsWc$w=!hxm1U4wQ2N^iQL8PZRO9nn zW7^gwcPf2z-l`zgSfHX33kBAk8s)Tb1xhlOnabGG`J?gkFc{&KwxiAL($lp2Oy7bL zRfAZJB?>NO{3k_O6_??1mpHWT0E88LkvijO;4vO#m|Y z+5oO%#trxP58ZX=@C(ljJ$c{pyLKOaec!tWcMt8`HT>v-GSs3@!3qM7<+O^GSjFVi zEz7h7rcdBr$*9Fxt)juF{RS%;z%?XFr)_7l(MY7ztuBjfJso4J#*$_(u4Rlx(lZL0 zxN;&MO6f=gFAcgD*R5<2Ya{{J;$sTd37mgYnPxq1Xl>mYUB!B|(y-cf>zW$tYTFvu zw%l+{>)IA>IAJ|-cFarH$PG8BXvao@@~m#xndD*GmdGqc6_bIeY!6_Qz?9mY-Dz6J zO-_{yu`FMwVl%F1AxUXnI)P)Fz0t5cd6%`dv`toBIFY-3Ov@+08r-1blh7D&D(Pr8 zj5@D0y3ilxKXZC5#c*)?X%1vs@V1b7cJykxsyHsCA4%_Gq zEgm03T5mU*6+38LE~{G#ZW1_S6re%Nb`m{^Zs~$s$$sZVku1MW#iu39RTg(=QXUD? z2Y0Br6QALZnH=4J#iT6ur?#h70H0-1Y}T_`Eum)vxQFGSd8EoHxL07_NhvSWWR-IW z2C);nWQE@?aOFg*OoZV&HJ7xFb}gCHrF&&&&&2~O9>hZoaK_Bq^`_;jDzMp)Jif4w z5376dUFYNBNHE4v1@MT#Ot)s$u4_E@X3x+QPafTSXy}pMLx*|-cvMob(==jwR=WT5 zDjvfgx}R|wlQyT?;|U(PWA-@Sv*%cEZ*=a>w+8SIy1Z8~Ucr(jumUD|Grz7bFLdtEPj3Z71y`VwJ<+84De4*EY3S5x*}|}y=4o)j1ZB&Au6UFy zZ8Z{U&CXej{|V*X3(r^)e@s`JIkxDGUjT0lT;}HU(7tDf@997KV(;+dcd+vs?&%%g zb-SZeoUQJ^U)wcW;~sqI_}vf4l>D`d-^iRV+OAn?Swns&&(+_vMvU}@{wxW$nmH?` z*Bj2~!U>;qi{$CX)LLPhcGkAEOta2rB+h>7FL+16U+EU-{BxXcq_?rFjkt!oeM$b) zW;6aK@R;9)-f9=HK}*MzdX}w~*_F%qPkGO6zDznnP&QN(EdP+h!h@*OlF3%X)@!Dg z;LiaJGwv&N&C;#8f=6{@nqRuk*`sF_9A}XjXX-@CEBJ@N>{Bmg<#8>=dHe<`fCoxwfBIE%m%ZiXw2 zi%`KQ!ZnfCL-l^%`xTq*AkB5xLUx`p_0G4t?CiIfQG0K78UZI=ChtEvX*FtZK?Wj_Ki&kRD2e zjOv5v8o<^9Y;KVZ23Lswx!@(n% zDXo8;^Ivf02k<1>wLcsTJ>#vjqGjQ-K}-pk4d6=xdr-{RWrYKH&Or$o-nykxRYHAb z0DBAg--Z3rfPDN~IM9cE;lKc1DIzX|{I*bpjb2eIBF=cRXmQ4MA}dF(kZgPy7w|d{ zvpH5^K50_HuDB9c^KK;r+|0mlVCXv;^sTrAxA5)#Sc0ccBYAIUT=mh2vz+t)j;Rk@T4Jl6{R zBwv1()2*`nl#Ho2L1(suGBIDBDH#b4ogr(XtTR8w&$#yI#3;ZooJv^FJBe8?S^CQX z{HlQQ`R%A?E_Q-7wbO@Pp2seCLLqDM9~{&_;!hl9HGY?WLpaJO`TwG0_&ffI@c#fD Co%{&^ diff --git a/backend/generation-service/target/classes/com/artedu/generation/client/LLMClient.class b/backend/generation-service/target/classes/com/artedu/generation/client/LLMClient.class index f74e3cb48adfb883415ead0305046b3f1bbbac76..b7246166e14ba481bf4210515fe6089022bd59d0 100644 GIT binary patch delta 17 ZcmZ3*vWkV{)W2Q(7#J8#HgYI20RTL!1-1YH delta 17 ZcmZ3*vWkV{)W2Q(7#J9AH*zR30RTMM1-}3Q diff --git a/backend/generation-service/target/classes/com/artedu/generation/client/LLMClientFactory.class b/backend/generation-service/target/classes/com/artedu/generation/client/LLMClientFactory.class index fe3ef456f3bc8752d885c2483a75ee357cad5ad8..6976415fde11e2e1ec7368c02a394ca1e9e4707e 100644 GIT binary patch literal 2973 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 MDkyl9zj-+Q57U?$UH||9 diff --git a/backend/generation-service/target/classes/com/artedu/generation/controller/EmbedRequest.class b/backend/generation-service/target/classes/com/artedu/generation/controller/EmbedRequest.class index a070a4b2e08ab6cafb653f07b84881a11aa1fae9..8dd733ccf8993f9d69087ee6293270ed1141ce09 100644 GIT binary patch literal 1600 zcmb7EU2hvj6g{)v^=_O^>!eMJ!6lRi>W{d~NBC%*6q+cNA|(MOQ6zX`V~^}@o!xYI zU6p5^k$C0@P$A`^NZ?jMAb0_Z-%*MFh(bBz-6VFK7bJUTXXf5>&$;)`{PpkQuK?z- zl!Jzh3EhT)tU&&jd)IY3uHSM#*}Wwju|Rgg^S$`GK&DjQ8G(fn6FD2Bumx(3V9#;G zST?&(OZqZ&V=wTXM&QR`(CNs~S=rl_%}sfyDcoCrfghLxLMM0JCTxH zu<jY?8{pJgUZ*L;9E!+Tc#ZrARh5*cMRoYPjmwx}9Cv?T z`c0;1kbO$%MUE+a-NKs!qO6cgHp)tz6$go%Kw-1%$KIaY@gi@xBX9VA5cjhk30&#x zzUSO^J6`j+1W_Eio*zffMi4Ktq_^wL)}D+aw?(;mMf>riub+JN%i~9fe}8`{aB(=q z_Luv^Ve}+XXV*MmZgg4LaN8vnRnMT|c6Qv*Q|ok7kJ}!(Icxu`M-<2CsG>vFKg!<@ zlN1d1P}&#*Mi94UC@`X8&m_&3>+hwDv8~u`++KJ0Q7l0*i!`*NrF1IByih651KJqGS*}*TgP|W(e~0xgjLbpxH(2Yll^(|WOMZ-R z%yO95Yky+2p#OpK`><;Ty@$!Zg?>Po%nSPG68K{h%Xl9jF!&_1`yq3pVFuH<#=Q&+ zP{2IDbkvD8iL7Zo#TgUUKbSJ1@n`WBQqN4v{u*bM1w+wR@ds0wsl2(ie-x(*;%%*EB$e_kRJ41U4ApI=?jJ zDCMKRKqc!kv}Y`UPFX@w5`=h0?I&wZD0X~7Qg%0$4IPU=qxjiFygD)6!zD$M)5IGb Vdbsj@`waG8F{LK(F;O(!_z!n#GWP%g literal 2041 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 TZw4}BvWJa_(lD$AdF6irQELa1 literal 3195 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 literal 6046 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 diff --git a/backend/generation-service/target/classes/com/artedu/generation/controller/LlmModelController.class b/backend/generation-service/target/classes/com/artedu/generation/controller/LlmModelController.class index 99e086753084675126b848c020ee1777f6683a35..ce732eac3d2618fc9423ab4a72f6505c77450956 100644 GIT binary patch literal 7403 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 A!TB?z!j8 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 literal 7161 zcmd5=S$7;)5w0uEt{&}MV`CCLcC==|K)@|Ku_7-SN3xB#Y#66CYD;a+Oe-@z0<(o3 zLLguWNeB?a7DF(ECAJe2LU)Tbg z>fW9||L5wfM6{b;i&LARZF#SlwadP@E z`>efcXA5>|F?)FatdsWzwYdw>&(;mIUTJYkka@HUf}(TMt+?|AXS!7Kd`VmpG&#$U zoVUHAyWmx`#dGtpR8|VrO4hF7vd3-s7>Cf&+j=Zsw~ATFuAS32V^9;|pJ81iMuMu4YbFqJFECOhlp?ZRGIj$_0G)s=++ z7hQDx9Aeu$G8%fAj_xKM-CSw4L412>3tn;FTh1O(>2zce`L&WH=xqi?DJH0E)-5@Q zs>OMyEJMxl;rX1j%PxmrDVfUhBSy~YAI#QZi5DbdCt`HyD4}^gAB9Vv_XS3q@HvlNH-hy8Z^v? zXhkKyZ{+&CkDkN}!CH^*Kp3Ng%P0e=T2MnnwX~D4ssJLGN|pHfYQb>+aZ_^whO=lgV)>g_!RxfbeVrXJN)CKNwCP)~|yg0M(Q)l(+?vZ+kywNjbT z3nY9`)ozNuN8gXrvuk!*Wisdo^g}GDRl87i4xbUUJzSnafrL7S?gqWs>3?j{b96z_ zP|;p?P^x*`zsL0vqEf}TOFpXYjWC(^T+j9YuL*CJ`ZbW~U2e(sZx@8saFSQU&kXtr z{S)#oi^l>w1q=U4o) zy)x(cOWr~yMZcj-ae7furhaI0ORL_plT}kz8QO2>eXo3uQ+HX=Q{e<@v?9FAE-e(C zN@mvcma8jM8|G+@qdX?9hd&TfHCR@fV#Y2Mj=8=w)fJ;(C+KBCj|A}>aTj)riJO9= zVYyZ`wE-6m4^+`;2}Q$FP=`v^b;yHyHOW!1=klOdO}oV?wxC=I=h&HoU8y*gIK6^H z?z&hvie8*v6|`kzDAtn-HQkJzpdIDaL2Z1Z!YGbW8utXQq(dob!YK#pHa^tIJI*lj zj#G=g@*|9N@kQ)Y$33w+SPD=w{sCiYp6Q;2s@&k+%F2 zLL1$L{|w<--HiW+0?^xOD@Is>w52*;u(M0;8z!l|kW(M)SZ`)GdyA`7}U zu8FbnOSI)zkk;48phD;x;rdavE$9H<1>5yyw}x|jtDM{vxLkA1IY(RN2b*(F zw93iNiaGCY&Y5kMlN%p%&Nk=V(JCi5QRbYZL(Ot@TdSPhkeTyvbIzTua&mKL&Lhp= zeOIfTyiqXc`{`)2ci+=0CvQ5;d8|3-Oskx{fiWjO&(_bg{a)xyY)Y5L$DX5TF%*gB1bAgOWGjf?82oR^NC?Kb-m>FeE z>~-qBKxs2-#zLUeRve(yR>F)kD4{`dGZ6yWRuUlFN|{Lpr8FpMrb3{+)d5i6GRzJJ z85#sB1aho2K#tXErWw?!L20uy1X{GZ09v%V%`OIYYfzWj9Rj&l4?wQfYxXdxSA%-Y z-VkWn>H}!m>Noos)UQE(W`77&v<3hwT7%{Qg9bHdz#I&LJZlIb&l)y|7&NRwL*{S* zid;l1ZC`iXcvB@bXrT_A;qaIX6PKG1f3Td`Us>XJt?-(MREZ^ zt++Iyl(knpFgaF2ni4e=3S45`7C&ivEV(^Jz#O z^e@^$--cue-Uq$|Db35d?FtQEgCc_EECiM?ZrAX?K5k>h07U~pfQhVCX;>@-t0S-1 zYH)llxQ=gN&@PE}E_JWQHtm>fb++a> zO_***Sm$gBs%g1R%5??z4gTb+i^!(h3L4}no9{OK)>+14=g;G5ZdEVQGq~Bf^0*va zi@01|ra@OThCbY{(DRKCQ)@rmBc!_Z&*cve h{06_k^+E-+V0ZrY;R>#o=qg71d-ZSWcl3KQ{|l993iAK} diff --git a/backend/generation-service/target/classes/com/artedu/generation/mapper/LlmModelMapper.class b/backend/generation-service/target/classes/com/artedu/generation/mapper/LlmModelMapper.class index a66c634103e879ed257f4f18068ff2495536660e..a0e9f9b42b2abb94685a90620ef496f424b19a7c 100644 GIT binary patch delta 29 lcmeyz`j3_4)W2Q(7#J8#HgcS0ocx2adh%69<;lfN-2lQ<3@`uy delta 29 lcmeyz`j3_4)W2Q(7#J9AH*%b1oE*TUJozeP_2govZUDMo3z7f; diff --git a/backend/generation-service/target/classes/com/artedu/generation/service/LlmModelService.class b/backend/generation-service/target/classes/com/artedu/generation/service/LlmModelService.class index d9ce4e4cc4483a505d55d16a17095074e82d39c4..d49d8fe7b718c326ad3fea87d92413647da22527 100644 GIT binary patch literal 7444 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 diff --git a/backend/generation-service/target/classes/com/artedu/generation/service/PromptEngine.class b/backend/generation-service/target/classes/com/artedu/generation/service/PromptEngine.class index 163b8c4b3e31f2f1c4a3b8b305c8406b05b1eae3..ce0ea199f2adeb727469c513e113eb56b5e6b95f 100644 GIT binary patch literal 5270 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 literal 2730 zcmb7GYg-dn5T1iTLX5X)RkT`d)q;vatJaFzDk|FIrQ)^P%M#YOlI-$q7F$0R5X)Ur zR8UZ{3ffkPc)@V>TR-$~nB6R&{0Ft~*^Lr~$H(SL&dfPyX3jfvX6EFdfBT1tXd@Ll zD2dThpAz&6swNhddi|m-s)8mdvNt5ErzD@~-K#3W5^bC8mt@gF$&99+6ix}=fFS$5 zdkRmAK8?|YfZ}K5$yZdrHxxL&`lL5s@%u$Jhtb@9rLrak#hvmgDI^sJ#Lcp-Xx0%S zt`bm!g-WqE&puczf{Js4FCfX1wh4waG7mCJ&Q*#;7fqrm4w}qp*4xKy7krwco_5nz zn#L&2FKYJjj236)kD|>D2%%6;=2(MbXh)mTu|(hnnkvcu zoCH_?$4cf{H3!W{6h{MNTie2ch^mX`(QGFzWOO?^)NZtdWB2bz`>vbimtw6qUkp~~ z=Ea838Es+xW}n&JWwiAhH!5EY*2Jz=n&IKty}FTG!z0bzdhH)ZP2Kad3N!rFXzw!` zy7jJ3{Xz@G^o#e*@b5-%wNV~^F<2kFbknGAj7G|g?kCYmQ#5kzd0DxBzE1BL0%Nq* znBm7pTZ3NP%5__B=yw{-@O1!yahHpu{lra+XfdNyp`=8Vix_2%6TGoui2Ix4q)&1E z&&wKZU(7T0##I=<;BrzXqZL^T5(5B)#-n?=dB)`jdRMbq(+?oV<*R1J!UZuM?YH#${uhJSqLEtT$y3-cJD%y?HDL5} zog>Znz!+VfMh{;ZxqeZ9*vhvWtIdiI7c6-h&4$nVP?KKMpojYq(~*{5+yOjy(n>}Q zLZ2b~xsY{rM&)_Eb=cZo!)PX7x6}Y28mTj`RM|26993&Hw>#+zMoIi6BzgL%k+w49 z$^-lIZTXFiR3u5P^|5iT!yInXtNIgf*@{?$*;%gFpVb@xiVh4!hc26UZ;w>f8r4^T zJvLZor5R5Nh?!M?#wvT^>g!yJ-S33kc3PVKuz?>Rzt4kD=27`in`c;ou@?L44<3X?ACkip5+-_6gb{Njm`!IAslO z%T=J1sy=bM#9Q99#HPQ3dkiPyjr`y^Z9K#7sU^Hk9an{*__LxGdqe1HqN1HH5xoWW zV}e*s-J&R3NK=K9U7~hEDGIsh5FK&QVMdEaLo3Orlwzn^jnBsWy2hor6uofnr|rX2hefEk0xB6{odgT8G|%e2m}fwP0X2+N(Y_vJtGlG zjRJ`dbf7xyN->|cnz!m>-DSvAqii5H(1d=vCL4_eQu=Ra(MFN(#`(rr#bCVV+9Ue2 zGb1RPo(lb9y5m|D<_XgxrtF(}PJ8&A`YN`1paf!p-67jH`J; z`EJV6r!?zr6{n@*wgo61D7f-m`Vb?|WQTD;D%KhXXx@>h^wIj1^c2s6Ui$bD=#n_i zh|{HUx;#!-fTky7@MOnVR)J_d3VIJku6=joD!##s4Gv){@^x1)w|=_Jbb4&k6o0 Re#hts%y>ThNCF_I{|B|Az&ii{ diff --git a/backend/generation-service/target/classes/com/artedu/generation/service/QianwenClient.class b/backend/generation-service/target/classes/com/artedu/generation/service/QianwenClient.class index 7f7cf2c1c89cabd014bc2738598e1087bfee011d..84fa7e0f321cafb76b516dd3f2041ee562323114 100644 GIT binary patch delta 3150 zcmZWr3wRXO75?wO?(EF$X0wpc2_Q+RA;~5#VxVOcAUrIkBs>~YZ}?tjnC!RaqG&3W>|p+^8Tv9T%~aB{eGxZz<4Y>HkV4JV?>Sa@mICUc#|;Ax2` z~Y}>6niNL@AYyg?kel znl^>oQn8qs7LU4{*oVZM?zu`UKCELAJ|bp$sv0!3>1dY(#>C8|nT}fKs<^drfw>`? zNmv@Huv8LU#;~|nOyv_rrN(L0L^~f}q7u_;S(^?W*IGFHu>$A(ifqlB<`& zWtn|sWhh5?v~R7I+H59!6>O#Vo@koNZJFs_j&0&;Z{3(aDWXqe2gi*%`td1-Y7y29 zakuIfjcSY1hnsYK1~-c>>a4M!qkMBS*2YvienZrXr;-YGipSJ2&ALU$7jdh2OP$7U z6AfCevJ1PVs0YLvt(C|N@c>(1$?>I21!<+@$(WS#mvwvvUlseco&LS}I>$G3+=YD% zQ*1QLbiY`qw`lj^n;iG*_!hoRNh&=ZR@BP$if8n&vKRO1xF6pU+&5W!0N>;IzK$Q@ zhhnO4vRLh#L5hD+#{nD^clu_qhs9IAW^xVb7)DM6{4;4&4@-F+5zGCv*&|}NzgBC- zF}cr2I35!(`perC{D_p)*4BPz&%Rf7?mm6wrqjd2k;?5mR2;{MjuTSZs#Lbw+Z&CU z3Z7tqf|Im;sfB@OuU&p0rj*%M%$=A~lvp zD*lKUIbPE7GX5kcI4VT5qiNvfPO+Uea+1`1(yiF$sPnq4jd9XgW7|L=O9|EgC4Bj~e@54|Zv}eCgPuY+`4b+8l{DmwXte=Je{))fR z$YeXr2V*J)=j4kIBQUT2A(UrP5pf&t5p)>tP(u!tPDDJ0X9P13pe9)FISNOo({Sg| zz>vk%j!xI;%Z!drH-)J(hcUAwhdE9doKpsfkq+L;Xeh4bv9VJCv`ShC!wgcA-Zgc3fOshQB@JD z|KhFu)?hDDkr6`@S}2Q;MhM#pl*x*&4CS!eaH4?8a7nbZRYi1nm5sO2HRU6WVhZ6L z-lq5zbre&mfJvqNvTX0cL?x4$&LdpFG>t~NTFIAdjm+nO)SOf&sICRQf%>pgNb8Wd zS3ZCvM-zP{!BVNW!&pn&jmi=SyMpU;*xbLn?(@L*3cop&~j zz)$ZM3AQl*`hJ5K7xYn<8zPFK9KiN0K5Zz$&jvrA#TO1^SEu1Nlp)+6@e(67c!%K) z?s1aFv$!*&8fq3_JAk|Qqgk5!M{t!r9>bntd^e)i8`=;CBf8v?hl?p7;(!rj~nhRek{+A?X*RFnyP)Ay20D_=%RzNW8Agu1#xOzUT-&3 z`5wn)(%U<9wV$MWyO&g^llLqxkk5^3JdYGv9?ZibY$b~$jazV$Hb}v4Bp723QsBMl zWKQOyZgBx)n45W|R#<6KD`XXp7+Lla>xYZ^@@I_6o*_@C4TUKL#RfoD0RUMA0A%q( zTJLCDmD0-7*#hT9TnEmf(edPXmJVtx{|CaglcSGg7suX}g`Y36TVzJ-%4AN(sDXY8O$e)zT{MsUWYD%)g zbW_srNwOR^<#NhF8E}?J6~2+>u&H?A;O8-(z%z{|Ihal#=wha)g!crEE*c{QPjL?8 z83On#8&H1%;iQJ(uWiSY#u4}$kKt4nFHnQBC)*ENPMGOgLB$3Av*N|AD8nwgNp7Qk zza7&tV4uKxnpaJ`>SKPJS7ek|q`<3;j^uNBUN=&xJTdxc6SF^#5~GX6`wnXCU2(Ls wb8r?2me7Cl0YZ|$mt?1qKi;4=j6WPijl7W9dzu4vVv>@qOt5(Eu`$5^0FrLFasU7T delta 3286 zcmZ8j3w%@M75{&E-J6@6KGGMr6j~^hrfH2}K}iFX+6o9QNCoMtV`+OSfix+}4G*{3 zx#`AG9^L0Qhg9d>#BGk1qM_k6Hn-wr@2A75(+!>O;hc4Dh~W8dnlje*_r1?K|8vg& zoZDCG56{he_Ttf#02Z)f2^Iz)zl%*B7<6|_urcIq3~dSdBcW)Ie?{j;y~|**Mq)h- zp5?K4k3SJvU%%16Jl4~r#~TJt|hAjUTX1pSl{i zN}x#P{eNautVKJ2&05boc$saHXEknD@e!<}pl%JtqYOp-Eo*`5U87J~LMl2@%Xiy~ zWd=uIJl5OC_vD1@9C1C7j8OjFZAPeTQ%k7tmJnrFLhqFkGveWB4?k#Y&2=G&J`sed z(7TX3a>Hiewy4;OZQNyF!S3K4_BwerKCa>uxRdX-&*8CLf4K zUJMYW`jX_yb=7>fa|&;Fl&$EJaX;w_N9jVw7fCGR?z;7{cyEY~9-v?u`ZikaBSXER zZR?EKCOw*vv7h#Rp*ZEp(BlaS4>8Ojs%ev#7)IX`J=9I73I+w~9>Jp$zRECN-1BnD zNqPSozRs(qpgf2JDjvr-ctl!I_$>mkC~0hn#lv@)Pm``Hw~8NPl)B25Jj)|WrQ^r= zsf3^KeM%*1`5AuBPbl+{H{~$>D0{2^{ z@soKHf6-OUUgGb#s$Hw`vLM3?GXBIDsgqjI;WY`bG89~S@=%X&!5k4p-8^V$lX=U!OyCtEsVUgCxv~PDfHH$rWY9}h{V(@ z3ZymJ+o{JD=3+T2%VpG30u)%IgBZXXk$S+jS9^m zVHqW;K)*N!y`}~_F55_mgmhlb5lpW+h8gWgQ1ujMT~?7}V$LVj#iS^o)BtKm242*d z`lu^r^f86739rHCC6wcAP0G<^iEZE4(Mh2|I%QXfv^HVbNewJCgbh^$#r&Ibz0`|B_h z0aRfzW??0j#%fd(Cu^wvU1j24NYN&2ZP-BPc1%Gt zHqtu>Hj#8LEEloXCLt&xa-Q6!?+~J<`vKqpX%IHNS>J7%Z4@P%%~xBOM$CpxFdUkF zsHV0qh0R&`;llF%3KGmf^iDwZB0dh$Yl0OC^qOF;WV^zICd?_RYgzYqnL_oLu()gHW#W*I-CeTu*vgj&`CY$K$Ga4q)`G`}W zB>kjy0-bLhokBDd0kmDlG%bVaE;Nl}nnSaYmNVh{l(3g!t|$vo5-Vsl>DEs!X82|i zpR0Cccipf3RPZvI2u-<>7#=$;0?c3Xf^B=bN4bmY5dU!HWaW6nO8J>3V#;mV;-7xK8Fi9hgWgloNZJnmx?>sbG)M@ z!?(LL;mc-}j}Lz2L#JSDtKg}N*A2Qs%q!k~m<3CAy?r~`DFeI^#? zC}Q-9qw&9_%0e*{?e$?=iMCzkI}L~Dy&<3H{WLCFa03T8EWP$F+Cho@QOt|EPMY@2=O`wvI5{kgtFdRWDikvk)t43z*Zy*jhIVcik!GN-;OJD)YHHWKh#sN&yG% zC9C(5`dzf&O^tL9uEl^^i!~Wz6aECp{V7HjlTCkSpn&Bw53Ec7$2IXxxR!aAb&b9% c&i7Gm=Er(HJ5RB)umZAgVTIWbAu9qt06Ipmpa1{> diff --git a/backend/generation-service/target/generation-service-1.0.0-SNAPSHOT.jar b/backend/generation-service/target/generation-service-1.0.0-SNAPSHOT.jar index 979ed91b7605a65810cc1486d03e059ca00edd72..d979f8b2f106f6072624d4b9c7b0255299d7ca1a 100644 GIT binary patch delta 15973 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 diff --git a/backend/generation-service/target/generation-service-1.0.0-SNAPSHOT.jar.original b/backend/generation-service/target/generation-service-1.0.0-SNAPSHOT.jar.original index 679ec4a1fd401d3766843037a3afed77eac26a9a..3ab62f9921b18d8811aa4508319298e661937cbe 100644 GIT binary patch delta 9753 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 boBZo4{QV02Yc=vh-va9+h~Xqbe?9*L^T-}6 delta 7915 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 L4#Z)ff5!eFE=+nW diff --git a/frontend/sidebar/src/components/ScriptRecommend.tsx b/frontend/sidebar/src/components/ScriptRecommend.tsx index 0ac0536..52595ef 100644 --- a/frontend/sidebar/src/components/ScriptRecommend.tsx +++ b/frontend/sidebar/src/components/ScriptRecommend.tsx @@ -76,6 +76,33 @@ export default function ScriptRecommend({ userInfo, customerId: propCustomerId } } } + // 阶段/意图代码映射为中文描述 + const getStageLabel = (stage?: string) => { + const map: Record = { + 'STAGE-01': '开场白', + 'STAGE-02': '需求挖掘', + 'STAGE-03': '方案呈现', + 'STAGE-04': '异议处理', + 'STAGE-05': '促成签约', + 'STAGE-06': '跟进维护', + 'STAGE-07': '转介绍', + 'STAGE-08': '沉默激活' + } + return map[stage || ''] || stage || '未知' + } + + const getIntentLabel = (intent?: string) => { + const map: Record = { + 'INT-COURSE-01': '课程咨询', + 'INT-GREET-01': '问候', + 'INT-NEED-01': '需求探询', + 'INT-PRICE-01': '价格咨询', + 'INT-EMPLOY-01': '就业咨询', + 'INT-OTHER': '其他咨询' + } + return map[intent || ''] || intent || '未知' + } + const handleGenerate = async () => { if (!customerMsg.trim()) { Toast.show({ content: '请输入学员消息', icon: 'fail' }) @@ -83,10 +110,64 @@ export default function ScriptRecommend({ userInfo, customerId: propCustomerId } } setGenerating(true) try { + // 并行获取:客户画像 + 对话历史 + 参考话术 + const [profileRes, contextRes] = await Promise.all([ + fetch(`/api/v1/intent/profile/${encodeURIComponent(customerId)}?corpId=${corpId}`), + fetch(`/api/v1/conversations/${sessionId}/context`).catch(() => null) + ]) + + // 解析客户画像 + let customerProfileStr = '' + const profileData = await profileRes.json() + if (profileData.code === 0 && profileData.data) { + const p = profileData.data + const courses = p.interestedCourses ? (typeof p.interestedCourses === 'string' ? JSON.parse(p.interestedCourses) : p.interestedCourses) : [] + const lines: string[] = [] + if (p.currentOccupation) lines.push(`- 身份/职业:${p.currentOccupation}`) + if (p.studentType) lines.push(`- 学员类型:${p.studentType}`) + if (p.skillLevel) lines.push(`- 基础水平:${p.skillLevel}`) + if (p.intentLevel) lines.push(`- 意向度:${p.intentLevel}(${p.intentScore != null ? Math.round(p.intentScore) : 0}分)`) + if (p.concernFocus) lines.push(`- 关注方向:${p.concernFocus}`) + if (p.decisionStage) lines.push(`- 决策阶段:${p.decisionStage}`) + if (courses.length > 0) lines.push(`- 意向课程:${courses.join('、')}`) + if (p.budgetHint) lines.push(`- 预算范围:${p.budgetHint}`) + if (p.preferredCity) lines.push(`- 意向城市:${p.preferredCity}`) + if (p.age) lines.push(`- 年龄:${p.age}岁`) + if (p.education) lines.push(`- 学历:${p.education}`) + customerProfileStr = lines.join('\n') + } + + // 解析对话历史 + let conversationContextStr = '' + if (contextRes) { + const contextData = await contextRes.json() + if (contextData.code === 0 && contextData.data && contextData.data.messages) { + const msgs = contextData.data.messages as Array<{ role: string; content: string }> + // 取最近 5 条 + const recent = msgs.slice(-5) + conversationContextStr = recent.map(m => { + const roleName = m.role === 'student' ? '学员' : '顾问' + return `${roleName}:${m.content}` + }).join('\n') + } + } + + // 参考话术:取话术库推荐的前 3 条 + let referenceUtterancesStr = '' + if (scripts.length > 0) { + const top3 = scripts.slice(0, 3) + referenceUtterancesStr = top3.map((s, i) => `${i + 1}. "${s.content}"`).join('\n') + } + const params = new URLSearchParams({ message: customerMsg, intent: 'INT-COURSE-01', - stage: 'STAGE-03' + stage: 'STAGE-03', + stageLabel: getStageLabel('STAGE-03'), + intentLabel: getIntentLabel('INT-COURSE-01'), + ...(customerProfileStr ? { customerProfile: customerProfileStr } : {}), + ...(conversationContextStr ? { conversationContext: conversationContextStr } : {}), + ...(referenceUtterancesStr ? { referenceUtterances: referenceUtterancesStr } : {}) }) const res = await fetch(`/api/v1/generation/utterance?${params.toString()}`, { method: 'POST' }) const data = await res.json()