家居大模型联调,优化提示词 ,可以对根据客户的需求,10维度分析

This commit is contained in:
ZLI263
2025-11-22 11:22:20 +08:00
parent 497f396df4
commit 36035d820b
2 changed files with 236 additions and 47 deletions

View File

@@ -306,48 +306,211 @@ public class AudioTextAnalysisFurnitureController {
}
private String buildPrompt(String recordingText) {
return "请阅读以下录音文本,从中提取客户信息并生成 JSON。必须覆盖所有字段缺失信息请基于语境合理推断或标注\"暂无信息\"。字段要求:\n"
+ "1. customer_type仅可填「新房装修」「二次翻修」「补充家居」。\n"
+ "2. family_structure描述家庭成员数量、孩子、老人情况。\n"
+ "3. intention_products仅列家居类产品床、柜子、沙发等用顿号或逗号分隔\n"
+ "4. summary一句话概括客户需求务必提到预算若未提及则写“预算约3万元”并涵盖客户类型、偏好风格、关键产品\n"
+ "5. decoration_style概括偏好的装修/家居风格,并推测主人特征\n"
+ "6. sofa沙发需求/配置,含大小、风格、数量等\n"
+ "7. tea_table茶几/茶桌的需求、材质、风格\n"
+ "8. dining_table餐桌椅需求或配置\n"
+ "9. study_desk学习桌/书桌需求\n"
+ "10. tv_cabinet电视柜需求\n"
+ "11. cabinet橱柜或厨房柜体说明\n"
+ "12. wine_cabinet柜需求说明。\n"
+ "13. master_bedroom_cabinet主卧衣柜/储物柜配置\n"
+ "14. secondary_bedroom_cabinet次卧衣柜/储物柜配置\n"
+ "15. shoe_cabinet鞋柜需求或配置。\n"
+ "16. bed_and_mattress床及床垫配置。\n"
+ "严格输出 JSON"
+ "{\"customer_type\":\"二次翻修\",\"family_structure\":\"三口之家1个小男孩\",\"intention_products\":\"床、沙发、酒柜、厨房柜子\",\"summary\":\"客户为二次翻修预算约3万元偏好原木风重点关注沙发与酒柜\",\"decoration_style\":\"原木+现代混搭,女主人喜欢收纳\",\"sofa\":\"需要L型布艺沙发要求可拆洗\",\"tea_table\":\"原木茶几,低矮\",\"dining_table\":\"六人餐桌配软包椅\",\"study_desk\":\"需要儿童学习桌\",\"tv_cabinet\":\"整体墙面收纳\",\"cabinet\":\"定制U型橱柜\",\"wine_cabinet\":\"嵌入式酒柜\",\"master_bedroom_cabinet\":\"到顶推拉门衣柜\",\"secondary_bedroom_cabinet\":\"次卧需要开放格\",\"shoe_cabinet\":\"玄关到顶鞋柜含换鞋凳\",\"bed_and_mattress\":\"1.8米大床+护脊床垫\"}\n"
+ "不要添加任何额外文字。\n\n录音文本\n" + recordingText;
StringBuilder prompt = new StringBuilder();
prompt.append("请阅读以下录音文本,从中提取客户信息并生成 JSON。必须覆盖所有字段缺失信息请基于语境合理推断或标注\"暂无信息\"\n\n");
prompt.append("字段要求:\n");
prompt.append("1. customer_type客户类型仅可填「新房装修」「二次翻修」「补充家居」\n");
prompt.append("2. family_structure家庭结构描述家庭几口人、几个孩子、几个老人重点反应家庭成员\n");
prompt.append("3. intention_products意向产品清单比如床、柜子、沙发等仅限家居不能扩展到其它产品用顿号或逗号分隔\n");
prompt.append("4. summary一句话总结应该简洁明了地概括客户的需求和关键信息重点关注客户预算如果未提及默认预算3万关注的还有产品信息等关键信息\n");
prompt.append("5. decoration_style装修风格总结偏好的装修/家居风格,风格类型,并推测主人相关信息\n");
prompt.append("6. sofa沙发需求或配置说明大小、风格、数量、种类等相关信息\n");
prompt.append("7. tea_table茶几/茶桌需求或配置,材质、风格\n");
prompt.append("8. dining_table餐桌椅需求或配置\n");
prompt.append("9. study_desk学习桌/书桌需求\n");
prompt.append("10. tv_cabinet电视柜需求说明。\n");
prompt.append("11. cabinet橱柜或厨房柜体说明\n");
prompt.append("12. wine_cabinet酒柜需求说明\n");
prompt.append("13. master_bedroom_cabinet主卧衣柜/储物柜配置。\n");
prompt.append("14. secondary_bedroom_cabinet次卧衣柜/储物柜配置。\n");
prompt.append("15. shoe_cabinet鞋柜需求或配置。\n");
prompt.append("16. bed_and_mattress床及床垫配置。\n\n");
prompt.append("重要每个产品维度sofa、tea_table、dining_table、study_desk、tv_cabinet、cabinet、wine_cabinet、master_bedroom_cabinet、secondary_bedroom_cabinet、shoe_cabinet、bed_and_mattress必须是一个JSON对象包含以下10个维度\n");
prompt.append("1. preferenceStyleAndColor偏好风格与颜色\n");
prompt.append("2. materialPreference材质偏好\n");
prompt.append("3. customerFocusAreas客户重点关注\n");
prompt.append("4. priceSensitivity价格敏感度\n");
prompt.append("5. activityParticipation活动参与度\n");
prompt.append("6. customerConcerns客户疑虑点\n");
prompt.append("7. deliveryService交付服务\n");
prompt.append("8. competitorFeedback竞品反馈\n");
prompt.append("9. deliveryCycle交付周期\n");
prompt.append("10. productAppearance产品颜值\n\n");
prompt.append("严格输出 JSON 格式,示例:\n");
prompt.append("{\n");
prompt.append(" \"customer_type\": \"二次翻修\",\n");
prompt.append(" \"family_structure\": \"三口之家,一个小男孩\",\n");
prompt.append(" \"intention_products\": \"床、沙发、酒柜、厨房柜子\",\n");
prompt.append(" \"summary\": \"客户是二次翻修对价格比较敏感预算在10万以内\",\n");
prompt.append(" \"decoration_style\": \"总结偏好的装修/家居风格,风格类型,并推测主人相关信息\",\n");
prompt.append(" \"sofa\": {\n");
prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n");
prompt.append(" \"materialPreference\": \"材质偏好\",\n");
prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n");
prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n");
prompt.append(" \"activityParticipation\": \"活动参与度\",\n");
prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n");
prompt.append(" \"deliveryService\": \"交付服务\",\n");
prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n");
prompt.append(" \"deliveryCycle\": \"交付周期\",\n");
prompt.append(" \"productAppearance\": \"产品颜值\"\n");
prompt.append(" },\n");
prompt.append(" \"tea_table\": {\n");
prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n");
prompt.append(" \"materialPreference\": \"材质偏好\",\n");
prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n");
prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n");
prompt.append(" \"activityParticipation\": \"活动参与度\",\n");
prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n");
prompt.append(" \"deliveryService\": \"交付服务\",\n");
prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n");
prompt.append(" \"deliveryCycle\": \"交付周期\",\n");
prompt.append(" \"productAppearance\": \"产品颜值\"\n");
prompt.append(" },\n");
prompt.append(" \"dining_table\": {\n");
prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n");
prompt.append(" \"materialPreference\": \"材质偏好\",\n");
prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n");
prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n");
prompt.append(" \"activityParticipation\": \"活动参与度\",\n");
prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n");
prompt.append(" \"deliveryService\": \"交付服务\",\n");
prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n");
prompt.append(" \"deliveryCycle\": \"交付周期\",\n");
prompt.append(" \"productAppearance\": \"产品颜值\"\n");
prompt.append(" },\n");
prompt.append(" \"study_desk\": {\n");
prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n");
prompt.append(" \"materialPreference\": \"材质偏好\",\n");
prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n");
prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n");
prompt.append(" \"activityParticipation\": \"活动参与度\",\n");
prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n");
prompt.append(" \"deliveryService\": \"交付服务\",\n");
prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n");
prompt.append(" \"deliveryCycle\": \"交付周期\",\n");
prompt.append(" \"productAppearance\": \"产品颜值\"\n");
prompt.append(" },\n");
prompt.append(" \"tv_cabinet\": {\n");
prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n");
prompt.append(" \"materialPreference\": \"材质偏好\",\n");
prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n");
prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n");
prompt.append(" \"activityParticipation\": \"活动参与度\",\n");
prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n");
prompt.append(" \"deliveryService\": \"交付服务\",\n");
prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n");
prompt.append(" \"deliveryCycle\": \"交付周期\",\n");
prompt.append(" \"productAppearance\": \"产品颜值\"\n");
prompt.append(" },\n");
prompt.append(" \"cabinet\": {\n");
prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n");
prompt.append(" \"materialPreference\": \"材质偏好\",\n");
prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n");
prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n");
prompt.append(" \"activityParticipation\": \"活动参与度\",\n");
prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n");
prompt.append(" \"deliveryService\": \"交付服务\",\n");
prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n");
prompt.append(" \"deliveryCycle\": \"交付周期\",\n");
prompt.append(" \"productAppearance\": \"产品颜值\"\n");
prompt.append(" },\n");
prompt.append(" \"wine_cabinet\": {\n");
prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n");
prompt.append(" \"materialPreference\": \"材质偏好\",\n");
prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n");
prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n");
prompt.append(" \"activityParticipation\": \"活动参与度\",\n");
prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n");
prompt.append(" \"deliveryService\": \"交付服务\",\n");
prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n");
prompt.append(" \"deliveryCycle\": \"交付周期\",\n");
prompt.append(" \"productAppearance\": \"产品颜值\"\n");
prompt.append(" },\n");
prompt.append(" \"master_bedroom_cabinet\": {\n");
prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n");
prompt.append(" \"materialPreference\": \"材质偏好\",\n");
prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n");
prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n");
prompt.append(" \"activityParticipation\": \"活动参与度\",\n");
prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n");
prompt.append(" \"deliveryService\": \"交付服务\",\n");
prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n");
prompt.append(" \"deliveryCycle\": \"交付周期\",\n");
prompt.append(" \"productAppearance\": \"产品颜值\"\n");
prompt.append(" },\n");
prompt.append(" \"secondary_bedroom_cabinet\": {\n");
prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n");
prompt.append(" \"materialPreference\": \"材质偏好\",\n");
prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n");
prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n");
prompt.append(" \"activityParticipation\": \"活动参与度\",\n");
prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n");
prompt.append(" \"deliveryService\": \"交付服务\",\n");
prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n");
prompt.append(" \"deliveryCycle\": \"交付周期\",\n");
prompt.append(" \"productAppearance\": \"产品颜值\"\n");
prompt.append(" },\n");
prompt.append(" \"shoe_cabinet\": {\n");
prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n");
prompt.append(" \"materialPreference\": \"材质偏好\",\n");
prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n");
prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n");
prompt.append(" \"activityParticipation\": \"活动参与度\",\n");
prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n");
prompt.append(" \"deliveryService\": \"交付服务\",\n");
prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n");
prompt.append(" \"deliveryCycle\": \"交付周期\",\n");
prompt.append(" \"productAppearance\": \"产品颜值\"\n");
prompt.append(" },\n");
prompt.append(" \"bed_and_mattress\": {\n");
prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n");
prompt.append(" \"materialPreference\": \"材质偏好\",\n");
prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n");
prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n");
prompt.append(" \"activityParticipation\": \"活动参与度\",\n");
prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n");
prompt.append(" \"deliveryService\": \"交付服务\",\n");
prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n");
prompt.append(" \"deliveryCycle\": \"交付周期\",\n");
prompt.append(" \"productAppearance\": \"产品颜值\"\n");
prompt.append(" }\n");
prompt.append("}\n\n");
prompt.append("注意:\n");
prompt.append("1. 必须严格按照JSON格式输出不要添加任何额外文字或markdown代码块标记。\n");
prompt.append("2. 每个产品维度必须是一个完整的JSON对象包含上述10个维度。\n");
prompt.append("3. 如果录音文本中未提及某个产品该产品的JSON对象中所有维度应填写\"暂无信息\"或基于语境合理推断。\n");
prompt.append("4. 所有字段值必须基于录音文本内容,合理推断,不能随意编造。\n\n");
prompt.append("录音文本:\n").append(recordingText);
return prompt.toString();
}
private void applyStructuredResult(AudioTextAnalysisFurniture furniture, String rawContent) {
String normalized = normalizeJson(rawContent);
try {
JsonNode root = objectMapper.readTree(normalized);
// 基础字段
furniture.setCustomerType(textValue(root, "customer_type"));
furniture.setFamilyStructure(textValue(root, "family_structure"));
furniture.setIntentionProducts(textValue(root, "intention_products"));
furniture.setSummarySentence(textValue(root, "summary"));
furniture.setDecorationStyle(textValue(root, "decoration_style"));
furniture.setSofa(textValue(root, "sofa"));
furniture.setTeaTable(textValue(root, "tea_table"));
furniture.setDiningTable(textValue(root, "dining_table"));
furniture.setStudyDesk(textValue(root, "study_desk"));
furniture.setTvCabinet(textValue(root, "tv_cabinet"));
furniture.setCabinet(textValue(root, "cabinet"));
furniture.setWineCabinet(textValue(root, "wine_cabinet"));
furniture.setMasterBedroomCabinet(textValue(root, "master_bedroom_cabinet"));
furniture.setSecondaryBedroomCabinet(textValue(root, "secondary_bedroom_cabinet"));
furniture.setShoeCabinet(textValue(root, "shoe_cabinet"));
furniture.setBedAndMattress(textValue(root, "bed_and_mattress"));
// 产品维度字段每个都是JSON对象需要转换为JSON字符串
furniture.setSofa(jsonObjectToString(root, "sofa"));
furniture.setTeaTable(jsonObjectToString(root, "tea_table"));
furniture.setDiningTable(jsonObjectToString(root, "dining_table"));
furniture.setStudyDesk(jsonObjectToString(root, "study_desk"));
furniture.setTvCabinet(jsonObjectToString(root, "tv_cabinet"));
furniture.setCabinet(jsonObjectToString(root, "cabinet"));
furniture.setWineCabinet(jsonObjectToString(root, "wine_cabinet"));
furniture.setMasterBedroomCabinet(jsonObjectToString(root, "master_bedroom_cabinet"));
furniture.setSecondaryBedroomCabinet(jsonObjectToString(root, "secondary_bedroom_cabinet"));
furniture.setShoeCabinet(jsonObjectToString(root, "shoe_cabinet"));
furniture.setBedAndMattress(jsonObjectToString(root, "bed_and_mattress"));
} catch (JsonProcessingException e) {
log.warn("解析大模型返回JSON失败使用原始内容作为总结: {}", e.getMessage());
furniture.setSummarySentence(rawContent);
@@ -370,5 +533,31 @@ public class AudioTextAnalysisFurnitureController {
JsonNode node = root.get(field);
return node == null || node.isNull() ? null : node.asText();
}
/**
* 将JSON对象节点转换为JSON字符串
* 如果节点是对象则转换为格式化的JSON字符串如果是文本直接返回如果不存在或为null返回null
*/
private String jsonObjectToString(JsonNode root, String field) {
JsonNode node = root.get(field);
if (node == null || node.isNull()) {
return null;
}
try {
if (node.isObject()) {
// 如果是JSON对象转换为紧凑的JSON字符串
return objectMapper.writeValueAsString(node);
} else if (node.isTextual()) {
// 如果是文本,直接返回
return node.asText();
} else {
// 其他类型也转换为字符串
return objectMapper.writeValueAsString(node);
}
} catch (JsonProcessingException e) {
log.warn("转换JSON对象失败字段: {}, 错误: {}", field, e.getMessage());
return node.isTextual() ? node.asText() : node.toString();
}
}
}

View File

@@ -1,22 +1,22 @@
CREATE TABLE audio_text_analysis_furniture (
id CHAR(36) NOT NULL COMMENT '记录唯一标识存放UUID字符',
parent_id CHAR(36) NULL COMMENT '对应的音频管理或父级记录ID便于树状关联',
customer_type VARCHAR(50) NULL COMMENT '客户类型(如个人、企业、设计师等)',
family_structure VARCHAR(100) NULL COMMENT '家庭结构描述(如二人家庭、四口之家)',
intention_products TEXT NULL COMMENT '意向产品清单,可存放多件物品的信息',
decoration_style VARCHAR(100) NULL COMMENT '偏好的装修/家居风格',
summary_sentence VARCHAR(255) NULL COMMENT '一句话总结客户需求或关键信息',
sofa VARCHAR(255) NULL COMMENT '沙发需求或配置说明',
tea_table VARCHAR(255) NULL COMMENT '茶几/茶桌需求或配置',
dining_table VARCHAR(255) NULL COMMENT '餐桌椅需求或配置',
study_desk VARCHAR(255) NULL COMMENT '学习桌/书桌需求',
tv_cabinet VARCHAR(255) NULL COMMENT '电视柜需求说明',
cabinet VARCHAR(255) NULL COMMENT '橱柜或厨房柜体说明',
wine_cabinet VARCHAR(255) NULL COMMENT '酒柜需求说明',
master_bedroom_cabinet VARCHAR(255) NULL COMMENT '主卧衣柜/储物柜配置',
secondary_bedroom_cabinet VARCHAR(255) NULL COMMENT '次卧衣柜/储物柜配置',
shoe_cabinet VARCHAR(255) NULL COMMENT '鞋柜需求或配置',
bed_and_mattress VARCHAR(255) NULL COMMENT '床及床垫配置',
customer_type VARCHAR(50) NULL COMMENT '客户类型:新房装修、二次翻修、补充家居',
family_structure VARCHAR(200) NULL COMMENT '家庭结构描述,家庭几口人、几个孩子、几个老人,重点反应家庭成员',
intention_products TEXT NULL COMMENT '意向产品清单,仅限家居产品(床、柜子、沙发等),用顿号或逗号分隔',
decoration_style VARCHAR(200) NULL COMMENT '偏好的装修/家居风格,风格类型,并推测主人相关信息',
summary_sentence VARCHAR(500) NULL COMMENT '一句话总结客户需求或关键信息,重点关注预算和产品信息',
sofa TEXT NULL COMMENT '沙发需求或配置说明JSON格式包含10个维度分析',
tea_table TEXT NULL COMMENT '茶几/茶桌需求或配置JSON格式包含10个维度分析',
dining_table TEXT NULL COMMENT '餐桌椅需求或配置JSON格式包含10个维度分析',
study_desk TEXT NULL COMMENT '学习桌/书桌需求JSON格式包含10个维度分析',
tv_cabinet TEXT NULL COMMENT '电视柜需求说明JSON格式包含10个维度分析',
cabinet TEXT NULL COMMENT '橱柜或厨房柜体说明JSON格式包含10个维度分析',
wine_cabinet TEXT NULL COMMENT '酒柜需求说明JSON格式包含10个维度分析',
master_bedroom_cabinet TEXT NULL COMMENT '主卧衣柜/储物柜配置JSON格式包含10个维度分析',
secondary_bedroom_cabinet TEXT NULL COMMENT '次卧衣柜/储物柜配置JSON格式包含10个维度分析',
shoe_cabinet TEXT NULL COMMENT '鞋柜需求或配置JSON格式包含10个维度分析',
bed_and_mattress TEXT NULL COMMENT '床及床垫配置JSON格式包含10个维度分析',
owner_phone VARCHAR(30) NULL COMMENT '所属人或负责人的联系方式',
owner_id CHAR(36) NULL COMMENT '所属人或负责人的唯一标识',
customer_phone VARCHAR(30) NULL COMMENT '客户的联系方式',