FIPA ACL
Le standard FIPA ACL (Agent Communication Language) définit un protocole de communication entre agents basé sur des performatives et des s-expressions.
Performatives
Performative |
Signification |
|---|---|
|
Demande à l’agent récepteur d’effectuer une action |
|
Informe que la proposition est vraie |
|
Demande la valeur d’une expression |
|
Call for Proposal (protocole de négociation) |
|
Répond à un CFP avec une proposition |
|
Accepte une proposition |
|
Rejette une proposition |
|
Accepte de réaliser une action |
|
Refuse de réaliser une action |
|
Signale l’échec d’une action |
|
Signale que le message n’a pas été compris |
|
S’abonne à des notifications |
|
Annule une demande précédente |
Champs d’un message
Champ |
Description |
|---|---|
|
Identifiant de l’agent émetteur |
|
Identifiant(s) du ou des agents destinataires |
|
Contenu du message (expression dans le langage déclaré) |
|
Langage du contenu ( |
|
Ontologie partagée entre émetteur et récepteur |
|
Protocole d’interaction utilisé |
|
Identifiant de conversation |
|
Référence pour la réponse attendue |
|
Référence du message auquel on répond |
|
Encodage du contenu |
Usage en C++
Créer un message
#include <gagent/messaging/ACLMessage.hpp>
using namespace gagent;
ACLMessage msg(ACLMessage::Performative::REQUEST);
msg.setSender (AgentIdentifier{"alice"});
msg.addReceiver (AgentIdentifier{"bob"});
msg.setContent ("(action bob (query-time))");
msg.setLanguage ("fipa-sl");
msg.setOntology ("time-ontology");
msg.setConversationId("conv-42");
Sérialiser
std::string raw = msg.toString();
// → (request
// :sender (agent-identifier :name alice)
// :receiver (set (agent-identifier :name bob))
// :content "(action bob (query-time))"
// :language fipa-sl
// :ontology time-ontology
// :conversation-id conv-42)
Parser
auto opt = ACLMessage::parse(raw);
if (opt) {
ACLMessage& m = *opt;
std::cout << m.getContent() << "\n";
}
Créer une réponse
// Crée automatiquement un message avec :in-reply-to rempli
ACLMessage reply = msg.createReply(ACLMessage::Performative::INFORM);
reply.setSender (AgentIdentifier{"bob"});
reply.setContent("Il est 21:00:00");