Rasa, вызывающий внешний API, выдает NONE

Я создал небольшого чат-бота, используя rasa. Я хочу, чтобы мой бот рассказывал анекдот, вызывая внешний API, но в качестве ответа я получаю «Нет».

Прилагаю сюда метод вызова API.

class ApiAction(Action):
    def name(self):
        return "action_get_jokes"

    def run(self, dispatcher, tracker, domain):
        r = requests.get('https://api.chucknorris.io/jokes/random')
        response = r.text
        json_data= json.loads(response)
        for k,v in json_data.items():
            if k == 'value':
                return [SlotSet("jokes_response",v)]
            else:
                return [SlotSet("jokes_response","404 not found")]

В моем domain.yml есть слот для ответа на шутку

slots:
  jokes_response:
    type: unfeaturized
    auto_fill: false
utter_jokes:
  - text: "Here you go : {jokes_response} "
  - text: "There you go: {jokes_response} "

под действиями я попытался использовать как main, так и напрямую указав '- action_get_jokes', но ни один из них не сработал.

actions:
   - action_get_jokes
   - __main__.ApiAction

person Sai Prasanth    schedule 08.10.2019    source источник
comment
Вам просто нужно указать action_get_jokes. Имя класса неправильное. Кроме того, можете ли вы проверить, извлекается ли значение в первую очередь в классе ApiAction?   -  person msamogh    schedule 08.10.2019
comment
Я пробовал с action_get_jokes, он не возвращает NONE. Значения не извлекаются. Я чувствую, что имя класса не запускается. Вы можете мне с этим помочь?   -  person Sai Prasanth    schedule 09.10.2019


Ответы (1)


Я не использовал слоты, но попробовал ваш вариант использования и добился успеха другим способом. а также я не думаю, что вам нужно указывать ApiAction в файле домена в разделе действий.

from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher    
import requests
import json
class ApiAction(Action):

def name(self) -> Text:
    return "action_get_jokes"

def run(self, dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
    r = requests.get('https://api.chucknorris.io/jokes/random')
    response = r.text
    json_data= json.loads(response)

    reply = 'Here you go '
    if (json_data["value"]):
        reply = reply + json_data["value"]
    else:
        reply = reply + "404 not found"

    dispatcher.utter_message(reply)

    return []
person Rajitha Fernando    schedule 16.10.2019