update write task guide, add code plan

This commit is contained in:
wubinhao 2023-12-05 17:57:56 +08:00
parent 20a918bf39
commit 4304dd28ca
3 changed files with 92 additions and 12 deletions

View file

@ -12,6 +12,7 @@ from metagpt.logs import logger
from metagpt.actions.write_plan import WritePlan
from metagpt.actions.write_analysis_code import WriteCodeByGenerate, WriteCodeWithTools
from metagpt.actions.execute_code import ExecutePyCode
from metagpt.actions.write_task_guide import WriteTaskGuide
STRUCTURAL_CONTEXT = """
## User Requirement
@ -66,11 +67,6 @@ class AskReview(Action):
return rsp, confirmed
class WriteTaskGuide(Action):
async def run(self, task_instruction: str, data_desc: str = "") -> str:
return ""
class MLEngineer(Role):
def __init__(
self, name="ABC", profile="MLEngineer", goal="", auto_run: bool = False
@ -79,7 +75,7 @@ class MLEngineer(Role):
self._set_react_mode(react_mode="plan_and_act")
self.plan = Plan(goal=goal)
self.use_tools = False
self.use_task_guide = False
self.use_task_guide = True
self.execute_code = ExecutePyCode()
self.auto_run = auto_run
@ -92,7 +88,7 @@ class MLEngineer(Role):
logger.info(f"ready to take on task {task}")
# take on current task
code, result, success = await self._write_and_exec_code()
code, result, success, task_guide = await self._write_and_exec_code()
# ask for acceptance, users can other refuse and change tasks in the plan
task_result_confirmed = await self._ask_review()
@ -101,6 +97,7 @@ class MLEngineer(Role):
# tick off this task and record progress
task.code = code
task.result = result
task.task_guide = task_guide
self.plan.finish_current_task()
self.working_memory.clear()
@ -110,7 +107,7 @@ class MLEngineer(Role):
async def _write_and_exec_code(self, max_retry: int = 3):
task_guide = (
await WriteTaskGuide().run(self.plan.current_task.instruction)
await WriteTaskGuide().run(self.plan)
if self.use_task_guide
else ""
)
@ -156,7 +153,7 @@ class MLEngineer(Role):
counter += 1
return code, result, success
return code, result, success, task_guide
async def _ask_review(self):
if not self.auto_run:
@ -185,7 +182,7 @@ class MLEngineer(Role):
def get_useful_memories(self) -> List[Message]:
"""find useful memories only to reduce context length and improve performance"""
# TODO dataset description , code steps
user_requirement = self.plan.goal
tasks = json.dumps(
[task.dict() for task in self.plan.tasks], indent=4, ensure_ascii=False
@ -204,9 +201,9 @@ class MLEngineer(Role):
if __name__ == "__main__":
requirement = "Run data analysis on sklearn Iris dataset, include a plot"
# requirement = "Run data analysis on sklearn Iris dataset, include a plot"
# requirement = "Run data analysis on sklearn Diabetes dataset, include a plot"
# requirement = "Run data analysis on sklearn Wine recognition dataset, include a plot, and train a model to predict wine class (20% as validation), and show validation accuracy"
requirement = "Run data analysis on sklearn Wine recognition dataset, include a plot, and train a model to predict wine class (20% as validation), and show validation accuracy"
# requirement = "Run data analysis on sklearn Wisconsin Breast Cancer dataset, include a plot, train a model to predict targets (20% as validation), and show validation accuracy"
# requirement = "Run EDA and visualization on this dataset, train a model to predict survival, report metrics on validation set (20%), dataset: workspace/titanic/train.csv"