mirror of
https://github.com/FoundationAgents/MetaGPT.git
synced 2026-05-01 20:03:28 +02:00
tool management at one place, add aask_code mock, azure mock
This commit is contained in:
parent
9e0b9745be
commit
e99c5f29f4
9 changed files with 167 additions and 74 deletions
|
|
@ -20,14 +20,16 @@ from metagpt.prompts.ml_engineer import (
|
|||
GENERATE_CODE_PROMPT,
|
||||
ML_TOOL_USAGE_PROMPT,
|
||||
SELECT_FUNCTION_TOOLS,
|
||||
TASK_MODULE_MAP,
|
||||
TASK_SPECIFIC_PROMPT,
|
||||
TOOL_RECOMMENDATION_PROMPT,
|
||||
TOOL_USAGE_PROMPT,
|
||||
)
|
||||
from metagpt.schema import Message, Plan
|
||||
from metagpt.tools import TOOL_TYPE_MAPPINGS
|
||||
from metagpt.utils.common import create_func_config, remove_comments
|
||||
|
||||
TOOL_TYPE_MODULE = {k: v.module for k, v in TOOL_TYPE_MAPPINGS.items()}
|
||||
TOOL_TYPE_USAGE_PROMPT = {k: v.usage_prompt for k, v in TOOL_TYPE_MAPPINGS.items()}
|
||||
|
||||
|
||||
class BaseWriteAnalysisCode(Action):
|
||||
DEFAULT_SYSTEM_MSG: str = """You are Code Interpreter, a world-class programmer that can complete any goal by executing code. Strictly follow the plan and generate code step by step. Each step of the code will be executed on the user's machine, and the user will provide the code execution results to you.**Notice: The code for the next step depends on the code for the previous step. Must reuse variables in the lastest other code directly, dont creat it again, it is very import for you. Use !pip install in a standalone block to install missing packages.Usually the libraries you need are already installed.Dont check if packages already imported.**""" # prompt reference: https://github.com/KillianLucas/open-interpreter/blob/v0.1.4/interpreter/system_message.txt
|
||||
|
|
@ -171,9 +173,11 @@ class WriteCodeWithTools(BaseWriteAnalysisCode):
|
|||
plan: Plan = None,
|
||||
**kwargs,
|
||||
) -> str:
|
||||
task_type = plan.current_task.task_type
|
||||
available_tools = self.available_tools.get(task_type, {})
|
||||
special_prompt = TASK_SPECIFIC_PROMPT.get(task_type, "")
|
||||
tool_type = (
|
||||
plan.current_task.task_type
|
||||
) # find tool type from task type through exact match, can extend to retrieval in the future
|
||||
available_tools = self.available_tools.get(tool_type, {})
|
||||
special_prompt = TOOL_TYPE_USAGE_PROMPT.get(tool_type, "")
|
||||
code_steps = plan.current_task.code_steps
|
||||
|
||||
finished_tasks = plan.get_finished_tasks()
|
||||
|
|
@ -189,10 +193,10 @@ class WriteCodeWithTools(BaseWriteAnalysisCode):
|
|||
recommend_tools = await self._tool_recommendation(
|
||||
plan.current_task.instruction, code_steps, available_tools
|
||||
)
|
||||
tool_catalog = self._parse_recommend_tools(task_type, recommend_tools)
|
||||
tool_catalog = self._parse_recommend_tools(tool_type, recommend_tools)
|
||||
logger.info(f"Recommended tools: \n{recommend_tools}")
|
||||
|
||||
module_name = TASK_MODULE_MAP[task_type]
|
||||
module_name = TOOL_TYPE_MODULE[tool_type]
|
||||
|
||||
tools_instruction = TOOL_USAGE_PROMPT.format(
|
||||
special_prompt=special_prompt, module_name=module_name, tool_catalog=tool_catalog
|
||||
|
|
@ -215,9 +219,9 @@ class WriteCodeWithToolsML(WriteCodeWithTools):
|
|||
column_info: str = "",
|
||||
**kwargs,
|
||||
) -> Tuple[List[Message], str]:
|
||||
task_type = plan.current_task.task_type
|
||||
available_tools = self.available_tools.get(task_type, {})
|
||||
special_prompt = TASK_SPECIFIC_PROMPT.get(task_type, "")
|
||||
tool_type = plan.current_task.task_type
|
||||
available_tools = self.available_tools.get(tool_type, {})
|
||||
special_prompt = TOOL_TYPE_USAGE_PROMPT.get(tool_type, "")
|
||||
code_steps = plan.current_task.code_steps
|
||||
|
||||
finished_tasks = plan.get_finished_tasks()
|
||||
|
|
@ -230,10 +234,10 @@ class WriteCodeWithToolsML(WriteCodeWithTools):
|
|||
recommend_tools = await self._tool_recommendation(
|
||||
plan.current_task.instruction, code_steps, available_tools
|
||||
)
|
||||
tool_catalog = self._parse_recommend_tools(task_type, recommend_tools)
|
||||
tool_catalog = self._parse_recommend_tools(tool_type, recommend_tools)
|
||||
logger.info(f"Recommended tools: \n{recommend_tools}")
|
||||
|
||||
module_name = TASK_MODULE_MAP[task_type]
|
||||
module_name = TOOL_TYPE_MODULE[tool_type]
|
||||
|
||||
prompt = ML_TOOL_USAGE_PROMPT.format(
|
||||
user_requirement=plan.goal,
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ from metagpt.actions import Action
|
|||
from metagpt.logs import logger
|
||||
from metagpt.prompts.ml_engineer import ASSIGN_TASK_TYPE_CONFIG, ASSIGN_TASK_TYPE_PROMPT
|
||||
from metagpt.schema import Message, Plan, Task
|
||||
from metagpt.tools import TOOL_TYPE_MAPPINGS
|
||||
from metagpt.utils.common import CodeParser, create_func_config
|
||||
|
||||
|
||||
|
|
@ -46,7 +47,10 @@ class WritePlan(Action):
|
|||
List[Dict]: tasks with task type assigned
|
||||
"""
|
||||
task_list = "\n".join([f"Task {task['task_id']}: {task['instruction']}" for task in tasks])
|
||||
prompt = ASSIGN_TASK_TYPE_PROMPT.format(task_list=task_list)
|
||||
task_type_desc = "\n".join([f"- **{item.name}**: {item.desc}" for item in TOOL_TYPE_MAPPINGS.values()])
|
||||
prompt = ASSIGN_TASK_TYPE_PROMPT.format(
|
||||
task_list=task_list, task_type_desc=task_type_desc
|
||||
) # task types are set to be the same as tool types, for now
|
||||
tool_config = create_func_config(ASSIGN_TASK_TYPE_CONFIG)
|
||||
rsp = await self.llm.aask_code(prompt, **tool_config)
|
||||
task_type_list = rsp["task_type"]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue