From 0fd578cf87b390060dd32b2fab3336433987e12a Mon Sep 17 00:00:00 2001 From: Cooper <42096311+FOkvj@users.noreply.github.com> Date: Mon, 7 Apr 2025 13:04:55 +0800 Subject: [PATCH] fix(agents): fix ReActAgent (#2588) --- examples/agents/react_agent_example.py | 9 ++++++--- packages/dbgpt-core/src/dbgpt/agent/core/base_agent.py | 7 ++++--- packages/dbgpt-core/src/dbgpt/agent/core/role.py | 1 + .../dbgpt-core/src/dbgpt/agent/expand/react_agent.py | 9 +++++---- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/examples/agents/react_agent_example.py b/examples/agents/react_agent_example.py index 9aaf0ff23..3062ce238 100644 --- a/examples/agents/react_agent_example.py +++ b/examples/agents/react_agent_example.py @@ -81,9 +81,12 @@ async def main(): await user_proxy.initiate_chat( recipient=tool_engineer, reviewer=user_proxy, - message="Calculate the product of 10 and 99, then count the number of files in /tmp", - # message="Calculate the product of 10 and 99", - # message="Count the number of files in /tmp", + message="Calculate the product of 10 and 99", + ) + await user_proxy.initiate_chat( + recipient=tool_engineer, + reviewer=user_proxy, + message="Count the number of files in /tmp", ) # dbgpt-vis message infos diff --git a/packages/dbgpt-core/src/dbgpt/agent/core/base_agent.py b/packages/dbgpt-core/src/dbgpt/agent/core/base_agent.py index cafa6315f..be5e9a9c0 100644 --- a/packages/dbgpt-core/src/dbgpt/agent/core/base_agent.py +++ b/packages/dbgpt-core/src/dbgpt/agent/core/base_agent.py @@ -364,9 +364,8 @@ class ConversableAgent(Role, Agent): fail_reason = None current_retry_counter = 0 is_success = True - done = False observation = received_message.content or "" - while not done and current_retry_counter < self.max_retry_count: + while current_retry_counter < self.max_retry_count: if current_retry_counter > 0: a_reply_message: Optional[ AgentMessage @@ -500,6 +499,7 @@ class ConversableAgent(Role, Agent): action_output=act_out, check_pass=check_pass, check_fail_reason=fail_reason, + current_retry_counter=current_retry_counter, ) else: # Successful reply @@ -509,6 +509,7 @@ class ConversableAgent(Role, Agent): ai_message=ai_message, action_output=act_out, check_pass=check_pass, + current_retry_counter=current_retry_counter, ) if self.run_mode != AgentRunMode.LOOP or act_out.terminate: logger.debug(f"Agent {self.name} reply success!{reply_message}") @@ -1127,7 +1128,7 @@ class ConversableAgent(Role, Agent): **context, ) if not user_prompt: - user_prompt = "Observation: " + user_prompt = f"Observation: {observation}" agent_messages = [] if system_prompt: diff --git a/packages/dbgpt-core/src/dbgpt/agent/core/role.py b/packages/dbgpt-core/src/dbgpt/agent/core/role.py index 74c0fa56e..6aa9fa3df 100644 --- a/packages/dbgpt-core/src/dbgpt/agent/core/role.py +++ b/packages/dbgpt-core/src/dbgpt/agent/core/role.py @@ -226,6 +226,7 @@ class Role(ABC, BaseModel): action_output: Optional[ActionOutput] = None, check_pass: bool = True, check_fail_reason: Optional[str] = None, + current_retry_counter: Optional[int] = None, ) -> AgentMemoryFragment: """Write the memories to the memory. diff --git a/packages/dbgpt-core/src/dbgpt/agent/expand/react_agent.py b/packages/dbgpt-core/src/dbgpt/agent/expand/react_agent.py index 1135a4694..e58c01b14 100644 --- a/packages/dbgpt-core/src/dbgpt/agent/expand/react_agent.py +++ b/packages/dbgpt-core/src/dbgpt/agent/expand/react_agent.py @@ -68,14 +68,11 @@ _REACT_USER_TEMPLATE = """\ Most recent message: {{ most_recent_memories }} {% endif %}\ - -{% if question %}\ -Question: {{ question }} -{% endif %} """ _REACT_WRITE_MEMORY_TEMPLATE = """\ +{% if question %}Question: {{ question }} {% endif %} {% if thought %}Thought: {{ thought }} {% endif %} {% if action %}Action: {{ action }} {% endif %} {% if action_input %}Action Input: {{ action_input }} {% endif %} @@ -253,6 +250,7 @@ class ReActAgent(ConversableAgent): action_output: Optional[ActionOutput] = None, check_pass: bool = True, check_fail_reason: Optional[str] = None, + current_retry_counter: Optional[int] = None, ) -> AgentMemoryFragment: """Write the memories to the memory. @@ -285,6 +283,9 @@ class ReActAgent(ConversableAgent): if action_input: memory_map["action_input"] = action_input + if current_retry_counter is not None and current_retry_counter == 0: + memory_map["question"] = question + write_memory_template = self.write_memory_template memory_content = self._render_template(write_memory_template, **memory_map) fragment = AgentMemoryFragment(memory_content)