Tác giả: Yoav Fishman, Dan Kolodny, và Elior Farajpur
Ngày phát hành: 09 FEB 2026
Chuyên mục: Amazon Bedrock, Amazon Machine Learning, Amazon Nova, Artificial Intelligence, Intermediate (200)
Lần đầu tiên tôi cố gắng xây dựng một agent lập kế hoạch du lịch trông giống hệt như hầu hết các nguyên mẫu ban đầu: một mô hình lớn, một vài công cụ và một lời nhắc hệ thống dài. Nó hoạt động tốt cho đến khi sự phức tạp trong thế giới thực xuất hiện. Các chuyến bay đến từ một API rõ ràng, khách sạn nằm sau một giao diện người dùng web thay đổi liên tục, và mô hình liên tục trộn lẫn các hướng dẫn, quên ngữ cảnh hoặc tạo ra các bước ảo. Đó là lúc rõ ràng: một agent duy nhất không phải là giải pháp, mà là nút thắt cổ chai.
Tìm kiếm một giải pháp có nghĩa là chia nhỏ công việc thay vì cố gắng sửa đổi lời nhắc. Bài viết này sẽ hướng dẫn cách cộng tác giữa các agent trên Amazon Bedrock hoạt động trong thực tế, sử dụng Amazon Nova 2 Lite để lập kế hoạch và Amazon Nova Act để tương tác với trình duyệt, nhằm biến một thiết lập agent đơn lẻ dễ hỏng thành một hệ thống đa agent có thể dự đoán được.
Tổng quan giải pháp
Hệ thống được xây dựng như một nhóm nhỏ các agent làm việc cùng nhau, như được minh họa trong sơ đồ sau. Một agent lập kế hoạch công việc và giao tiếp với người dùng. Các agent khác xử lý các tác vụ cụ thể, chẳng hạn như tìm kiếm chuyến bay hoặc tìm kiếm khách sạn. Chúng giao tiếp thông qua các tin nhắn đơn giản, giúp mỗi agent tập trung vào nhiệm vụ của mình và tác vụ trở nên dễ hiểu.

