# ACP - Agent Communication Protocol: Cơ chế chuẩn hóa giao tiếp giữa các AI agent

Khi xây dựng hệ thống đa tác tử (multi-agent system), bài toán phức tạp nhất không nằm ở câu lệnh prompt hay mô hình ngôn ngữ lớn (LLM), mà nằm ở giao thức...

Published: 2026-11-01 · Language: vi · Tags: AI Agent, Middleware, Kiến trúc phần mềm, REST API, Hệ thống phân tán · Canonical: https://hecigo.com/blog/acp-agent-communication-protocol/

---

Khi xây dựng hệ thống đa tác tử (multi-agent system), bài toán phức tạp nhất không nằm ở câu lệnh prompt hay mô hình ngôn ngữ lớn (LLM), mà nằm ở giao thức truyền thông giữa các thành phần. Đội ngũ kỹ thuật thường chọn các framework khác nhau cho từng nghiệp vụ: LangChain để xử lý tài liệu, crewAI để phối hợp tác vụ theo vai trò, hoặc mã nguồn tự viết cho các logic kiểm tra nội bộ. Khi số lượng agent tăng lên $N$, việc tạo các cầu nối tùy biến (custom glue code) đẩy số lượng điểm tích hợp lên $N(N - 1) / 2$, biến hệ thống thành một mạng lưới chắp vá và dễ đứt gãy khi có thay đổi API.

Agent Communication Protocol (ACP) do dự án BeeAI của IBM khởi xướng nhằm giải quyết sự phân mảnh này. Thay vì ép buộc lập trình viên dùng chung một framework hay ngôn ngữ, ACP định nghĩa một lớp chuẩn hóa giao tiếp mức ứng dụng dựa trên các nguyên tắc web quen thuộc.

## Bản chất của ACP: Giao thức tầng ứng dụng cho agent

