Hugging Face Blog
85

Sản phẩm

Những bài học kinh nghiệm từ quá trình phát triển Shippy - AI Agent chuyên biệt

(giờ Việt Nam)

Tóm tắt AI

Bài viết chia sẻ những thách thức và bài học thực tế từ đội ngũ AllenAI trong quá trình xây dựng Shippy, một AI Agent được thiết kế để tối ưu hóa các tác vụ phức tạp.

Bản dịch AI

What building Shippy taught us about building agents

Quay lại các bài viết

Shippy là một tác nhân AI hàng hải được xây dựng cho các quyết định có tính rủi ro cao, nơi mà câu trả lời sai có thể gây ra những tác động thực tế. Dưới đây là kiến trúc đằng sau nó—và những bài học mà chúng tôi đang áp dụng vào các nền tảng môi trường khác của Ai2.

Shippy answering a live query about Ghana's EEZ

Shippy đang trả lời một truy vấn trực tiếp về Vùng đặc quyền kinh tế (EEZ) của Ghana. Phản hồi hiển thị cách nó thực hiện: nguồn ranh giới, thời điểm cắt dữ liệu, dấu thời gian của truy vấn và một liên kết sâu (deep link) quay lại bản đồ Skylight để nhà phân tích có thể xác minh từng con số.

Xây dựng một tác nhân AI cho một lĩnh vực vận hành có tính rủi ro cao như bảo vệ đại dương, trên hết, là một bài toán về độ tin cậy. Đối với một nhà phân tích hàng hải, một câu trả lời sai có thể khiến tàu tuần tra đi chệch hướng hàng dặm, gây lãng phí nguồn lực vốn đã hạn hẹp và có khả năng đặt nhân sự vào tình thế nguy hiểm.

Vì vậy, khi đội ngũ Skylight bắt đầu xây dựng Shippy, AI của chúng tôi phục vụ nhận thức về lĩnh vực hàng hải theo thời gian thực, công việc thực sự không nằm ở mô hình. Đó là việc xây dựng một hệ thống mà chúng tôi có thể tin tưởng về độ chính xác, giữ cho nó hoạt động trong giới hạn cho phép và duy trì hiệu quả trên nhiều nhiệm vụ khác nhau. Và chúng tôi phải xác minh tất cả những điều đó dựa trên dữ liệu trực tiếp của Skylight, được cập nhật liên tục khi có tín hiệu vệ tinh và tàu thuyền mới—chứ không phải là một ảnh chụp tĩnh.

Giải phẫu tác nhân: kỹ năng, linh hồn và cấu hình

Chúng tôi coi một tác nhân như Shippy bao gồm ba thành phần: linh hồn, kỹ năng và cấu hình.

Linh hồn là lời nhắc hệ thống (system prompt) định hình tính cách của Shippy và thiết lập các ranh giới hành vi. Kỹ năng cho Shippy biết cách xử lý các loại yêu cầu cụ thể. Cùng nhau, linh hồn và kỹ năng được đóng gói vào một Docker image—một cấu phần có phiên bản, có thể triển khai, xác định Shippy là gì. Cấu hình bao gồm mọi thứ khác: sử dụng khung tác nhân nào (trong trường hợp của Shippy là OpenClaw, một khung tác nhân mã nguồn mở), sử dụng LLM nào (hiện tại, Shippy dựa vào Claude Opus 4.6) và các thiết lập thời gian chạy. Các thông tin bảo mật như khóa API được đưa vào tại thời điểm chạy; việc thay đổi mô hình hoặc khung tác nhân chỉ là thay đổi cấu hình, không phải xây dựng lại.

Các kỹ năng của Shippy tuân theo cùng một đặc tả kỹ năng tác nhân được sử dụng bởi các công cụ lập trình như Claude Code và Codex—các tệp markdown thuần túy với phần frontmatter có cấu trúc. Điều này giúp mỗi kỹ năng dễ hiểu, được quản lý phiên bản và dễ dàng sửa đổi. Shippy hiện bao gồm các kỹ năng cho:

