Add chat history limit for Agent and Role.

Fix bugs.
This commit is contained in:
Liu Zhicong
2023-09-27 10:09:31 -07:00
parent 594901df90
commit 5146bc1871
8 changed files with 25 additions and 19 deletions
+9 -8
View File
@@ -5,27 +5,28 @@ max_token_size = 16000
#enable_kb = "true" #enable_kb = "true"
enable_timestamp = "true" enable_timestamp = "true"
owner_prompt = "我是你的主人{name}" owner_prompt = "我是你的主人{name}"
contact_prompt = "我是你的朋友{name}" contact_prompt = "我是你的主人的朋友{name}"
owner_env = "calender" owner_env = "calender"
[[prompt]] [[prompt]]
role = "system" role = "system"
content = """ content = """
你叫Jarvis,是的超级私人助理。 你叫Jarvis,是主人的超级私人助理。
你领导一个团队为服务,团队的成员有: 你领导一个团队为主人服务,团队的成员有:
Tracy,私人英语老师 Tracy,私人英语老师
David,私人画 Mia,主人的私人文档管理专
*** ***
你看到的信息里有的有时会带上时间标签,这是为了让你更好的理解时间。你回复信息不用创建这个时间标签。 你看到的信息里有的有时会带上时间,这是为了让你更好的理解消息的创建。你回复信息时不带这个时间标签。
你在收到的信息后,按如下规则处理 你在收到的信息后,按如下规则处理
1. 如果你认为团队里有人更适合处理该信息,用下面方法转发消息给他们处理 1. 如果你认为团队里有人更适合处理该信息,用下面方法转发消息给他们处理
``` ```
##/send_msg 成员名字 ##/send_msg 成员名字
消息内容 消息内容
``` ```
2.你可以访问的Calender,查看的日程安排。如果你在处理信息的过程中需要修改的日程安排,请直接用合适的方法修改。 2.你可以访问主人的Calender,查看主人的日程安排。如果你在处理信息的过程中需要修改主人的日程安排,请直接用合适的方法修改。
3.不符合上述规则的信息,请尽力处理 3.你要注意和你聊天的人的身份,并根据其身份给予适当的服务
4.不符合上述规则的信息,请尽力处理。
""" """
-5
View File
@@ -1,5 +0,0 @@
instance_id = "agent:xxxxxxabcde"
fullname = "jackma"
[[prompt]]
role = "system"
content = "你擅长处理商务电子邮件"
+1 -1
View File
@@ -5,4 +5,4 @@ enable_function = []
[[prompt]] [[prompt]]
role = "system" role = "system"
content = "你是一个童话作家,能够写出各种有趣的童话。" content = "你是一个童话作家,能够写出各种有趣的童话。"
+4 -1
View File
@@ -118,6 +118,7 @@ class AIAgent:
self.guest_prompt_str = None self.guest_prompt_str = None
self.owner_promp_str = None self.owner_promp_str = None
self.contact_prompt_str = None self.contact_prompt_str = None
self.history_len = 10
self.chat_db = None self.chat_db = None
self.unread_msg = Queue() # msg from other agent self.unread_msg = Queue() # msg from other agent
@@ -179,6 +180,8 @@ class AIAgent:
self.enable_kb = bool(config["enable_kb"]) self.enable_kb = bool(config["enable_kb"])
if config.get("enable_timestamp") is not None: if config.get("enable_timestamp") is not None:
self.enable_timestamp = bool(config["enable_timestamp"]) self.enable_timestamp = bool(config["enable_timestamp"])
if config.get("history_len"):
self.history_len = int(config.get("history_len"))
return True return True
@@ -459,7 +462,7 @@ class AIAgent:
async def _get_prompt_from_session(self,chatsession:AIChatSession,system_token_len,input_token_len,is_groupchat=False) -> AgentPrompt: async def _get_prompt_from_session(self,chatsession:AIChatSession,system_token_len,input_token_len,is_groupchat=False) -> AgentPrompt:
# TODO: get prompt from group chat is different from single chat # TODO: get prompt from group chat is different from single chat
history_len = (self.max_token_size * 0.7) - system_token_len - input_token_len history_len = (self.max_token_size * 0.7) - system_token_len - input_token_len
messages = chatsession.read_history() # read messages = chatsession.read_history(self.history_len) # read
result_token_len = 0 result_token_len = 0
result_prompt = AgentPrompt() result_prompt = AgentPrompt()
read_history_msg = 0 read_history_msg = 0
+2
View File
@@ -380,3 +380,5 @@ class KnowledgePipline:
# await source.run_once() # await source.run_once()
for source in self.source_queue: for source in self.source_queue:
await source.run_once() await source.run_once()
logging.info(f"knowledge pipeline finished")
+5
View File
@@ -13,6 +13,7 @@ class AIRole:
self.introduce : str = None self.introduce : str = None
self.agent = None self.agent = None
self.enable_function_list : list[str] = None self.enable_function_list : list[str] = None
self.history_len = 10
def load_from_config(self,config:dict) -> bool: def load_from_config(self,config:dict) -> bool:
name_node = config.get("name") name_node = config.get("name")
@@ -39,6 +40,10 @@ class AIRole:
if intro_node is not None: if intro_node is not None:
self.introduce = intro_node self.introduce = intro_node
history_node = config.get("history_len")
if history_node:
self.history_len = int(history_node)
if config.get("enable_function") is not None: if config.get("enable_function") is not None:
self.enable_function_list = config["enable_function"] self.enable_function_list = config["enable_function"]
+3 -3
View File
@@ -446,7 +446,7 @@ class Workflow:
# prompt.append(self._get_knowlege_prompt(the_role.get_name())) # prompt.append(self._get_knowlege_prompt(the_role.get_name()))
#support group chat, user content include sender name! #support group chat, user content include sender name!
prompt.append(await self._get_prompt_from_session(workflow_chat_session)) prompt.append(await self._get_prompt_from_session(the_role,workflow_chat_session))
msg_prompt = AgentPrompt() msg_prompt = AgentPrompt()
msg_prompt.messages = [{"role":"user","content":f"user name is {msg.sender}, his question is :{msg.body}"}] msg_prompt.messages = [{"role":"user","content":f"user name is {msg.sender}, his question is :{msg.body}"}]
@@ -536,8 +536,8 @@ class Workflow:
return await _do_process_msg() return await _do_process_msg()
async def _get_prompt_from_session(self,chatsession:AIChatSession) -> AgentPrompt: async def _get_prompt_from_session(self,the_role:AIRole,chatsession:AIChatSession) -> AgentPrompt:
messages = chatsession.read_history() # read last 10 message messages = chatsession.read_history(the_role.history_len) # read last 10 message
result_prompt = AgentPrompt() result_prompt = AgentPrompt()
for msg in reversed(messages): for msg in reversed(messages):
if msg.sender == chatsession.owner_id: if msg.sender == chatsession.owner_id:
+1 -1
View File
@@ -112,7 +112,7 @@ class AIOS_Shell:
owenr.email = AIStorage.get_instance().get_user_config().get_value("email") owenr.email = AIStorage.get_instance().get_user_config().get_value("email")
owenr.telegram = AIStorage.get_instance().get_user_config().get_value("telegram") owenr.telegram = AIStorage.get_instance().get_user_config().get_value("telegram")
cm.add_contact(self.username,owenr) cm.add_family_member(self.username,owenr)
cal_env = CalenderEnvironment("calender") cal_env = CalenderEnvironment("calender")
await cal_env.start() await cal_env.start()