EnsoNet is a network that supports dynamic creation and management of agents, that work together with users to solve problems. Each agent has a well defined purpose. It can either co-pilots user to work on a specific defined problem space, or can tackle tasks in that space on its own. Within each agent, there can be a list of working channels, each responsbile for working with the user on a sepecific problem or task. Each agent and the channels within it has their specific short/long term memory for achiving their focus tasks, and the summary of their memory can be shared with other agents, via the EnsoNet (Enso network). the Ensonet is responsible for sharing the broadcased agent summary with the agents observing the same nework. Therefore, an agent can recieve key summary broadcast from other agents in the network they are currently in, and decide whether/how they could offer user more help in the problem space it's defined to focus in.
In an EnsoNet, set of agents can by dynamically defined, instantiated and formed based on a stated problem described by the user. Or the user can choose to work with a specific set of already defined agents to solve their need. The user simply interacts with the Ensonet via a web application.
An agent is defined mainly via its definition of "purpose of agent" in a JSON structure similar to this example:
"Brainstorming": {
"agent_type": "AgentX",
"icon_path": "/static/icons/brainstorm.png",
"purpose_of_agent": "You are an AI copilot that helps user to brainstorm ideas until a concrete concept or project idea is being formulated. You need to learn about the interest, skillset, past project experience, and motivation of the user. Then as you learn more and more about these, you work with the user to arrive at a satisfying project idea together in a thorough and non hasty way.",
"introduction_of_agent": "I am an AI co-pilot that helps you brainstorm ideas until a concrete concept or project idea is being formulated. I will learn about your interest, skillset, past project experience, and motivation. Then as I learn more and more about these, I will work with you to arrive at a satisfying project idea together in a thorough and non hasty way.",
"ensonet_criteria": "Based on this summary: <{input_summary_txt}>, and the purpose of this agent: <{purpose_of_agent}>, you were to determine if the agent should engage in assisting with the process by judging if the input already contains a concrete definition of all of the following: 1. user interests clearly identified, 2. demonstrative strong understanding of the subject, 3. a strong desire to do something creative and concrete with them. If the criteria are met, produce a JSON response with the following: 1. 'engage': A boolean indicating whether the agent should engage (true/false). 2. 'channel_name': A suggested name for the channel based on the agent's purpose and the summary's context. 3. 'proposal': A paragraph explaining why the agent proposes to assist in regarding the summary.",
"definition_of_level": {
"level_1": {
"criteria": "Obtain good understanding of all the following information: 1. user interests. 2. user skillsets. 3. user project experience. 4. user motivations. 5. user concerns.",
"key_output": {
"user interests": [],
"user skillsets": [],
"user project experience": [],
"user motivations": [],
"user concerns": []
}
},
"level_2": {
"criteria": "Exploring with user in detail and together arrive at a very clear selection of the following information 1. area of interests.",
"key_output": {
"area of interests": []
}
},
"level_3": {
"criteria": "Together with the user's input and creativity, generating 1. project ideas (a list of very clear and well defined ideas or concepts). The interactive should be bi-directional in discussing what those ideas entail in an iterative way so to dive deeper into the ideas.",
"key_output": {
"project ideas": []
}
},
"level_4": {
"criteria": "Together with the user's sharing of preferences and concerns, to perform a process of pros/cons analysis, comparison and elimination across all the potential ideas, user is able to come to do conclusion of: 1. final project idea.",
"key_output": {
"final project idea": ""
}
},
"level_5": {
"criteria": "Together with the user's clarification, preferencnes and ambition, we are able to come to the conclusion of all the following: 1. project definition, 2. project scope, 3. project expectation.",
"key_output": {
"project definition": "",
"project scope": "",
"project expectation": ""
}
}
},
"prompts": {
"level_x_introduction": "Given your role as: <{purpose_of_agent}>, and the summary:<{chat_summary}>, and your current level's objective is: <{level_x_criteria}>, please generate a response to start engaging the user to kick off this level process.",
"level_x_response": "With your role as: <{purpose_of_agent}> and the summary:<{chat_summary}>, and given the current objective: <{level_x_criteria}>, craft an effective response to the user. Use previous conversation history and possibly any feedback from the level criteria judgement result: <{reason_of_failure}> to guide your planning and response. Ensure you align with the project's objectives and any key outputs gathered so far.",
"level_x_judgement": "Based on the chat history and the summary: <{chat_summary}> , focus only on the context reacted to by the user, you were to judge whether the conversation context has successfully achieved the current objective of: <{level_x_criteria}> and able to extract all the key objective output defined for the current level. If the criteria are met, produce a JSON response with: 1. 'achieved': A boolean indicating success (true/false). 2. 'summary': A summary of the current planning status. 3. 'key_output':For each key output, a name-value pair of the results. If not achieved, return a JSON response with: 1. 'achieved': A boolean (true/false). 2. 'reason': A string detailing why the criteria weren't met."
}
}
Each working channel in an agent will start with the Level_1 state, interact with user aiming to achieve the objective defined by the cooresponding "criteria" for the current level, and produce the defined "key_output" for the criteria. Throughout the interactions, the agent will evaluate the current context against the Level_x_judgement for the level, based on the result, either reiterate on interacting more with the user to achieve the current level's objective, or if deemed ready, move to the next level, and repeat the process until all levels are completed.
Everytime the agent moves to the next level, it will update the summary of its memroy as well as the key output of the current level, and broadcast the summary to EnsoNet, where all participating agents could digest and decide their own corresponding actions, and so on.
Agents can either be of type AgentX (which deploys the AI generated agent mechanism according to the criteria definition) or custom type, built by developers themselves by conforming to the AgentBase and ChannelBase classes defined by EnsoNet.