Ví dụ, kỹ năng truy vấn API Skylight mã hóa toàn bộ quy trình làm việc để trả lời một câu hỏi về một khu vực cụ thể. Khi một nhà phân tích hoặc người dùng hỏi, "hãy cho tôi xem hoạt động đánh bắt cá trong EEZ của Panama tháng trước", các hướng dẫn của kỹ năng này chỉ đạo Shippy trước tiên phải phân giải "Panama EEZ" thành một đa giác ranh giới thông qua API khu vực của Skylight thay vì đoán hoặc mã hóa cứng tọa độ, sau đó truy vấn các Sự kiện đánh bắt trong hình học đó, định dạng kết quả với các liên kết sâu quay lại bản đồ Skylight và ghi nhận bất kỳ siêu dữ liệu tàu thuyền nào được lấy từ các đối tác của Skylight như Global Fishing Watch hoặc TMT.

Một câu hỏi duy nhất đặt ra cho Shippy có thể kết nối với nhiều kỹ năng cùng lúc. "Có tàu nào đang hoạt động gần Khu bảo tồn biển (MPA) Cordillera de Coiba không?" dựa trên kỹ năng Skylight để truy vấn dữ liệu, cơ sở dữ liệu của đối tác ProtectedSeas của chúng tôi để lấy bối cảnh ranh giới MPA và kỹ năng theo dõi tàu thuyền để giải thích hành vi của tàu. Tất cả những điều này diễn ra trong một lượt đối thoại duy nhất.

Linh hồn xác định những gì Shippy sẽ và sẽ không làm. Nó sẽ không đưa ra các quyết định pháp lý về việc liệu một con tàu có đang vi phạm pháp luật hay không—đó là quyết định dành cho con người, không phải cho một tác nhân. Nó cũng sẽ không suy đoán ngoài những gì dữ liệu hỗ trợ. Những ranh giới này được quy định rõ ràng trong lời nhắc hệ thống, không phải ngầm định trong quá trình tinh chỉnh (fine-tuning), điều này giúp chúng có thể kiểm toán và dễ dàng sửa đổi.

Các công cụ tất định cho một tác nhân phi tất định

Các tác nhân là phi tất định. Bạn không thể kiểm soát những gì mô hình quyết định làm, nhưng bạn có thể làm cho các công cụ mà nó sử dụng trở nên có thể dự đoán được. Để đạt được mục tiêu đó, Shippy 'trò chuyện' với Skylight thông qua một CLI được xây dựng có mục đích để gọi API, thay vì tự đưa ra các lệnh gọi thô.

API của chúng tôi có hàng chục loại đầu vào, các đối tượng bộ lọc lồng nhau, con trỏ phân trang và các đầu vào hình học phức tạp. Trong các bản mẫu ban đầu, chúng tôi để Shippy tự xây dựng các lệnh gọi API từ đầu. Nó tạo ra một luồng lỗi tinh vi liên tục: phân trang sai định dạng khiến kết quả bị mất một cách âm thầm, lỗi mã hóa hình học và các truy vấn trông có vẻ đúng nhưng lại trả về dữ liệu sai do hiểu sai loại bộ lọc.

Skylight CLI thu gọn sự phức tạp đó thành một giao diện có thể dự đoán được. Shippy đưa ra một lệnh duy nhất – skylight events search với các cờ bộ lọc được định kiểu – và CLI xử lý xác thực, phân trang và đầu ra có cấu trúc. CLI cũng tự ghi tài liệu: văn bản --help phong phú và các thông báo lỗi chi tiết cung cấp cho tác nhân (và các nhà phát triển con người) đủ bối cảnh để khắc phục lỗi mà không cần đoán mò. Đầu ra của nó luôn được ghi vào một tệp JSON cục bộ thay vì truyền qua shell. Trước đây, các tập kết quả lớn thường chạm giới hạn bộ đệm pipe hoặc làm hỏng các công cụ hạ nguồn như jq. Việc ghi vào đĩa giúp tránh cả hai vấn đề này và cho phép tác nhân truy cập theo chương trình vào kết quả truy vấn qua các bước tiếp theo.

Bên dưới CLI là một API được tiêu chuẩn hóa: nhiều loại tài nguyên – Sự kiện Skylight, tàu thuyền, khu vực, hình ảnh vệ tinh, đường đi của tàu và nhiều loại khác – có thể truy cập thông qua một cặp thao tác chung là search (tìm kiếm) và aggregate (tổng hợp). Đầu vào và đầu ra của các API được định nghĩa là các lược đồ (schema) có kiểu với các mô tả ở cấp độ trường.

