Several research communities have approached distributed computing by casting it as a problem of modeling communication and cooperation among autonomous entities. Effective communication among independent actors requires four components: (1) a transport mechanism carrying messages in an asynchronous fashion, (2) an interaction protocol defining various types of communication interchange and their social implications (for instance, a response is expected of a question), (3) a content language permitting the expression and interpretation of utterances, and (4) an agreed-upon set of shared vocabulary and meaning for concepts (often called an ontology). Such mechanisms permit a much richer style of interaction among participants than can be expressed using a distributed object's RPC model or a blackboard architecture's centralized exchange approach.
Undoubtably, the most widely used foundation technology for agent-based software engineering is the Knowledge Query and Manipulation Language (KQML) [[Labrou and Finin1997], [Finin et al. 1997]]. KQML, which specifies an interaction protocol, is often used in conjunction with the Knowledge Interchange Format (KIF) [[Genesereth and Fikes1992]] as content language, and either ad hoc or more formalized ontologies. KQML introduced the use of symbolic performatives to capture information about the purpose of a communication, and its place within a conversation. Although creating a standardized representation for conversational interactions is one important aspect of multiagent cooperation, KQML is limited by its reliance on a fixed core set of atomic performatives, and the inevitable difficulty in arriving at just the right set capable of expressing every kind interaction and service request.
Another influential approach, which makes stronger assumptions about the knowledge and processing used within individual agents, is based on the structuring of the agents' activities around the concepts of Belief, Desire, and Intention (BDI) [[Rao and Georgeff1995]]. While BDI's emphasis on a higher level of abstraction has been extremely important in giving direction to work on agent-based systems, its applicability may be limited by the structural requirements imposed on individual agents, and by difficulties in interoperating with legacy systems.