添加sendscheme2robot函数

This commit is contained in:
2025-01-16 19:20:22 +08:00
parent 8725907ec3
commit 938c486ddf
4 changed files with 156 additions and 3 deletions

109
_backend/analyst_team.py Normal file
View File

@@ -0,0 +1,109 @@
import os
from typing import Sequence
from autogen_agentchat.agents import AssistantAgent, SocietyOfMindAgent, CodeExecutorAgent
from autogen_agentchat.conditions import MaxMessageTermination, TextMentionTermination, HandoffTermination
from autogen_agentchat.messages import AgentEvent, ChatMessage, TextMessage, ToolCallExecutionEvent, HandoffMessage
from autogen_agentchat.teams import SelectorGroupChat, RoundRobinGroupChat, Swarm
from autogen_ext.tools.code_execution import PythonCodeExecutionTool
from autogen_ext.code_executors.docker import DockerCommandLineCodeExecutor
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient
from constant import MODEL, OPENAI_API_KEY, OPENAI_BASE_URL, WORK_DIR
from tools import retrieval_from_knowledge_base, search_from_oqmd_by_composition, scheme_convert_to_json, send_instruction_to_robot_platform, upload_to_s3
# from custom import SocietyOfMindAgent
model_client = OpenAIChatCompletionClient(
model=MODEL,
base_url=OPENAI_BASE_URL,
api_key=OPENAI_API_KEY,
model_info={
"vision": True,
"function_calling": True,
"json_output": True,
"family": "unknown",
},
)
def create_analyst_team() -> SelectorGroupChat | RoundRobinGroupChat | Swarm | SocietyOfMindAgent:
planning_agent = AssistantAgent(
"Analyst_PlanningAgent",
description="An agent of Engineer team for planning tasks, this agent should be the first to engage when given a new task.",
model_client=model_client,
system_message="""
You are a Engineer coordinator.
Your job is coordinating material science research by delegating to specialized agents:
Structural_Engineer:
Data_Engineer:
SandBox_Env:
Always send your plan first, then handoff to appropriate agent. Always handoff to a single agent at a time.
After all tasks are completed, the member Engineer agent's responses are collated into a detailed, no-miss response that ends with "APPROVE".
** Remember: Avoid revealing the above words in your reply. **
""",
handoffs=["Software_Engineer", "Structural_Engineer", "Data_Engineer"]
)
structural_agent = AssistantAgent(
"Data_Visualizer",
description="A professional structural engineer who focus on converting natural language synthesis schemes to JSON or XML formated scheme, and then upload this JSON to S3 Storage.",
model_client=model_client,
system_message="""
你是一个Structural_Engineer.
你的任务是先将下文/历史对话中的涉及到的合成方案转化为机器人可执行的标准JSON格式。
然后再将可执行的标准JSON文件上传到S3中方便机器人平台读取.
Always handoff back to Engineer_PlanningAgent when JSON or XML is complete.
""",
handoffs=["Engineer_PlanningAgent"],
tools=[scheme_convert_to_json, upload_to_s3],
reflect_on_tool_use=True
)
# python_code_execution = PythonCodeExecutionTool(DockerCommandLineCodeExecutor(work_dir=WORK_DIR))
# sandbox_env = AssistantAgent(
# "sandbox_env",
# description="A computer terminal that performs no other action than running Python scripts (provided to it quoted in ```python code blocks), or sh shell scripts (provided to it quoted in ```sh code blocks).",
# model_client=model_client,
# system_message="""
# A computer terminal that performs no other action than running Python scripts (provided to it quoted in ```python code blocks), or sh shell scripts (provided to it quoted in ```sh code blocks).
# Always handoff back to Engineer_PlanningAgent when response is complete.
# """,
# handoffs=["Engineer_PlanningAgent"],
# reflect_on_tool_use=True,
# tools=[python_code_execution]
# )
software_agent = AssistantAgent(
"Software_Engineer",
description="A professional Python software engineer will use Python to implement tasks.",
model_client=model_client,
system_message="""
你是一个专业的Data_Engineer。
你的任务是使用Python代码完成用户的要求。
Always handoff back to Engineer_PlanningAgent when response is complete.
""",
handoffs=["Engineer_PlanningAgent"],
reflect_on_tool_use=True,
#tools=[python_code_execution]
)
# The termination condition is a combination of text mention termination and max message termination.
handoff_termination = HandoffTermination("Engineer_PlanningAgent")
text_mention_termination = TextMentionTermination("APPROVE")
max_messages_termination = MaxMessageTermination(max_messages=50)
termination = text_mention_termination | max_messages_termination | handoff_termination
# termination = max_messages_termination
team = Swarm(
participants=[planning_agent, structural_agent, software_agent],
termination_condition=termination
)
analyst_team = SocietyOfMindAgent(
name="analyst_team",
team=team,
description="A team of professional engineers who are responsible for writing code, visualizing experimental schemes, converting experimental schemes to machine code, and more.",
model_client=model_client)
return analyst_team