Việc phân lớp này – API có kiểu, CLI tất định và các kỹ năng tác nhân tham chiếu đến các lệnh của CLI – có nghĩa là mỗi thành phần của Shippy có thể được kiểm tra độc lập. API có bộ kiểm thử riêng. CLI có thể được vận hành bởi con người hoặc tác nhân. Và các kỹ năng tác nhân tham chiếu đến các lệnh CLI xử lý phần kỹ thuật để Shippy không phải phát minh lại bánh xe mỗi khi nó truy cập API Skylight. Mỗi lớp thu hẹp những gì lớp tiếp theo có thể làm sai.

Shippy architecture diagram

Lưu trữ trong môi trường sandbox và cô lập

Skylight phục vụ hàng trăm cơ quan chính phủ và tổ chức phi chính phủ tại hơn 70 quốc gia. Một nhân viên thủy sản ở Philippines có các Khu vực quan tâm, danh sách theo dõi tàu thuyền và cấu hình cảnh báo được giới hạn trong tài khoản Skylight của họ. Khi họ hỏi Shippy một câu hỏi, các lệnh gọi API của tác nhân cần trả về dữ liệu của họ và lịch sử trò chuyện của họ không bao giờ được phép hiển thị với bất kỳ ai khác.

Mỗi người dùng trò chuyện với Shippy trong phiên làm việc riêng biệt, tạm thời của họ, và việc làm cho điều đó hoạt động đáng tin cậy ở quy mô lớn là một trong những nỗ lực kỹ thuật quan trọng nhất đằng sau dự án. Chúng tôi đã xây dựng Mothership, một nền tảng lưu trữ tác nhân cung cấp một triển khai Kubernetes chuyên dụng cho mỗi phiên người dùng. Khi người dùng mở một cuộc trò chuyện, hệ thống sẽ khởi chạy một tập hợp các pod đóng gói thời gian chạy của tác nhân, các kỹ năng của nó và Skylight CLI. JWT Skylight của người dùng được đưa vào tại thời điểm cung cấp để các lệnh gọi API của tác nhân được giới hạn trong dữ liệu của người dùng đó.

Các tệp mà tác nhân ghi trong quá trình phân tích nhiều bước chỉ tồn tại trong phiên đó và không bao giờ được chia sẻ giữa những người dùng. Bên trong sandbox, tác nhân có thể viết và chạy mã, cài đặt các phụ thuộc, kéo các tập dữ liệu và thực hiện các phân tích nhiều bước. Ở cấp độ mạng, sandbox bị giới hạn chỉ truy cập các dịch vụ mà nó cần.

Sandbox architecture diagram

Đánh giá một tác nhân, không phải một mô hình

Hầu hết các điểm chuẩn (benchmark) xếp hạng AI đa năng dựa trên các câu hỏi tĩnh. Chúng không nắm bắt được cách một tác nhân hoạt động khi được kết nối vào một quy trình làm việc thực tế: cách nó chọn công cụ, truy vấn dữ liệu trực tiếp, hành động dựa trên kết quả và biết khi nào nên dừng lại. Vì vậy, chúng tôi đã xây dựng hệ thống đánh giá riêng dựa trên cách Shippy hoạt động, chấm điểm toàn bộ tác nhân – mô hình, kỹ năng và sandbox cùng nhau – dựa trên dữ liệu thực tế.

Trong khung đánh giá của chúng tôi, các chuyên gia về lĩnh vực viết các kịch bản và tiêu chí, chọn tiêu chí nào áp dụng cho từng nhiệm vụ và thiết lập trọng số, để mỗi nhiệm vụ được chấm điểm dựa trên những gì thực sự quan trọng đối với nó. Ví dụ, một truy vấn về sự kiện đánh bắt cá sẽ ưu tiên độ chính xác của dữ liệu nhất, tiếp theo là phân giải ranh giới và khung thời gian, còn việc ghi nguồn và phong cách phản hồi sẽ có trọng số thấp hơn. Họ cũng chú thích các phản hồi riêng lẻ là đúng hay sai, cung cấp cho người đánh giá cơ sở thực tế để chấm điểm.

