Rasa 调用外部 API 抛出 NONE
Rasa calling external API throws NONE
我使用 rasa 构建了一个小型聊天机器人。我希望我的机器人通过调用外部 api 来讲笑话,但我得到 None 作为响应。
我在此处附上 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”,但其中 none 有效。
actions:
- action_get_jokes
- __main__.ApiAction
我没有使用插槽,但我尝试了您的用例并以不同的方式取得了成功。而且我认为您不需要在操作部分下的域文件中提供 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 []
我使用 rasa 构建了一个小型聊天机器人。我希望我的机器人通过调用外部 api 来讲笑话,但我得到 None 作为响应。
我在此处附上 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”,但其中 none 有效。
actions:
- action_get_jokes
- __main__.ApiAction
我没有使用插槽,但我尝试了您的用例并以不同的方式取得了成功。而且我认为您不需要在操作部分下的域文件中提供 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 []