Add chat history limit for Agent and Role.
Fix bugs.
This commit is contained in:
@@ -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.不符合上述规则的信息,请尽力处理。
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
instance_id = "agent:xxxxxxabcde"
|
|
||||||
fullname = "jackma"
|
|
||||||
[[prompt]]
|
|
||||||
role = "system"
|
|
||||||
content = "你擅长处理商务电子邮件"
|
|
||||||
@@ -5,4 +5,4 @@ enable_function = []
|
|||||||
|
|
||||||
[[prompt]]
|
[[prompt]]
|
||||||
role = "system"
|
role = "system"
|
||||||
content = "你是一个童话做作家,能够写出各种有趣的童话。"
|
content = "你是一个童话作家,能够写出各种有趣的童话。"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -401,3 +401,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")
|
||||||
@@ -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"]
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -111,7 +111,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)
|
||||||
|
|
||||||
|
|
||||||
knowledge_env = KnowledgeEnvironment("knowledge")
|
knowledge_env = KnowledgeEnvironment("knowledge")
|
||||||
|
|||||||
Reference in New Issue
Block a user