更改了memgpt

This commit is contained in:
Caiyishuai 2023-11-13 15:40:19 +08:00
parent a7007aeea7
commit 806847ac15
13 changed files with 118 additions and 25 deletions

View File

@ -8,7 +8,7 @@ class Act(Bahavior):
super().__init__(*args)
def get_conds(self):
pre = set()
add = set()
de = set()
return pre, add, de
self.pre = set()
self.add = set()
self.de = set()
return self.pre, self.add, self.de

View File

@ -10,7 +10,7 @@ class MakeCoffee(Act):
@property
def cond_sets(self):
pre = {"At(Robot,Bar)"}
pre = {"At(Robot,CoffeeMachine)","NotHolding"}
add = {"At(Coffee,Bar)"}
de = {}
return pre,add,de
@ -19,5 +19,5 @@ class MakeCoffee(Act):
op_type = 1
self.scene.move_task_area(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

View File

@ -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

View File

@ -94,10 +94,13 @@ class OptBTExpAlgorithm:
# Mount the action node and extend BT. T = Eapand(T,c,A(c))
if c!=goal:
if c!=set():
sequence_structure = ControlBT(type='>')
sequence_structure.add_child(
[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:
print("完成扩展 a_node= %s,对应的新条件 c_attr= %s,mincost=%d" \
% (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"
self.ptml_string += c_set_str
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):
if child.type == '?':
self.ptml_string += "selector{\n"

View File

@ -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=

View File

@ -170,7 +170,8 @@ class Agent:
)
else:
# 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)
function_failed = None
@ -178,13 +179,37 @@ class Agent:
def step(self, 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)
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
assert "api_args" not in all_response_messages[0], f"api_args already in {all_response_messages[0]}"

View File

@ -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"],
},
}
]

View File

@ -2,10 +2,14 @@ from dotenv import load_dotenv
load_dotenv()
import utils
from functions import FUNCTIONS
# from functions import FUNCTIONS
from functions_zh import FUNCTIONS
from agent import Agent
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def run_agent_loop(agent):
while True:
user_input = input("You: ")
@ -20,6 +24,11 @@ if __name__ == "__main__":
persona = utils.get_persona_text()
human = utils.get_human_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,
human_notes=human)
run_agent_loop(agent)

View File

@ -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)\"}"}}

View File

@ -2,3 +2,4 @@ Question,Answer,Goal
测试VLM做一杯咖啡,测试VLM做一杯咖啡,"{""At(Coffee,Bar)""}"
测试VLN前往桌子,测试VLN前往桌子,"{""At(Robot,Table)""}"
测试AEM,测试AEM,"{""EnvExplored()""}"
测试VLM倒一杯水,测试VLM倒一杯水,"{""At(Water,WaterTable)""}"

1 Question Answer Goal
2 测试VLM:做一杯咖啡 测试VLM:做一杯咖啡 {"At(Coffee,Bar)"}
3 测试VLN:前往桌子 测试VLN:前往桌子 {"At(Robot,Table)"}
4 测试AEM 测试AEM {"EnvExplored()"}
5 测试VLM:倒一杯水 测试VLM:倒一杯水 {"At(Water,WaterTable)"}

View File

@ -69,10 +69,14 @@ class Robot(object):
action_list = [
Action(name='MakeCoffee()', pre={'At(Robot,CoffeeMachine)'},
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),
Action(name='MoveTo(WaterTable)', pre={''},
add={'At(Robot,WaterTable)'}, del_set=set(), cost=1),
Action(name='ExploreEnv()', pre={'At(Robot,Bar)'},
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

View File

@ -11,7 +11,8 @@ class SceneVLM(Scene):
super().__init__(robot)
# 在这里加入场景中发生的事件, (事件发生的时间,事件函数)
self.event_list = [
(5, self.create_chat_event("测试VLM做一杯咖啡")),
# (5, self.create_chat_event("测试VLM做一杯咖啡")),
(5, self.create_chat_event("测试VLM倒一杯水")),
]
def _reset(self):

View File

@ -1,7 +1,11 @@
selector{
cond At(Coffee,Bar)
cond At(Water,WaterTable)
sequence{
cond At(Robot,CoffeeMachine)
act MakeCoffee()
cond At(Robot,WaterTable)
act PourWater()
}
sequence{
cond
act MoveTo(WaterTable)
}
}