diff --git a/rootfs/agents/Mia/agent.toml b/rootfs/agents/Mia/agent.toml new file mode 100644 index 0000000..4d270c9 --- /dev/null +++ b/rootfs/agents/Mia/agent.toml @@ -0,0 +1,22 @@ +instance_id = "Mia" +fullname = "Mia" +llm_model_name = "gpt-3.5-turbo-16k-0613" +max_token_size = 16000 +#enable_function =["add_event"] +#enable_kb = "true" +enable_timestamp = "true" +owner_prompt = "我是你的主人{name}" +contact_prompt = "我是你的朋友{name}" +owner_env = "knowledge" + +[[prompt]] +role = "system" +content = """ +你叫Mia,你可以访问我的个人知识库。 + +*** +你在收到我的信息后,按如下规则处理 +1. 在第一次接受到一条信息时,优先尝试用合适的关键字查询去查询知识库。 +2. 如果信息中包含一段知识库的查询结果,尝试用查询结果处理,如果还是不能处理,尝试递增index继续查询。 +3. 如果知识库返回不了结果了,请尽力返回。 +""" diff --git a/src/aios_kernel/__init__.py b/src/aios_kernel/__init__.py index ef57ea9..d2fdc02 100644 --- a/src/aios_kernel/__init__.py +++ b/src/aios_kernel/__init__.py @@ -5,7 +5,7 @@ from .agent import AIAgent,AIAgentTemplete,AgentPrompt from .compute_kernel import ComputeKernel,ComputeTask,ComputeTaskResult,ComputeTaskState,ComputeTaskType from .compute_node import ComputeNode,LocalComputeNode from .open_ai_node import OpenAI_ComputeNode -from .knowledge_base import KnowledgeBase +from .knowledge_base import KnowledgeBase, KnowledgeEnvironment from .knowledge_pipeline import KnowledgeEmailSource, KnowledgeDirSource, KnowledgePipline from .role import AIRole,AIRoleGroup from .workflow import Workflow diff --git a/src/aios_kernel/knowledge_base.py b/src/aios_kernel/knowledge_base.py index b528192..2112b90 100644 --- a/src/aios_kernel/knowledge_base.py +++ b/src/aios_kernel/knowledge_base.py @@ -4,6 +4,8 @@ import logging from .agent import AgentPrompt from .compute_kernel import ComputeKernel from .storage import AIStorage +from .environment import Environment +from .ai_function import SimpleAIFunction from knowledge import * @@ -160,23 +162,10 @@ class KnowledgeBase: async def insert_object(self, object: KnowledgeObject): self.store.get_object_store().put_object(object.calculate_id(), object.encode()) await self.__do_embedding(object) - - async def query_prompt(self, prompt: AgentPrompt): - logging.info(f"query_prompt: {prompt}") - objects = await self.query_objects(prompt) - knowledge_prompt = self.prompt_from_objects(objects) - logging.info(f"prompt_from_objects result: {knowledge_prompt.as_str()}") - - return knowledge_prompt - - async def query_objects(self, prompt: AgentPrompt) -> [ObjectID]: - results = [] - for msg in prompt.messages: - if msg["role"] == "user": - vector = await self.compute_kernel.do_text_embedding(msg["content"], self._default_text_model) - object_ids = await self.store.get_vector_store(self._default_text_model).query(vector, 10) - results.extend(object_ids) - return results + + async def query_objects(self, tokens: str) -> [ObjectID]: + vector = await self.compute_kernel.do_text_embedding(tokens, self._default_text_model) + return await self.store.get_vector_store(self._default_text_model).query(vector, 10) def __load_object(self, object_id: ObjectID) -> KnowledgeObject: if object_id.get_object_type() == ObjectType.Document: @@ -193,7 +182,7 @@ class KnowledgeBase: pass - def prompt_from_objects(self, object_ids: [ObjectID]) -> AgentPrompt: + def tokens_from_objects(self, object_ids: [ObjectID]) -> list[str]: results = dict() for object_id in object_ids: parents = self.store.get_relation_store().get_related_root_objects(object_id) @@ -237,12 +226,24 @@ class KnowledgeBase: else: pass content += json.dumps(result_desc) - content += ".\n" + content += ".\n" - prompt = AgentPrompt() - prompt.messages.append({"role": "user", "content": content}) - - return prompt + return content - \ No newline at end of file +class KnowledgeEnvironment(Environment): + def __init__(self, env_id: str) -> None: + super().__init__(env_id) + + query_param = { + "tokens": "tokens to query", + "index": "index of query result" + } + self.add_ai_function(SimpleAIFunction("query_knowledge", + "vector query content from local knowledge base", + self._query, + query_param)) + + async def _query(tokens: str, index: int): + object_ids = await KnowledgeBase().query_objects(tokens) + KnowledgeBase().tokens_from_objects(object_ids) \ No newline at end of file diff --git a/src/service/aios_shell/aios_shell.py b/src/service/aios_shell/aios_shell.py index 4ba88b6..ad1cb8c 100644 --- a/src/service/aios_shell/aios_shell.py +++ b/src/service/aios_shell/aios_shell.py @@ -24,8 +24,7 @@ directory = os.path.dirname(__file__) sys.path.append(directory + '/../../') -from aios_kernel import AIOS_Version,AgentMsgType,UserConfigItem,AIStorage,Workflow,AIAgent,AgentMsg,AgentMsgStatus,ComputeKernel,OpenAI_ComputeNode,AIBus,AIChatSession,AgentTunnel,TelegramTunnel,CalenderEnvironment,Environment,EmailTunnel,LocalLlama_ComputeNode,Local_Stability_ComputeNode,Stability_ComputeNode,PaintEnvironment -from aios_kernel import ContactManager,Contact + import proxy from aios_kernel import * @@ -114,6 +113,10 @@ class AIOS_Shell: cm.add_contact(self.username,owenr) + + knowledge_env = KnowledgeEnvironment("knowledge") + Environment.set_env_by_id("knowledge",knowledge_env) + cal_env = CalenderEnvironment("calender") await cal_env.start() Environment.set_env_by_id("calender",cal_env)