Merge branch 'da_change' into 'mgx_ops'

Editor constraints & add role info

See merge request pub/MetaGPT!316
This commit is contained in:
林义章 2024-08-15 09:05:54 +00:00
commit bd63a7c665
4 changed files with 19 additions and 10 deletions

View file

@ -8,8 +8,8 @@ EXTRA_INSTRUCTION = """
- For information searching requirement, you should use the Browser tool instead of web scraping.
- When no link is provided, you should use the Browser tool to search for the information.
7. When you are making plan. It is highly recommend to plan and append all the tasks in first response once time, except for 7.1.
7.1. When the requirement is given with a file, read the file first through either Editor.read (write code instead for excel) WITHOUT a plan. After reading the file content, use RoleZero.reply_to_human if the requirement can be answered straightaway, otherwise, make a plan if further calculation is needed.
8. Don't finish_current_task multiple times for the same task.
7.1. When the requirement is given with a file, read the file first through either Editor.read (write code instead for csv or excel) WITHOUT a plan. After reading the file content, use RoleZero.reply_to_human if the requirement can be answered straightaway, otherwise, make a plan if further calculation is needed.
8. Don't finish_current_task multiple times for the same task.
9. Finish current task timely, such as when the code is written and executed successfully.
10. When using the command 'end', add the command 'finish_current_task' before it.
"""

View file

@ -22,6 +22,8 @@ Note:
###########################
SYSTEM_PROMPT = """
# Basic Info
{role_info}
# Data Structure
class Task(BaseModel):
@ -206,4 +208,4 @@ Response Category: AMBIGUOUS.
QUICK_RESPONSE_SYSTEM_PROMPT = """
{role_info}
However, you MUST respond to the user message by yourself directly, DON'T ask your team members.
"""
"""

View file

@ -21,10 +21,10 @@ from metagpt.prompts.di.role_zero import (
ASK_HUMAN_COMMAND,
CMD_PROMPT,
JSON_REPAIR_PROMPT,
QUICK_THINK_PROMPT,
QUICK_THINK_EXAMPLES,
QUICK_THINK_SYSTEM_PROMPT,
QUICK_RESPONSE_SYSTEM_PROMPT,
QUICK_THINK_EXAMPLES,
QUICK_THINK_PROMPT,
QUICK_THINK_SYSTEM_PROMPT,
REGENERATE_PROMPT,
ROLE_INSTRUCTION,
SYSTEM_PROMPT,
@ -166,7 +166,11 @@ class RoleZero(Role):
### Role Instruction ###
instruction = self.instruction.strip()
system_prompt = self.system_prompt.format(
task_type_desc=self.task_type_desc, available_commands=tool_info, example=example, instruction=instruction
role_info=self._get_prefix(),
task_type_desc=self.task_type_desc,
available_commands=tool_info,
example=example,
instruction=instruction,
)
### Make Decision Dynamically ###
@ -269,7 +273,7 @@ class RoleZero(Role):
rsp = await self._act()
actions_taken += 1
return rsp # return output from the last action
def format_quick_system_prompt(self) -> str:
"""Format the system prompt for quick thinking."""
return QUICK_THINK_SYSTEM_PROMPT.format(examples=QUICK_THINK_EXAMPLES, role_info=self._get_prefix())
@ -289,7 +293,10 @@ class RoleZero(Role):
if "QUICK" in intent_result or "AMBIGUOUS" in intent_result: # llm call with the original context
async with ThoughtReporter(enable_llm_stream=True) as reporter:
await reporter.async_report({"type": "quick"})
answer = await self.llm.aask(self.llm.format_msg(memory), system_msgs=[QUICK_RESPONSE_SYSTEM_PROMPT.format(role_info=self._get_prefix())])
answer = await self.llm.aask(
self.llm.format_msg(memory),
system_msgs=[QUICK_RESPONSE_SYSTEM_PROMPT.format(role_info=self._get_prefix())],
)
elif "SEARCH" in intent_result:
query = "\n".join(str(msg) for msg in memory)
answer = await SearchEnhancedQA().run(query)

View file

@ -26,7 +26,7 @@ class FileBlock(BaseModel):
class Editor(BaseModel):
"""
A tool for reading, understanding, writing, and editing files.
Support local file including text-based files (txt, md, json, py, html, js, css, etc.), pdf, docx, excluding images, excel, or online links
Support local file including text-based files (txt, md, json, py, html, js, css, etc.), pdf, docx, excluding images, csv, excel, or online links
"""
model_config = ConfigDict(arbitrary_types_allowed=True)