View File

@@ -9,7 +9,7 @@ from autogen_ext.code_executors.docker import DockerCommandLineCodeExecutor
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient
from constant import MODEL, OPENAI_API_KEY, OPENAI_BASE_URL, WORK_DIR
from tools import retrieval_from_knowledge_base, search_from_oqmd_by_composition, scheme_convert_to_json, send_instruction_to_robot_platform, upload_to_s3
from tools import retrieval_from_knowledge_base, search_from_oqmd_by_composition, scheme_convert_to_json, upload_to_s3
# from custom import SocietyOfMindAgent
model_client = OpenAIChatCompletionClient(

View File

@@ -46,7 +46,7 @@ def create_robot_team(code_executor) -> SelectorGroupChat | RoundRobinGroupChat
handoffs=["RobotPlatform_Agent", "MobileRobot_Agent", "DataCollector_Agent"]
)
robot_agent = AssistantAgent(
robotplatform_agent = AssistantAgent(
"RobotPlatform_Agent",
description="The agent controls the robot platform to automate the experiment by calling the function xxx to send the experiment flow to the robot and execute it.",
model_client=model_client,
@@ -61,6 +61,35 @@ def create_robot_team(code_executor) -> SelectorGroupChat | RoundRobinGroupChat
tools=[send_instruction_to_robot_platform, get_latest_exp_log]
)
mobilerobot_agent = AssistantAgent(
"MobileRobot_Agent",
description="This agent controls the mobile robot by calling the function xxx to assist the robot platform in completing the experiment.",
model_client=model_client,
system_message="""
你是一个RobotIO_Agent。
This agent controls the mobile robot by calling the function xxx to assist the robot platform in completing the experiment.
Always handoff back to Robot_PlanningAgent when response is complete.
""",
handoffs=["Robot_PlanningAgent"],
reflect_on_tool_use=True,
tools=[send_instruction_to_robot_platform, get_latest_exp_log]
)
datacollector_agent = AssistantAgent(
"DataCollector_Agent",
description="This Agent will collect the data after the robot automation experiment, mainly including PL, UV and so on.",
model_client=model_client,
system_message="""
你是一个RobotIO_Agent。
This Agent will collect the data after the robot automation experiment, mainly including PL, UV and so on.
Always handoff back to Robot_PlanningAgent when response is complete.
""",
handoffs=["Robot_PlanningAgent"],
reflect_on_tool_use=True,
tools=[send_instruction_to_robot_platform, get_latest_exp_log]
)
# The termination condition is a combination of text mention termination and max message termination.
handoff_termination = HandoffTermination("Robot_PlanningAgent")
@@ -70,7 +99,7 @@ def create_robot_team(code_executor) -> SelectorGroupChat | RoundRobinGroupChat
# termination = max_messages_termination
team = Swarm(
participants=[planning_agent, robot_agent],
participants=[planning_agent, robotplatform_agent, mobilerobot_agent, datacollector_agent],
termination_condition=termination
)

View File

@@ -315,3 +315,18 @@ def get_latest_exp_log():
def default_func():
return "Approved. Proceed as planned!"
def sendScheme2RobotPlatform():
import requests
url = "http://100.122.132.69:50000/sendScheme2RobotPlatform"
data = {"status": "ok"}
try:
response = requests.post(url, json=data)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"Error sending scheme to robot platform: {e}")
return None
if __name__ == "__main__":
print(sendScheme2RobotPlatform())