diff --git a/ruoyi-fastapi-backend/config/static_qa.json b/ruoyi-fastapi-backend/config/static_qa.json index c1e9782..e38219b 100644 --- a/ruoyi-fastapi-backend/config/static_qa.json +++ b/ruoyi-fastapi-backend/config/static_qa.json @@ -1,7 +1,7 @@ { "qa_pairs": [ { - "question": "你好!你叫什么名字呀?", + "question": "你叫什么名字?", "answer": "您好呀!我是厂区专属接待机器人达达,很高兴为您服务~如果您需要了解厂区信息、指引路线或咨询参观流程,都可以跟我说哦!", "category": "基础问候与身份", "priority": 10, @@ -16,7 +16,7 @@ ] }, { - "question": "达达,你能帮我做什么呀?", + "question": "你能帮我做什么?", "answer": "我能为您提供超多实用帮助呢!比如介绍厂区的发展历史、各功能区域位置指引、参观预约流程讲解~", "category": "基础问候与身份", "priority": 10, @@ -28,7 +28,7 @@ "variations": [] }, { - "question": "达达,咱们厂区什么时候成立的呀?", + "question": "咱们厂区什么时候成立?", "answer": "公司成立于1988年,深交所主板上市公司。公司管理总部位于浦东新区,毗邻张江科学城,在上海奉贤、北京、天津、西安、深圳、成都、唐山、福建邵武等地设有子公司、生产基地及分支机构。", "category": "厂区信息", "priority": 9, @@ -40,7 +40,7 @@ "variations": [] }, { - "question": "达达,咱们厂区主要做什么业务呢?", + "question": "咱们厂区主要做什么业务?", "answer": "公司业务范围覆盖装备制造、新能源、轨道交通、航空航天、电子信息、半导体、国防军工以及低碳环保等新兴产业等。公司一直以来以技术创新为第一核心竞争力,拥有多项领先、具有竞争力的胶粘剂、显示材料、电磁兼容设备、电源模块技术,其中多个系列的产品性能已经达到或已经超过国内、国际同类产品的水平,为客户提供系统化解决方案。公司未来将大力发展功能性高分子新材料,以胶粘剂为主,特种树脂为支撑,结合自身资源与优势向电子信息材料、高性能复合材料等方向纵深发展转型,完善军工领域的战略布局,打造 \"新材料+军工电子科技\" 上市公司平台,争做细分领域龙头,争创隐形冠军,通过多个外部基地的建设,公司将逐步打造成为一个高端化、信息化、一体化的高分子化工新材料与军工电子产业集团。", "category": "厂区信息", "priority": 9, @@ -52,7 +52,7 @@ "variations": [] }, { - "question": "达达,咱们厂区获得过什么荣誉吗?", + "question": "咱们厂区获得过什么荣誉?", "answer": "当然有啦!咱们厂区先后获得过 \"2020上海制造业企业100强\"\"高新技术企业\"\"国家认定博士后科研工作站\" 等荣誉,这些荣誉是对咱们产品质量、技术实力和管理水平的肯定,也激励着我们不断进步~", "category": "厂区信息", "priority": 9, @@ -64,7 +64,7 @@ "variations": [] }, { - "question": "达达,公司愿景,康达愿景是什么?", + "question": "公司愿景,康达愿景是什么?", "answer": "未来3-5年,坚守以流动性合理充裕为底线,康达将坚定不移地践行\"新材料+军工科技\"双轮驱动战略,着力优化完善顶层设计,做强做大。新材料板块扩充体量、提升规模、弘扬民族品牌、传承行业精髓;军工科技板块加强产业协同、科技引领、赋能创新。康达将回顾过去,放眼未来,充分发挥混合所有制优势,国有与民营体制有机融合,高度市场化,快速提升企业整体规模和市场场价值康达将有序推进全国范围内研发与生产基地布局,收购兼并与园区建设同步互动、有效补充,\"一带一路\"走出去。沿着国际示化、互联网化、证券化方向迈进,打造多项细分领域隐形冠军。\"不忘初心、牢记使命\"、\"传承融合、创新超越\",弘扬\"专业创造价值\"理念,崇尚\"百年康达\"愿景。", "category": "厂区信息", "priority": 9, @@ -88,7 +88,7 @@ "variations": [] }, { - "question": "我想参观厂区,怎么预约呀?", + "question": "我想参观厂区,怎么预约?", "answer": "预约方式如下:关注 \"康达新材\" 官方微信公众号,在 \"预约\" 栏目填写信息提交即可,提交后 1 个工作日内会有工作人员与您联系确认~", "category": "参观与指引", "priority": 9, @@ -100,7 +100,7 @@ "variations": [] }, { - "question": "参观生产区需要注意什么呀?", + "question": "参观生产区需要注意什么?", "answer": "参观生产区有几个小注意事项要跟您说哦:一是禁止携带手机、相机等拍摄设备进入,二是禁止触摸生产设备和产品,三是要跟紧讲解人员,不要随意走动~", "category": "参观与指引", "priority": 9, diff --git a/ruoyi-fastapi-backend/module_admin/controller/ragflow_controller.py b/ruoyi-fastapi-backend/module_admin/controller/ragflow_controller.py index 639bf4d..f0e5ff0 100644 --- a/ruoyi-fastapi-backend/module_admin/controller/ragflow_controller.py +++ b/ruoyi-fastapi-backend/module_admin/controller/ragflow_controller.py @@ -62,6 +62,34 @@ def build_chat_cache_key(chat_id: str, question: str) -> str: return f'ragflow:chat:{chat_id}:{digest}' +def remove_style_hint(question: str) -> Tuple[str, bool]: + """ + 移除语言风格提示词 + + Args: + question: 原始问题 + + Returns: + (处理后的问题, 是否移除了风格提示词) + """ + if not question: + return question, False + + import re + + pattern = r'语言风格\s*[::]\s*[^,。!?\n]*' + match = re.search(pattern, question) + + if match: + style_hint = match.group(0) + cleaned_question = re.sub(pattern, '', question).strip() + cleaned_question = re.sub(r'\s+', ' ', cleaned_question) + logger.info(f'[StyleHint] 移除风格提示词: {style_hint} | 原始问题: {question} | 处理后: {cleaned_question}') + return cleaned_question, True + + return question, False + + # 非流式对话接口 @ragflowController.post('/converse_with_chat_assistant') async def converse_with_chat_assistant( @@ -72,12 +100,19 @@ async def converse_with_chat_assistant( 与聊天助手进行对话 - 集成语义缓存版本(支持流式和非流式) 匹配流程: - 1. 静态问答匹配 (threshold=0.70) - 2. RAG历史缓存匹配 (threshold=0.60) - 3. RAG服务调用 + 1. 移除语言风格提示词 + 2. 静态问答匹配 (threshold=0.70) + 3. RAG历史缓存匹配 (threshold=0.60) + 4. RAG服务调用(使用原始问题) """ start_time = time.perf_counter() + original_question = converse_params.question + cleaned_question, style_removed = remove_style_hint(original_question) + + if style_removed: + converse_params.question = cleaned_question + # 获取redis实例 redis = getattr(request.app.state, 'redis', None) cache_key = None @@ -173,6 +208,11 @@ async def converse_with_chat_assistant( # 直接使用同步RAGFlow服务 try: + # 恢复原始问题(包含语言风格提示词) + if style_removed: + converse_params.question = original_question + logger.info(f'[StyleHint] 恢复原始问题: {original_question}') + logger.info(f'[RAG_SOURCE] 调用原生RAG服务 | chat_id={converse_params.chat_id} | question={converse_params.question}') result = RAGFlowService.converse_with_chat_assistant_services(converse_params) diff --git a/ruoyi-fastapi-backend/utils/match_service.py b/ruoyi-fastapi-backend/utils/match_service.py index d50464e..4dbb52c 100644 --- a/ruoyi-fastapi-backend/utils/match_service.py +++ b/ruoyi-fastapi-backend/utils/match_service.py @@ -78,6 +78,9 @@ class MatchService: '我们', '你们', '他们', '她们', '它们', '这个', '那个', '这些', '那些', '这种', '那种', '这类', '那类', + '你好', '您好', '大家好', '嗨', '哈喽', '哈罗', + '早上好', '上午好', '下午好', '晚上好', + 'hi', 'hello', 'hey', '嗨', '哈喽', '怎么样', '如何', '怎样', '关于', '对于', '至于', '以及', '或者', '还是', @@ -88,6 +91,11 @@ class MatchService: '然后', '接着', '之后', '首先', '其次', '最后', '总之', '总的来说', + '吗', '呢', '吧', '啊', '哦', '呀', '嘛', '啦', '呗', '哇', '嗯', '哎', '唉', '哼', '噢', + '哎哟', '哎呀', '哎嘿', '哎呦', '哎呀', + '呀', '耶', '哟', '喔', '唔', '诶', '咦', '嗯哼', '哼哼', '呵呵', '嘿嘿', + '嘻嘻', '哈哈', '哇塞', '哇哦', '天哪', '天啊', '哎呀呀', + '呃', '额', '嗯嗯', '哦哦', '啊啊', '嗯啊', '哦啊', } self._question_words = {