The Policy Enabled Next geNeration Internet (PENNI) project aims to lay the technical foundations for a policy, trust, and transparency enabled decentralised Next Generation Internet (NGI) that can support intelligent agents that act on behalf of humans.
Our hypothesis being that decentralized applications that are able to understand constraints (in the form of goals, preferences, norms, and usage restrictions) together with trust and transparency mechanisms (in the form of usage control and fact checking) will give citizens more control over how their data is utilised and will foster trustworthiness in NGI applications, such as intelligent agents.
In this document, we propose a benevolent and trustworthy agent architecture where trust and transparency are first class citizens and demonstrate its effectivess with the help of a motivating use case scenario.
We sincerely thank Karen Sollins for her feedback on the initial draft of this document.
This document describes a benevolent and trustworthy agent architecture that serves as a blueprint for developing well meaning and dependable intelligent software web agents.
We start by describing the various components that emcompass the proposed benevolent and trustworthy agent architecture. Following on from this we discuss the cross-cutting role of policies, transparency, and compliance checking. We subsequently discuss how requests are handled by the proposed architecture. Finally we demonstrate the effectivess of the proposed architecture by revisiting the original intelligent software web agent motivating scenario with a particular focus on underlining the need for benevolent and trustworthy agents and how this is reflected in the proposed architecture.
The overarching aim is to descibe the proposed benevolent and trustworthy agent architecture in detail and to demonstrate how it can be used to support various intelligent software web agents tasks. Although policies, transparency, and compliance checking are paramount from a benevolence and trust perspective, these functions cannot be discussed in isolation and thus it is necessary to describe how these functions fit with core agent architecture components.
The examples throughout the document are serialized as [[turtle]].
The examples presented here make use if the following prefixes:
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix am: <http://penni.wu.ac.at/langs/agent-messages#> .
@prefix amv: <http://penni.wu.ac.at/langs/agent-messages-vocab#> .
Before going into details on how the Benevolent and Trustworthy Agent (BTA) Architecture can be used to model information, booking, and scheduling requestes we first provide an overview of the BTA components. .
The Interface Component (IC)
is responsible for interacting with humans, agents, and networked devices.
Sensors
are used to perceive the world (e.g., keyboards, cameras, microphones, network ports, etc.).
Actuators
are used to perform actions (e.g., screens, printers, headphones, network ports, etc.).
The Controller Component (CC)
is responsible for interpreting perceptions, managing internal processes and tasks, and interpreting actions.
Perception Interpreter (PI)
parses perceptions received via sensores and forwards requests to the Execution Engine.
Execution Engine (EE)
devises execution plans that leverage the deliberative components and executes these plans.
Initiate Process
triggers the start of a reasoning or querying process.
Monitor/Control Process
ensures that internal reasoning or querying is working as expected and if not take corrective action.
Action Interpreter (AI)
is responsible for parsing actions forwarded by the Execution Engine and sending commands to the respective actuator.
The Deliberative Component (DC)
encompasses the agents knowledge, reasoning, and querying functionality.
Goal Encoding
parses requests and generates goals.
Reasoning Engine (RE)
is responsible for performning reasoning tasks.
Goal Based Reasoning
is used for problem solving tasks.
Constraint Selection
is used to retrieve constraints that are relevant for a given context.
Compliance Checking
involves checking if a policy or log entry is subsumbed by some other policy.
Transparency Provision
provides transparncy with respect to the agents behaviour.
Utility Function
helps the agent to make decisions and solve conflicts.
Goal Assessment
verifies if goals have been satisfied and if not generates new goals.
The Knowledge Base (KB)
is responsible for persisting the agents knowledge about itself and its environment.
Goals
are used to store the agents current goals.
Beliefs
represent the knowledge that the agent believes to be true.
Processes
are functions that the agents can execute.
Index/Registery
of external knowledge bases and services.
Policies
are associated with agent things and services.
Preferences
inform agent actions.
Norms
specify regulatory or social requirements relating to agents or multi-agent systems.
Logs
encode requests received, actions taken, and responses provided.
The Querying Component (QC)
allows the agent to execute queries against both internal and external knowledge bases.
Generate Query
prepares a query that can be executed against local or remote knowledge bases.
Query Engine
is responsible for handling both local and remote queries.
Execute Query
can execute queries against local and remote knowledge bases.
Process Response
prepares responses.
The agents Environment
is a complex space that consists of a variety of different networking technologies, devices, information sources,
applications, and both human and artificial agents.
Agents
interact with humans, agents, and networked devices in their environment.
Humans
interact with humans, agents, and networked devices in their environment.
Networked Devices
interact with humans, agents, and networked devices in their environment.
Performance Assessment
is a mechanism used to evaluate the effectivess of an agent.
This section describes the general structure of Request
messages used to interact with benevolent and trustworthy agents and to inform the corresponding
agent behaviour. Although several request types (e.g., InformationRequest
, BookingRequest
, SchedulingRequest
, TaskRequest
)
and the corresponding agent behaviour are described in detail, these request types serve to demonstrate the effectivess of the proposes architecture and are by no means exhaustive.
An information request specifies the information required and where it may be obtained.
Goal: Obtain and return the requested information.
Performance Measure: The infromation has been provided.
Message Structure:
RequestType
is set to InfoRequest for this message.Source
the entity that initiated the request.Destination
the entity responsible for fulfilling the request.Type
denotes the information that needs to be retrieved.Provider
denotes where the information may be found.Constraint
represents knowledge that is needed to fulfil the request.Credential
represents the Credential that are needed to fulfil the request.amv:DoctorsReferralInfo am:hasRequestType am:InfoRequest; am:hasSource amv:LucysAgent; am:hasDestination amv:AlicesDoctorsAgent; am:hasType amv:LucysDoctorsReferral; am:hasProvider amv:AlicesDoctor; am:hasConstraint [amv:lastVsit "2022-03-14"^^xsd:dateTimeStamp], [amv:requiredTreatment amv:Physiotherapy]; am:hasCredential amv:LucysAgentCredential, amv:AlicesDelegatedDoctorCredential;
A booking request specifies the service required and the service provider that should be booked.
Goal: Make a booking and return a booking confirmation.
Performance Measure: The booking confirmation has been provided.
Message Structure:
RequestType
is set to BookingRequest for this message.Destination
indicates the agent responsible for executing the request.Type
denotes the service that needs to be booked.Provider
denotes the service provider required.Constraint
represents knowledge that is needed to fulfil the request.Credential
represents the Credential that are needed to fulfil the request.amv:PhysiotherapyBooking am:hasRequestType am:BookingRequest; am:hasSource amv:LucysAgent; am:hasDestination amv:MurphyPhysiotherapyAgent; am:hasType amv:BackPhysiotherapy; am:hasProvider amv:MurphyPhysiotherapy; am:hasConstraint [amv:requiredAppointments amv:TwicePerWeek], [amv:availability amv:PeteOrLucy], [amv:client amv:AlicesContactDetails]; am:hasCredential amv:LucysAgentCredential.
A scheduleing request is a reasoning tasks that needs to be performed by the agent.
Goal: Prepare an physiotherapy appointment schedule for Alice, based on Lucy and Pete's availability and return suggestion.
Performance Measure: Propose a schedule that satisfies as many Constraints as possible.
Message Structure:
RequestType
is set to SchedulingRequest for this message.Source
the entity that initiated the request.Destination
the entity responsible for fulfilling the request.Type
denotes the type of schedule that needs to be prepared.Provider
denotes the schedules that need to be considered.Constraint
represents knowledge that is needed to fulfil the request.Credential
represents the Credential that are needed to fulfil the request.amv:PhysiotherapyScheduling am:hasRequestType am:SchedulingRequest; am:hasSource amv:LucysAgent; am:hasDestination amv:LucysAgent; am:hasType amv:PhysiotherapyScheduleForAlice; am:hasProvider amv:PhysioCalendar, amv:PetesCalendar, amv:AlicesCalendar; am:hasConstraint [amv:availability amv:PeteOrLucy]; am:hasCredential am:null.
A task request is essentially a collection of actions (i.e., requests) that need to be executed.
Goal: Execute a task and return the results of the execution.
Performance Measure: The results of the execution have been provided.
Message Structure:
RequestType
is set to TaskRequest for this message.Source
the entity that initiated the request.Destination
the entity responsible for fulfilling the request.Action
denotes the task that needs to be performed.Constraint
represents knowledge that is needed to fulfil the request.Credential
represents the Credential that are needed to fulfil the request.amv:PhysiotherapyAppointmentTask am:hasRequestType am:TaskRequest; am:hasSource amv:Lucy; am:hasDestination amv:LucysAgent; am:hasAction amv:DelegationOfAuthorityDoctor, amv:DelegationOfAuthorityInsurance, amv:DoctorsReferralInfo, amv:PhysiotherapistsInfo, amv:PetesCalendarInfo, amv:AlicesCalendarInfo, amv:PhysiotherapistsCalendarInfo, amv:PhysiotherapyAppointmentReasoning, amv:PhysiotherapyAppointmentBooking; am:hasConstraint am:null; am:hasCredential amv:LucysAgentCredential.
This section describes how agents handle various request types. Although the internal behaviour for several request types (e.g., InformationRequest
,
BookingRequest
, SchedulingRequest
, TaskRequest
) is described in detail, these request types serve to demonstrate the effectivess of the proposes architecture and are by no means exhaustive.
The following internal behaviour is common to all tasks.
Request Agnostic Agent Behaviour:
ReceiveRequest(string request)
event handler forwards the request to the Controller Component.InterpretRequest(string request)
function parses the request, extracts the message,
and calls the ExecutionEngine module.CreateProcess(string message)
calls the request specific prepare process function.PrepareResponse(string response)
function prepares a response and calls Interface Component.SendResponse(string response)
event handler forwards the response to originator.An information request specifies the information required and where it may be obtained.
Init(string message)
function initiates an information create process.InformationRequest(string message)
function calls the following function:GetSources(string message)
retrieves references for the sources to be queried. PrepareQuery(string message)
prepares a query to be executed against the sources. InformationRequest(string request)
function calls the ControlProcess request handler.Init(string message)
function initiates an information control process.InformationRequest(string action)
function calls the following function:InformationRequest.QueryExecution(string action)
executes a query using a query engine. i>InformationRequest(string request)
function calls the prepare response request handler.A booking request specifies the service required and possible service providers.
Init(string message)
function initiates a booking create process.BookingRequest(string message)
function calls the following function:BookingRequest.GetSources(string message)
retrieves references for the sources to be queried. BookingRequest.PrepareQuery(string message)
prepares a query to be executed against the sources. BookingRequest(string request)
function calls the ControlProcess request handler.Init(string message)
function initiates a booking control process.BookingRequest(string action)
function calls the following function:BookingRequest.QueryExecution(string action)
executes a query using a query engine.BookingRequest(string request)
function calls the prepare response request handler.A scheduleing request is a reasoning tasks that needs to be performed by the agent.
Init(string message)
function initiates a scheduling create process.SchedulingRequest(string message)
function calls the following function:SchedulingRequest.GetSources(string message)
retrieves references for the sources to be queried. SchedulingRequest.PrepareReasoningTask(string message)
prepares a query to be executed against the sources. SchedulingRequest(string request)
function calls the ControlProcess request handler.Init(string message)
function initiates a scheduling control process.SchedulingRequest(string action)
function calls the following function:SchedulingRequest.ExecuteReasoningTask(string action)
inititates the reasoning engine. SchedulingRequest(string request)
function calls the prepare response request handler.A task request is essentially a collection of actions (i.e., requests) that need to be executed.
Init(string message)
function initiates a task create process.TaskRequest(string message)
function calls the following function:TaskRequest.GetActions(string message)
function extracts the actions that need to be executed and inititates the execute
process for each action.TaskRequest(string request)
calls the execute process request handler.Init(string message)
function initiates a task control process.TaskRequest(string action)
function calls the following function:TaskRequest.ExecuteActions(string action)
function executes the actions and sends a response confirming the execution
is complete.TaskRequest(string request)
function calls the prepare response request handler.The original semantic web vision was presented with the help of a motivating use case scenario, revolving around Pete and Lucy and their mother who has just found out that she needs to attend regular physiotherapy sessions. Pete and Lucy ask their personal agents to prepare a physiotherapy appointment schedule such that they are able to share the chauffeuring duties. Lucy's agent is tasked with finding a physiotherapist who: (i) is covered by their mothers insurance; (ii) has a trusted service rating of very good or excellent; (iii) is located within a 20 mile radius of their mother's home; and (iv) has appointments that work with Lucy and Pete's busy schedules. The workflow depicted in \emph{Figure}~\ref{fig:lucys-agent} can be summarised as follows:
amv:DoctorsReferralInfo am:hasRequestType am:InfoRequest; am:hasSource amv:LucysAgent; am:hasDestination amv:AlicesDoctorsAgent; am:hasInfoType amv:LucysDoctorsReferral; am:hasInfoProvider amv:AlicesDoctors; am:hasConstraint [amv:lastVsit "2022-03-14"^^xsd:dateTimeStamp], [amv:requiredTreatment amv:Physiotherapy]; am:hasCredential amv:LucysAgentCredential, amv:AlicesDelegatedDoctorCredential;
amv:PhysioInfo am:hasRequestType am:InfoRequest; am:hasSource amv:LucysAgent; am:hasDestination amv:InsuranceProviderAgent; am:hasInfoType amv:Physiotherapists; am:hasInfoProvider amv:AlicesInsuranceProvider; am:hasConstraint [amv:coveredBy amv:AlicesInsurancePolicy], [amv:requiredTreatment amv:BackPhysiotherapy]; am:hasCredential amv:LucysAgentCredential, amv:AlicesDelegatedDoctorCredential.
amv:PetesAvailabilityInfo am:hasRequestType am:InfoRequest; am:hasSource amv:LucysAgent; am:hasDestination amv:PotentialPhysiotherapyAgent; am:hasInfo amv:PetesCalendarInfo; am:hasInfoProvider amv:PotentialPhysiotherist; am:hasConstraint [amv:timeframe amv:ThreeMonths]; am:hasCredential amv:LucysAgentCredential.
amv:PhysioAvailabilityInfo am:hasRequestType am:InfoRequest; am:hasSource amv:LucysAgent; am:hasDestination amv:PetesAgent; am:hasInfoType amv:CalendarInfo; am:hasInfoProvider amv:PetesCalendar; am:hasConstraint [amv:coveredBy amv:AlicesInsurancePolicy], [amv:requiredTreatment amv:BackPhysiotherapy]; am:hasCredential amv:LucysAgentCredential, amv:AlicesDelegatedDoctorCredential.
amv:LucysAvailabilityInfo am:hasRequestType am:InfoRequest; am:hasSource amv:LucysAgent; am:hasDestination amv:LucysAgent; am:hasInfoType amv:CalendarInfo; am:hasInfoProvider amv:LucysCalendar; am:hasConstraint [amv:timeframe amv:ThreeMonths]; am:hasCredential am:null.
amv:PhysiotherapyScheduling am:hasRequestType am:SchedulingRequest; am:hasSource amv:LucysAgent; am:hasDestination amv:LucysAgent; am:hasScheduleType amv:PhysiotherapyScheduleForAlice; am:hasScheduleProvider amv:PhysioCalendar, amv:PetesCalendar, amv:AlicesCalendar; am:hasConstraint [amv:availability amv:PeteOrLucy]; am:hasCredential am:null.
amv:PhysiotherapyBooking am:hasRequestType am:BookingRequest; am:hasSource amv:LucysAgent; am:hasDestination amv:MurphyPhysiotherapyAgent; am:hasBookingType amv:BackPhysiotherapy; am:hasBookingProvider amv:MurphyPhysiotherapy; am:hasConstraint [amv:requiredAppointactionments amv:TwicePerWeek], [amv:availability amv:PeteOrLucy], [amv:client amv:AlicesContactDetails]; am:hasCredential amv:LucysAgentCredential.