22/04/2025

So sánh hai giao thức MCP và A2A

 

Mới đây Google đã công bố một giao thức mở có tên A2A (Agent2Agent), với mục tiêu chuẩn hóa cách chúng ta triển khai giao tiếp trong hệ thống đa tác tử (MultiAgent Systems). Giao thức này được xem như có những đặc điểm bổ trợ cho những hạn chế trước đó của giao thức MCP (Model Context Protocal) của Antropic, một giao thức cũng nhằm đóng gói các bộ công cụ cần thiết và kết nối mô hình tới chúng.


Những giao thức kết nối này gần đây đã làm chấn động cộng đồng AI và hứa hẹn sẽ thay đổi cách thức thiết kế và giao tiếp giữa các AI Agents trong thời gian tới.


Hãy cùng xem xét sự khác biệt và cách hai giao thức này bổ trợ cho nhau trong bài viết này:


I. Giới thiệu giao thức MCP

Giao thức MCP xây dựng một kết nối client-server giữa Agent với những bộ công cụ thường được sử dụng. Ba thành phần chính trong một kết nối MCP bao gồm:

1) MCP Host – Các chương trình sử dụng LLM làm lõi và muốn truy cập dữ liệu thông qua MCP. 

Note: Khi kết hợp với A2A, một Agent sẽ trở thành MCP Host.

2) MCP Client – Các client duy trì kết nối 1:1 với server.

3) MCP Server – Các chương trình nhẹ, cung cấp năng lực cụ thể thông qua giao thức chuẩn hóa Model Context Protocol.

Ngoài ra các loại dữ liệu có thể được sử dụng như những thông tin bổ sung cho LLM thông qua MCP Server bao gồm:

4) Nguồn dữ liệu cục bộ – Các tập tin, cơ sở dữ liệu và dịch vụ trên máy tính của bạn mà MCP Server có thể truy cập một cách an toàn.

5) Nguồn dữ liệu từ xa – Các hệ thống bên ngoài truy cập qua internet (ví dụ: qua API) mà MCP Server có thể kết nối đến.


II. Sự xuất hiện của A2A

MCP hướng tới cung cấp một giao thức chuẩn kết nối giữa agent tới tools nhưng không cho thấy khả năng tương tác mở rộng giữa các Agents. Ở những điểm MCP còn thiếu sót này sẽ được A2A bù đắp. Trong các ứng dụng Multi-Agent mà trạng thái không nhất thiết phải được chia sẻ, các Agent (MCP Host) sẽ triển khai và giao tiếp qua giao thức A2A, cho phép:


- Triển khai an toàn: Bổ sung thêm cơ chế xác thực mà MCP đang bị thiếu.

- Quản lý nhiệm vụ và trạng thái: Các nhiệm vụ và trạng thái sẽ được quản lý bên trong các hệ thống Multi-Agent một cách chặt chẽ.

- Thực hiện các tác vụ phức tạp: A2A cho phép lập kế hoạch, phối hợp và thảo luận giữa nhiều Agent nên giúp kết quả đạt được có độ chi tiết và chính xác cao.

- Tuy nhiên A2A cũng phát sinh các hạn chế: Cơ chế xử lý qua nhiều tương tác sẽ tăng thời gian cần thiết giải quyết các tác vụ và chi phí inference.


III. Suy nghĩ của tôi

Cả hai giao thức MCP và A2A đang trong giai đoạn bắt đầu hình thành nên sẽ có những cải tiến sắp tới ở hai giao thức này. Trong dài hạn, chúng ta sẽ chứng kiến một cuộc đua cải tiến giữa các giao thức để hướng tới hình thành một tiêu chuẩn lâu dài khi cả hai đang dần dần mở rộng các tính năng của chúng.


Source:

- MCP: https://www.anthropic.com/news/model-context-protocol

- Agent2Agent: https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/

Compare MCP and A2A: 

- https://www.linkedin.com/pulse/mcp-a2a-dream-team-ai-helpers-manish-surapaneni-cfcic/

- https://www.linkedin.com/posts/aurimas-griciunas_llm-ai-machinelearning-activity-7316420758648315907-Tzuy/

Danh sách công cụ AI để "việc gì cũng làm được"



1+2. HeyGen + 11Labs
→ Combo tạo video AI “như người thật”

- Tạo Avatar AI giống hệt bạn (cử chỉ, nét mặt, giọng nói)
- Chỉ cần quay 2-5 phút video gốc → sau đó tạo cả loạt video mà không cần bạn xuất hiện!
- Đặc biệt phù hợp với người dạy online, b,án hàng bằng video.

