You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rasa Core与Botkit对话流程差异及Rasa银行机器人状态跟踪问询

问题解答:Rasa Core与Botkit对话流程差异及Rasa对话状态跟踪实践

嘿,我来结合实际开发经验帮你梳理这两个问题~

一、Rasa Core vs Botkit:对话流程的核心区别

这俩框架的对话逻辑差异其实挺大的,主要体现在这几个方面:

  • 对话驱动逻辑:
    Rasa Core是机器学习驱动的概率式管理——它会盯着用户的历史对话和当前输入,靠模型预测最合理的下一步动作,不用硬编码所有可能的对话分支。比如用户聊到一半突然跳话题,它也能自适应调整,特别适合复杂、开放的对话场景。
    Botkit则是规则/脚本主导,你得提前用代码把对话的分支、触发条件都写死,比如一堆if-else或者对话树。这种方式上手快,适合流程固定的机器人(比如简单FAQ、固定流程引导),但遇到复杂多轮对话时,规则会越堆越多,维护起来头大。
  • 状态管理方式:
    Rasa Core自带对话状态跟踪器(Tracker),会自动记录用户的意图、实体、对话历史和会话状态。你只需要在domain.yml里定义slots(相当于对话变量),比如用户选的银行、贷款类型,状态更新完全由模型来搞定,不用手动写逻辑。
    Botkit的状态得你自己手动管——通常是把状态存在会话对象或者数据库里,然后写代码判断当前处于哪个对话节点,再决定下一步该干嘛。灵活性是高,但要写的代码也多,很容易遗漏场景。
  • 学习曲线与扩展性:
    Rasa Core的学习曲线有点陡,得搞懂NLU、对话管理、Domain配置这些模块,但胜在能迭代优化——你可以不断标注对话数据训练模型,让机器人越用越聪明,适合需要长期迭代的复杂系统。
    Botkit上手贼快,有很多开箱即用的工具和平台适配器(比如对接Slack、微信),适合快速搭个简单机器人,但面对复杂多轮对话时,维护成本会直线上升,因为要不断加新的规则分支。

二、Rasa银行机器人:跟踪“Axis Bank”对应的前置问题及后续处理

你遇到的这个场景,核心就是用Rasa的对话状态跟踪来关联用户的回复和前置问题,具体可以这么做:

1. 先定义对话状态的“标记位”(Slots)

在你的domain.yml里添加两个关键slot,用来记录对话状态和用户选择的银行:

slots:
  # 标记当前是否处于贷款申请流程中
  loan_request_initiated:
    type: bool
    initial_value: False
  # 存储用户选择的银行
  selected_bank:
    type: text
    influence_conversation: True

influence_conversation: True表示这个slot会影响对话路径的判断,Rasa会根据它的值来匹配对应的故事分支。

2. 用Story定义对话流程

你需要在stories.yml里写清楚对话的流转逻辑:

  • 当用户说“我想申请贷款”时,触发apply_loan意图,机器人回复询问银行,同时把loan_request_initiated设为True,标记当前处于贷款申请流程:
stories:
- story: 用户发起贷款申请
  steps:
  - intent: apply_loan
  - action: utter_ask_which_bank  # 比如这个动作的回复是“请问你想选择哪家银行申请贷款?”
  - slot:
      loan_request_initiated: True
  • 当用户回复“Axis Bank”时,Rasa先识别意图(比如inform_bank)和bank实体,然后通过slot_was_set判断当前处于贷款申请状态,触发后续动作:
- story: 用户回复选择的银行
  steps:
  - slot_was_set:
      loan_request_initiated: True
  - intent: inform_bank
  - entities:
      - bank: Axis Bank
  - action: utter_confirm_loan_details  # 比如回复“好的,你将向Axis Bank申请贷款,接下来需要你提供个人身份证号和收入证明哦”
  - slot:
      selected_bank: Axis Bank

3. 确保Rasa能准确识别用户输入

  • 给NLU的训练数据加足够的样本:比如inform_bank意图里要包含“Axis Bank”“我选Axis Bank”“就Axis Bank吧”这类例子,同时把“Axis Bank”标注为bank实体,让Rasa能准确抽取。
  • 处理歧义场景:如果用户可能在其他场景提到银行(比如“Axis Bank的储蓄卡怎么挂失”),Rasa会通过loan_request_initiated这个slot来区分——只有当这个slot为True时,才会把银行名称关联到贷款流程,否则会匹配到对应的储蓄卡挂失意图。

4. 复杂场景可以用自定义动作

如果需要验证银行是否支持贷款,你可以写一个自定义动作action_validate_bank,在用户输入银行后调用这个动作:

from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher

class ActionValidateBank(Action):
    def name(self) -> str:
        return "action_validate_bank"

    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: dict) -> list:
        selected_bank = tracker.get_slot("selected_bank")
        # 假设你有一个支持贷款的银行列表
        supported_banks = ["Axis Bank", "HDFC Bank", "ICICI Bank"]
        if selected_bank in supported_banks:
            dispatcher.utter_message(text=f"好的,{selected_bank}支持贷款申请,接下来请提供你的身份证号")
        else:
            dispatcher.utter_message(text=f"抱歉,{selected_bank}暂不支持我们的贷款服务,请选择其他银行")
        return []

然后在stories.yml里把原来的utter_confirm_loan_details换成这个自定义动作就行。

小技巧:测试对话流程

用rasa train训练完模型后,用rasa shell测试对话,确保当loan_request_initiated为True时,用户输入“Axis Bank”能正确触发后续动作,避免误匹配其他意图。

内容的提问来源于stack exchange,提问作者Arti Berde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:16:01