代码之家  ›  专栏  ›  技术社区  ›  asmaier

如何重复最后一句话

  •  0
  • asmaier  · 技术社区  · 6 年前

    对于一个主要通过语音使用的机器人,我希望能够重复机器人说的最后一句话。例如:

    Bot: I found contact ABC with phone number 123456 
    User: Could you please repeat that? 
    Bot: I found contact ABC with phone number 123456
    

    我不想重复整个操作(在数据库中搜索联系信息),只想再次重复bot的输出。

    我想我可以在最后一条消息中创建一个槽,并在所有自定义操作中始终填充该槽。然而,手动维护这个插槽是相当乏味的。有没有更优雅的解决方案来简单地重复机器人说的最后一条信息?

    0 回复  |  直到 6 年前
        1
  •  1
  •   michael    5 年前

    你可以这样做:

    if len(tracker.events) >= 3:
       dispatcher.utter_message(tracker.events[-3].get('text'))
       return[]
    

    但只有当消息返回3个事件时,它才起作用。

        2
  •  0
  •   Sibish    5 年前

    这是一个重复所有消息直到最后一个用户输入的代码,没有任何硬编码。这适用于文本和按钮。对图像也可以这样做。

    类操作重复(操作): 定义名称(自身): return“动作\重复”

    def run(self, dispatcher: CollectingDispatcher,
                tracker: Tracker,
                domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
    
        user_ignore_count = 2
        count = 0
        tracker_list = []
    
        while user_ignore_count > 0:
            event = tracker.events[count].get('event')
            if event == 'user':
                user_ignore_count = user_ignore_count - 1
            if event == 'bot':
                tracker_list.append(tracker.events[count])
            count = count - 1
    
        i = len(tracker_list) - 1
        while i >= 0:
            data = tracker_list[i].get('data')
            if data:
                if "buttons" in data:
                    dispatcher.utter_message(text=tracker_list[i].get('text'), buttons=data["buttons"])
                else:
                    dispatcher.utter_message(text=tracker_list[i].get('text'))
            i -= 1
    
        return []
    
        3
  •  -1
  •   Luca J    6 年前

    您可以在操作代码中执行以下操作

    query = tracker.latest_message.get('text')
    
    dispatcher.utter_message(query)