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_fallbackNLU 训练数据
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 shellRasa vs LangChain
- Rasa:适合有明确意图和流程的客服场景,对话流程可控
- LangChain:适合开放式问答和复杂推理场景
- 金融客服推荐:Rasa 处理标准业务流程 + LLM 处理复杂咨询