# 项目简介 ## 项目概述 本项目实现了一个基于 DSL(Domain-Specific Language,领域特定语言)的**在线客服机器人**,可以根据脚本文件中定义的规则,对用户输入进行解析并给出相应回答,并可在不同“对话状态”之间跳转。 * **核心目标**: * 让业务人员或开发者能通过自定义 DSL 快速定制客服机器人的对话逻辑。 * 提升维护效率,降低硬编码逻辑的复杂度。 ## 功能简介 * **DSL 解析**:将脚本(含“配置”、“变量”、“状态”、“规则”等)解析为内存中的数据结构(`ChatbotDSL`) * **对话解释执行**:根据当前状态与用户输入,匹配最合适的规则,然后输出相应回答,更新对话状态 * **可扩展**:通过对 DSL 进行扩展或修改,可满足更复杂的业务场景 ## 目录结构 拉取9eChatbot后,文件目录结构如下: ``` . ├── chatbot.py # 核心代码 ├── test.py # 测试用例 ├── cli.py # cli即时对话playground └── README.md # 项目说明文档 ``` ## 快速开始 1. **克隆项目** ``` git clone https://github.com/996xiaozhe/9eChatbot.git cd 9eChatbot ``` 2. **运行测试** ``` python test.py # 或者: python -m unittest test ``` 3. 使用命令行进行交互式对话 ``` python cli.py ``` 4. **示例用法** 在 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) # -> "好的,您想了解哪方面的贷款业务呢?" ```