2023-10-10 20:47:32 +08:00
|
|
|
import py_trees as ptree
|
2023-11-08 15:28:01 +08:00
|
|
|
from robowaiter.behavior_lib._base.Act import Act
|
2023-11-09 16:07:02 +08:00
|
|
|
|
2023-11-18 17:56:48 +08:00
|
|
|
from robowaiter.llm_client.multi_rounds import ask_llm,new_history
|
2023-11-09 21:52:13 +08:00
|
|
|
|
2023-11-08 15:28:01 +08:00
|
|
|
class DealChat(Act):
|
2023-11-08 10:03:40 +08:00
|
|
|
def __init__(self):
|
|
|
|
super().__init__()
|
2023-11-15 14:30:57 +08:00
|
|
|
self.chat_history = ""
|
2023-11-18 17:56:48 +08:00
|
|
|
self.function_success = False
|
|
|
|
self.func_map = {
|
|
|
|
"create_sub_task": self.create_sub_task
|
|
|
|
}
|
2023-10-17 16:28:36 +08:00
|
|
|
|
2023-10-25 22:12:15 +08:00
|
|
|
def _update(self) -> ptree.common.Status:
|
2023-10-25 10:34:24 +08:00
|
|
|
# if self.scene.status?
|
2023-11-18 14:13:07 +08:00
|
|
|
name,sentence = self.scene.state['chat_list'].pop(0)
|
2023-11-18 12:07:30 +08:00
|
|
|
|
2023-11-18 14:13:07 +08:00
|
|
|
if name == "Goal":
|
2023-11-18 17:56:48 +08:00
|
|
|
self.create_sub_task(goal=sentence)
|
2023-11-16 20:48:01 +08:00
|
|
|
return ptree.common.Status.RUNNING
|
|
|
|
|
2023-11-18 17:56:48 +08:00
|
|
|
if name not in self.scene.state["chat_history"]:
|
|
|
|
self.scene.state["chat_history"][name] = new_history()
|
|
|
|
|
|
|
|
history = self.scene.state["chat_history"][name]
|
2023-11-18 14:51:17 +08:00
|
|
|
self.scene.state["attention"]["customer"] = name
|
|
|
|
self.scene.state["serve_state"] = {
|
|
|
|
"last_chat_time": self.scene.time,
|
|
|
|
}
|
|
|
|
|
2023-11-18 17:56:48 +08:00
|
|
|
function_call, response = ask_llm(sentence,history,func_map=self.func_map)
|
2023-11-16 20:48:01 +08:00
|
|
|
|
2023-11-15 14:30:57 +08:00
|
|
|
|
2023-11-18 17:56:48 +08:00
|
|
|
self.scene.chat_bubble(response) # 机器人输出对话
|
2023-11-12 14:36:41 +08:00
|
|
|
|
2023-11-18 17:56:48 +08:00
|
|
|
return ptree.common.Status.RUNNING
|
2023-11-09 21:52:13 +08:00
|
|
|
|
2023-10-25 22:12:15 +08:00
|
|
|
|
2023-11-18 17:56:48 +08:00
|
|
|
def create_sub_task(self,**args):
|
|
|
|
try:
|
|
|
|
goal = args['goal']
|
2023-11-08 17:37:49 +08:00
|
|
|
|
2023-11-18 17:56:48 +08:00
|
|
|
w = goal.split(")")
|
|
|
|
goal_set = set()
|
|
|
|
goal_set.add(w[0] + ")")
|
|
|
|
if len(w)>1:
|
|
|
|
for x in w[1:]:
|
|
|
|
if x != "":
|
2023-11-18 21:09:14 +08:00
|
|
|
goal_set.add(x[1:] + ")")
|
2023-11-18 17:56:48 +08:00
|
|
|
self.function_success = True
|
|
|
|
except:
|
|
|
|
print("参数解析错误")
|
2023-11-08 17:37:49 +08:00
|
|
|
|
2023-11-18 17:56:48 +08:00
|
|
|
self.scene.robot.expand_sub_task_tree(goal_set)
|