Theo [bài giới thiệu của IBM](https://www.ibm.com/think/topics/agent-communication-protocol), ACP là một tiêu chuẩn mở thiết lập cách các AI agent gửi nhận thông điệp độc lập với môi trường chạy (runtime) hay framework nền tảng. Khác với những giao thức yêu cầu thư viện runtime chuyên biệt, ACP được thiết kế trên kiến trúc REST qua HTTP tiêu chuẩn.

Thiết kế này giải quyết ba rào cản kỹ thuật chính:

1. **Phụ thuộc SDK:** Nhiều hệ sinh thái buộc các dịch vụ phải cài đặt SDK chung để hiểu định dạng đối tượng nội bộ. ACP cho phép bất kỳ hệ thống nào gọi được lệnh HTTP (bằng `curl`, Postman, hoặc hàm `fetch` cơ bản) đều có thể gửi lệnh hoặc truy vấn dữ liệu từ agent.
2. **Khuôn mẫu dữ liệu cứng nhắc:** ACP sử dụng cấu trúc thông điệp đa phương thức (multimodal) dựa trên MIME-type. Điều này cho phép một agent gửi văn bản thuần, tệp JSON cấu trúc, hình ảnh, hoặc dữ liệu nhúng (vector embeddings) trong cùng một phong bì (envelope) mà không cần thay đổi giao thức nền.
3. **Mô hình giao tiếp ngang hàng (Peer-to-Peer):** Thay vì bắt buộc một agent trung tâm (manager/orchestrator) điều phối toàn bộ luồng, ACP cho phép các agent gọi trực tiếp lẫn nhau như những thực thể độc lập trong mạng nội bộ hoặc qua internet.

> Related: [MCP server là gì: mổ một MCP server đang chạy thật, từ 3 công cụ lên 9 và 18 KB mô tả trợ lý phải đọc](https://hecigo.com/blog/mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that/): Tìm hiểu cách Model Context Protocol tổ chức công cụ và dữ liệu cho mô hình AI ở tầng kết nối công cụ.

## So sánh kiến trúc: ACP, MCP và A2A

Để đặt ACP vào đúng vị trí kỹ thuật, cần phân biệt rõ ranh giới giữa ba tiêu chuẩn xuất hiện gần nhau: MCP, ACP và A2A.

Theo phân tích trên [công bố từ IBM Research](https://research.ibm.com/blog/agent-communication-protocol-ai), ACP không được sinh ra để thay thế Model Context Protocol (MCP) của Anthropic, mà hoạt động ở một tầng cao hơn trong ngăn xếp phần mềm.

| Tiêu chí | Model Context Protocol (MCP) | Agent Communication Protocol (ACP) | Agent2Agent (A2A) |
| :--- | :--- | :--- | :--- |
| **Mục tiêu chính** | Kết nối một mô hình AI với công cụ và tài nguyên bên ngoài | Kết nối các agent độc lập với nhau | Chuẩn hóa giao tiếp agent quy mô liên tổ chức |
| **Mô hình kết nối** | Mô hình sang Công cụ (Model-to-Tool) | Agent sang Agent (Peer-to-Peer) | Agent sang Agent (Cross-Vendor) |
| **Giao thức nền** | JSON-RPC (qua stdio hoặc HTTP SSE) | RESTful API qua HTTP | REST / JSON-RPC hỗn hợp |
| **Tổ chức khởi xướng**| Anthropic | IBM (Dự án BeeAI) | Google |
| **Đặc điểm khám phá** | Đăng ký công cụ động khi khởi tạo phiên | Khám phá ngoại tuyến (Offline Discovery) | Thẻ tác tử động (Dynamic Agent Cards) |

Như sơ đồ phân lớp trong [bài phân tích kỹ thuật của WorkOS](https://workos.com/blog/ibm-agent-communication-protocol-acp), MCP đóng vai trò như cổng cắm thiết bị ngoại vi (tương tự chuẩn USB-C) giúp một mô hình truy cập cơ sở dữ liệu hoặc API nội bộ. Trong khi đó, ACP đảm nhận việc bàn giao nhiệm vụ (task delegation), chia sẻ ngữ cảnh và theo dõi trạng thái giữa hai thực thể độc lập có khả năng suy luận.

Ví dụ: một agent phân tích tài chính sử dụng MCP để đọc số dư tài khoản ngân hàng và truy vấn dữ liệu giá cổ phiếu. Sau khi tính toán xong, agent này dùng ACP để gửi báo cáo phân tích cho một agent chuyên trách lập kế hoạch thuế xây dựng trên framework khác.

## Cơ chế vận hành: Offline Discovery và truyền tin bất đồng bộ

Trong các môi trường điều phối đám mây hiện đại, chi phí tính toán cho các mô hình ngôn ngữ đòi hỏi kiến trúc co giãn về 0 (scale-to-zero) khi không có tác vụ. Theo [tài liệu chính thức của dự án ACP](https://agentcommunicationprotocol.dev/introduction/welcome), giao thức tích hợp hai cơ chế cốt lõi để đáp ứng hạ tầng này:

### 1. Khám phá ngoại tuyến (Offline Discovery)
Trong các giao thức truyền thống, để biết một dịch vụ có khả năng gì, client phải gửi request đến endpoint đang chạy của dịch vụ đó. Nếu dịch vụ đang ở trạng thái ngủ (cold state), việc này gây lãng phí tài nguyên hoặc tạo độ trễ lớn.

ACP cho phép đóng gói mô tả khả năng (capabilities manifest) ngay trong gói phân phối (package metadata) ở thời điểm đóng gói ứng dụng (build time). Hệ thống điều phối có thể đọc định dạng manifest này mà không cần kích hoạt agent chạy thực tế. Khi có yêu cầu phù hợp với năng lực đã công bố, hạ tầng mới phân bổ tài nguyên để khởi động container chứa agent.

### 2. Thiết kế ưu tiên bất đồng bộ (Async-First)
Nhiều tác vụ của agent kéo dài từ vài giây đến nhiều phút do chuỗi suy luận (chain-of-thought) và gọi công cụ lặp đi lặp lại. Việc giữ kết nối HTTP đồng bộ (synchronous blocking) dễ dẫn đến tình trạng timeout kết nối hoặc tắc nghẽn thread pool trên API Gateway.

ACP thiết kế mặc định theo luồng bất đồng bộ:
- Client gửi một yêu cầu tạo phiên làm việc hoặc tác vụ (`run`).
- Server ACP trả về mã `202 Accepted` kèm theo một `task_id` và đường dẫn kiểm tra trạng thái.
- Quá trình truyền dữ liệu trung gian (streaming tokens, sự kiện cập nhật bước thực thi) được truyền tải thông qua Server-Sent Events (SSE) qua HTTP.

Nếu cần phản hồi tức thì cho các ứng dụng tương tác giao diện người dùng, ACP vẫn hỗ trợ chế độ đồng bộ tiêu chuẩn.

## Mô hình triển khai kỹ thuật và cấu trúc payload

Theo [hướng dẫn tích hợp BeeAI và crewAI](https://www.ibm.com/think/tutorials/acp-ai-agent-interoperability-building-multi-agent-workflows), việc bọc một logic xử lý agent vào giao diện tương thích ACP chỉ đòi hỏi một lớp adapter chuyển đổi định dạng thông điệp. 

Dưới đây là kiến trúc một máy chủ ACP tối giản viết bằng TypeScript, minh họa cơ chế tiếp nhận yêu cầu từ hệ thống bên ngoài và trả về phản hồi theo định dạng chuẩn:

```typescript
import express, { Request, Response } from 'express';

interface MessagePart {
  content_type: string;
  content: string;
}

interface AcpMessage {
  role: 'user' | 'assistant' | 'system';
  parts: MessagePart[];
}

interface AcpRunRequest {
  messages: AcpMessage[];
  session_id?: string;
  context?: Record<string, unknown>;
}

const app = express();
app.use(express.json());

// Khai báo manifest năng lực phục vụ discovery
app.get('/manifest', (req: Request, res: Response) => {
  res.json({
    schema_version: '1.0.0',
    agent_id: 'inventory-reconciliation-agent',
    description: 'Kiểm tra độ lệch tồn kho giữa POS và ERP',
    input_modes: ['text/plain', 'application/json'],
    output_modes: ['application/json']
  });
});

// Endpoint tiếp nhận tác vụ xử lý
app.post('/runs', async (req: Request, res: Response) => {
  const payload = req.body as AcpRunRequest;
  
  if (!payload.messages || payload.messages.length === 0) {
    return res.status(400).json({ error: 'Payload thiếu trường messages' });
  }

  // Trích xuất nội dung từ envelope của ACP
  const lastMessage = payload.messages[payload.messages.length - 1];
  const rawInput = lastMessage.parts.map(p => p.content).join(' ');

  // Giả lập logic xử lý đối soát của agent
  const resultSummary = {
    processed_timestamp: new Date().toISOString(),
    matched_records: 142,
    discrepancies_found: 3,
    input_received: rawInput
  };

  // Trả về định dạng chuẩn ACP
  return res.status(200).json({
    role: 'assistant',
    parts: [
      {
        content_type: 'application/json',
        content: JSON.stringify(resultSummary)
      }
    ]
  });
});

const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`ACP agent server đang chạy tại cổng ${PORT}`);
});
```

Mô hình trên cho thấy một điểm mấu chốt: agent nhận vào danh sách `messages` chứa mảng `parts` có trường `content_type` cụ thể. Lớp middleware này tách biệt hoàn toàn phần lõi xử lý bên trong với các ứng dụng bên ngoài đang gọi tới.

## Giới hạn vận hành và bước chuyển dịch sang A2A

Dù giải quyết tốt bài toán đóng gói REST và khám phá ngoại tuyến, việc triển khai ACP trong môi trường sản xuất thực tế làm bộc lộ một số giới hạn cấu trúc:

1. **Quản lý phiên và trạng thái chia sẻ (Shared Memory):** ACP định nghĩa rất tốt cấu trúc gửi nhận theo lượt, nhưng chưa có chuẩn thống nhất cho việc chia sẻ bộ nhớ phân tán khi nhiều agent chạy song song trên các cụm máy chủ khác nhau.
2. **Xác thực và ủy quyền phân tán:** Khi một agent gọi trung gian qua 3 agent khác thuộc 3 hệ thống mạng riêng biệt, việc duy trì chuỗi ủy quyền (delegation chain) mà không để lộ khóa bí mật yêu cầu một lớp bảo mật phức tạp hơn HTTP Bearer token thông thường.

Theo [thông tin cập nhật từ IBM Research](https://research.ibm.com/projects/agent-communication-protocol), dự án ACP hiện đã chính thức sáp nhập vào sáng kiến Agent2Agent (A2A) dưới sự quản lý của Linux Foundation. Đội ngũ phát triển BeeAI đang đóng góp mã nguồn, đặc tả và kinh nghiệm vận hành của ACP vào A2A nhằm tạo ra một tiêu chuẩn chung duy nhất cho toàn ngành, tránh việc tiếp tục phân mảnh giữa hai chuẩn tương tự nhau.

Đối với các kỹ sư tích hợp, tư duy cốt lõi của ACP vẫn giữ nguyên giá trị: không viết logic điều phối phụ thuộc chặt vào SDK của một nhà cung cấp cụ thể. Việc bọc giao tiếp giữa các agent qua lớp giao thức HTTP RESTful chuẩn hóa đảm bảo rằng khi một mô hình hoặc framework mới xuất hiện, hệ thống chỉ cần thay thế phần xử lý nghiệp vụ bên trong mà không làm đứt gãy luồng trao đổi dữ liệu toàn cục.

> **Thấy hữu ích? Theo dõi hecigo trên [Zalo OA](https://zalo.me/3108963776852260798)** để nhận bài viết kỹ thuật mới sớm nhất - không spam, chỉ nội dung thực tế. Hoặc [liên hệ trực tiếp](https://hecigo.com/#contact) nếu bạn cần hỗ trợ triển khai.

> Related: [Đọc tiếp: Middleware: phần việc n8n, OpenClaw và mọi nền tảng tự động hóa không làm hộ bạn](https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/): Tìm hiểu vai trò của lớp trung gian khi kết nối các hệ sinh thái xử lý dữ liệu khác nhau.

## Nguồn tham khảo

- [What is Agent Communication Protocol (ACP)? | IBM](https://www.ibm.com/think/topics/agent-communication-protocol) - www.ibm.com
- [Agent Communication Protocol (ACP) - IBM Research](https://research.ibm.com/projects/agent-communication-protocol) - IBM Research
- [Welcome - Agent Communication Protocol](https://agentcommunicationprotocol.dev/introduction/welcome) - Agent Communication Protocol
- [An open-source protocol for AI agents to interact - IBM Research](https://research.ibm.com/blog/agent-communication-protocol-ai) - IBM Research
- [IBM's Agent Communication Protocol (ACP): A technical overview for software engineers](https://workos.com/blog/ibm-agent-communication-protocol-acp) - workos.com
- [Using ACP for AI agent interoperability: Building multi-agent workflows](https://www.ibm.com/think/tutorials/acp-ai-agent-interoperability-building-multi-agent-workflows) - www.ibm.com

---

Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com
