拉新机器人-偏离流程设计
目录
这是一个非常关键的问题:当客户没有按照预设流程提问时,机器人该如何应对?
在实际场景中,用户可能随时偏离设计好的流程,提出任意问题(比如突然问“你们客服电话是多少?”、“优惠活动什么时候结束?”等)。如果处理不好,用户体验会大打折扣。
🧠 一、核心原则:让机器人具备“上下文理解”和“灵活应答”的能力
我们希望机器人能做到:
- 识别用户当前意图(是否偏离流程)
- 保持原有流程状态
- 回答非流程问题后,自然引导回原流程
🔄 二、解决方案设计(结合 LangGraph)
✅ 方案思路:
- 在每一步对话中都加入一个全局意图识别节点
- 如果发现是流程外的问题,就进入一个通用问答节点
- 回答完后再回到原来的流程位置
📦 三、扩展 AgentState 状态结构
from typing import TypedDict, Optional
class AgentState(TypedDict):
user_id: str
message: str
intent: str # 当前意图,如 register、faq、off_topic 等
current_step: str # 当前处于哪个流程步骤
is_registered: bool
collected_info: dict
context: list # 对话历史,用于 LLM 上下文理解
🔄 四、新增节点函数:全局意图识别 & 通用问答
1. 意图识别节点(判断是否偏离流程)
def detect_intent(state: AgentState) -> AgentState:
prompt = f"""
你是一个智能客服助手,请分析以下用户消息的意图:
"{state['message']}"
请判断:
- 是否与注册流程有关?
- 是否是常见问题咨询(如价格、联系方式)?
- 是否完全偏离流程?
返回 intent 类型(register/faq/off_topic)
"""
response = llm.invoke(prompt)
intent = response.content.strip().lower()
return {**state, "intent": intent}
2. 处理非流程问题的通用问答节点
def handle_off_topic(state: AgentState) -> AgentState:
prompt = f"""
用户说:“{state['message']}”
请根据你的知识库回答该问题。如果你不确定答案,请说明“我暂时无法提供准确信息”。
注意:请保持简洁明了。
"""
response = llm.invoke(prompt)
reply = response.content.strip()
return {
**state,
"message": reply,
"intent": "faq" if "contact" in reply or "price" in reply else "off_topic"
}
⚙️ 五、条件分支逻辑调整
我们可以使用 conditional_edges 来实现如下逻辑:
def route_after_intent(state: AgentState):
if state["intent"] == "register":
return "guide_to_register"
elif state["intent"] in ["faq", "off_topic"]:
return "handle_off_topic"
else:
return "offer_next_steps"
然后把这个判断作为每个主流程节点之后的判断逻辑。
📈 六、更新后的完整流程示意
greet_user
↓
detect_intent ────→ [intent=register] → guide_to_register → collect_user_info → offer_next_steps
↘ [intent=faq/off_topic] → handle_off_topic → resume_flow
🔁 七、如何“恢复流程”?
你可以设计一个“流程恢复”节点,例如:
def resume_flow(state: AgentState) -> AgentState:
print(f"Resuming flow from step: {state['current_step']}")
# 根据 current_step 返回到对应节点
return {**state, "message": "刚刚我们说到哪里了?让我们继续吧!"}
并在 handle_off_topic 后跳转回来:
workflow.add_edge("handle_off_topic", "resume_flow")
✅ 八、优化建议
| 技术点 | 建议 |
|---|---|
| 意图识别增强 | 使用微调模型或关键词 + LLM 结合判断 |
| FAQ 知识库集成 | 接入向量数据库 + RAG 提供更精准答案 |
| 多轮记忆机制 | 使用 LangGraph 的 checkpointer 实现会话持久化 |
| 用户打断容忍度高 | 不强制用户按流程走,而是智能适应 |
💡 九、举个例子
假设用户说:
“你们客服电话是多少?”
系统回复:
“我们的客服电话是400-123-4567,工作时间为每天9:00-18:00。刚刚我们说到注册流程,是否需要我继续帮您完成注册?”
✅ 十、总结
| 场景 | 应对方式 |
|---|---|
| 用户不按流程提问 | 加入全局意图识别节点 |
| 非流程问题 | 引导至通用问答节点 |
| 回答完后继续流程 | 使用 resume_flow 节点恢复流程 |
| 流程中断频繁 | 使用 checkpointer 记录状态 |
如果你想,我可以为你生成一个完整的可运行代码模板,包含:
- 完整的 State Graph 定义
- 示例 LLM 回答模拟
- 支持上下文记忆和流程恢复
是否需要我继续生成这个完整示例代码?

浙公网安备 33010602011771号