'''
- 该对话树可以进行急救知识的问答
- 核心是一个 “#多轮交互#” 节点，用户可以在这个节点中不断地提出关于急救知识的问题，系统会根据用户的问题在 “急救知识” 知识库（在 “#开始#” 节点中指向的）中寻找相关的信息并进行回答
- 如果用户的问题在知识库中没有找到相关信息，系统会给出一个默认的提示语，引导用户提出其它相关的问题
- 最后，可以在服务器的项目目录下，执行 “python ./ichatdef/firstapp/py_chattree/急救知识问答.py” 生成 “急救知识问答.html”，下载到本地用浏览器打开，即可看到整个对话树的拓扑结构及相关代码信息
'''

# -------------------------------------------------------------------------------------
# 每个 python 对话树文件的标准代码头部
# -------------------------------------------------------------------------------------

import sys, os

project_root = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../.."))
if project_root not in sys.path:
    sys.path.append(project_root)
from chattree_def import *

chattree = ChatTree()

# -------------------------------------------------------------------------------------
# 对话树节点的定义部分
# -------------------------------------------------------------------------------------

# 开始节点
start_node = chattree.create_node( "#开始#", {
    "对话树标题":"急救知识问答", # 一段简短的文本，描述这个对话树的主题或者用途
    "系统角色":"问答机器人",
    "用户角色":"提问者",
    "背景信息":"你是一个问答机器人，负责回答用户的问题",
    "是否允许转接人工":False,
    "静态参考信息":"急救知识", # 指向知识库文件名（不带扩展名）
})

# 欢迎提示词
inform_user_node = chattree.create_node( "#提示用户", {
    "提示内容":"您好，您可以向我提出关于急救知识的问题，我会尽力为您解答。",
})

# “提问-回答” 循环的多轮交互节点
multi_turn_node = chattree.create_node( "#多轮交互#", {
    "提示未找到参考信息":"抱歉，我的知识库中暂时没有您所提问题的答案。您可以尝试问一些其它关于急救知识的问题。", # 当用户的问题在知识库中没有找到相关信息时，系统会给出这个提示语
})

# -------------------------------------------------------------------------------------
# 完整的拓扑结构，“>>” 表示节点之间的连接关系，这里的连接关系也决定了对话的流程走向
# -------------------------------------------------------------------------------------
 
start_node >> inform_user_node >> multi_turn_node

# -------------------------------------------------------------------------------------
# 每个 python 对话树文件的标准代码结尾部分，即渲染对话树成为 HTML 文件的代码
# -------------------------------------------------------------------------------------

if __name__ == "__main__":
    chattree.render(__file__)