-------

3. Suno AI → Tạo nhạc nền gốc không dính bản quyền

- Không còn phải dùng Epidemic hay YouTube library

- Tạo nhạc đúng vibe video, cá nhân hóa mà không lo bị “ăn gậy”

→ Dành cho Vlog, Reels, intro khóa học, video cảm xúc…

-------

4. NotebookLM (Google) → Biến blog/PDF thành podcast biết trao đổi

- Cho blog, sách, PDF vào → AI tự tóm tắt và chuyển thành audio

- Có thể hỏi ngược lại nội dung tài liệu như hỏi ChatGPT

→ Phù hợp với ai thích học nhanh, đọc nhiều hoặc tóm tắt tài liệu

-------

5. Claude (Anthropic) → Viết code, tự chạy luôn trên máy ảo!

- Chỉ cần mô tả ứng dụng của bạn. Claude nghe, hiểu và tự làm

- Viết app, viết hàm, thậm chí chơi ga,me đơn giản

→ Dành cho người không biết code nhưng muốn build nhanh.

-------

6. OMI → AI ghi nhớ & tóm tắt mọi cuộc trò chuyện

- AI ghi lại nội dung các cuộc họp. Sau đó bạn có thể hỏi lại.

→ Tương lai của ghi chép – phù hợp với sales, founder, cố vấn, coach…

-------

7. Instantly + Apollo → Tự động g,ửi email chào h,àng + chốt lịch hẹn

- Xác định kh,ách hàng lý tưởng → AI viết và gửi email phù hợp

→ Tăng do,anh số, tiết kiệm nhân sự sale mạnh.

-------

8. Flux AI → Tạo ảnh người thật siêu thực, dùng cho thumbnail, banner, social

- Upload hình bạn → AI tạo ảnh bạn mặc gì cũng được, làm gì cũng được

- Chất lượng cao hơn Midjourney, dùng cho LinkedIn, Reels, bìa video…

→ Dành cho ai cần “ảnh đẹp nhưng lười chụp”.

-------

9. Perplexity → Google thế hệ mới dành cho người làm content

- Trả kết quả theo thời gian thực, kèm nguồn, rõ ràng hơn cả ChatGPT

→ Dùng để tìm insight, thông tin mới, update xu hướng hàng ngày.


26/01/2025

Drone hỏa thuật là gì?

 Theo kế hoạch, TP.Hà Nội tổ chức chương trình nghệ thuật “Rực rỡ Thăng Long 2025” với điểm nhấn là màn trình diễn thiết bị bay không người lái (drone) hỏa thuật lớn nhất thế giới từ trước tới nay trong đêm giao thừa xuân Ất Tỵ 2025.

Theo báo Lao động, đây là loại hình trình diễn thiết bị bay không người lái hiện đại, kết hợp giữa trình diễn công nghệ ánh sáng (drone light) và pháo sáng nghệ thuật với các hiệu ứng đặc biệt như nhấp nháy, thác nước, phun sáng….
Sau sự cố hàng loạt drone rơi lộp độp, phát nổ vừa xong trong buổi tổng duyệt, nhiều cư dân mạng cho rằng do drone mang theo pháo sáng. Đây là suy diễn rất saiiiii.
Bài viết mô tả rõ đây là sự kết hợp giữa drone light show (trình diễn ánh sáng bằng drone) và pháo sáng nghệ thuật.
Sử dụng các drone được lập trình bay theo đội hình, mỗi drone được trang bị đèn LED đa sắc, tạo ra những hình ảnh, hoạt cảnh hoặc hiệu ứng ánh sáng trên bầu trời. Kết hợp thêm pháo hoa, pháo thác nước (các tia sáng chảy xuống giống thác nước), hoặc pháo nhấp nháy để tăng thêm sự rực rỡ, tạo chiều sâu và điểm nhấn cho màn trình diễn.

Hình ảnh trong lúc tổng duyệt vừa xong, trước khi sự cố xảy ra

Hình ảnh trong lúc tổng duyệt vừa xong, trước khi sự cố xảy ra

Ngay sau màn trình diễn drone hỏa thuật sẽ là màn bắn pháo hoa tầm cao vào đúng khoảnh khắc giao thừa để đón chào năm mới Ất Tỵ 2025.
Công ty Cổ phần giải pháp Kinh doanh Corex - đơn vị nhập khẩu toàn bộ hệ thống thiết bị drone mới nhất từ Hàn Quốc, kết hợp với các chuyên gia Việt Nam và nước ngoài cùng tham gia sáng tạo, lập trình để mang tới một màn trình diễn độc đáo với số lượng drone hỏa thuật lớn nhất thế giới tính đến thời điểm hiện tại, dự kiến sẽ mang về cho Hà Nội kỷ lục Guinness thế giới.



Hình ảnh hàng loạt drone hỏa thuật bị rơi, cháy khét trong đêm tổng duyệt tại Mỹ Đình


23/08/2023

Các directives cơ bản trong Laravel Blade

 là các phần quan trọng giúp bạn thực hiện các thao tác như điều kiện, vòng lặp, xuất dữ liệu, kế thừa giao diện và nhiều tác vụ khác một cách dễ dàng. Dưới đây là một số directives phổ biến mà bạn thường sẽ sử dụng trong Laravel Blade:


  1. @if, @else, @elseif, @endif: Sử dụng để thực hiện câu lệnh điều kiện.
  2. @unless, @endunless: Tương tự như @if, nhưng thực hiện điều kiện phủ định.
  3. @foreach, @endforeach: Dùng để thực hiện vòng lặp qua một mảng hoặc collection.
  4. @for, @endfor: Dùng để thực hiện vòng lặp theo số lần cụ thể.
  5. @while, @endwhile: Sử dụng để thực hiện vòng lặp khi điều kiện còn đúng.
  6. @switch, @case, @default, @endswitch: Dùng để thực hiện câu lệnh switch-case.
  7. @include('view.name'): Kết hợp một view vào trong view hiện tại.
  8. @yield('section'), @section('section'), @show, @endsection: Sử dụng cho việc kế thừa và quản lý các phần nội dung của các view.
  9. @extends('layout.name'): Kế thừa layout cho view hiện tại.
  10. @stack('scripts'), @push('scripts'), @endpush: Sử dụng để quản lý các phần kịch bản (scripts) trong layout.
  11. @auth, @guest, @endauth, @endguest: Dùng để kiểm tra trạng thái xác thực của người dùng.
  12. @verbatim, @endverbatim: Ngăn Blade xử lý mã HTML bên trong chúng.
  13. @csrf: Sinh ra mã CSRF token để bảo vệ khỏi tấn công Cross-Site Request Forgery.
  14. @inject: Dùng để tiêm các dependency vào view.



Các directives trên đây là chỉ một số ví dụ cơ bản và phổ biến. Blade cung cấp nhiều directives khác giúp bạn xây dựng giao diện và tương tác với dữ liệu một cách linh hoạt trong ứng dụng Laravel của bạn.

16/08/2023

12 Directives hay dùng trong Laravel Blade

 Như các bạn đã biết Laravel Blade là một công cụ để thể hiện view trong Laravel, hay nói cách khác nôm na khi chạy lên chương trình thì nó sẽ như một file HTML vậy. Chúng được tạo bởi các file có đuôi là .blade.php và nằm trong thư mục resource/views của framework Laravel. Và hôm nay mình sẽ giới thiệu 12 Directives mà bạn sẽ có thể hay phải dùng tới khi làm việc với Laravel Blade nhé, bắt đầu nào.


@include

Đầu tiên là phải kể đến @include một Directive hay dùng nhất khi chúng ta làm việc với view blade, nó cho phép đưa một view ở một file blade khác vào view này của bạn. Ví dụ một trang có 3 phần cơ bản là header.blade.phpcontent.blade.phpfooter.blade.php thì ở trong file content.blade.php ta có thể include phần view header và footer như sau:

@include('header')

    <body>
        // your content
    </body>

@inlcude('footer')

Hoặc bạn cũng có thể truyền kèm theo một mảng dữ liệu qua view như sau:

@include ( 'partials.sidebar' , [ 'menu' => $menu])

@push and @stack

Laravel Blade cho phép xác định một trình giữ chỗ được gọi stack và sau đó đẩy các giá trị sang stack đó. Điều này có thể rất hữu ích để gọi một hoặc nhiều file javascript theo yêu cầu của từng trang view khác nhau.

@push('scripts')
    <script src="/example.js"></script>
@endpush
<head>
    <!-- Head Contents -->

    @stack('scripts')
</head>

@php

Đối với các mã PHP thì Blade cho phép sử dụng trong View của Laravel, chúng ta chỉ cần mở mã PHP bằng các @php và đóng lại khối mã PHP đó bằng @endphp là ok, đơn giản phải không 

@php
 // code php here
@endphp

@hasSection

Khi tạo bố cục phức tạp trong Laravel Blade, bạn có thể kiểm tra xem một phần có nội dung bằng cách sử dụng @hasSection để thực hiện việc kiểm tra này.

@hasSection('navigation')
    <div class="pull-right">
        @yield('navigation')
    </div>

    <div class="clearfix"></div>
@endif

@each

@each của Laravel Blade cho phép bạn kết hợp vòng lặp và đưa vào một dòng. Ví dụ:

@each('view.name', $jobs, 'job')

Trong đó, view.name là phần view sẽ hiển thị cho từng phần của $job, còn $job sẽ là biến dùng để lặp để gán từng phần vào biến job. Ngoài ra bạn cũng có thể truyền đối số thứ tư để hiển thị view nếu đối tượng hoặc mảng đó rỗng

@each('view.name', $jobs, 'job', 'view.empty')

@includeWhen

@includeWhen là phần mở rộng của @include. Lệnh này sẽ bao gồm một view nếu điều kiện đã cho là đúng.

@includeWhen ($ isUserAdmin, 'users.admin_card' , [ 'user' => $ user])

Trong ví dụ trên thì @includeWhen() sẽ kiểm tra giá trị của biến $isUserAdmin và nếu biến đó đúng, nó sẽ bao gồm cả view của riêng quản trị viên là users.admin_card.

@json

Đôi khi bạn có thể chuyển một mảng vào view của mình với ý định hiển thị nó dưới dạng JSON để khởi tạo một biến JavaScript. Ví dụ:

<script>
    var app = <?php echo json_encode($array); ?>;
</script>

Tuy nhiên, thay vì gọi thủ công json_encode, bạn có thể sử dụng lệnh @json của Blade. Lệnh này chấp nhận các đối số tương tự như json_encode của PHP

<script>
    var app = @json($array);

    var app = @json($array, JSON_PRETTY_PRINT);
</script>

@forelse

Ví dụ giờ bạn phải hiển thị hết tên của một danh sách người dùng thì bạn chỉ việc dùng @foreach để lặp đúng không? Nhưng nếu thêm yêu cầu là phải kiểm tra xem danh sách đó có dữ liệu hay chưa thì bạn lại thêm câu điều kiện @if vào như sau:

@if($users->count() > 0)
	@foreach($users as $user)
		{{ $user->name }}
	@endforeach
@else
	No Users Found	
@endif

Tuy nhiên, trong Laravel Blade @forelse sẽ làm code của bạn gọn gàng hơn rất nhiều đó ))

@forelse($users as $user)
	{{ $user->name }}
@empty
	No Users Found
@endforelse

// đơn giản và clear hơn rất nhiều đúng không :P

@verbatim

Nếu bạn đang hiển thị các biến JavaScript trong một phần lớn của view, bạn có thể gói HTML trong @verbatim để bạn không phải đặt tiền tố cho mỗi câu lệnh echo Blade bằng một ký hiệu @ nữa

@verbatim
    <div class="container">
        Hello, {{ name }}.
    </div>
@endverbatim

@isset and @empty

Thông thường trong PHP chúng ta sử dụng hàm isset() và empty() để kiểm tra xem giá trị của biến có trống hay không thì trong Laravel Blade sẽ cung cấp @isset() và @empty() để thay thế mã PHP thông thường.

@if(isset($users))
// your logic here
@endif

@if(empty($users))
// your logic here
@endif

Trong Blade sẽ thành như sau:

@isset($users)
// your logic here
@endisset

@empty($users)
// your logic here
@endempty

@inject

@inject được sử dụng để truy xuất từ Service Container của Laravel và đưa vào view của bạn.

Đối số đầu tiên được truyền cho @inject này là một tên biến mà service sẽ được đặt vào, trong khi đối số thứ hai là Service mà bạn muốn gọi đến.

@inject('menu', 'App\Services\MenuService')

// then in your view

{!! $menu->render() !!}

@csrf and @method

Khi bạn tạo Form trong Blade thì cần dùng @csrf để khai báo trường CSRF ẩn dùng để xác thực yêu cầu.

<form method="POST" action="/profile">
    @csrf

    ...
</form>

Bên cạnh đó thì từ khi HTML không hỗ trợ các method PUT, PATCH và DELETE thì trong Blade bạn sẽ cần phải thêm một method ẩn _method để spoof những động từ HTTP. Lệnh @method trong Blade có thể tạo trường này cho bạn:

<form action="/foo/bar" method="POST">
    @method('PUT')

    ...
</form>

Trên đây 12 Directives trong số rất nhiều Directives khác của Laravel Blade mà mình đề cập tới, mong qua bài này sẽ giúp được cho các bạn ít nhiều khi làm project của mình. Cảm ơn các bạn đã đọc bài, xin chào và hẹn gặp lại!