节点 - #开始#
概述
- “#开始#” 节点是一个对话树必须的唯一起始节点(对于 Xmind 对话树,只能是新建 Xmind 文件时的缺省中心节点)
- 对于 Xmind 对话树,节点内容的首行必须是 “#开始#”,然后第二行开始的内容就是下面的各个属性(每个属性都是由 “@” 开头并用 “=” 分割开的前后两部分,前面是属性名,后面是属性内容,属性内容可多行),如:
#开始#
@... = ...
@... = ...
@... =
...
...
...
@... = ...|...|... - 对于 Python 对话树,chattree.create_node() 的第一个参数必须是 “#开始#”,第二个参数 dict 中就是如下的各个 key(即属性),如果没有特殊说明,其 value(即属性内容)类型均为 str,如:
start_node = chattree.create_node("#开始#", {
"...": "...",
"...": ["...","..."],
"...": "...\n...\n",
"...": [{"...":"...","...":"...","...":"..."}, ...],
}) - “对话树例子” 的几个对话树例子中都有该节点
“对话树标题” 属性
(Xmind 对话树则是 “@对话树标题 = ...” 的形式)
- 用一个简短的句子或短语,描述清楚当前对话树的场景(如 “120急救电话服务”、“铁路货运信息查询及服务” 等),如果场景比较杂、不太好描述,可以写成 “对话”
- (如果对话树是起始的主对话树则)该属性必须有
- “对话树例子” 的几个对话树例子中都有该属性
“系统角色” 属性
(Xmind 对话树则是 “@系统角色 = ...” 的形式)
- 指的是 AI 系统在对话中扮演的角色,如 “AI客服机器人”
- (如果对话树是起始的主对话树则)该属性必须有
- “对话树例子” 的几个对话树例子中都有该属性
“用户角色” 属性
(Xmind 对话树则是 “@用户角色 = ...” 的形式)
- 指的是与 AI 对话的使用者的角色,可以是网站、App或电话的用户,如 “律所咨询客户”
- (如果对话树是起始的主对话树则)该属性必须有
- “对话树例子” 的几个对话树例子中都有该属性
“是否允许转接人工” 属性
(Xmind 对话树则是 “@是否允许转接人工 = ...” 的形式)
- 可选值是 “是” 或 “否”
- (如果对话树是起始的主对话树则)该属性必须有
- “对话树例子” 的几个对话树例子中都有该属性
“背景信息” 属性
(Xmind 对话树则是 “@背景信息 = ...” 的形式)
- 其内容描述了整个对话的背景信息,包括但不限于:
- 对话的场景信息
- 对话所要完成的具体任务
- 对话的沟通方式和要求
- 本对话场景下全局性的、容易混淆的关键术语及相关解释(如下面的示例)。其它局部性的概念澄清可以放到 “信息项约束”(参见 “信息项”) 或 “意图约束”(参见 “意图”)中
车辆损失险简称‘车损险’,第三者责任险简称‘三者险’,车上人员责任险简称‘座位险’,驾乘人员意外险简称‘驾乘险’,驾驶员意外险简称‘驾意险’,以及附加机动车增值服务,这6个都是不同的险种/服务,不能混淆了
车主、被保险人、投保人可能是不同的人,特别是车主不一定是投保人
保单联系电话号码、回访电话号码、车主电话号码、投保人电话号码、被保险人电话号码等,可能相同,也可能不相同
- 只能是陈述性描述,不能有提问或要求等内容
- 可以多行
- (如果对话树是起始的主对话树则)该属性必须有
- “对话树例子” 的几个对话树例子中都有该属性
“代码文件” 属性
(该属性仅 Xmind 对话树需要,即 “@代码文件 = ...” 的形式;Python 对话树不需要)
- 内容是上传的一个 Python 代码文件名,可以在该代码文件中实现复杂的代码逻辑
- 代码文件定义的函数可以供 Xmind 对话树中多处的 Python 脚本调用(具体是哪些地方的 Python 脚本,参见 “Python 脚本/函数”)
- 对话树调用栈(指通过 “#动作#调用子树” 实现的调用)中所有对话树的代码文件里的函数都可以被调用(也仅限 Xmind 对话树)
- 具体请参见 “代码文件”
“静态参考信息” 属性
(Xmind 对话树则是 “@静态参考信息 = ...” 的形式)
- 可承载海量 RAG 知识库(AI在每轮交互中自动按需引用并回复)
- 只能有一个 *.md 或 *.word 或 *.zip 文件名(参见 “知识库”),含不含文件名后缀都可以,但不能含小数点(文件后缀前的小数点不算)、减号和方括号等字符
- 该属性可选
- “对话树例子” 中的 “商旅平台”、“医院挂号” 和 “急救知识问答” 对话树例子中都有该属性
“动态参考信息” 属性
(Xmind 对话树则是 “@动态参考信息 = ...” 的形式)
- 通过执行脚本动态获取参考信息,适用于需要动态获取或生成的信息
- 对于 Xmind 对话树,属性内容的每行都是用 “-->” 分割的前后两部分:
- 前部分是意图,其中“(...约束...)”可选[注意这里的只能是半角小括号];更多参见 “意图”
- 后部分是 Python 的 str 表达式脚本,可基于
ctx对信息项进行访问,还可以调用代码文件中的 Python 函数(可在 “代码文件” 中定义),更多参见 “Python 脚本/函数” - 例如:
@动态参考信息 =
...... --> ("......" if ctx["{...}"] == "..." else "......")
......(......) --> xxxx_func(ctx)
- 对于 Python 对话树,属性内容是一个 list,list 的每个元素是一个 dict,dict 中有 3 个 key:
- “意图”:即用户意图,更多参见 “意图”
- “意图约束”:即用户意图的约束,该 key 可选,更多参见 “意图”
- “函数”:返回 str 值的 Python 函数名或 lambda 表达式(函数定义或 lambda 都须带一个
ctx参数,并可基于ctx对信息项进行访问),更多参见 “Python 脚本/函数” - 如:
def xxxx_func(ctx):
...ctx["{...}"]...
return a_str_var
start_node = chattree.create_node("#开始#", {
...
"动态参考信息": [
{
"意图": "...",
"函数": xxxx_func
},
{
"意图": "...",
"意图约束": "...",
"函数": lambda ctx : ...ctx["{...}"]...
},
],
...
})
- 在对话过程中,AI 会根据用户的意图动态调用相关函数或脚本来获取参考信息,并基于该参考信息回答用户的相关问题或要求
- 该属性可选
- “对话树例子” 中的 “商旅平台” 对话树例子中有该属性
“意图触发” 属性
(Xmind 对话树则是 “@意图触发 = ...” 的形式)
- 对话过程中,用户输入的内容命中某个意图时,会执行相应的脚本或函数
- 对于 Xmind 对话树,属性内容的每行都是用 “-->” 分割的前后两部分:
- 前部分是意图,其中“(...约束...)”可选[注意这里的只能是半角小括号];更多参见 “意图”
- 后部分是 Python 的脚本,可基于
ctx对信息项进行访问,还可以调用代码文件中的 Python 函数(可在 “代码文件” 中定义),更多参见 “Python 脚本/函数” - 例如:
@意图触发 =
...... --> ctx["{...}"] == "..."
......(......) --> xxxx_func(ctx)
- 对于 Python 对话树,属性内容是一个 list,list 的每个元素是一个 dict,dict 中有 3 个 key:
- “意图”:即用户意图,更多参见 “意图”
- “意图约束”:即用户意图的约束,该 key 可选,更多参见 “意图”
- “函数”:Python 函数名或 lambda 表达式(函数定义或 lambda 都须带一个
ctx参数,并可基于ctx对信息项进行访问),更多参见 “Python 脚本/函数” - 如:
def xxxx_func(ctx):
...
ctx["{...}"] = "..."
...
start_node = chattree.create_node("#开始#", {
...
"意图触发": [
{
"意图": "...",
"函数": xxxx_func
},
{
"意图": "...",
"意图约束": "...",
"函数": lambda ctx : ...
},
],
...
})
- 该属性可选
- “对话树例子” 中的 “商旅平台_预订机票” 对话树例子中有该属性
“语言风格” 属性
(Xmind 对话树则是 “@语言风格 = ...” 的形式)
- 指 AI 的语言风格,值可以是 “正常” / “口语” / “书面” 三种
- 该属性可选(如果没有该属性则 AI 语言风格缺省为 “正常”)
“应对话术” 属性
(Xmind 对话树则是 “@应对话术 = ...” 的形式)
- 可承载海量的、在与客户沟通中预先规范的 “服务话术”、“销售话术” 等(AI 在每轮交互中自动按需引用并回复)
- 对于 Xmind 对话树,属性内容的每行都是用 “-->” 分割的前后两部分:
- 对于 Python 对话树,属性内容是一个 list,list 的每个元素是一个 dict,dict 中有 3 个 key:
- 该属性可选
- “对话树例子” 中的 “商旅平台” 对话树例子中有该属性
“固定结束语” 属性
(Xmind 对话树则是 “@固定结束语 = ...” 的形式)
- 当 AI 主动结束对话或用户要求结束对话时,AI 系统向用户表达的结束语,如 “再见!”
- 该属性可选(如没有该属性则 AI 系统动态生成相关结束语)
“信息项变化触发” 属性
(Xmind 对话树则是 “@信息项变化触发 = ...” 的形式)
- 对于 Xmind 对话树,属性内容的每行都是用 “-->” 分割的前后两部分:
- 前部分是一个或多个信息项名称,如果是多个则用 “|” 分隔开(如 “{...}|{...}|{...}”),不能是系统信息项
- 后部分是一个单行的 Python 脚本,脚本中可基于
ctx对信息项进行访问或赋值,可以调用 “代码文件” 中定义过的函数,更多参见 “Python 脚本/函数” - 例如:
@信息项变化触发 =
{...} --> ...; ctx[{...}] = ...; ...
{...}|{...} --> xxxx_func(ctx)
- 对于 Python 对话树,属性内容是一个 list,list 的每个元素是一个 dict,dict 中有 2 个 key:
- “信息项”:是一个 list,list 中的每个元素是一个信息项名称(“{...}”),不能是系统信息项
- “函数”:某个 Python 函数名或 lambda 表达式(函数定义或 lambda 都须带一个
ctx参数并可基于ctx对信息项进行访问或赋值),更多参见 “Python 脚本/函数” - 如:
def xxxx_func(ctx):
...
ctx["{...}"] = "..."
...
start_node = chattree.create_node("#开始#", {
...
"信息项变化触发": [
{
"信息项": ["{...}"],
"函数": xxxx_func
},
{
"信息项": ["{...}","{...}","{...}"],
"函数": lambda ctx : ...
},
],
...
})
- 该属性作用是对话过程中,相关信息项的值改变时(包括信息项状态在 “有值” 和 “无值” 之间变化时),会自动执行相关脚本或函数,这样某些信息项值改变(特别是用户输入导致的改变)时,自动触发执行相应的业务逻辑代码。常见的场景如:
- 自动校验,如果不合规可以将信息项的值清空(相当于用户未输入)或改成其它合规的值
- 自动更新其它信息项的值(这里典型的是 计算信息项,如 “{XXXX汇总金额}” 等)
- 维护两个信息项之间的一致性,比如信息项 “{是否有房产}” 和 “{房产数量}”:当前者的值变成 “无” 时自动将后者的值改成 “0”,反之亦然,即如果后者的值变成大于 “0” 的数时自动将前者的值改成 “有”,如果后者的值变成 “0” 时自动将前者的值改成 “无”
- 自动调用外部接口
- 该属性可选
- “对话树例子” 中的 “商旅平台_预订机票” 对话树例子中有该属性
“启动信息项” 属性
(Xmind 对话树则是 “@启动信息项 = ...” 的形式)
- 对于 Xmind 对话树,属性内容是单行的信息项名称(“{...}”),如果是多个则用 “|” 分隔开,如 “{...}|{...}|{...}”
- 对于 Python 对话树,属性内容是一个 list,list 中的每个元素是一个信息项名称(“{...}”)
- 对话树作为主树启动时,如果没有传入相关启动信息项,则对话无法成功启动;传入的启动参数如有多个信息项也是用 “|” 分隔开,如 “{...}=...|{...}=...|{...}=...”,参见 “API” 和 “对话测试”
- 对话树作为子树被调用时,该属性会被忽略
- 该属性可选
- “对话树例子” 中的 “商旅平台” 和 “120” 对话树例子中有该属性
调用子对话树时相关属性的作用范围
- 对话树调用栈的根对话树(可能是当前对话树)的 “#开始#” 节点的 “对话树标题”、“系统角色”、“用户角色”、“背景信息”、“固定结束语”、“是否允许转接人工”、“启动信息项”、“语言风格” 属性的内容会被使用,其余被调用的子对话树的相应属性内容都会被忽略
- 当前对话树的 “#开始#” 节点有 “静态参考信息” 属性时则使用当前对话树的该属性内容,否则使用对话树调用栈中离当前对话树最近的、具有该属性的父对话树的该属性内容(都不存在则不使用);其它对话树的该属性内容都会被忽略
- 当前对话树及对话树调用栈的所有父对话树的 “#开始#” 节点的 “动态参考信息”、“意图触发”、“代码文件”、“应对话术”、“信息项变化触发” 属性都会被使用(“应对话术” 属性如果有相同 “意图” 的多个应对话术,则以距离当前对话树最近的那个应对话术为准)