Truyền thông là cách để các tác tử trao đổi thông tin, trên cơ sởđó chúng cộng tác với nhau để thực thi công việc. Giao thức truyền thông là nhân tố quan trọng quyết định chất lượng hợp tác giữa các tác tử. Trong hệ đa tác tử, các tác tử trao đổi thông tin với nhau bằng nhiều cách: trao đổi trực tiếp bằng các thông điệp, tự tổ chức trao đổi trong một hệ thống hợp nhất, giao tiếp thông qua tác tử trợ giúp (facilitator) hay chúng có thể quảng bá các thông điệp. Một cách khác phổ biến hơn để các tác tử giao tiếp với nhau là thông qua một kho dữ liệu dùng chung (blackboard), trong đó các thông tin được gửi vào và lấy ra.
Ngôn ngữ truyền thông giữa các tác tử
Các tác tử có khả năng tương tác với người sử dụng, với các dịch vụ hệ thống hoặc tác tử khác. Để giao tiếp với nhau thì chúng cần ngôn ngữ. Ngôn ngữ truy vấn và thao tác tri thức (Knowledge Query and Manipulation Language - KQML) là ngôn ngữ dùng cho giao tiếp mức thông điệp giữa các tác tử.
KQML được hiểu như là một giao thức định dạng và xử lý thông điệp, cung cấp khả năng chia sẻ tri thức giữa các tác tử. Các đặc điểm cơ bản của KQML là:
- Không trong suốt với nội dung mà chúng mang: Các thông điệp KQML không chỉ đơn thuần là những câu giao tiếp, chúng còn thể hiện quan điểm về một nội dung như xác nhận, yêu cầu, truy vấn, trả lời.
- Cơ sở của ngôn ngữ là các biểu hiện (performative): Các biểu hiện định nghĩa các hành động giữa các tác tử
- Hỗ trợ truyền thông điểm - điểm: xét ở cấp độ một tác tử, sự truyền thông được coi như là sự truyền thông điệp từđiểm này tới điểm khác.
- Cho phép sự góp mặt của các tác tử trợ giúp: Môi trường trong đó các tác tử giao tiếp với nhau bằng KQML có thể có sự góp mặt của các tác tửđặc biệt, gọi là các tác tử trợ giúp. Đó là các tác tử hỗ trợ cho các tác tử khác các chức năng để giải quyết các vấn đề xảy ra, chẳng hạn như liên hệ giữa các địa chỉ vật lý với các tên tượng trưng, hỗ trợ việc đăng ký của các tác tử, việc tìm kiếm các dịch vụ, các dịch vụ giao tiếp nâng cao như chuyển tiếp, môi giới.
KQML định nghĩa một tập các mẫu thông điệp. Sau đây là một ví dụ về thông điệp KQML: (ask-if :sender A :receiver B :language Prolog :ontology foo
:reply- with id1
:content “bar(a,b)” )
Trong ngôn ngữ KQML, ask-if là một biểu hiện. Trong ví dụ trên, một tác tử có tên là A (:sender) hỏi tác tử B (:receiver) bằng ngôn ngữ Prolog (:language) về trạng thái thật của “bar(a,b)” (:content). Bất kỳ câu trả lời nào cho thông điệp KQML này sẽđược nhận dạng bởi id1 (:reply-with). Ontology tên foo có thể cung cấp thêm thông tin về việc thông dịch :content.
Giả sử rằng B không có khả năng thực hiện các thao tác mà A đề nghị trong thông điệp trước, khi đó B sẽ trả lời A bằng thông điệp như sau:
(sorry
:sender B :receiver A
:in-reply-to id1 :reply-with id2 )
Tác tử B (:sender) sử dụng biểu hiện sorry để thông tin cho A(:receiver) biết rằng nó không thể thực hiện việc xác định bar(a,b). Tác tử A sẽ biết được chính xác thông điệp này muốn nói đến sự xác định nào bởi vì B sử dụng tham số: in-reply-to với giá trị id1.