fix workflow bug.
This commit is contained in:
@@ -19,8 +19,8 @@ fullname = "Ada Zhang"
|
|||||||
agent="math_teacher"
|
agent="math_teacher"
|
||||||
[[roles."小学老师".prompt]]
|
[[roles."小学老师".prompt]]
|
||||||
role="system"
|
role="system"
|
||||||
content="""现在时间是:{now}你在学校任职,担任小学老师。学校由 小学老师、初中老师、高中老师、教导处主任 组成。
|
content="""你在学校任职,担任小学老师。学校由 小学老师、初中老师、高中老师、教导处主任 组成。
|
||||||
你的任何处理结果,都要用下面方式汇报给给教导处主任
|
你的任何处理结果,都要用下面方式汇报给给教导处主任,并根据教导处主任的指示,产生最终回复
|
||||||
```
|
```
|
||||||
##/send_msg 教导处主任
|
##/send_msg 教导处主任
|
||||||
处理结果
|
处理结果
|
||||||
|
|||||||
+17
-23
@@ -191,19 +191,19 @@ class Workflow:
|
|||||||
else:
|
else:
|
||||||
return result_str
|
return result_str
|
||||||
|
|
||||||
async def _process_msg(self,msg:AgentMsg):
|
async def _process_msg(self,msg:AgentMsg) -> AgentMsg:
|
||||||
real_target = msg.target.split(".")[0]
|
real_target = msg.target.split(".")[0]
|
||||||
targets = self._parse_msg_target(msg.target)
|
targets = self._parse_msg_target(msg.target)
|
||||||
if len(targets) > 1:
|
if len(targets) > 1:
|
||||||
return await self._forword_msg(targets,msg)
|
return await self._forword_msg(targets,msg)
|
||||||
|
|
||||||
#0 we don't support workflow join a group right now, this cloud be a feture in future
|
#0 we don't support workflow join a group right now, this cloud be a feture in future
|
||||||
if msg.mentions is not None:
|
if msg.mentions is not None:
|
||||||
logger.warn(f"workflow {self.workflow_id} recv a group chat message,not support ignore!")
|
logger.warn(f"workflow {self.workflow_id} recv a group chat message,not support ignore!")
|
||||||
return None
|
error_resp = msg.create_error_resp(f"workflow {self.workflow_id} recv a group chat message,not support ignore!")
|
||||||
|
return error_resp
|
||||||
|
|
||||||
#1. workflow start process message
|
#1. workflow start process message
|
||||||
final_result = None
|
|
||||||
|
|
||||||
# this is workflow's group_chat session
|
# this is workflow's group_chat session
|
||||||
session_topic = msg.sender + "#" + msg.topic
|
session_topic = msg.sender + "#" + msg.topic
|
||||||
chatsesssion = AIChatSession.get_session(self.workflow_id,session_topic,self.db_file)
|
chatsesssion = AIChatSession.get_session(self.workflow_id,session_topic,self.db_file)
|
||||||
@@ -233,8 +233,10 @@ class Workflow:
|
|||||||
logger.error(f"input_filter return None for :{msg.body}")
|
logger.error(f"input_filter return None for :{msg.body}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
logger.error(f"{self.workflow_id}:no role can process this msg:{msg.body}")
|
err_str = f"{self.workflow_id}:no role can process this msg:{msg.body}"
|
||||||
return final_result
|
logger.error(err_str)
|
||||||
|
error_resp = msg.create_error_resp(err_str)
|
||||||
|
return error_resp
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def prase_llm_result(cls,llm_result_str:str)->LLMResult:
|
def prase_llm_result(cls,llm_result_str:str)->LLMResult:
|
||||||
@@ -432,7 +434,7 @@ class Workflow:
|
|||||||
def _is_in_same_workflow(self,msg) -> bool:
|
def _is_in_same_workflow(self,msg) -> bool:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
async def role_process_msg(self,msg:AgentMsg,the_role:AIRole,workflow_chat_session:AIChatSession):
|
async def role_process_msg(self,msg:AgentMsg,the_role:AIRole,workflow_chat_session:AIChatSession) -> AgentMsg:
|
||||||
msg.target = the_role.get_role_id()
|
msg.target = the_role.get_role_id()
|
||||||
|
|
||||||
|
|
||||||
@@ -473,7 +475,7 @@ class Workflow:
|
|||||||
error_resp = msg.create_error_resp(result_str)
|
error_resp = msg.create_error_resp(result_str)
|
||||||
return error_resp
|
return error_resp
|
||||||
|
|
||||||
result = Workflow.prase_llm_result(result_str)
|
result : LLMResult = Workflow.prase_llm_result(result_str)
|
||||||
for postmsg in result.post_msgs:
|
for postmsg in result.post_msgs:
|
||||||
postmsg.prev_msg_id = msg.get_msg_id()
|
postmsg.prev_msg_id = msg.get_msg_id()
|
||||||
# might be craete a new msg.topic for this postmsg
|
# might be craete a new msg.topic for this postmsg
|
||||||
@@ -506,15 +508,14 @@ class Workflow:
|
|||||||
workflow_chat_session.append(resp_msg)
|
workflow_chat_session.append(resp_msg)
|
||||||
#await self.get_bus().resp_message(resp_msg)
|
#await self.get_bus().resp_message(resp_msg)
|
||||||
return resp_msg
|
return resp_msg
|
||||||
case "waiting":
|
case "waiting":
|
||||||
# TODO: Use role:"function" would be better
|
|
||||||
for sendmsg in result.send_msgs:
|
for sendmsg in result.send_msgs:
|
||||||
target = sendmsg.target
|
target = sendmsg.target
|
||||||
sendmsg.topic = msg.topic
|
sendmsg.topic = msg.topic
|
||||||
sendmsg.prev_msg_id = msg.get_msg_id()
|
sendmsg.prev_msg_id = msg.get_msg_id()
|
||||||
send_resp = await self.role_send_msg(sendmsg,the_role,workflow_chat_session)
|
send_resp = await self.role_send_msg(sendmsg,the_role,workflow_chat_session)
|
||||||
if send_resp is not None:
|
if send_resp is not None:
|
||||||
result_prompt_str += f"\n{target} response is :{send_resp.body}"
|
result_prompt_str += f"\n# {target} response is : \n{send_resp.body}"
|
||||||
|
|
||||||
if not self._is_in_same_workflow(sendmsg):
|
if not self._is_in_same_workflow(sendmsg):
|
||||||
role_sesion = AIChatSession.get_session(the_role.get_role_id(),f"{sendmsg.target}#{sendmsg.topic}",self.db_file)
|
role_sesion = AIChatSession.get_session(the_role.get_role_id(),f"{sendmsg.target}#{sendmsg.topic}",self.db_file)
|
||||||
@@ -523,22 +524,15 @@ class Workflow:
|
|||||||
else:
|
else:
|
||||||
# message will be saved in role.process_message
|
# message will be saved in role.process_message
|
||||||
pass
|
pass
|
||||||
|
|
||||||
for call in result.calls:
|
this_llm_resp_prompt = AgentPrompt()
|
||||||
action_msg = msg.create_action_msg(call[0],call[1],call_result,the_role.get_role_id)
|
this_llm_resp_prompt.messages = [{"role":"assistant","content":result_str}]
|
||||||
call_result = await self.role_call(call,the_role)
|
prompt.append(this_llm_resp_prompt)
|
||||||
|
|
||||||
if call_result is not None:
|
|
||||||
result_prompt_str += f"\ncall {call[0]} result is :{call_result}"
|
|
||||||
#save action
|
|
||||||
action_msg.result_str = call_result
|
|
||||||
workflow_chat_session.append(action_msg)
|
|
||||||
|
|
||||||
result_prompt = AgentPrompt()
|
result_prompt = AgentPrompt()
|
||||||
result_prompt.messages = [{"role":"user","content":result_prompt_str}]
|
result_prompt.messages = [{"role":"user","content":result_prompt_str}]
|
||||||
prompt.append(result_prompt)
|
prompt.append(result_prompt)
|
||||||
r = await _do_process_msg()
|
return await _do_process_msg()
|
||||||
return r
|
|
||||||
|
|
||||||
return await _do_process_msg()
|
return await _do_process_msg()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user