为什么选择开源方案?
在项目启动前,主要纠结两个问题:是买服务还是自己造轮子?
自研的挑战:如果完全从零开始,需要组建涵盖自然语言理解(NLU)、对话管理(DM)、自然语言生成(NLG)的团队。光是意图识别和实体抽取模型的训练、标注数据的准备,就是一项浩大的工程,更别提后续的维护和迭代了。开发周期长,初期投入成本非常高。
第三方服务的顾虑:使用成熟的客服 SaaS 平台固然快,但所有对话数据都经过对方服务器,存在数据主权和隐私泄露的风险。同时,这类服务的业务逻辑和对话流程定制通常有局限,很难深度融入自己的业务系统。
开源框架的优势:像 Rasa、Botpress 这类开源项目,提供了一个相对成熟的底座。它们封装了 NLU、DM 等核心组件,可以在其基础上进行二次开发,既能控制数据和代码,又能大大降低开发难度,在灵活性和成本之间取得了不错的平衡。
主流开源框架技术选型
市面上主流的开源对话机器人框架不少,重点对比了 Rasa 和 Botpress。
1. Rasa Rasa 是一个功能非常全面的开源机器学习框架,用于构建基于文本和语音的对话助手。
- NLU 准确率:其 NLU 组件(Rasa NLU)支持使用预训练模型(如 BERT)进行意图分类和实体抽取,准确率较高,尤其擅长处理复杂的、表达多变的用户输入。它采用 pipeline 方式,可以灵活组合不同的组件(分词器、特征提取器、分类器等)。
- 扩展性:核心对话管理由 Rasa Core 负责,采用基于机器学习的对话策略,可以通过故事(stories)进行训练,能处理更非线性的对话流。其架构是微服务化的,各个组件可以独立扩展,与外部系统集成也方便。
- 学习曲线:相对陡峭,需要理解其领域(domain)、故事、规则等概念,配置和训练过程对开发者有一定要求。
2. Botpress Botpress 定位为一个'开发人员优先'的对话机器人平台。
- NLU 准确率:早期版本 NLU 能力较弱,但新版本已经集成或可以对接主流的 NLU 服务(包括 Rasa NLU、LUIS、Dialogflow 等)。其自带的 NLU 更偏向于规则和关键词匹配,在处理句式固定的场景下表现不错。
- 扩展性:最大的特点是提供了一个可视化的流程编辑器,通过拖拽节点来设计对话流,对于业务逻辑清晰的场景(如信息查询、任务办理)开发效率极高。它内置了频道连接、用户管理、内容管理等功能,开箱即用性更强。
- 学习曲线:对于熟悉流程设计的开发者来说上手更快,但如果需要深度定制 NLU 模型,可能还是需要结合其他框架。
我的选择:由于需求对 NLU 的准确率要求较高,且希望有更强的机器学习能力来处理模糊表述,最终选择了 Rasa 作为基础框架。它的开源社区活跃,遇到问题容易找到解决方案。
核心功能实现:从意图识别到对话管理
选定框架后,就开始动手搭建。Rasa 项目的核心是 config.yml、domain.yml、nlu.yml、stories.yml 和 rules.yml 这几个配置文件,以及自定义的 Action Server。
1. 构建意图识别与实体抽取 Pipeline
首先需要在 config.yml 中定义 NLU pipeline。选择了一个结合预训练词向量和 Transformer 模型的配置,以平衡准确率和速度。
# config.yml 片段
language: zh
pipeline:
- name: JiebaTokenizer
- name: LanguageModelFeaturizer

