项目简介¶
项目概述¶
本项目实现了一个基于 DSL(Domain-Specific Language,领域特定语言)的在线客服机器人,可以根据脚本文件中定义的规则,对用户输入进行解析并给出相应回答,并可在不同“对话状态”之间跳转。
核心目标:
让业务人员或开发者能通过自定义 DSL 快速定制客服机器人的对话逻辑。
提升维护效率,降低硬编码逻辑的复杂度。
功能简介¶
DSL 解析:将脚本(含“配置”、“变量”、“状态”、“规则”等)解析为内存中的数据结构(
ChatbotDSL)对话解释执行:根据当前状态与用户输入,匹配最合适的规则,然后输出相应回答,更新对话状态
可扩展:通过对 DSL 进行扩展或修改,可满足更复杂的业务场景
目录结构¶
拉取9eChatbot后,文件目录结构如下:
.
├── chatbot.py # 核心代码
├── test.py # 测试用例
├── cli.py # cli即时对话playground
└── README.md # 项目说明文档
快速开始¶
克隆项目
git clone https://github.com/996xiaozhe/9eChatbot.git cd 9eChatbot
运行测试
python test.py # 或者: python -m unittest test
使用命令行进行交互式对话
python cli.py
示例用法
在 Python 交互式环境或其它脚本中:
from chatbot import parse_script, interpret_input # 1) 准备 DSL 脚本内容(可从文件读取,也可直接写多行字符串) script_text = """ CONFIG { case_sensitive = false } VAR bankName = "XX银行" STATE greeting { RULE greetRule { MATCH "你好" RESPONSE "您好,这里是${bankName}智能客服,请问有什么可以帮您?" GOTO askQuestion } DEFAULT { RESPONSE "抱歉,我没有听清。您可以说'你好'来开始咨询。" } } STATE askQuestion { RULE loan { MATCH "贷款" RESPONSE "好的,您想了解哪方面的贷款业务呢?" GOTO loanState } DEFAULT { RESPONSE "如果想咨询贷款业务,请说'贷款';如果咨询信用卡,请说'信用卡'。" } } """ # 2) 解析脚本 dsl = parse_script(script_text) # 3) 输入输出演示 user_input1 = "你好" response1 = interpret_input(dsl, user_input1) print("机器人:", response1) # -> "您好,这里是XX银行智能客服,请问有什么可以帮您?" user_input2 = "贷款" response2 = interpret_input(dsl, user_input2) print("机器人:", response2) # -> "好的,您想了解哪方面的贷款业务呢?"