diff --git a/robowaiter/behavior_tree/dataset/expansion_out/output2.txt b/robowaiter/behavior_tree/dataset/expansion_out/output2.txt new file mode 100644 index 0000000..9c06989 --- /dev/null +++ b/robowaiter/behavior_tree/dataset/expansion_out/output2.txt @@ -0,0 +1,57 @@ +At(Robot,Bar) 请问您需要什么帮助吗?我就在吧台附近,能否请您自己过来呢? +At(Robot,Bar) 请问你能去一下吧台吗? +At(Robot,Bar) 请问你能帮我到吧台那个位置吗? +At(Robot,WaterTable) 请问你能过来一下吗?我正在茶水桌旁。 +At(Robot,WaterTable) 请问你可以去茶水桌一下吗? +At(Robot,WaterTable) 你能带路去茶水桌吗? +At(Robot,CoffeeTable) 请问你可以过来一下吗?我在这张咖啡桌旁边。 +At(Robot,CoffeeTable) 请问你可以帮我一下,去一下咖啡桌吗? +At(Robot,CoffeeTable) 请问你能帮我前往咖啡桌那个位置吗? +At(Robot,Bar2) 您好,请问您需要什么帮助吗?我正在另一个吧台处理一些事情。 +At(Robot,Bar2) 请问你可以去一下另一个吧台吗? +At(Robot,Bar2) 你能去另一个吧台的位置吗? +At(Robot,Table1) 请问你能过来一下吗?我目前在第一桌,需要你的帮助。 +At(Robot,Table1) 请问你能去一下第一桌吗? +At(Robot,Table1) 请问你能帮我到第一张桌子那个位置吗? +At(Robot,Table2) 请问您能过来一下吗?我正在第二张桌子这里。 +At(Robot,Table2) 请问你可以去第二张桌子一下吗? +At(Robot,Table2) 请问你能帮我前往第二桌吗? +At(Robot,Table3) 请问你能过来一下吗?我正在第三张桌子旁。 +At(Robot,Table3) 请问你能去第三张桌子一下吗? +At(Robot,Table3) 你能告诉我第三张桌子的位置在哪里吗? +On(Softdrink,Bar) 您好,请问您需要我帮您把盒装冰红茶放到哪个位置呢? +On(Softdrink,Bar) 服务员,能否帮我拿来一盒冰红茶放到吧台呢? +On(Softdrink,WaterTable) 您好,请问您需要我帮忙将盒装冰红茶放到哪个位置吗? +On(Softdrink,WaterTable) 服务员,能否帮我把盒装冰红茶拿到茶水桌呢? +On(Softdrink,CoffeeTable) 请问你能把盒装冰红茶放到咖啡桌那个位置吗? +On(Softdrink,CoffeeTable) 服务员,把盒装冰红茶拿到咖啡桌 position 好吗? +On(Softdrink,Bar2) 请问你能把盒装冰红茶放到另一个吧台的位置吗? +On(Softdrink,Bar2) 请问你能把盒装冰红茶拿到另一个吧台位置吗? +On(Softdrink,Table1) 请问您能否把盒装冰红茶放在第一桌的指定位置呢? +On(Softdrink,Table1) 请您把盒装冰红茶拿到第一桌的位置。 +On(Softdrink,Table2) 服务员,您好,请问能否帮我將這盒裝冰红茶放 到第二張桌子那個位置呢? +On(Softdrink,Table2) 服务员,请把盒装冰红茶拿到第二张桌子的位置。 +On(Softdrink,Table3) 请问你可以把盒装冰红茶放到第三张桌子的那个位置吗? +On(Softdrink,Table3) 请问你能把盒装冰红茶拿到第三张桌子的位置吗? +On(BottledDrink,Bar) 您好,请问您需要我将瓶装饮料放到哪个位置呢? +On(BottledDrink,Bar) 请把瓶装饮料拿到吧台的位置。 +On(BottledDrink,WaterTable) 请问你可以把瓶装饮料放到茶水桌那个位置吗? +On(BottledDrink,WaterTable) 请问你能把瓶装饮料拿到茶水桌位置吗? +On(BottledDrink,CoffeeTable) 服务员,能否把瓶装饮料放在咖啡桌那个位置呢? +On(BottledDrink,CoffeeTable) 服务员,能否把瓶装饮料拿到咖啡桌附近呢? +On(BottledDrink,Bar2) 请问你能把瓶装饮料放到另一个吧台的那个位置吗? +On(BottledDrink,Bar2) 请把瓶装饮料拿到另一个吧台位置。 +On(BottledDrink,Table1) 请问您能否帮我將瓶裝飲料放至第一張桌子的那個位置呢? +On(BottledDrink,Table1) 请问你能把瓶装饮料拿到第一桌的位置吗? +On(BottledDrink,Table2) 请问,你可以把瓶装饮料放到第二张桌子的那个位置吗? +On(BottledDrink,Table2) 请问你能把瓶装饮料拿到第二张桌子的位置吗? +On(BottledDrink,Table3) 请问,你能把瓶装饮料放到第三桌的哪个位置吗? +On(BottledDrink,Table3) 请问你能把瓶装饮料拿到第三张桌子的位置吗? +On(Yogurt,Bar) 请问你能把酸奶放到吧台那个位置吗? +On(Yogurt,Bar) 请问你能把酸奶拿到吧台位置吗? +On(Yogurt,WaterTable) 请问你能把酸奶放到茶水桌那个位置吗? +On(Yogurt,WaterTable) 服务员,请把酸奶拿到茶水桌的位置。 +On(Yogurt,CoffeeTable) 请问,你能把酸奶放在咖啡桌那个位置吗? +On(Yogurt,CoffeeTable) 服务员,能否把酸奶拿到咖啡桌的位置呢? +On(Yogurt,Bar2) 请问你能把酸奶放到另一个吧台的那个位置吗? +On(Yogurt,Bar2) 请问你能把酸奶拿到另一个吧台位置吗? diff --git a/robowaiter/behavior_tree/dataset/sentence_expansion.py b/robowaiter/behavior_tree/dataset/sentence_expansion.py index edf8e6f..5cd2be4 100644 --- a/robowaiter/behavior_tree/dataset/sentence_expansion.py +++ b/robowaiter/behavior_tree/dataset/sentence_expansion.py @@ -1,6 +1,8 @@ import os import requests import urllib3 +from tqdm import tqdm + ######################################## # 该文件实现了与大模型的简单通信 ######################################## @@ -9,23 +11,28 @@ import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) -def single_round(question,prefix=""): +def single_round(question, prefix=""): url = "https://45.125.46.134:25344/v1/chat/completions" headers = {"Content-Type": "application/json"} data = { "model": "RoboWaiter", "messages": [ - { - "role": "system", - # "content": "你是一个机器人服务员:RoboWaiter. 你的职责是为顾客提供对话及具身服务。" - "content": "请将以下你对咖啡厅服务员说的话改写成更清晰更合理的顾客表述。" - }, - { - "role": "user", - "content": prefix + question - } + { + "role": "system", + # "content": "你是一个机器人服务员:RoboWaiter. 你的职责是为顾客提供对话及具身服务。" + "content": """ + 假设现在你是咖啡厅的一个顾客,请将以下你对咖啡厅服务员说的话改写成更清晰更合理的顾客表述。注意:句中的你指的是咖啡厅服务员,也不要说能帮我。 + 例如:麻烦你去一下吧台。可以转述成:服务员,你能去下吧台吗? + 另一个例子:请你拿一下酸奶到吧台位置。可以转述成:服务员,拿一杯酸奶来吧台。 + + """ + }, + { + "role": "user", + "content": prefix + question + } ] - } + } response = requests.post(url, headers=headers, json=data, verify=False) @@ -37,14 +44,18 @@ def single_round(question,prefix=""): if __name__ == '__main__': - with open('goal_states_with_description.txt', 'r', encoding='utf-8') as file: + with open('./goal_states_with_description.txt', 'r', encoding='utf-8') as file: lines = file.readlines() - for line in lines: + + output_file = './expansion_out/output2.txt' + with open(output_file, 'a', encoding='utf-8') as file: + file.truncate(0) + for line in tqdm(lines): tmp = line[:-1].split('\t') - #file.write("""{"title":"%s","text":"%s"}\n""" % (tmp[1], tmp[0])) + # file.write("""{"title":"%s","text":"%s"}\n""" % (tmp[1], tmp[0])) question = tmp[1] - #print(single_round(question)) - #print(tmp[1]) - with open('output1.txt', 'a',encoding='utf-8') as file: - file.write(tmp[0]+"\t"+single_round(question)+'\n') - print("输出完成") \ No newline at end of file + # print(single_round(question)) + # print(tmp[1]) + with open(output_file, 'a', encoding='utf-8') as file: + file.write(tmp[0] + "\t" + single_round(question, prefix="现在改写一下句子:") + '\n') + print("输出完成") diff --git a/robowaiter/llm_client/single_round.py b/robowaiter/llm_client/single_round.py index d0c88c6..364ecce 100644 --- a/robowaiter/llm_client/single_round.py +++ b/robowaiter/llm_client/single_round.py @@ -1,6 +1,8 @@ +import time import requests import urllib3 + ######################################## # 该文件实现了与大模型的简单通信 ######################################## @@ -9,22 +11,29 @@ import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) -def single_round(question,prefix=""): +def single_round(question, prefix=""): url = "https://45.125.46.134:25344/v1/chat/completions" headers = {"Content-Type": "application/json"} data = { "model": "RoboWaiter", "messages": [ - { - "role": "system", - "content": "你是一个机器人服务员:RoboWaiter. 你的职责是为顾客提供对话及具身服务。" - }, - { - "role": "user", - "content": prefix + question - } + { + "role": "system", + "content": "你是一个机器人服务员:RoboWaiter. 你的职责是为顾客提供对话及具身服务。" + # "content": + # """ + # 你是一个熟悉行为树的工程师,你的职责是根据用户需求,为一个人型的机器人设计完成用户需求的行为树序列。 + # 行为树是一种有向根树,他的内部节点称为控制节点,控制节点包括选择、顺序,顺序节点只有所有子节点返回成功之后他才成功。 + # 选择节点只要有一个子节点返回成功最后就成功。叶节点称为执行节点,执行节点包括动作节点和条件节点。动作节点执行具体的动作,条件节点检查环境中的条件是否满足。 + # """ + # "content": "你是一个优秀的目标状态规划师,能够根据用户输入,规划出所需要的目标状态。例如:打开窗帘的目标状态可以是Is(Curtain, On)" + }, + { + "role": "user", + "content": prefix + question + } ] - } + } response = requests.post(url, headers=headers, json=data, verify=False) @@ -37,7 +46,10 @@ def single_round(question,prefix=""): if __name__ == '__main__': question = ''' - 给我一杯拿铁 + 嘿!能做一杯咖啡吗?咖啡就行! ''' + import timeit - print(single_round(question)) \ No newline at end of file + cur_time = time.time() + print(single_round(question, prefix='现在给出符合这句话要求的目标状态: ')) + print(f"单次生成耗时:{time.time() - cur_time} s \n")