基于Python树的聊天机器人

时间:2012-05-13 19:03:45

标签: python artificial-intelligence

我正在使用基于文本的Python RPG,但我仍然坚持使用NPC。 我需要的东西有点像树。例如:

Bot: hello there.
1. Hi, what's your name?
2. Hi, Where do you live?
> 2
Player: Where do you live?
Bot: That's a creepy question. Why do you ask?
1. I was just curious.
2. Never mind.
3. Hide yo kids, hide yo wife
> 1
Player: I was just curious.
Bot: Okay.
1. Do you like cheese?
2. Bye.
> 1
Player: Do you like cheese?
Bot: Yes! I LOVE cheese.

你做出的每一个选择都会分支给其他选择,A.K.A。如果用户已回答“1”对于机器人会回答的第一个问题"我的名字是鲍勃。你的是什么?"

我的游戏设计方式是级别编辑器不是一个不可能的前景(你可以访问的每个地方都存储为字典中的键,然后是包含其中所有内容的元组[我有一个商店类,一个敌人班级,门户班级,很快就会成为NPC班级。所以我喜欢这样创建的方式,所以我可以将它全部保存在我的NPC类存储的变量中(而不是一堆' if'语句)

只是为了澄清,我不是要求别人为我编写代码,我只是不确定如何解决问题。


完全我需要的简短描述:

树状结构,以一个字符串开头,其中包含许多字符串,这些字符串分支为“#”;从它

这些字符串中的每一个都有更多的分支'

与此元组和元组元组的区别在于,需要有一个字符串,它们分支出来而不是立即拆分。

2 个答案:

答案 0 :(得分:3)

这与decision tree密切相关,但玩家是做出选择的人,所以在AI意义上它并不是一个。您可以自己定义具有这些数据结构的数据结构 属性,但

class TreeNode:
    def __init__(self,parent,children,overview_text,direction_text):
        #... set the variables ...
        # question_text is a string

    def print_question(self):

        print overview_text
        for child in children:
            print direction_text

    # add some accessor methods
    def add_child(self,child): 
        ...

然后你的NPC可以通过特定的TreeNode跟踪他们的状态 - 调用current_question-和整个会话在TreeNodes树中 - 称之为对话。

class NPC:
     def __init__(self,dialogue):
         #... set the variables ...
         self.current_question = None

     def converse(self):
         #.... do some stuff....
         self.current_question = users_choice;

这样您就可以根据需要中断对话。

请注意,TreeNode可能是一个误导,因为您可能希望对话代表图形而不仅仅是树。例如,许多RPG将具有可以循环以重复信息的会话路径。上面的数据结构不能这样做,因为overview_text(概念上是节点的一部分)和direction_text(概念上是边缘的一部分)被视为一个。

答案 1 :(得分:0)

你想要一个有向图,其中bot语句是节点,玩家响应是弧。

您可能还希望弧线具有一些内置智能 - 根据玩家状态启用/禁用自身(即如果玩家没有蓝色键,则“解锁蓝门”不是可用选项)。

要遵循的示例代码。