add browser memory to write code

This commit is contained in:
lidanyang 2024-07-09 16:57:36 +08:00
parent 5a83c4539a
commit 3d32a5d621
2 changed files with 14 additions and 3 deletions

View file

@ -16,6 +16,7 @@ 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
@ -41,6 +42,7 @@ class WriteAnalysisCode(Action):
tool_info: str = "",
working_memory: list[Message] = None,
use_reflection: bool = False,
browser_memory: list[dict] = None,
**kwargs,
) -> str:
structual_prompt = STRUCTUAL_PROMPT.format(
@ -48,16 +50,20 @@ class WriteAnalysisCode(Action):
plan_status=plan_status,
tool_info=tool_info,
)
message = [Message(content=structual_prompt, role="user")]
if browser_memory:
browser_prompt = BROWSER_INFO.format(browser_memory=browser_memory)
message = [Message(content=browser_prompt, role="user")] + message
working_memory = working_memory or []
context = self.llm.format_msg([Message(content=structual_prompt, role="user")] + working_memory)
context = self.llm.format_msg(message + working_memory)
# LLM call
if use_reflection:
code = await self._debug_with_reflection(context=context, working_memory=working_memory)
else:
rsp = await self.llm.aask(context, system_msgs=[INTERPRETER_SYSTEM_MSG], **kwargs)
code = CodeParser.parse_code(text=rsp)
code = CodeParser.parse_code(text=rsp, lang="python")
return code

View file

@ -49,6 +49,7 @@ class RoleZero(Role):
# Equipped with three basic tools by default for optional use
editor: Editor = Editor()
browser: Browser = Browser()
browser_memory: list[dict] = [] # store the memory of browser
# terminal: Terminal = Terminal() # FIXME: TypeError: cannot pickle '_thread.lock' object
# Experience
@ -151,7 +152,11 @@ class RoleZero(Role):
pattern = re.compile(r"Command Browser\.(\w+) executed")
for index, msg in zip(range(len(memory), 0, -1), memory[::-1]):
if pattern.match(msg.content):
memory.insert(index, UserMessage(cause_by="browser", content=await self.browser.view()))
content = await self.browser.view()
memory.insert(index, UserMessage(cause_by="browser", content=content))
browser_url = re.search('URL: (.*?)\\n', content).group(1)
browser_action = {'command': pattern.match(msg.content).group(1), 'current url': browser_url}
self.browser_memory.append(browser_action)
break
context = self.llm.format_msg(memory + [UserMessage(content=prompt)])
# print(*context, sep="\n" + "*" * 5 + "\n")