Skip to content

Rasa — 对话系统框架

简介

Rasa 是开源的对话 AI 框架,适合构建需要精确意图识别和对话流程控制的金融客服系统,支持私有化部署。

bash
pip install rasa
rasa init --no-prompt

项目结构

rasa-finance-bot/
├── data/
│   ├── nlu.yml          # 意图训练数据
│   ├── stories.yml      # 对话故事
│   └── rules.yml        # 对话规则
├── domain.yml           # 意图、实体、槽位、响应定义
├── config.yml           # 模型配置
└── actions/
    └── actions.py       # 自定义动作(调用 LLM/API)

domain.yml

yaml
version: "3.1"

intents:
  - greet
  - loan_inquiry        # 贷款咨询
  - check_loan_status   # 查询贷款状态
  - calculate_payment   # 计算月供

entities:
  - loan_type
  - loan_amount
  - loan_id

slots:
  loan_amount:
    type: float
    mappings:
      - type: from_entity
        entity: loan_amount
  loan_id:
    type: text
    mappings:
      - type: from_entity
        entity: loan_id

responses:
  utter_greet:
    - text: "您好!我是金融助手,可以帮您咨询贷款、查询状态等业务。"
  
  utter_ask_loan_amount:
    - text: "请问您需要贷款多少金额?"

actions:
  - action_check_loan_status
  - action_calculate_payment
  - action_llm_fallback

NLU 训练数据

yaml
# data/nlu.yml
version: "3.1"

nlu:
- intent: loan_inquiry
  examples: |
    - 我想申请贷款
    - 怎么办理贷款
    - 贷款利率是多少
    - 我需要借钱

- intent: check_loan_status
  examples: |
    - 查询贷款进度
    - 我的贷款审批到哪了
    - 贷款 [L001](loan_id) 的状态
    - 查一下 [L002](loan_id)

- intent: calculate_payment
  examples: |
    - 贷款 [50万](loan_amount) 月供多少
    - [100000](loan_amount) 元贷款怎么还

自定义动作(集成 LLM)

python
# actions/actions.py
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
from openai import OpenAI

client = OpenAI(
    api_key="sk-xxx",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

class ActionLLMFallback(Action):
    """当规则无法处理时,调用 LLM 回答"""
    
    def name(self) -> str:
        return "action_llm_fallback"
    
    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker, domain: dict) -> list:
        
        user_message = tracker.latest_message.get("text", "")
        
        response = client.chat.completions.create(
            model="qwen-turbo",
            messages=[
                {"role": "system", "content": "你是专业的金融客服,回答简洁专业"},
                {"role": "user", "content": user_message}
            ],
            max_tokens=300
        )
        
        answer = response.choices[0].message.content
        dispatcher.utter_message(text=answer)
        return []

class ActionCheckLoanStatus(Action):
    def name(self) -> str:
        return "action_check_loan_status"
    
    def run(self, dispatcher, tracker, domain):
        loan_id = tracker.get_slot("loan_id")
        
        if not loan_id:
            dispatcher.utter_message(text="请提供您的贷款申请编号")
            return []
        
        # 查询业务系统
        status = {"L001": "审批中", "L002": "已批准"}.get(loan_id, "未找到")
        dispatcher.utter_message(text=f"贷款 {loan_id} 当前状态:{status}")
        return []

启动服务

bash
# 训练模型
rasa train

# 启动 Rasa 服务
rasa run --enable-api --cors "*" --port 5005

# 启动动作服务器
rasa run actions --port 5055

# 测试对话
rasa shell

Rasa vs LangChain

  • Rasa:适合有明确意图和流程的客服场景,对话流程可控
  • LangChain:适合开放式问答和复杂推理场景
  • 金融客服推荐:Rasa 处理标准业务流程 + LLM 处理复杂咨询

本站内容由 褚成志 整理编写,仅供学习参考