☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜
rasa与grok需职责分离:rasa负责nlu(意图/实体/槽位)和对话策略,grok仅在复杂意图时接收结构化上下文做nlg与推理;通过双通道响应器、json上下文传递、定制提示词及正则清洗实现安全集成。
你需要让rasa对话系统具备grok-1这类大模型的生成能力,同时保留rasa对槽位填充、多轮状态管理、业务逻辑编排的强控制力——这不是简单把两个模型拼在一起,而是要让grok在rasa的意图识别与实体抽取之后介入,只负责自然语言生成与复杂推理,不碰nlu和对话策略。
明确Grok与Rasa的职责边界
第一步:确认Rasa pipeline中DIETClassifier和EntityExtractor已完成结构化解析,输出intent、entities、slots三类确定性结果;【Grok绝不参与此阶段】。这一步若跳过,直接用Grok做意图分类,会导致Rasa Core无法跟踪对话状态,后续所有表单校验、槽位回填全部失效。
第二步:将Rasa Action Server改造为双通道响应器——当intent属于greeting、affirm、deny等轻量意图时,走Rasa内置responses;当intent为ask_product_detail、compare_plan、troubleshoot_error等需上下文推理的意图时,触发Grok调用。
第三步:Grok仅接收Rasa传来的结构化上下文包,格式必须为JSON:{"user_intent":"ask_product_detail","entities":{"product_id":"P98765","time_range":"last_30_days"},"slots":{"user_role":"premium","language":"zh-CN"}}。Grok不解析原始用户语句,避免重复分词与语义歧义。
配置Rasa Action Server对接Grok推理端点
方法一:使用Python Action封装Grok HTTP请求
在actions/actions.py中定义CustomGrokAction类,继承rasa_sdk.Action;重写run方法,在其中构造requests.post请求体,目标URL设为本地部署的Grok API地址(如http://localhost:8000/v1/chat/completions);注意设置timeout=15,防止Grok响应慢拖垮整个对话流。
方法二:通过Redis消息队列解耦
Rasa Action Server将上下文包序列化为JSON后推入redis queue: grok_request;独立的Grok Worker服务监听该队列,执行推理后将结果写入grok_response key;Rasa Action再从该key读取响应。这种方式能规避Grok偶发超时导致Rasa报错,但需额外维护Redis实例。
方法三:启用Grok MoE动态路由开关
在Grok的model.py中定位router.compute_routing_prob函数调用处,插入条件判断:if context.get("user_role") == "vip": self.num_selected_experts = 4;else: self.num_selected_experts = 2。这样VIP用户获得更高精度生成,普通用户保持低延迟响应——【修改前必须备份原model.py】。
设计Grok提示词模板并注入Rasa上下文
第一步:在domain.yml的responses区域新增utter_grok_response,内容为空占位符;实际文本由Grok生成后动态注入。
第二步:准备prompt_template.txt文件,内容以三重引号包裹:
"""你是一名专业客服助手,请严格按以下规则响应:1. 只输出中文,禁用英文术语;2. 所有产品参数必须来自context中的entities字段;3. 若context未提供price信息,则回答“请提供具体产品编号以便查询价格”;4. 结尾不加任何标点符号。当前上下文:{context}"""
第三步:在CustomGrokAction的run方法中,用Python的str.format()将Rasa传入的context字典注入prompt_template;注意过滤掉None值字段,否则Grok会因JSON格式错误返回空响应。
第四步:Grok返回的response_text必须经过正则清洗:re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9\u3000-\u303f\uff00-\uffef。,!?;:“”‘’()《》【】]', '', response_text)。这步不能省,否则Grok可能混入不可见Unicode字符导致Rasa消息发送失败。