Khi tôi nhận ra điểm yếu của thiết kế agent đơn lẻ, mô hình trở nên rõ ràng: agent không gặp khó khăn vì tác vụ khó, mà vì các tác vụ về cơ bản là khác nhau. Tìm kiếm chuyến bay có cấu trúc và có thể dự đoán được. Tìm kiếm khách sạn thì lộn xộn, trực quan và đầy các yếu tố động. Buộc một mô hình phải xử lý cả hai giống như yêu cầu cùng một kỹ sư viết API backend và đồng thời nhấp thủ công qua một trang web trong thời gian thực. Và càng cố gắng vá lỗi bằng các lời nhắc, nhiều công cụ hơn và logic dự phòng hơn, tình hình càng tệ hơn. Khi một agent đơn lẻ bị quá tải với quá nhiều trách nhiệm, nó sẽ chậm lại, mất ngữ cảnh, đưa ra các lựa chọn không nhất quán và cuối cùng sụp đổ dưới sức nặng của chính nó. Vấn đề nằm ở thiết kế, và cố gắng giải quyết nó thông qua lời nhắc sẽ không hiệu quả. Giải pháp là chia công việc cho ba agent và để mỗi agent tập trung vào một trách nhiệm duy nhất. Travel Agent xử lý ý định của người dùng và lập kế hoạch. Flight Agent giao tiếp với API chuyến bay có cấu trúc. Và Hotel Agent sử dụng tự động hóa trình duyệt để điều hướng các trang web khách sạn thực. Thay vì một mô hình quá tải, mỗi agent thực hiện tốt một việc — và chúng phối hợp thông qua một lớp truyền tin nhắn đơn giản, vì vậy quy trình làm việc vẫn cảm thấy liền mạch từ bên ngoài. Mỗi agent có một công việc rất rõ ràng. Travel Agent là điều phối viên diễn giải yêu cầu, chia nó thành các bước và quyết định agent nào nên chạy từng phần. Flight Agent hoàn toàn tập trung vào các lệnh gọi API có cấu trúc nơi dữ liệu có thể dự đoán được. Và Hotel Agent xử lý các phần lộn xộn: điều hướng các trang web, xử lý bố cục động và trích xuất chi tiết khách sạn từ các trang web thực. Việc tách hệ thống theo cách này giúp logic rõ ràng và ngăn các agent đơn lẻ bị quá tải trở lại.
Để thiết lập này hoạt động, các agent cần một cách đơn giản để giao tiếp với nhau. Travel Agent phải gửi một yêu cầu rõ ràng đến Flight Agent, chờ kết quả, và sau đó kích hoạt Hotel Agent với bước tiếp theo. Chúng tôi không cần bất cứ thứ gì phức tạp, chỉ cần một định dạng tin nhắn nhẹ mà các agent có thể truyền cho nhau để mỗi agent biết phải làm gì tiếp theo. Khi vòng lặp giao tiếp đó được thiết lập, toàn bộ quy trình làm việc cuối cùng đã cảm thấy được phối hợp thay vì các trang lộn xộn với bố cục động và không có API công khai. Sử dụng cùng một agent để xử lý cả hai thường dẫn đến quá tải công cụ, hướng dẫn rối rắm và nguy cơ ảo giác cao hơn.
Tổng quan triển khai
Giờ đây khi kiến trúc đã rõ ràng, đã đến lúc thực sự xây dựng hệ thống. Đây là lúc các công cụ đằng sau mỗi agent phát huy tác dụng. Cả Travel Agent và Flight Agent đều sử dụng Amazon Nova 2 Lite để suy luận và lập kế hoạch, và Flight Agent cũng gọi một API chuyến bay có cấu trúc để truy xuất dữ liệu thực. Hotel Agent dựa vào Amazon Nova Act để tự động hóa tương tác trình duyệt khi không có API. Ba agent giao tiếp thông qua một mô hình truyền tin nhắn agent-to-agent (A2A) đơn giản, nơi các agent trao đổi các tin nhắn nhỏ, có cấu trúc để phối hợp công việc của chúng, điều này giữ cho quy trình làm việc có thể dự đoán được ngay cả khi mỗi agent chạy trong một môi trường thực thi khác nhau. Trong một hệ thống đa agent, sự phối hợp cũng quan trọng như sự chuyên môn hóa. Các agent cần một cách có cấu trúc, có thể dự đoán được để trao đổi mục tiêu, chia sẻ trạng thái và kích hoạt hành vi, đặc biệt khi cộng tác trong một tác vụ như lập kế hoạch chuyến đi.
Triển khai Travel Agent (Amazon Nova 2 Lite)
Travel Agent là điều phối viên của toàn bộ quy trình làm việc. Nó nhận yêu cầu từ người dùng, diễn giải ý định bằng cách sử dụng Amazon Nova 2 Lite, và quyết định agent nào sẽ được gọi tiếp theo. Nova 2 Lite thực hiện phần suy luận nặng nề ở đây—nó chia đầu vào thành các bước, xác định khi nào cần kích hoạt Flight Agent hoặc Hotel Agent, và theo dõi kế hoạch tổng thể. Vì Travel Agent không trực tiếp chạm vào các hệ thống bên ngoài, công việc duy nhất của nó là suy nghĩ rõ ràng và định tuyến tin nhắn bằng A2A.
Ví dụ mã sau đây là một phiên bản đơn giản hóa về cách Travel Agent được khởi tạo:
# Initialize A2A client tools
provider = A2AClientToolProvider(known_agent_urls=[
"http://localhost:9000", # Hotel Booking Expert (NovaAct)
"http://localhost:9001" # Flight Booking Expert
])
bedrock_model = BedrockModel(
model_id="global.amazon.nova-2-lite-v1:0",
region_name="us-east-1",
)
# Create client agent with A2A tools
client_agent = Agent(
name="Travel Client",
model=bedrock_model,
description="Client agent that coordinates travel planning using specialized A2A agents",
tools=provider.tools,
system_prompt="""You are an autonomous travel planning agent. You MUST take action immediately without asking for confirmation."""
)
Trong thực tế, Travel Agent nhận một yêu cầu ngôn ngữ tự nhiên duy nhất, chẳng hạn như “Tìm chuyến bay từ NYC đến Tokyo vào ngày 10 tháng 7 và một khách sạn cho đến ngày 15 tháng 7.” Từ đó, Amazon Nova 2 Lite thực hiện phần suy luận nặng nề: nó nhận ra rằng cần hai tác vụ riêng biệt, tạo ra một kế hoạch rõ ràng, gửi tin nhắn đến Flight Agent, chờ kết quả, và sau đó kích hoạt Hotel Agent với hướng dẫn tiếp theo. Cuối cùng, nó tổng hợp cả hai đầu ra thành một phản hồi mạch lạc. Điều này giữ cho logic điều phối sạch sẽ và trôi chảy. Nova 2 Lite hoạt động hiệu quả như bộ não của quy trình làm việc, và các agent chuyên biệt xử lý việc thực thi thực tế.
Triển khai Flight Agent (Amazon Nova 2 Lite và API)
Flight Agent có một công việc hẹp hơn nhiều: biến một yêu cầu có cấu trúc thành các tùy chọn chuyến bay thực tế. Nó sử dụng Amazon Nova 2 Lite cho phần suy luận nhẹ nhàng cần thiết để xác thực đầu vào, định dạng tìm kiếm và quyết định có nên gọi API chuyến bay trực tiếp hay quay lại dữ liệu giả khi không có thông tin xác thực. Sau khi lệnh gọi API được thực hiện, agent trả về một phản hồi JSON rõ ràng, có thể dự đoán được cho Travel Agent thông qua A2A.
Ví dụ mã sau đây cho thấy một phiên bản đơn giản hóa của công cụ tìm kiếm chuyến bay. Việc triển khai đầy đủ, bao gồm OAuth, logic dự phòng và xử lý mã sân bay, có sẵn trong kho lưu trữ GitHub Agent to Agent with Amazon Nova:
@tooldef search_flights(origin: str, destination: str, departure_date: str, return_date: Optional[str] = None) -> str: # Nova 2 Lite handles the reasoning around which path to take if amadeus_configured(): return _search_amadeus_flights( origin=origin, destination=destination, departure_date=departure_date, return_date=return_date ) else: # Local development fallback return _search_flights_web(origin, destination, departure_date, return_date){ "flights": [ { "flight_number": "DL456", "price": 520, "duration": "14h 30m" }, { "flight_number": "JL701", "price": 545, "duration": "13h 50m" } ], "source": "Amadeus API"}
Vì agent này xử lý dữ liệu sạch, có cấu trúc, tải suy luận nhẹ và công việc của Amazon Nova 2 Lite chủ yếu là chọn đường dẫn thực thi phù hợp và chuẩn hóa đầu ra. Điều này giữ cho toàn bộ pipeline có thể dự đoán được và tránh nhúng logic cụ thể của API vào bên trong Travel Agent.
Triển khai Hotel Agent (Amazon Nova Act)
Khách sạn không giống như chuyến bay. Không có một API rõ ràng nào bạn có thể gọi, và hầu hết các trang web đặt phòng tải nội dung theo những cách thay đổi từ lần truy cập này sang lần truy cập khác. Đây là lúc Amazon Nova Act phát huy tác dụng. Hotel Agent sử dụng Nova Act để điều khiển một trình duyệt thực và tuân theo các hướng dẫn ngôn ngữ tự nhiên. Thay vì viết mã scraping dễ hỏng, agent cho Nova Act biết nó cần gì, và Nova Act sẽ xử lý việc duyệt web và trả về dữ liệu có cấu trúc.
Dưới đây là phiên bản rút gọn của công cụ:
@tooldef search_hotels(location: str, checkin_date: str, nights: int = 2) -> str: with NovaAct() as nova: result = nova.act( f"Search for hotels in {location} from {checkin_date} for {nights} nights. " f"Return the top 3 listings with name, price, and rating.", schema=HotelSearchResults.model_json_schema() ) return json.dumps(result)
Và đây là một ví dụ đơn giản hóa về phản hồi. Mã đầy đủ, bao gồm cuộn trang, biểu ngữ cookie và các chi tiết khác, có trong kho lưu trữ GitHub Agent to Agent with Amazon Nova:
{ "hotels": [ { "name": "Shinjuku Grand", "price": "$180", "rating": 4.3 }, { "name": "Park Tower Tokyo", "price": "$210", "rating": 4.6 }, { "name": "Hotel Blossom", "price": "$155", "rating": 4.0 } ], "source": "Anycompany.com via Nova Act"}
Sử dụng Amazon Nova Act giúp Hotel Agent không bị lỗi mỗi khi trang web thay đổi bố cục. Và bằng cách sử dụng nó, bạn có thể tránh viết logic scraping hoặc phân tích DOM của riêng mình.
Luồng tin nhắn A2A (cách các agent giao tiếp)
Giờ đây khi mỗi agent đã biết trách nhiệm của mình, chúng cần một cách để giao tiếp với nhau. Trước khi Travel Agent bắt đầu gửi công việc thực tế, nó kiểm tra xem các agent khác có đang hoạt động hay không bằng cách gọi các endpoint A2A của chúng. Nó cũng tải danh sách các công cụ mà mỗi agent cung cấp để Nova 2 Lite biết những khả năng nào có sẵn. Sau khi hoàn tất, luồng công việc rất đơn giản. Travel Agent gửi một tin nhắn đến Flight Agent với các trường cần thiết. Khi Flight Agent hoàn thành, nó gửi lại một tin nhắn. Sau đó, Travel Agent chuyển tin nhắn tiếp theo cho Hotel Agent. Mỗi tin nhắn là một đối tượng JSON nhỏ chứa các thông tin như hành động, dữ liệu đầu vào và nơi gửi phản hồi.
Ví dụ chạy từ đầu đến cuối
Đây là cách một lần chạy hoàn chỉnh diễn ra. Người dùng gửi một yêu cầu duy nhất đến Travel Agent:
Please arrange travel for one person from NYC to Paris on December 6, 2025, including a two night stay in Paris.
- Travel Agent -> Flight Agent:
a. Travel Agent trích xuất phần yêu cầu về chuyến bay và gửi cho Flight Agent.
b. Flight Agent trả về ba chuyến bay thẳng, giá rẻ từ JFK đến Paris, bao gồm hãng hàng không, thời gian, giá cả và thời lượng. - Travel Agent -> Hotel Agent:
a. Travel Agent gửi phần yêu cầu về khách sạn cho Hotel Agent.
b. Hotel Agent, sử dụng Nova Act, kiểm tra các khách sạn ở Paris và trả về ba lựa chọn hàng đầu với tên, giá cả và ghi chú ngắn gọn. - Kết quả cuối cùng cho người dùng
a. Travel Agent kết hợp cả hai câu trả lời và gửi lại một bản tóm tắt rõ ràng bao gồm:
i. Chuyến bay được đề xuất
ii. Khách sạn được đề xuất
iii. Ngày nhận phòng và trả phòng
iv. Giá cả
v. Một câu hỏi hỏi liệu có muốn đặt phòng hay không
Kết luận
Việc xây dựng công cụ lập kế hoạch du lịch này với ba agent nhỏ hóa ra dễ quản lý hơn nhiều so với một agent lớn. Mỗi agent tập trung vào một công việc, và Amazon Nova 2 Lite xử lý phần suy luận cần thiết để chuyển công việc từ bước này sang bước khác. Amazon Nova Act bao gồm các phần không có API, chẳng hạn như tìm kiếm khách sạn, mà không cần viết mã scraping. Luồng tin nhắn A2A giữ mọi thứ được kết nối nhưng vẫn đơn giản.
Thiết lập này không chỉ giới hạn trong lĩnh vực du lịch. Các tác vụ kết hợp nhiều bộ kỹ năng khác nhau có thể sử dụng cùng một ý tưởng: để một agent lập kế hoạch công việc, để các agent khác thực hiện các phần mà chúng giỏi, và truyền các tin nhắn nhỏ giữa chúng. Điều này giúp hệ thống dễ dàng thay đổi và giải thích.
Nếu bạn muốn tự mình thử điều này, mã nguồn đầy đủ và các ví dụ có trong kho lưu trữ GitHub Agent to Agent with Amazon Nova.
Về tác giả

Yoav Fishman là Kiến trúc sư Giải pháp AWS với 12 năm kinh nghiệm về điện toán đám mây và kỹ thuật, chuyên về GenAI, Agentic AI và an ninh mạng. Anh ấy hướng dẫn các công ty khởi nghiệp—từ giai đoạn đầu đến tăng trưởng—trong việc xây dựng kiến trúc an toàn, có khả năng mở rộng và triển khai các luồng Agentic AI mang lại tác động kinh doanh.

Elior Farajpur là Kiến trúc sư Giải pháp tại AWS với 7 năm kinh nghiệm trong thế giới đám mây và niềm đam mê với AI và các công nghệ đám mây. Anh ấy giúp các tổ chức thiết kế các giải pháp dựa trên đám mây sáng tạo mang lại giá trị kinh doanh thực sự.

Dan Kolodny là Kiến trúc sư Giải pháp AWS chuyên về dữ liệu lớn, phân tích và GenAI. Anh ấy đam mê giúp khách hàng áp dụng các phương pháp hay nhất, khám phá thông tin chi tiết từ dữ liệu của họ và nắm bắt các công nghệ GenAI mới.