From 5911d3ce70a61a173a88d95b9bd3d303b5206095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8E=98=E6=9D=83=20=E9=A9=AC?= Date: Sun, 16 Jun 2024 14:32:16 +0800 Subject: [PATCH] feat: +software tools --- metagpt/roles/architect.py | 7 +------ metagpt/strategy/experience_retriever.py | 19 +++++-------------- metagpt/tools/libs/software_development.py | 9 +++++---- 3 files changed, 11 insertions(+), 24 deletions(-) diff --git a/metagpt/roles/architect.py b/metagpt/roles/architect.py index 786368d8a..cdedb8f73 100644 --- a/metagpt/roles/architect.py +++ b/metagpt/roles/architect.py @@ -18,11 +18,7 @@ from metagpt.actions.requirement_analysis.trd import ( WriteTRD, ) from metagpt.roles.di.role_zero import RoleZero -from metagpt.tools.libs.software_development import ( - extract_external_interfaces, - write_framework, - write_trd, -) +from metagpt.tools.libs.software_development import write_framework, write_trd from metagpt.utils.common import tool2name @@ -62,7 +58,6 @@ class Architect(RoleZero): "Editor:write,read,write_content", "RoleZero", "WriteDesign", - extract_external_interfaces.__name__, write_trd.__name__, write_framework.__name__, ] diff --git a/metagpt/strategy/experience_retriever.py b/metagpt/strategy/experience_retriever.py index 956525cf9..32fde7be6 100644 --- a/metagpt/strategy/experience_retriever.py +++ b/metagpt/strategy/experience_retriever.py @@ -28,34 +28,25 @@ class TRDToolExpRetriever(ExpRetriever): EXAMPLE: str = """ ## example 1 User Requirement: Given some user requirements, write a TRD, and implement the TRD within a software framework. - Explanation: Given a complete user requirement, to write the TRD (Technical Requirements Document), follow these steps: 1. Call `extract_external_interfaces` to extract information about external interfaces from the acknowledgment; 2. Call `write_trd` to generate the TRD; 3. Call `write_framework` to generate the software framework code. + Explanation: Given a complete user requirement, to write the TRD (Technical Requirements Document), follow these steps: 1. Call `write_trd` to generate the TRD; 2. Call `write_framework` to generate the software framework code based on the TRD. ```json [ { - "command_name": "extract_external_interfaces", + "command_name": "write_trd", "args": { "task_id": "1", "dependent_task_ids": [], - "instruction": "Execute `extract_external_interfaces` to extract external interfaces information from acknowledgement.", - "acknowledge": "## Interfaces\n balabala..." - } - }, - { - "command_name": "write_trd", - "args": { - "task_id": "2", - "dependent_task_ids": ["1"], "instruction": "Execute `write_trd` to write the TRD based on user requirements", "user_requirements": "This is user requirement balabala...", "use_case_actors": "These are actors involved in the use case, balabala...", - "external_interfaces": " returned by `extract_external_interfaces`", + "acknowledge": "## Interfaces\n balabala...", } }, { "command_name": "write_framework", "args": { - "task_id": "3", - "dependent_task_ids": ["2"], + "task_id": "2", + "dependent_task_ids": ["1"], "instruction": "Execute `write_framework` to write the framework based on the TRD", "use_case_actors": "These are actors involved in the use case, balabala...", "trd": " returned by `write_trd`", diff --git a/metagpt/tools/libs/software_development.py b/metagpt/tools/libs/software_development.py index 331e7cf12..109400dcb 100644 --- a/metagpt/tools/libs/software_development.py +++ b/metagpt/tools/libs/software_development.py @@ -59,7 +59,6 @@ async def import_git_repo(url: str) -> Path: return ctx.repo.workdir -@register_tool(tags=["system design", "Extracts and compresses the information about external system interfaces"]) async def extract_external_interfaces(acknowledge: str) -> str: """ Extracts and compresses information about external system interfaces from a given acknowledgement text. @@ -84,7 +83,7 @@ async def extract_external_interfaces(acknowledge: str) -> str: async def write_trd( use_case_actors: str, user_requirements: str, - external_interfaces: str, + acknowledge: str, investment: float = 10, context: Optional[Context] = None, ) -> (str, str): @@ -94,7 +93,7 @@ async def write_trd( Args: user_requirements (str): The new/incremental user requirements. use_case_actors (str): Description of the actors involved in the use case. - external_interfaces (str): List of available external interfaces. + acknowledge (str): A natural text of acknowledgement containing details about external system interfaces. investment (float): Budget. Automatically stops optimizing TRD when the budget is overdrawn. context (Context, optional): The context configuration. Default is None. Returns: @@ -104,7 +103,7 @@ async def write_trd( >>> # Given a new user requirements, write out a new TRD. >>> user_requirements = "Write a 'snake game' TRD." >>> use_case_actors = "- Actor: game player;\\n- System: snake game; \\n- External System: game center;" - >>> external_interfaces = "The available external interfaces returned by `CompressExternalInterfaces.run` are ..." + >>> acknowledge = "## Interfaces\\n..." >>> investment = 10.0 >>> trd = await write_trd( >>> user_requirements=user_requirements, @@ -116,6 +115,8 @@ async def write_trd( ## Technical Requirements Document\n ... """ context = context or Context(cost_manager=CostManager(max_budget=investment)) + compress_acknowledge = CompressExternalInterfaces() + external_interfaces = await compress_acknowledge.run(acknowledge=acknowledge) detect_interaction = DetectInteraction(context=context) w_trd = WriteTRD(context=context) evaluate_trd = EvaluateTRD(context=context)