Chatbot 模块说明

class chatbot.ChatbotDSL

Bases: object

保存 DSL 解析结果和对话上下文的核心类。

config

全局配置项,如 ‘case_sensitive’ 等。

Type:

dict

variables

脚本中定义的全局变量,键为变量名,值为对应变量值。

Type:

dict

states

状态名称与对应 State 对象的映射。

Type:

dict[str, State]

current_state

当前处于的状态名称,初始为空或由解析过程设定。

Type:

str

class chatbot.Rule(rule_name, match_expression, response_text, next_state=None)

Bases: object

代表一个匹配规则,对应 DSL 中的 RULE 块或 DEFAULT 块。

rule_name

规则名称(可选,DEFAULT 块可特殊命名或保持为空)。

Type:

str

match_expression

用户输入的匹配表达式,可能是字符串或正则。

Type:

str | None

response_text

响应文本,可包含变量占位符如 ${var_name}

Type:

str

next_state

跳转到下一个状态名称,若为空则不跳转。

Type:

str | None

class chatbot.State(name)

Bases: object

代表一个对话状态,对应 DSL 中的 STATE 块。

name

状态名称。

Type:

str

rules

当前状态下的匹配规则列表。

Type:

list[Rule]

default_rule

默认规则,当没有任何规则匹配用户输入时使用。

Type:

Rule | None

chatbot.interpret_input(dsl, user_input) str

根据用户输入和 DSL 的当前状态,获取回复并更新状态。

根据 dsl.current_state 找到相应 State,对其所有 Rule 的 match_expression 进行匹配(可根据 dsl.config 中的大小写设置进行处理)。 如果匹配成功,则返回对应的 response_text,并可跳转到下一状态; 若无任何 Rule 命中,则使用 default_rule 的回应文本。

Parameters:
  • dsl (ChatbotDSL) – 已解析好的 DSL 对象,内部保存对话当前状态和所有规则。

  • user_input (str) – 用户的输入文本。

Returns:

机器人给出的回复。

Return type:

str

chatbot.parse_script(script_text) ChatbotDSL

解析 DSL 脚本,生成 ChatbotDSL 对象。

该函数会读取脚本中的 CONFIG、VAR、STATE、RULE、DEFAULT 等语法结构, 并将其保存到 ChatbotDSL 内的 config、variables、states 等数据结构中。

Parameters:

script_text (str) – 完整的 DSL 文本。

Returns:

包含解析结果的对象。

Return type:

ChatbotDSL

Raises:

SyntaxError – 当脚本语法不符合预期时,可抛出此错误。

chatbot.substitute_variables(response_text, variables_dict) str

将文本中的占位符 ${var_name} 替换为全局变量中的值。

如果在文本中找到 ${bankName},则用 variables_dict[‘bankName’] 替换。 若变量不存在,则默认保留原占位符(如返回 ${unknown})。

Parameters:
  • response_text (str) – 需要替换占位符的文本。

  • variables_dict (dict) – 全局变量键值对。

Returns:

替换变量占位符后的文本。

Return type:

str