以自定义Action消息的案例为基础,编写从而一串随机整数序列中获取最大值和最小值,并把结果反馈给客户端,同时在终端打印,在Action服务端运行的过程中要把当前序列的最大最小值作为Feedback进行反馈
时间: 2024-02-17 12:00:20 浏览: 59
一个ROS下自定义消息使用案例,执行编译即可使用
好的,可以使用Python编写一个自定义Action消息,实现从一串随机整数序列中获取最大值和最小值,并将结果反馈给客户端。
首先,需要安装Rasa框架,并在Rasa项目中创建一个新的Action。可以使用以下命令创建一个新的Action:
```
rasa create action get_max_min
```
创建完毕后,在 actions.py 文件中添加以下代码:
```python
from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
import random
class ActionGetMaxMin(Action):
def name(self) -> Text:
return "action_get_max_min"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
# 获取随机整数序列
num_list = [random.randint(1, 100) for _ in range(10)]
# 计算最大值和最小值
max_num = max(num_list)
min_num = min(num_list)
# 在终端打印最大值和最小值
print("Max num:", max_num)
print("Min num:", min_num)
# 反馈结果给客户端
dispatcher.utter_message(text=f"Max num: {max_num}, Min num: {min_num}")
# 将当前序列的最大最小值作为Feedback进行反馈
return [ {"max_num": max_num, "min_num": min_num} ]
```
代码中,首先定义了一个名为 `ActionGetMaxMin` 的Action类,其中 `name()` 方法返回Action的名称,这里为 `action_get_max_min`。
接着,在 `run()` 方法中,我们先使用 Python 的 `random` 模块生成一个包含 10 个随机整数的列表 `num_list`,然后分别使用 `max()` 和 `min()` 函数计算最大值和最小值,并将结果打印在终端。
最后,使用 `dispatcher.utter_message()` 方法将结果反馈给客户端,并使用 `return` 语句将当前序列的最大最小值作为Feedback进行反馈。
在Rasa项目中,将该Action添加到 domain.yml 文件中的 `actions` 下,例如:
```yaml
actions:
- action_get_max_min
```
这样,当用户在对话中触发该Action时,Rasa将会调用该Action,并执行其中的代码。
可以使用以下命令在命令行中启动Rasa服务:
```
rasa run actions
```
然后,在另一个终端中运行Rasa对话流程,可以看到当用户输入触发该Action的intent时,Rasa将会调用Action并返回结果。同时,在Rasa后台终端中,也会打印出当前序列的最大最小值。
以上就是一个简单的自定义Action消息的实现示例,可以根据实际需求进行改进和扩展。
阅读全文