聊天机器人已经成为企业客服、在线教育、医疗咨询等领域的标配。对于个人开发者或小团队而言,使用开源框架是成本最低、灵活性最高的方案。本教程将基于 Rasa 3.x 和 Hugging Face Transformers,带你从零构建一个能够处理常见问题的智能助手。
准备工作
环境要求
- Python 3.9+
- pip 包管理器
- 至少4GB内存(推荐8GB)
安装依赖
pip install rasa transformers torch
第一步:创建Rasa项目
rasa init --no-prompt
该命令会生成一个标准的Rasa项目结构,包含:
data/:存放训练数据(NLU和故事)actions/:自定义动作代码domain.yml:定义意图、实体、响应等config.yml:NLU和对话管理配置
第二步:定义意图和实体
编辑 data/nlu.yml,添加基本意图:
nlu:
- intent: greet
examples: |
- 你好
- 嗨
- 早上好
- intent: ask_weather
examples: |
- 今天天气怎么样?
- 北京会下雨吗?
- 明天温度多少?
同时定义实体 city,用于提取地点信息。
第三步:配置NLU管道
在 config.yml 中,使用基于Transformer的管道:
pipeline:
- name: WhitespaceTokenizer
- name: RegexFeaturizer
- name: LexicalSyntacticFeaturizer
- name: CountVectorsFeaturizer
- name: CountVectorsFeaturizer
analyzer: char_wb
min_ngram: 1
max_ngram: 4
- name: DIETClassifier
epochs: 100
constrain_similarities: true
- name: EntitySynonymMapper
- name: ResponseSelector
epochs: 100
第四步:编写故事和规则
在 data/stories.yml 中定义对话流程:
stories:
- story: greet_and_ask_weather
steps:
- intent: greet
- action: utter_greet
- intent: ask_weather
- action: action_fetch_weather
第五步:自定义动作(连接外部API)
在 actions/actions.py 中实现天气查询:
from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
import requests
class ActionFetchWeather(Action):
def name(self) -> Text:
return "action_fetch_weather"
def run(self, dispatcher, tracker, domain):
city = next(tracker.get_latest_entity_values("city"), "北京")
# 调用免费天气API
resp = requests.get(f"https://api.weather.com/v1/{city}")
data = resp.json()
dispatcher.utter_message(text=f"{city}今天{data['condition']},气温{data['temp']}度。")
return []
第六步:训练和测试
rasa train
rasa shell
在交互界面输入“你好”、“北京天气怎么样”等,即可看到机器人的回应。
进阶优化:集成Transformer模型
为了提升意图识别的准确率,我们可以使用预训练的BERT模型替代默认管道。在 config.yml 中修改:
pipeline:
- name: LanguageModelFeaturizer
model_name: bert
model_weights: bert-base-chinese
这需要安装 rasa[transformers] 扩展。
部署上线
训练好的模型可以打包为Docker镜像,部署到云服务器。Rasa官方提供了 rasa run 命令,配合Nginx和HTTPS即可对外服务。
总结
通过本教程,你已经掌握了使用Rasa构建聊天机器人的核心流程。从简单的意图识别到自定义动作,再到集成BERT,你可以根据实际需求不断扩展。开源的力量让你的聊天机器人拥有无限可能。
注意:训练数据质量直接决定机器人表现,建议多收集真实对话语料。祝你在AI开发的道路上越走越远!