跳到主要内容

节点 - #开始#

概述

  • “#开始#” 节点是一个对话树必须的唯一起始节点(对于 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:
    • “意图”:即用户意图,值为 str 类型,更多参见 “意图”
    • “意图约束”:即用户意图的约束,值为 str 类型,该 key 可选
    • “话术”:输出的话术内容,值为 str 或 list[str] 类型,参见 “文本输出”,注意这里的内容不要和背景信息的内容冲突
    • 如:
      start_node = chattree.create_node("#开始#", {
      ...
      "应对话术": [
      {
      "意图": "...",
      "话术": "..."
      },
      {
      "意图": "...",
      "意图约束": "...",
      "话术": "..."
      },
      ],
      ...
      })
  • 该属性可选
  • “对话树例子” 中的 “商旅平台” 对话树例子中有该属性

“固定结束语” 属性

(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” 对话树例子中有该属性

调用子对话树时相关属性的作用范围

  • 对话树调用栈的根对话树(可能是当前对话树)的 “#开始#” 节点的 “对话树标题”“系统角色”“用户角色”“背景信息”“固定结束语”“是否允许转接人工”“启动信息项”“语言风格” 属性的内容会被使用,其余被调用的子对话树的相应属性内容都会被忽略
  • 当前对话树的 “#开始#” 节点有 “静态参考信息” 属性时则使用当前对话树的该属性内容,否则使用对话树调用栈中离当前对话树最近的、具有该属性的父对话树的该属性内容(都不存在则不使用);其它对话树的该属性内容都会被忽略
  • 当前对话树及对话树调用栈的所有父对话树的 “#开始#” 节点的 “动态参考信息”“意图触发”“代码文件”“应对话术”“信息项变化触发” 属性都会被使用(“应对话术” 属性如果有相同 “意图” 的多个应对话术,则以距离当前对话树最近的那个应对话术为准)