Jarvis can query user knowlege base!
This commit is contained in:
@@ -1,111 +0,0 @@
|
|||||||
|
|
||||||
# 2023-09-19 16:04:55.011656
|
|
||||||
+tsukasa
|
|
||||||
|
|
||||||
# 2023-09-19 16:05:27.714815
|
|
||||||
+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
|
|
||||||
|
|
||||||
# 2023-09-20 14:48:06.181582
|
|
||||||
+/connect
|
|
||||||
|
|
||||||
# 2023-09-20 14:48:22.678945
|
|
||||||
+/connect Jarvis email
|
|
||||||
|
|
||||||
# 2023-09-20 14:54:35.101026
|
|
||||||
+/connect Jarvis telegram
|
|
||||||
|
|
||||||
# 2023-09-20 14:54:55.229801
|
|
||||||
+token abcd
|
|
||||||
|
|
||||||
# 2023-09-20 16:22:34.229084
|
|
||||||
+/knowledge add email
|
|
||||||
|
|
||||||
# 2023-09-20 16:22:46.797842
|
|
||||||
+puotosssa@live.com
|
|
||||||
|
|
||||||
# 2023-09-20 16:22:53.622015
|
|
||||||
+p19870626
|
|
||||||
|
|
||||||
# 2023-09-20 16:22:59.186145
|
|
||||||
+imap@live.com
|
|
||||||
|
|
||||||
# 2023-09-20 16:23:02.334411
|
|
||||||
+993
|
|
||||||
|
|
||||||
# 2023-09-20 16:40:29.996329
|
|
||||||
+/knowledge add email
|
|
||||||
|
|
||||||
# 2023-09-20 16:40:52.860700
|
|
||||||
+puotosssa@live.com
|
|
||||||
|
|
||||||
# 2023-09-20 16:40:55.324994
|
|
||||||
+fdafda
|
|
||||||
|
|
||||||
# 2023-09-20 16:40:58.167154
|
|
||||||
+fdafdaf
|
|
||||||
|
|
||||||
# 2023-09-20 16:40:59.757363
|
|
||||||
+993
|
|
||||||
|
|
||||||
# 2023-09-20 16:42:55.288680
|
|
||||||
+/knowledge add email
|
|
||||||
|
|
||||||
# 2023-09-20 16:42:56.916408
|
|
||||||
+fdfa
|
|
||||||
|
|
||||||
# 2023-09-20 16:42:57.965232
|
|
||||||
+fdfds
|
|
||||||
|
|
||||||
# 2023-09-20 16:42:59.149516
|
|
||||||
+fdafd
|
|
||||||
|
|
||||||
# 2023-09-20 16:43:00.949104
|
|
||||||
+993
|
|
||||||
|
|
||||||
# 2023-09-21 14:11:33.500467
|
|
||||||
+/knowledge add c:/users/tsukasa/myai/photos
|
|
||||||
|
|
||||||
# 2023-09-21 14:14:31.488794
|
|
||||||
+/knowledge add dir
|
|
||||||
|
|
||||||
# 2023-09-21 14:14:49.298635
|
|
||||||
+c:/users/tsukasa/myai/photos
|
|
||||||
|
|
||||||
# 2023-09-21 15:27:58.550658
|
|
||||||
+/knowledge add dir
|
|
||||||
|
|
||||||
# 2023-09-21 15:28:10.190467
|
|
||||||
+c:/users/tsukasa/myai/photos
|
|
||||||
|
|
||||||
# 2023-09-21 15:32:32.431305
|
|
||||||
+/knowledge add dir
|
|
||||||
|
|
||||||
# 2023-09-21 15:32:46.695566
|
|
||||||
+c:/users/tsukasa/myai/photos
|
|
||||||
|
|
||||||
# 2023-09-21 15:33:36.391465
|
|
||||||
+/knowledge add dir
|
|
||||||
|
|
||||||
# 2023-09-21 15:33:47.574853
|
|
||||||
+c:/users/tsukasa/myai/photos
|
|
||||||
|
|
||||||
# 2023-09-21 17:44:26.308692
|
|
||||||
+/knowledge journals
|
|
||||||
|
|
||||||
# 2023-09-21 17:45:42.925359
|
|
||||||
+/knowledge journal
|
|
||||||
|
|
||||||
# 2023-09-21 18:13:08.720054
|
|
||||||
+/knowledge query what a see is
|
|
||||||
|
|
||||||
# 2023-09-21 18:20:09.275556
|
|
||||||
+/knowledge journal
|
|
||||||
|
|
||||||
# 2023-09-21 18:20:10.746056
|
|
||||||
+/knowledge query what a see is
|
|
||||||
|
|
||||||
# 2023-09-21 18:29:48.391223
|
|
||||||
+/knowledge journal
|
|
||||||
|
|
||||||
# 2023-09-21 18:29:51.406532
|
|
||||||
+/knowledge query what a see is
|
|
||||||
@@ -3,6 +3,7 @@ fullname = "Jarvis"
|
|||||||
llm_model_name = "gpt-3.5-turbo-16k-0613"
|
llm_model_name = "gpt-3.5-turbo-16k-0613"
|
||||||
max_token_size = 16000
|
max_token_size = 16000
|
||||||
#enable_function =["add_event"]
|
#enable_function =["add_event"]
|
||||||
|
enable_kb = "true"
|
||||||
|
|
||||||
[[prompt]]
|
[[prompt]]
|
||||||
role = "system"
|
role = "system"
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ class AIAgent:
|
|||||||
self.fullname:str = None
|
self.fullname:str = None
|
||||||
self.powerby = None
|
self.powerby = None
|
||||||
self.enable = True
|
self.enable = True
|
||||||
|
self.enable_kb = False
|
||||||
|
|
||||||
self.chat_db = None
|
self.chat_db = None
|
||||||
self.unread_msg = Queue() # msg from other agent
|
self.unread_msg = Queue() # msg from other agent
|
||||||
@@ -154,6 +155,8 @@ class AIAgent:
|
|||||||
self.max_token_size = config["max_token_size"]
|
self.max_token_size = config["max_token_size"]
|
||||||
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"]
|
||||||
|
if config.get("enable_kb") is not None:
|
||||||
|
self.enable_kb = bool(config["enable_kb"])
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
@@ -300,10 +303,19 @@ class AIAgent:
|
|||||||
old_content = msg.get("content")
|
old_content = msg.get("content")
|
||||||
msg["content"] = old_content.format_map(self.owner_env)
|
msg["content"] = old_content.format_map(self.owner_env)
|
||||||
|
|
||||||
|
async def _get_knowlege_prompt(self,input_msg:AgentPrompt) -> AgentPrompt:
|
||||||
|
if self.enable_kb is False:
|
||||||
|
return None
|
||||||
|
|
||||||
|
from .knowledge_base import KnowledgeBase
|
||||||
|
return await KnowledgeBase().query_prompt(input_msg)
|
||||||
|
|
||||||
async def _process_msg(self,msg:AgentMsg) -> AgentMsg:
|
async def _process_msg(self,msg:AgentMsg) -> AgentMsg:
|
||||||
from .compute_kernel import ComputeKernel
|
from .compute_kernel import ComputeKernel
|
||||||
from .bus import AIBus
|
from .bus import AIBus
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
session_topic = msg.get_sender() + "#" + msg.topic
|
session_topic = msg.get_sender() + "#" + msg.topic
|
||||||
chatsession = AIChatSession.get_session(self.agent_id,session_topic,self.chat_db)
|
chatsession = AIChatSession.get_session(self.agent_id,session_topic,self.chat_db)
|
||||||
if msg.mentions is not None:
|
if msg.mentions is not None:
|
||||||
@@ -312,21 +324,26 @@ class AIAgent:
|
|||||||
logger.info(f"agent {self.agent_id} recv a group chat message from {msg.sender},but is not mentioned,ignore!")
|
logger.info(f"agent {self.agent_id} recv a group chat message from {msg.sender},but is not mentioned,ignore!")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
msg_prompt = AgentPrompt()
|
||||||
|
msg_prompt.messages = [{"role":"user","content":msg.body}]
|
||||||
|
|
||||||
prompt = AgentPrompt()
|
prompt = AgentPrompt()
|
||||||
prompt.append(await self._get_agent_prompt())
|
prompt.append(await self._get_agent_prompt())
|
||||||
|
self._format_msg_by_env_value(prompt)
|
||||||
|
|
||||||
inner_functions,function_token_len = self._get_inner_functions()
|
inner_functions,function_token_len = self._get_inner_functions()
|
||||||
# prompt.append(self._get_knowlege_prompt(the_role.get_name()))
|
|
||||||
system_prompt_len = prompt.get_prompt_token_len()
|
system_prompt_len = prompt.get_prompt_token_len()
|
||||||
input_len = len(msg.body)
|
input_len = len(msg.body)
|
||||||
|
|
||||||
history_prmpt,history_token_len = await self._get_prompt_from_session(chatsession,system_prompt_len + function_token_len,input_len)
|
history_prmpt,history_token_len = await self._get_prompt_from_session(chatsession,system_prompt_len + function_token_len,input_len)
|
||||||
prompt.append(history_prmpt) # chat context
|
prompt.append(history_prmpt) # chat context
|
||||||
|
|
||||||
msg_prompt = AgentPrompt()
|
kb_prompt = await self._get_knowlege_prompt(msg_prompt)
|
||||||
msg_prompt.messages = [{"role":"user","content":msg.body}]
|
prompt.append(kb_prompt)
|
||||||
prompt.append(msg_prompt)
|
prompt.append(msg_prompt)
|
||||||
|
|
||||||
self._format_msg_by_env_value(prompt)
|
|
||||||
logger.debug(f"Agent {self.agent_id} do llm token static system:{system_prompt_len},function:{function_token_len},history:{history_token_len},input:{input_len},totoal prompt:{system_prompt_len + function_token_len + history_token_len} ")
|
logger.debug(f"Agent {self.agent_id} do llm token static system:{system_prompt_len},function:{function_token_len},history:{history_token_len},input:{input_len},totoal prompt:{system_prompt_len + function_token_len + history_token_len} ")
|
||||||
task_result:ComputeTaskResult = await ComputeKernel.get_instance().do_llm_completion(prompt,self.llm_model_name,self.max_token_size,inner_functions)
|
task_result:ComputeTaskResult = await ComputeKernel.get_instance().do_llm_completion(prompt,self.llm_model_name,self.max_token_size,inner_functions)
|
||||||
final_result = task_result.result_str
|
final_result = task_result.result_str
|
||||||
|
|||||||
@@ -165,8 +165,8 @@ class KnowledgeBase:
|
|||||||
objects = await self.query_objects(prompt)
|
objects = await self.query_objects(prompt)
|
||||||
knowledge_prompt = self.prompt_from_objects(objects)
|
knowledge_prompt = self.prompt_from_objects(objects)
|
||||||
logging.info(f"prompt_from_objects result: {knowledge_prompt.as_str()}")
|
logging.info(f"prompt_from_objects result: {knowledge_prompt.as_str()}")
|
||||||
prompt.append(knowledge_prompt)
|
|
||||||
return prompt
|
return knowledge_prompt
|
||||||
|
|
||||||
async def query_objects(self, prompt: AgentPrompt) -> [ObjectID]:
|
async def query_objects(self, prompt: AgentPrompt) -> [ObjectID]:
|
||||||
results = []
|
results = []
|
||||||
@@ -204,7 +204,7 @@ class KnowledgeBase:
|
|||||||
else:
|
else:
|
||||||
results[str(root_object_id)] = [root_object_id, object_id]
|
results[str(root_object_id)] = [root_object_id, object_id]
|
||||||
|
|
||||||
content = "I found the following contents described with json format:\n"
|
content = "*** I have provided the following known information for your reference with json format:\n"
|
||||||
result_desc = []
|
result_desc = []
|
||||||
for result in results.values():
|
for result in results.values():
|
||||||
# first element in result is the root object
|
# first element in result is the root object
|
||||||
@@ -239,7 +239,7 @@ class KnowledgeBase:
|
|||||||
content += ".\n"
|
content += ".\n"
|
||||||
|
|
||||||
prompt = AgentPrompt()
|
prompt = AgentPrompt()
|
||||||
prompt.messages.append({"role": "knowledge", "content": content})
|
prompt.messages.append({"role": "user", "content": content})
|
||||||
|
|
||||||
return prompt
|
return prompt
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ import mailparser
|
|||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
import base64
|
import base64
|
||||||
|
import chardet
|
||||||
|
import aiofiles
|
||||||
|
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
import requests
|
import requests
|
||||||
import os
|
import os
|
||||||
@@ -255,6 +258,15 @@ class KnowledgeDirSource:
|
|||||||
def path(self):
|
def path(self):
|
||||||
return self.config["path"]
|
return self.config["path"]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
async def read_txt_file(file_path:str)->str:
|
||||||
|
cur_encode = "utf-8"
|
||||||
|
async with aiofiles.open(file_path,'rb') as f:
|
||||||
|
cur_encode = chardet.detect(await f.read())['encoding']
|
||||||
|
|
||||||
|
async with aiofiles.open(file_path,'r',encoding=cur_encode) as f:
|
||||||
|
return await f.read()
|
||||||
|
|
||||||
async def run_once(self):
|
async def run_once(self):
|
||||||
logging.debug(f"knowledge dir source {self.id()} run once")
|
logging.debug(f"knowledge dir source {self.id()} run once")
|
||||||
journal_client = KnowledgeJournalClient()
|
journal_client = KnowledgeJournalClient()
|
||||||
@@ -278,8 +290,8 @@ class KnowledgeDirSource:
|
|||||||
journal_client.insert(KnowledgeJournal("dir", self.id(), rel_path, str(image.calculate_id()), timestamp))
|
journal_client.insert(KnowledgeJournal("dir", self.id(), rel_path, str(image.calculate_id()), timestamp))
|
||||||
if ext in ['.txt']:
|
if ext in ['.txt']:
|
||||||
logging.info(f"knowledge dir source {self.id()} found text file {file_path}")
|
logging.info(f"knowledge dir source {self.id()} found text file {file_path}")
|
||||||
with open(file_path, "r", encoding="utf-8") as f:
|
text = await self.read_txt_file(file_path)
|
||||||
text = f.read()
|
|
||||||
document = DocumentObjectBuilder({}, {}, text).build()
|
document = DocumentObjectBuilder({}, {}, text).build()
|
||||||
await KnowledgeBase().insert_object(document)
|
await KnowledgeBase().insert_object(document)
|
||||||
journal_client.insert(KnowledgeJournal("dir", self.id(), rel_path, str(document.calculate_id()), timestamp))
|
journal_client.insert(KnowledgeJournal("dir", self.id(), rel_path, str(document.calculate_id()), timestamp))
|
||||||
|
|||||||
@@ -81,3 +81,4 @@ sympy==1.12
|
|||||||
telegram==0.0.1
|
telegram==0.0.1
|
||||||
tokenizers==0.14.0
|
tokenizers==0.14.0
|
||||||
toml==0.10.0
|
toml==0.10.0
|
||||||
|
chardet
|
||||||
Reference in New Issue
Block a user