Quy trình rất đơn giản: một lời nhắc bằng ngôn ngữ tự nhiên chạy qua sandbox, một LLM đóng vai trò giám khảo sẽ chấm điểm từng tiêu chí từ 0 đến 1 và giải thích bằng văn bản lý do tại sao phản hồi đạt hoặc không đạt, và tổng điểm có trọng số được kiểm tra dựa trên ngưỡng đạt cố định, như sơ đồ dưới đây cho thấy.

Cách một nhiệm vụ đơn lẻ được chấm điểm trong quy trình của chúng tôi. Một lời nhắc bằng ngôn ngữ tự nhiên chạy qua sandbox, một LLM giám khảo chấm điểm từng tiêu chí với lập luận bằng văn bản, và tổng điểm có trọng số sẽ quyết định đạt hoặc không đạt dựa trên một ngưỡng cố định.

Eval pipeline diagram

Các nhiệm vụ được thực hiện thông qua Harbor, một khung đánh giá mở. Chúng tôi đã viết một plugin Harbor để khởi chạy một phiên Shippy thực tế trên chính phiên bản đang được kiểm tra, dựa trên cùng dữ liệu thực tế mà người dùng sẽ gặp phải. Bộ kiểm thử chạy song song với một bản dựng Shippy có phiên bản cụ thể, tạo ra một tệp kết quả có dấu thời gian và báo cáo về những thay đổi điểm số so với lần chạy trước. Chúng tôi chạy lại bộ kiểm thử bất cứ khi nào các kỹ năng, mô hình hoặc dữ liệu cơ bản thay đổi, và một phiên bản Shippy bị giảm hiệu suất theo các tiêu chí đánh giá của chúng tôi sẽ không được đưa đến tay người dùng cuối.

Shippy đạt điểm nhất quán trong các nhiệm vụ truy xuất dữ liệu và các rào cản bảo vệ, từ chối chính xác các yêu cầu về tình báo quân sự, duy trì sự cô lập dữ liệu người dùng và ghi nguồn chính xác. Trong lần chạy gần đây nhất, các mô hình rõ ràng nhất là các nhiệm vụ lập kế hoạch tuần tra, nơi Shippy đã vượt quá giới hạn sang các khuyến nghị chiến thuật thay vì hỗ trợ quyết định, các truy vấn nhạy cảm về hình học nơi việc đơn giản hóa ranh giới gây ra các Sự kiện bị bỏ lỡ, và một trường hợp tác nhân tự tạo ra một lệnh CLI không tồn tại. Mỗi điều này trực tiếp cung cấp thông tin cho vòng cải tiến kỹ năng tiếp theo của chúng tôi.

Bộ đánh giá của Shippy chạy bên trong Skylight: mỗi kịch bản được chấm điểm dựa trên các tiêu chí có trọng số, với lập luận của giám khảo được hiển thị để một lỗi thất bại sẽ chỉ ra hành vi cụ thể cần khắc phục.

Shippy eval suite screenshot

Hướng đi tiếp theo của chúng tôi

Chúng tôi đang mở Shippy cho những người dùng sớm trên cơ sở luân phiên và mời họ kiểm tra áp lực – để tìm ra những câu hỏi mà tác nhân trả lời kém và các rào cản bảo vệ có thể cần được thắt chặt. Đây là những gì chúng tôi sẽ xây dựng tiếp theo:

Công việc của chúng tôi trên Shippy đã định hình cách chúng tôi suy nghĩ về các tác nhân ở những nơi khác tại Ai2 – ngay lập tức là EarthRanger, nền tảng bảo tồn động vật hoang dã của chúng tôi, và OlmoEarth, bộ công cụ quan sát Trái đất mở của chúng tôi. Mothership được xây dựng để trở nên tổng quát và lưu trữ các tác nhân khác, vì vậy mặc dù hàng hải là lĩnh vực đầu tiên chúng tôi áp dụng, chúng tôi không mong đợi đó sẽ là lĩnh vực cuối cùng.

Shippy được xây dựng bởi đội ngũ Skylight tại Ai2. Skylight là một nền tảng nhận thức lĩnh vực hàng hải miễn phí được hơn 300 đối tác tại 70 quốc gia sử dụng.

AI AgentAllenAIPhát triển phần mềmKinh nghiệm thực tếHugging Face
Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ Hugging Face Blog. Liên kết bài gốc ở phía trên. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.