128 lines
5.3 KiB
Python
128 lines
5.3 KiB
Python
from autogen.code_utils import create_virtual_env
|
|
from autogen.coding import LocalCommandLineCodeExecutor
|
|
from autogen.agentchat.contrib.capabilities.teachability import Teachability
|
|
from autogen.agentchat.contrib.capabilities.vision_capability import VisionCapability
|
|
from autogen.agentchat.contrib.multimodal_conversable_agent import MultimodalConversableAgent
|
|
from pathlib import Path
|
|
import autogen
|
|
import os
|
|
from .constant import config_list, STREAM, SILENT, WORK_DIR, CACHE
|
|
from .utils import load_agent_configs
|
|
from .retrieval_group import init_retrieval_group
|
|
from .generate_group import init_generate_group
|
|
from .converter_group import init_converter_group
|
|
from .executor_group import init_executor_group
|
|
from .optimize_group import init_optimize_group
|
|
|
|
|
|
venv_context = create_virtual_env(WORK_DIR)
|
|
llm_config = {"config_list": config_list, "stream": STREAM, "cache_seed": CACHE}
|
|
|
|
|
|
def main():
|
|
agent_configs = load_agent_configs(os.path.join(os.path.dirname(os.path.abspath(__file__)), "config/plan_group.yaml"))
|
|
user = autogen.UserProxyAgent(
|
|
name="User",
|
|
human_input_mode="ALWAYS",
|
|
code_execution_config={
|
|
"work_dir": WORK_DIR,
|
|
"use_docker": False,
|
|
},
|
|
is_termination_msg=lambda x: x.get("content", "").find("TERMINATE") >= 0,
|
|
description="User",
|
|
)
|
|
|
|
inner_retrieval_admin, outer_retrieval_agent = init_retrieval_group(WORK_DIR, venv_context)
|
|
inner_generate_admin, outer_generate_agent = init_generate_group(outer_retrieval_agent, inner_retrieval_admin)
|
|
inner_converter_admin, outer_converter_agent = init_converter_group()
|
|
inner_executor_admin, outer_executor_agent = init_executor_group(WORK_DIR, venv_context)
|
|
inner_analysis_admin, outer_analysis_agent, optimizer = init_optimize_group(WORK_DIR, venv_context)
|
|
|
|
def state_transition(last_speaker, groupchat):
|
|
messages = groupchat.messages
|
|
|
|
if last_speaker is user:
|
|
if len(messages) <= 1:
|
|
return outer_generate_agent
|
|
else:
|
|
return "auto"
|
|
elif last_speaker is outer_generate_agent:
|
|
if "synthesis" in messages[-1]["content"].lower():
|
|
return outer_converter_agent
|
|
else:
|
|
return user
|
|
elif last_speaker is outer_converter_agent:
|
|
return outer_executor_agent
|
|
elif last_speaker is outer_executor_agent:
|
|
return outer_analysis_agent
|
|
elif last_speaker is outer_analysis_agent:
|
|
return optimizer
|
|
else:
|
|
return user
|
|
|
|
matagent_group = autogen.GroupChat(
|
|
agents=[user, outer_generate_agent, outer_converter_agent, outer_executor_agent, outer_analysis_agent, optimizer],
|
|
messages=[],
|
|
speaker_selection_method=state_transition,
|
|
max_round=50,
|
|
)
|
|
|
|
matagent_admin_name = "Planer"
|
|
matagent_admin = autogen.GroupChatManager(
|
|
name=matagent_admin_name,
|
|
groupchat=matagent_group,
|
|
# is_termination_msg=lambda x: x.get("content", "").find("TERMINATE") >= 0,
|
|
llm_config=llm_config,
|
|
system_message=agent_configs[matagent_admin_name]['system_message'],
|
|
description=matagent_admin_name
|
|
)
|
|
|
|
outer_generate_agent.register_nested_chats(
|
|
[
|
|
{"recipient": inner_generate_admin, "max_turn": 1, "summary_method": "last_msg", "silent": SILENT},
|
|
],
|
|
trigger=matagent_admin,
|
|
)
|
|
|
|
outer_converter_agent.register_nested_chats(
|
|
[
|
|
{"recipient": inner_converter_admin, "max_turn": 1, "summary_method": "last_msg", "silent": SILENT},
|
|
],
|
|
trigger=matagent_admin,
|
|
)
|
|
|
|
outer_executor_agent.register_nested_chats(
|
|
[
|
|
{"recipient": inner_executor_admin, "max_turn": 1, "summary_method": "last_msg", "silent": SILENT},
|
|
],
|
|
trigger=matagent_admin,
|
|
)
|
|
|
|
outer_analysis_agent.register_nested_chats(
|
|
[
|
|
{"recipient": inner_analysis_admin, "max_turn": 1, "summary_method": "last_msg", "silent": SILENT},
|
|
],
|
|
trigger=matagent_admin,
|
|
)
|
|
|
|
|
|
user.initiate_chat(
|
|
matagent_admin,
|
|
# message="如何在常温条件下制备CsPbBr3纳米立方体",
|
|
message="how to synthesis of CsPbBr3 Perovskite NCs at room temperature?"
|
|
# message="how to synthesis CsPbBr3 nanocubes at room temperature?"
|
|
# message="什么是钙钛矿?"
|
|
# message="Please prepare few layers graphene from graphite powder.",
|
|
# message="Can you please prepare black phosphorusene with improved stability from black phosphorus crystals powder?",
|
|
# message="Can you synthesize gold nanorods by seed-mediated method with absorption peaks at 820 nm?",
|
|
# message="Please synthesize CsPbBr3 nanocubes with a fluorescence emission wavelength of 520 nm at room temperature?",
|
|
# message="Please design a new hybridized halide perovskite composite material that is biocompatible and water-stable",
|
|
# message="please use phospholipid membrane as shell to encapsulate hybrid perovskite"
|
|
# Now I want a novel bright perovskite composite based CH3NH3PbBr3 and phospholipid membrane(PM) to improve the stability and biocompatibility, please synthesis this materials under room temperature
|
|
)
|
|
print(outer_generate_agent.last_message(matagent_admin))
|
|
print(matagent_admin)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |