mirror of
https://github.com/FoundationAgents/MetaGPT.git
synced 2026-05-05 13:52:38 +02:00
refine code
This commit is contained in:
parent
df340cb330
commit
df29e16e2b
5 changed files with 23 additions and 27 deletions
|
|
@ -16,7 +16,6 @@ from metagpt.prompts.di.write_analysis_code import (
|
|||
REFLECTION_PROMPT,
|
||||
REFLECTION_SYSTEM_MSG,
|
||||
STRUCTUAL_PROMPT,
|
||||
BROWSER_INFO,
|
||||
)
|
||||
from metagpt.schema import Message, Plan
|
||||
from metagpt.utils.common import CodeParser, remove_comments
|
||||
|
|
@ -49,14 +48,9 @@ class WriteAnalysisCode(Action):
|
|||
plan_status=plan_status,
|
||||
tool_info=tool_info,
|
||||
)
|
||||
message = [Message(content=structual_prompt, role="user")]
|
||||
browser_actions = [msg for msg in working_memory if msg.cause_by == "browser"]
|
||||
if browser_actions:
|
||||
browser_prompt = BROWSER_INFO.format(browser_actions=browser_actions)
|
||||
message = [Message(content=browser_prompt, role="user")] + message
|
||||
|
||||
working_memory = [msg for msg in working_memory if msg.cause_by != "browser"] if use_reflection else []
|
||||
context = self.llm.format_msg(message + working_memory)
|
||||
working_memory = working_memory or []
|
||||
context = self.llm.format_msg([Message(content=structual_prompt, role="user")] + working_memory)
|
||||
|
||||
# LLM call
|
||||
if use_reflection:
|
||||
|
|
|
|||
|
|
@ -16,4 +16,11 @@ CODE_STATUS = """
|
|||
|
||||
**Execution status**: {status}
|
||||
**Execution result**: {result}
|
||||
"""
|
||||
"""
|
||||
|
||||
|
||||
BROWSER_INFO = """
|
||||
Here are ordered web actions in the browser environment, note that you can not use the browser tool in the current environment.
|
||||
{browser_actions}
|
||||
The latest url is the one you should use to view the page. If view page has been done, directly use the variable and html content in executing result.
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -119,9 +119,3 @@ DATA_INFO = """
|
|||
Latest data info after previous tasks:
|
||||
{info}
|
||||
"""
|
||||
|
||||
BROWSER_INFO = """
|
||||
Here are ordered web actions in the browser environment, note that you can not use the browser tool in the current environment.
|
||||
{browser_actions}
|
||||
The latest url is the one you should use to view the page. If view page has been done, directly use the variable and html content in executing result.
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import re
|
||||
from typing import List
|
||||
|
||||
from pydantic import Field, model_validator
|
||||
|
||||
from metagpt.actions.di.execute_nb_code import ExecuteNbCode
|
||||
from metagpt.actions.di.write_analysis_code import WriteAnalysisCode
|
||||
from metagpt.logs import logger
|
||||
from metagpt.prompts.di.data_analyst import BROWSER_INSTRUCTION, TASK_TYPE_DESC, CODE_STATUS
|
||||
from metagpt.prompts.di.data_analyst import BROWSER_INSTRUCTION, TASK_TYPE_DESC, CODE_STATUS, BROWSER_INFO
|
||||
from metagpt.prompts.di.role_zero import ROLE_INSTRUCTION
|
||||
from metagpt.roles.di.role_zero import RoleZero
|
||||
from metagpt.schema import TaskResult, Message
|
||||
|
|
@ -44,19 +44,20 @@ class DataAnalyst(RoleZero):
|
|||
"DataAnalyst.write_and_exec_code": self.write_and_exec_code,
|
||||
})
|
||||
|
||||
async def parse_browser_actions(self):
|
||||
memory = await super().parse_browser_actions()
|
||||
async def parse_browser_actions(self, memory: List[Message]) -> List[Message]:
|
||||
memory = await super().parse_browser_actions(memory)
|
||||
browser_actions = []
|
||||
for index, msg in enumerate(memory):
|
||||
if msg.cause_by == "browser":
|
||||
browser_url = re.search('URL: (.*?)\\n', msg.content).group(1)
|
||||
pattern = re.compile(r"Command Browser\.(\w+) executed")
|
||||
browser_action = {
|
||||
browser_actions.append({
|
||||
'command': pattern.match(memory[index - 1].content).group(1),
|
||||
'current url': browser_url
|
||||
}
|
||||
self.rc.working_memory.add(
|
||||
Message(content=json.dumps(browser_action), role="user", cause_by="browser")
|
||||
)
|
||||
})
|
||||
if browser_actions:
|
||||
browser_actions = BROWSER_INFO.format(browser_actions=browser_actions)
|
||||
self.rc.working_memory.add(Message(content=browser_actions, role="user", cause_by="browser"))
|
||||
return memory
|
||||
|
||||
async def write_and_exec_code(self):
|
||||
|
|
|
|||
|
|
@ -150,7 +150,8 @@ class RoleZero(Role):
|
|||
instruction=self.instruction.strip(),
|
||||
task_type_desc=self.task_type_desc,
|
||||
)
|
||||
memory = await self.parse_browser_actions()
|
||||
memory = self.rc.memory.get(self.memory_k)
|
||||
memory = await self.parse_browser_actions(memory)
|
||||
context = self.llm.format_msg(memory + [UserMessage(content=prompt)])
|
||||
# print(*context, sep="\n" + "*" * 5 + "\n")
|
||||
async with ThoughtReporter(enable_llm_stream=True):
|
||||
|
|
@ -159,8 +160,7 @@ class RoleZero(Role):
|
|||
|
||||
return True
|
||||
|
||||
async def parse_browser_actions(self):
|
||||
memory = self.rc.memory.get(self.memory_k)
|
||||
async def parse_browser_actions(self, memory: List[Message]) -> List[Message]:
|
||||
if not self.browser.is_empty_page:
|
||||
pattern = re.compile(r"Command Browser\.(\w+) executed")
|
||||
for index, msg in zip(range(len(memory), 0, -1), memory[::-1]):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue