feat(agent):support chat agent scene use dbgpts (#1075)

This commit is contained in:
明天
2024-01-16 20:15:54 +08:00
committed by GitHub
parent fb2d18a2d5
commit 74eb15e01c
82 changed files with 1081 additions and 637 deletions

View File

@@ -32,9 +32,9 @@ class AgentOperator(
async def map(self, input_value: AgentGenerateContext) -> AgentGenerateContext:
now_rely_messages: List[Dict] = []
input_value.message["current_gogal"] = (
self._agent.name + ":" + input_value.message["current_gogal"]
)
# input_value.message["current_gogal"] = (
# self._agent.name + ":" + input_value.message["current_gogal"]
# )
###What was received was the User message
human_message = input_value.message.copy()
human_message["role"] = ModelMessageRoleType.HUMAN
@@ -48,17 +48,39 @@ class AgentOperator(
now_message, self._agent, input_value.reviewer, False
)
verify_paas, reply_message = await self._agent.a_generate_reply(
message=input_value.message,
sender=input_value.sender,
reviewer=input_value.reviewer,
silent=input_value.silent,
rely_messages=input_value.rely_messages,
)
### Retry on failure
current_message = input_value.message
final_sucess = False
final_message = None
while self.agent.current_retry_counter < self.agent.max_retry_count:
verify_paas, reply_message = await self._agent.a_generate_reply(
message=current_message,
sender=input_value.sender,
reviewer=input_value.reviewer,
silent=input_value.silent,
rely_messages=input_value.rely_messages,
)
final_message = reply_message
if verify_paas:
final_sucess = True
break
else:
# retry
current_message = {
"content": reply_message["content"],
"current_gogal": input_value.message.get("current_gogal", None),
}
await input_value.sender.a_send(
current_message, self.agent, input_value.reviewer, False
)
self.agent.current_retry_counter += 1
if not final_sucess:
raise ValueError(
f"After trying {self.agent.current_retry_counter} times, I still can't generate a valid answer. The current problem is:{final_message['content']}!"
)
###What is sent is an AI message
ai_message = reply_message
ai_message = final_message
ai_message["role"] = ModelMessageRoleType.AI
now_rely_messages.append(ai_message)

View File

@@ -3,7 +3,7 @@ import sys
from typing import Any, Optional
from dbgpt.agent.agents.agent import Agent, AgentContext, AgentGenerateContext
from dbgpt.agent.agents.base_team import MangerAgent
from dbgpt.agent.agents.base_team import ManagerAgent
from dbgpt.agent.memory.gpts_memory import GptsMemory
from dbgpt.core.awel import DAG
from dbgpt.serve.agent.team.layout.agent_operator import AgentOperator
@@ -11,7 +11,7 @@ from dbgpt.serve.agent.team.layout.agent_operator import AgentOperator
logger = logging.getLogger(__name__)
class AwelLayoutChatManger(MangerAgent):
class AwelLayoutChatManager(ManagerAgent):
NAME = "layout_manager"
def __init__(
@@ -36,7 +36,7 @@ class AwelLayoutChatManger(MangerAgent):
# Allow async chat if initiated using a_initiate_chat
self.register_reply(
Agent,
AwelLayoutChatManger.a_run_chat,
AwelLayoutChatManager.a_run_chat,
)
async def a_run_chat(
@@ -84,6 +84,6 @@ class AwelLayoutChatManger(MangerAgent):
except Exception as e:
logger.exception("DAG run failed!")
return True, {
"content": f"AWEL task process [{dag.dag_id}] execution exception! {str(e)}",
"content": f"Failed to complete goal! {str(e)}",
"is_exe_success": False,
}

View File

@@ -82,7 +82,6 @@ class PlannerAgent(ConversableAgent):
memory: GptsMemory,
agent_context: AgentContext,
agents: Optional[List[Agent]] = None,
is_termination_msg: Optional[Callable[[Dict], bool]] = None,
max_consecutive_auto_reply: Optional[int] = None,
human_input_mode: Optional[str] = "NEVER",
**kwargs,
@@ -91,7 +90,6 @@ class PlannerAgent(ConversableAgent):
name=self.NAME,
memory=memory,
system_message=self.DEFAULT_SYSTEM_MESSAGE,
is_termination_msg=is_termination_msg,
max_consecutive_auto_reply=max_consecutive_auto_reply,
human_input_mode=human_input_mode,
agent_context=agent_context,
@@ -130,6 +128,20 @@ class PlannerAgent(ConversableAgent):
params = self.build_param(self.agent_context)
self.update_system_message(self.DEFAULT_SYSTEM_MESSAGE.format(**params))
async def a_generate_reply(
self,
message: Optional[Dict],
sender: Agent,
reviewer: Agent,
silent: Optional[bool] = False,
rely_messages: Optional[List[Dict]] = None,
):
final, reply_message = await super().a_generate_reply(
message, sender, reviewer, silent, rely_messages
)
reply_message["is_termination"] = True
return final, reply_message
async def _a_planning(
self,
message: Optional[str] = None,

View File

@@ -3,9 +3,9 @@ import sys
from typing import Any, List, Optional
from dbgpt.agent.agents.agent import Agent, AgentContext
from dbgpt.agent.agents.agents_mange import mentioned_agents, participant_roles
from dbgpt.agent.agents.agents_manage import mentioned_agents, participant_roles
from dbgpt.agent.agents.base_agent import ConversableAgent
from dbgpt.agent.agents.base_team import MangerAgent
from dbgpt.agent.agents.base_team import ManagerAgent
from dbgpt.agent.common.schema import Status
from dbgpt.agent.memory.base import GptsPlan
from dbgpt.agent.memory.gpts_memory import GptsMemory
@@ -16,7 +16,7 @@ from .planner_agent import PlannerAgent
logger = logging.getLogger(__name__)
class AutoPlanChatManager(MangerAgent):
class AutoPlanChatManager(ManagerAgent):
"""(In preview) A chat manager agent that can manage a team chat of multiple agents."""
NAME = "plan_manager"
@@ -134,7 +134,6 @@ class AutoPlanChatManager(MangerAgent):
agent_context=self.agent_context,
memory=self.memory,
agents=agents,
is_terminal_agent=True,
)
await self.a_initiate_chat(
@@ -151,10 +150,16 @@ class AutoPlanChatManager(MangerAgent):
"""Run a team chat asynchronously."""
speaker = sender
last_message = None
for i in range(self.max_round):
plans = self.memory.plans_memory.get_by_conv_id(self.agent_context.conv_id)
if not plans or len(plans) <= 0:
if i > 3:
error_report = {
"content": f"Retrying 3 times based on current application resources still fails to build a valid plan",
"is_exe_success": False,
}
return True, error_report
###Have no plan, generate a new plan
await self.a_generate_speech_process(message, reviewer, self.agents)
else:
@@ -166,8 +171,11 @@ class AutoPlanChatManager(MangerAgent):
if not todo_plans or len(todo_plans) <= 0:
### The plan has been fully executed and a success message is sent to the user.
# complete
complete_message = {"content": f"TERMINATE", "is_exe_success": True}
return True, complete_message
print(f"fDEBUG:[{last_message}]")
return (
True,
last_message.get("action_report") if last_message else None,
)
else:
now_plan: GptsPlan = todo_plans[0]
@@ -221,10 +229,10 @@ class AutoPlanChatManager(MangerAgent):
now_plan=now_plan,
speaker=speaker,
)
current_goal_message["content"] = (
rely_prompt + current_goal_message["content"]
)
if rely_prompt:
current_goal_message["content"] = (
rely_prompt + current_goal_message["content"]
)
is_recovery = False
if message == current_goal_message["content"]:
@@ -240,6 +248,8 @@ class AutoPlanChatManager(MangerAgent):
current_goal_message, self, reviewer
)
last_message = reply
print(f"DEBUG2:[{last_message}]")
plan_result = ""
if verify_pass: