add agent Mia

This commit is contained in:
tsukasa
2023-09-27 15:52:17 +08:00
parent 1ff3165961
commit a5e5839460
4 changed files with 53 additions and 27 deletions
+22
View File
@@ -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. 如果知识库返回不了结果了,请尽力返回。
"""
+1 -1
View File
@@ -5,7 +5,7 @@ from .agent import AIAgent,AIAgentTemplete,AgentPrompt
from .compute_kernel import ComputeKernel,ComputeTask,ComputeTaskResult,ComputeTaskState,ComputeTaskType from .compute_kernel import ComputeKernel,ComputeTask,ComputeTaskResult,ComputeTaskState,ComputeTaskType
from .compute_node import ComputeNode,LocalComputeNode from .compute_node import ComputeNode,LocalComputeNode
from .open_ai_node import OpenAI_ComputeNode 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 .knowledge_pipeline import KnowledgeEmailSource, KnowledgeDirSource, KnowledgePipline
from .role import AIRole,AIRoleGroup from .role import AIRole,AIRoleGroup
from .workflow import Workflow from .workflow import Workflow
+22 -21
View File
@@ -4,6 +4,8 @@ import logging
from .agent import AgentPrompt from .agent import AgentPrompt
from .compute_kernel import ComputeKernel from .compute_kernel import ComputeKernel
from .storage import AIStorage from .storage import AIStorage
from .environment import Environment
from .ai_function import SimpleAIFunction
from knowledge import * from knowledge import *
@@ -161,22 +163,9 @@ class KnowledgeBase:
self.store.get_object_store().put_object(object.calculate_id(), object.encode()) self.store.get_object_store().put_object(object.calculate_id(), object.encode())
await self.__do_embedding(object) await self.__do_embedding(object)
async def query_prompt(self, prompt: AgentPrompt): async def query_objects(self, tokens: str) -> [ObjectID]:
logging.info(f"query_prompt: {prompt}") vector = await self.compute_kernel.do_text_embedding(tokens, self._default_text_model)
objects = await self.query_objects(prompt) return await self.store.get_vector_store(self._default_text_model).query(vector, 10)
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
def __load_object(self, object_id: ObjectID) -> KnowledgeObject: def __load_object(self, object_id: ObjectID) -> KnowledgeObject:
if object_id.get_object_type() == ObjectType.Document: if object_id.get_object_type() == ObjectType.Document:
@@ -193,7 +182,7 @@ class KnowledgeBase:
pass pass
def prompt_from_objects(self, object_ids: [ObjectID]) -> AgentPrompt: def tokens_from_objects(self, object_ids: [ObjectID]) -> list[str]:
results = dict() results = dict()
for object_id in object_ids: for object_id in object_ids:
parents = self.store.get_relation_store().get_related_root_objects(object_id) parents = self.store.get_relation_store().get_related_root_objects(object_id)
@@ -239,10 +228,22 @@ class KnowledgeBase:
content += json.dumps(result_desc) content += json.dumps(result_desc)
content += ".\n" content += ".\n"
prompt = AgentPrompt() return content
prompt.messages.append({"role": "user", "content": content})
return prompt
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)
+5 -2
View File
@@ -24,8 +24,7 @@ directory = os.path.dirname(__file__)
sys.path.append(directory + '/../../') 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 import proxy
from aios_kernel import * from aios_kernel import *
@@ -114,6 +113,10 @@ class AIOS_Shell:
cm.add_contact(self.username,owenr) cm.add_contact(self.username,owenr)
knowledge_env = KnowledgeEnvironment("knowledge")
Environment.set_env_by_id("knowledge",knowledge_env)
cal_env = CalenderEnvironment("calender") cal_env = CalenderEnvironment("calender")
await cal_env.start() await cal_env.start()
Environment.set_env_by_id("calender",cal_env) Environment.set_env_by_id("calender",cal_env)