更改了memgpt
This commit is contained in:
parent
a7007aeea7
commit
806847ac15
|
@ -8,7 +8,7 @@ class Act(Bahavior):
|
||||||
super().__init__(*args)
|
super().__init__(*args)
|
||||||
|
|
||||||
def get_conds(self):
|
def get_conds(self):
|
||||||
pre = set()
|
self.pre = set()
|
||||||
add = set()
|
self.add = set()
|
||||||
de = set()
|
self.de = set()
|
||||||
return pre, add, de
|
return self.pre, self.add, self.de
|
|
@ -10,7 +10,7 @@ class MakeCoffee(Act):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def cond_sets(self):
|
def cond_sets(self):
|
||||||
pre = {"At(Robot,Bar)"}
|
pre = {"At(Robot,CoffeeMachine)","NotHolding"}
|
||||||
add = {"At(Coffee,Bar)"}
|
add = {"At(Coffee,Bar)"}
|
||||||
de = {}
|
de = {}
|
||||||
return pre,add,de
|
return pre,add,de
|
||||||
|
@ -19,5 +19,5 @@ class MakeCoffee(Act):
|
||||||
op_type = 1
|
op_type = 1
|
||||||
self.scene.move_task_area(op_type)
|
self.scene.move_task_area(op_type)
|
||||||
self.scene.op_task_execute(op_type)
|
self.scene.op_task_execute(op_type)
|
||||||
self.scene.state["condition_set"].add("At(Coffee,Bar)")
|
self.scene.state["condition_set"].add(self.add)
|
||||||
return Status.RUNNING
|
return Status.RUNNING
|
|
@ -0,0 +1,23 @@
|
||||||
|
import py_trees as ptree
|
||||||
|
from typing import Any
|
||||||
|
from robowaiter.behavior_lib._base.Act import Act
|
||||||
|
from robowaiter.behavior_lib._base.Behavior import Status
|
||||||
|
|
||||||
|
class PourWater(Act):
|
||||||
|
|
||||||
|
def __init__(self, *args):
|
||||||
|
super().__init__(*args)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def cond_sets(self):
|
||||||
|
self.pre = {"At(Robot,WaterTable)","NotHolding"}
|
||||||
|
self.add = {"On(Water,WaterTable)"}
|
||||||
|
self.de = {}
|
||||||
|
return self.pre,self.add,self.de
|
||||||
|
|
||||||
|
def _update(self) -> ptree.common.Status:
|
||||||
|
op_type = 2
|
||||||
|
self.scene.move_task_area(op_type)
|
||||||
|
self.scene.op_task_execute(op_type)
|
||||||
|
self.scene.state["condition_set"].update(self.add)
|
||||||
|
return Status.RUNNING
|
|
@ -94,10 +94,13 @@ class OptBTExpAlgorithm:
|
||||||
|
|
||||||
# Mount the action node and extend BT. T = Eapand(T,c,A(c))
|
# Mount the action node and extend BT. T = Eapand(T,c,A(c))
|
||||||
if c!=goal:
|
if c!=goal:
|
||||||
sequence_structure = ControlBT(type='>')
|
if c!=set():
|
||||||
sequence_structure.add_child(
|
sequence_structure = ControlBT(type='>')
|
||||||
[copy.deepcopy(pair_node.cond_leaf), copy.deepcopy(pair_node.act_leaf)])
|
sequence_structure.add_child(
|
||||||
subtree.add_child([copy.deepcopy(sequence_structure)]) # subtree 是回不断变化的,它的父亲是self.bt
|
[copy.deepcopy(pair_node.cond_leaf), copy.deepcopy(pair_node.act_leaf)])
|
||||||
|
subtree.add_child([copy.deepcopy(sequence_structure)]) # subtree 是回不断变化的,它的父亲是self.bt
|
||||||
|
else:
|
||||||
|
subtree.add_child([copy.deepcopy(pair_node.act_leaf)])
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
print("完成扩展 a_node= %s,对应的新条件 c_attr= %s,mincost=%d" \
|
print("完成扩展 a_node= %s,对应的新条件 c_attr= %s,mincost=%d" \
|
||||||
% (cond_anc_pair.act_leaf.content.name, cond_anc_pair.cond_leaf.content,
|
% (cond_anc_pair.act_leaf.content.name, cond_anc_pair.cond_leaf.content,
|
||||||
|
@ -183,7 +186,10 @@ class OptBTExpAlgorithm:
|
||||||
c_set_str = ', '.join(map(str, child.content)) + "\n"
|
c_set_str = ', '.join(map(str, child.content)) + "\n"
|
||||||
self.ptml_string += c_set_str
|
self.ptml_string += c_set_str
|
||||||
elif child.type == 'act':
|
elif child.type == 'act':
|
||||||
self.ptml_string += 'act '+child.content.name+"\n"
|
if '(' not in child.content.name:
|
||||||
|
self.ptml_string += 'act '+child.content.name+"()\n"
|
||||||
|
else:
|
||||||
|
self.ptml_string += 'act ' + child.content.name + "\n"
|
||||||
elif isinstance(child, ControlBT):
|
elif isinstance(child, ControlBT):
|
||||||
if child.type == '?':
|
if child.type == '?':
|
||||||
self.ptml_string += "selector{\n"
|
self.ptml_string += "selector{\n"
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
OPENAI_API_BASE=
|
#BACKEND_TYPE=webui
|
||||||
|
#OPENAI_API_BASE=https://45.125.46.134:25344/v1/chat/completions
|
||||||
|
OPENAI_API_BASE=https://45.125.46.134:25344/v1/chat/completions
|
||||||
OPENAI_API_KEY=
|
OPENAI_API_KEY=
|
|
@ -170,7 +170,8 @@ class Agent:
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# Standard non-function reply
|
# Standard non-function reply
|
||||||
print("### Internal monologue: " + (response_message.content if response_message.content else ""))
|
# print("### Internal monologue: " + (response_message.content if response_message.content else ""))
|
||||||
|
print("### Internal monologue: " + (response_message['content'] if response_message['content'] else ""))
|
||||||
messages.append(response_message)
|
messages.append(response_message)
|
||||||
function_failed = None
|
function_failed = None
|
||||||
|
|
||||||
|
@ -178,13 +179,37 @@ class Agent:
|
||||||
|
|
||||||
def step(self, user_message):
|
def step(self, user_message):
|
||||||
input_message_sequence = self.messages + [{"role": "user", "content": user_message}]
|
input_message_sequence = self.messages + [{"role": "user", "content": user_message}]
|
||||||
response = openai.ChatCompletion.create(model=self.model, messages=input_message_sequence,
|
|
||||||
functions=self.functions_description, function_call="auto")
|
|
||||||
|
|
||||||
response_message = response.choices[0].message
|
# 原来的通信方式
|
||||||
response_message_copy = response_message.copy()
|
# response = openai.ChatCompletion.create(model=self.model, messages=input_message_sequence,
|
||||||
|
# functions=self.functions_description, function_call="auto")
|
||||||
|
#
|
||||||
|
# response_message = response.choices[0].message
|
||||||
|
# response_message_copy = response_message.copy()
|
||||||
|
|
||||||
|
# ===我们的通信方式 "tools": self.functions_description 不起作用===
|
||||||
|
import requests
|
||||||
|
url = "https://45.125.46.134:25344/v1/chat/completions"
|
||||||
|
headers = {"Content-Type": "application/json"}
|
||||||
|
data = {
|
||||||
|
"model": "RoboWaiter",
|
||||||
|
"messages": input_message_sequence,
|
||||||
|
# "functions":self.functions_description,
|
||||||
|
# "function_call":"auto"
|
||||||
|
# "function_call":self.functions_description
|
||||||
|
"tools": self.functions_description
|
||||||
|
}
|
||||||
|
response = requests.post(url, headers=headers, json=data, verify=False)
|
||||||
|
if response.status_code == 200:
|
||||||
|
result = response.json()
|
||||||
|
response_message = result['choices'][0]['message']
|
||||||
|
else:
|
||||||
|
response_message = "大模型请求失败:"+ str(response.status_code)
|
||||||
|
response_message_copy = response_message
|
||||||
|
# ===我们的通信方式 "tools": self.functions_description 不起作用===
|
||||||
|
|
||||||
|
|
||||||
all_response_messages, function_failed = self.handle_ai_response(response_message)
|
all_response_messages, function_failed = self.handle_ai_response(response_message)
|
||||||
|
|
||||||
assert "api_response" not in all_response_messages[0], f"api_response already in {all_response_messages[0]}"
|
assert "api_response" not in all_response_messages[0], f"api_response already in {all_response_messages[0]}"
|
||||||
all_response_messages[0]["api_response"] = response_message_copy
|
all_response_messages[0]["api_response"] = response_message_copy
|
||||||
assert "api_args" not in all_response_messages[0], f"api_args already in {all_response_messages[0]}"
|
assert "api_args" not in all_response_messages[0], f"api_args already in {all_response_messages[0]}"
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
FUNCTIONS = [
|
||||||
|
{
|
||||||
|
"name": "get_current_weather",
|
||||||
|
"description": "Get the current weather in a given location",
|
||||||
|
"parameters": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"location": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The city and state, e.g. San Francisco, CA",
|
||||||
|
},
|
||||||
|
"unit": {"type": "string"},
|
||||||
|
},
|
||||||
|
"required": ["location"],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
]
|
|
@ -2,10 +2,14 @@ from dotenv import load_dotenv
|
||||||
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
import utils
|
import utils
|
||||||
from functions import FUNCTIONS
|
# from functions import FUNCTIONS
|
||||||
|
from functions_zh import FUNCTIONS
|
||||||
from agent import Agent
|
from agent import Agent
|
||||||
|
|
||||||
|
|
||||||
|
import urllib3
|
||||||
|
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||||
|
|
||||||
def run_agent_loop(agent):
|
def run_agent_loop(agent):
|
||||||
while True:
|
while True:
|
||||||
user_input = input("You: ")
|
user_input = input("You: ")
|
||||||
|
@ -20,6 +24,11 @@ if __name__ == "__main__":
|
||||||
persona = utils.get_persona_text()
|
persona = utils.get_persona_text()
|
||||||
human = utils.get_human_text()
|
human = utils.get_human_text()
|
||||||
system = utils.get_system_text()
|
system = utils.get_system_text()
|
||||||
|
|
||||||
|
print("system:",system)
|
||||||
|
print("persona:", persona)
|
||||||
|
print("human:", human)
|
||||||
|
|
||||||
agent = Agent(model="gpt-3.5-turbo-16k-0613", system=system, functions_description=FUNCTIONS, persona_notes=persona,
|
agent = Agent(model="gpt-3.5-turbo-16k-0613", system=system, functions_description=FUNCTIONS, persona_notes=persona,
|
||||||
human_notes=human)
|
human_notes=human)
|
||||||
run_agent_loop(agent)
|
run_agent_loop(agent)
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
{"测试VLM:做一杯咖啡": {"Answer": "测试VLM:做一杯咖啡", "Goal": "{\"At(Coffee,Bar)\"}"}, "测试VLN:前往桌子": {"Answer": "测试VLN:前往桌子", "Goal": "{\"At(Robot,Table)\"}"}, "测试AEM": {"Answer": "测试AEM", "Goal": "{\"EnvExplored()\"}"}}
|
{"测试VLM:做一杯咖啡": {"Answer": "测试VLM:做一杯咖啡", "Goal": "{\"At(Coffee,Bar)\"}"}, "测试VLN:前往桌子": {"Answer": "测试VLN:前往桌子", "Goal": "{\"At(Robot,Table)\"}"}, "测试VLM:倒一杯水": {"Answer": "测试VLM:倒一杯水", "Goal": "{\"At(Water,WaterTable)\"}"}}
|
||||||
|
|
||||||
|
|
|
@ -2,3 +2,4 @@ Question,Answer,Goal
|
||||||
测试VLM:做一杯咖啡,测试VLM:做一杯咖啡,"{""At(Coffee,Bar)""}"
|
测试VLM:做一杯咖啡,测试VLM:做一杯咖啡,"{""At(Coffee,Bar)""}"
|
||||||
测试VLN:前往桌子,测试VLN:前往桌子,"{""At(Robot,Table)""}"
|
测试VLN:前往桌子,测试VLN:前往桌子,"{""At(Robot,Table)""}"
|
||||||
测试AEM,测试AEM,"{""EnvExplored()""}"
|
测试AEM,测试AEM,"{""EnvExplored()""}"
|
||||||
|
测试VLM:倒一杯水,测试VLM:倒一杯水,"{""At(Water,WaterTable)""}"
|
||||||
|
|
|
|
@ -69,10 +69,14 @@ class Robot(object):
|
||||||
action_list = [
|
action_list = [
|
||||||
Action(name='MakeCoffee()', pre={'At(Robot,CoffeeMachine)'},
|
Action(name='MakeCoffee()', pre={'At(Robot,CoffeeMachine)'},
|
||||||
add={'At(Coffee,Bar)'}, del_set=set(), cost=1),
|
add={'At(Coffee,Bar)'}, del_set=set(), cost=1),
|
||||||
Action(name='MoveTo(Table)', pre={'At(Robot,Bar)'},
|
Action(name='MoveTo(Table)', pre={''},
|
||||||
add={'At(Robot,Table)'}, del_set=set(), cost=1),
|
add={'At(Robot,Table)'}, del_set=set(), cost=1),
|
||||||
|
Action(name='MoveTo(WaterTable)', pre={''},
|
||||||
|
add={'At(Robot,WaterTable)'}, del_set=set(), cost=1),
|
||||||
Action(name='ExploreEnv()', pre={'At(Robot,Bar)'},
|
Action(name='ExploreEnv()', pre={'At(Robot,Bar)'},
|
||||||
add={'EnvExplored()'}, del_set=set(), cost=1),
|
add={'EnvExplored()'}, del_set=set(), cost=1),
|
||||||
|
Action(name='PourWater()', pre={'At(Robot,WaterTable)'},
|
||||||
|
add={'At(Water,WaterTable)'}, del_set=set(), cost=1),
|
||||||
]
|
]
|
||||||
return action_list
|
return action_list
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,8 @@ class SceneVLM(Scene):
|
||||||
super().__init__(robot)
|
super().__init__(robot)
|
||||||
# 在这里加入场景中发生的事件, (事件发生的时间,事件函数)
|
# 在这里加入场景中发生的事件, (事件发生的时间,事件函数)
|
||||||
self.event_list = [
|
self.event_list = [
|
||||||
(5, self.create_chat_event("测试VLM:做一杯咖啡")),
|
# (5, self.create_chat_event("测试VLM:做一杯咖啡")),
|
||||||
|
(5, self.create_chat_event("测试VLM:倒一杯水")),
|
||||||
]
|
]
|
||||||
|
|
||||||
def _reset(self):
|
def _reset(self):
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
selector{
|
selector{
|
||||||
cond At(Coffee,Bar)
|
cond At(Water,WaterTable)
|
||||||
sequence{
|
sequence{
|
||||||
cond At(Robot,CoffeeMachine)
|
cond At(Robot,WaterTable)
|
||||||
act MakeCoffee()
|
act PourWater()
|
||||||
|
}
|
||||||
|
sequence{
|
||||||
|
cond
|
||||||
|
act MoveTo(WaterTable)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue