mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-09-24 19:08:15 +00:00
feat(agent):support chat agent scene use dbgpts (#1075)
This commit is contained in:
@@ -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)
|
||||
|
||||
|
@@ -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,
|
||||
}
|
||||
|
@@ -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,
|
||||
|
@@ -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:
|
||||
|
Reference in New Issue
Block a user