项目简介

项目概述

本项目实现了一个基于 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)  # -> "好的,您想了解哪方面的贷款业务呢?"