Xây dựng AI đáng tin cậy ở tốc độ 160 km/h

1. Tổng quan

Trí tuệ nhân tạo hiện là một phần của nhiều hệ thống phần mềm, nhưng việc xây dựng một ứng dụng AI không giống với việc xây dựng một ứng dụng mà người dùng có thể tin tưởng. Trong nhiều môi trường thực tế, thách thức không chỉ đơn giản là tạo ra một phản hồi. Thách thức là tạo ra một câu trả lời kịp thời, có căn cứ, hữu ích và phù hợp với chuyên môn của con người.

Trong lớp học lập trình này, bạn sẽ xây dựng một trình mô phỏng huấn luyện viên đua xe minh hoạ những ý tưởng này một cách cụ thể và hấp dẫn. Ứng dụng này sử dụng dữ liệu đo từ xa của một chiếc xe đua ảo để mô phỏng chuyển động trên đường đua và đưa ra hướng dẫn huấn luyện. Mặc dù đua xe là tình huống được đề cập, nhưng các ý tưởng kiến trúc tương tự cũng áp dụng cho lĩnh vực chăm sóc sức khoẻ, sản xuất, hậu cần và các lĩnh vực khác mà độ tin cậy là yếu tố quan trọng.

Bạn sẽ làm việc với một luồng dữ liệu đo từ xa có tốc độ cao, chuyển đổi dữ liệu đó thành một dạng hữu ích và hiệu quả cho hoạt động suy luận của AI, đồng thời kết hợp đầu ra dựa trên mô hình ngôn ngữ lớn với hướng dẫn được mã hoá của con người để tạo ra các câu trả lời đáng tin cậy hơn.

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, bạn sẽ tạo một nguyên mẫu AI đáng tin cậy có khả năng:

  • Truyền dữ liệu đo từ xa từ một chiếc xe đua ảo đang chạy trong Google Cloud
  • Hình ảnh minh hoạ Chiếc xe di chuyển trên đường đua bằng Chrome
  • Chuyển đổi dữ liệu đo từ xa thô thành dữ liệu đầu vào sẵn sàng cho AI
  • Áp dụng một lớp chiến lược dựa trên Google Gemini
  • Kết hợp Đầu ra của mô hình với Hướng dẫn và quy tắc an toàn được mã hoá của con người
  • Cung cấp ý kiến phản hồi huấn luyện thông qua giao diện người dùng

Kiến thức bạn sẽ học được

Khi kết thúc lớp học lập trình này, bạn sẽ có thể:

  • Giải thích những yếu tố giúp hệ thống AI đáng tin cậy hơn
  • Giải thích mục đích của cấu trúc AI theo mô-đun
  • Tạo một quy trình truyền dữ liệu đo từ xa mô phỏng đơn giản
  • Chuẩn bị dữ liệu có cấu trúc hữu ích để sử dụng với LLM
  • Áp dụng các quy tắc có hướng dẫn của con người và hàng rào bảo vệ để cải thiện độ tin cậy
  • Đánh giá cách áp dụng cấu trúc này cho các miền khác

2. Những điều bạn cần

Trước khi bắt đầu, hãy đảm bảo bạn đã chuẩn bị sẵn các tài khoản, công cụ và dịch vụ cần thiết.

Điều kiện tiên quyết

Bạn phải:

  • Tài khoản Google cá nhân sử dụng địa chỉ Gmail
  • Có quyền truy cập vào Google Cloud và hiểu biết cơ bản về CLI
  • Tài khoản thanh toán đang hoạt động hoặc khoản tín dụng trên đám mây
  • Hiểu biết chung về Google Cloud và AI tạo sinh bằng Gemini

Gemini là mô hình AI của Google, được xây dựng dựa trên nền tảng suy luận tiên tiến, giúp biến mọi ý tưởng thành hiện thực. Đây là một mô hình tuyệt vời để hiểu đa phương thức, cũng như lập trình tác nhân và lập trình theo cảm hứng.

Gemini

Nhận tín dụng để sử dụng Google Cloud

Để nhận tín dụng, hãy truy cập vào đường liên kết này rồi đăng nhập bằng một địa chỉ email Gmail (miền gmail.com). Sau đó, hãy chấp nhận khoản tín dụng vào tài khoản thanh toán Google Cloud Platform (GCP) của bạn. Khoản tín dụng này sẽ được áp dụng cho tài khoản của bạn.

3. Lý do AI đáng tin cậy có vai trò quan trọng

Nhiều hệ thống AI có thể tạo ra những câu trả lời trôi chảy và thuyết phục, nhưng trôi chảy không có nghĩa là đáng tin cậy. Trong các hệ thống thực tế, người dùng thường cần những câu trả lời kịp thời, có căn cứ, bị hạn chế bởi các quy tắc an toàn và được định hình bởi kiến thức chuyên môn về miền.

Điều này đặc biệt quan trọng khi một hệ thống hoạt động trên dữ liệu thay đổi nhanh chóng. Câu trả lời đến quá muộn có thể không có tác dụng. Một câu trả lời nghe có vẻ tự tin nhưng bỏ qua bối cảnh quan trọng có thể gây hiểu lầm. Một câu trả lời không liên quan đến kiến thức chuyên môn của con người có thể khó tin tưởng, ngay cả khi câu trả lời đó nghe có vẻ trau chuốt.

Trong trường hợp xe đua được dùng trong lớp học lập trình này, vấn đề không phải là việc AI có thể nói điều gì đó thú vị hay không. Vấn đề là liệu hệ thống có thể đưa ra lời khuyên hữu ích, an toàn, kịp thời và phù hợp với tình huống hay không.

Hãy xem một mẫu nhỏ về dữ liệu đo từ xa và so sánh 2 đầu ra có thể có:

Racing Car Telemetry Data
{
   "speedMph": 118,
   "throttle": 91,
   "frontGrip": "nominal",
   "rearGrip": "low",
   "trackPosition": "Turn 1 Entry"
}

Câu trả lời ngây ngô của AI

"Stay aggressive on the throttle and carry your speed into Turn 1"

Câu trả lời có tính đến độ tin cậy

"Rear grip is low at Turn 1 entry. Reduce your throttle slightly and prioritize a stable corner entry"

Bạn nhận thấy sự khác biệt chứ?

Điều gì sẽ xảy ra nếu chúng ta chỉ dựa vào câu trả lời của AI thông thường?

Câu trả lời đầu tiên nghe có vẻ tự tin, nhưng lại bỏ qua rủi ro. Câu trả lời thứ hai hữu ích hơn vì phản ánh được bối cảnh và quy tắc ràng buộc.

Thay vì coi LLM là toàn bộ hệ thống, bạn cần coi LLM là một phần của cấu trúc rộng hơn để tăng độ tin cậy. Ngoài ra, nhiều ứng dụng yêu cầu thông tin tư vấn phải được cung cấp đủ nhanh để có thể hành động, chẳng hạn như xe đua, quy trình y tế, hàng không, lưới điện, hệ thống giao dịch, hàng hải, v.v.

Bây giờ, hãy tìm hiểu cách tạo một cấu trúc như vậy.

4. Tìm hiểu về AI tốc độ cao và Kiến trúc mô-đun đáng tin cậy

Một số hệ thống AI cần những loại hành vi rất khác nhau. Chúng phải phản ứng nhanh với các điều kiện thay đổi, đồng thời hỗ trợ suy luận chậm hơn và chu đáo hơn.

Cấu trúc theo mô-đun tách các trách nhiệm này thành các đường dẫn riêng biệt. Một đường dẫn có thể phản xạ, xử lý việc diễn giải ngay lập tức, nhạy cảm về thời gian đối với các tín hiệu đến. Một hướng khác có thể tập trung vào chiến lược, hỗ trợ khả năng suy luận ở cấp độ cao hơn và đưa ra quyết định sáng suốt hơn. Các đường dẫn khác nhắm đến những loại chức năng khác.

Sơ đồ kiến trúc

Một số quyết định phải được đưa ra theo thời gian thực. Một số quyết định cần nhiều thời gian suy nghĩ hơn.

AI đáng tin cậy thường cần cả hai.

Việc tách biệt về cấu trúc này giúp hệ thống duy trì khả năng phản hồi trong khi vẫn hỗ trợ hướng dẫn phong phú hơn dựa trên AI. Điều này cũng tạo ra một nơi rõ ràng để giới thiệu các ràng buộc do con người hướng dẫn và kiến thức chuyên môn.

Trong chương trình nhỏ này, chúng ta có một đường dẫn phản xạ và một đường dẫn chiến lược được triển khai dưới dạng các hàm Python.

const telemetry = {
  speed: 147,
  grip: 0.68,
  corner_type: "sharp",
  lap_trend: "entering_corners_too_fast",
};

function reflexPath(event: typeof telemetry): string {
  if (event.grip < 0.70) {
    return "REFLEX: Reduce throttle now";
  }
  return "REFLEX: No urgent issue";
}

function strategyPath(event: typeof telemetry): string {
  if (event.lap_trend === "entering_corners_too_fast") {
    return "STRATEGY: Brake earlier and prioritize corner exit";
  }
  return "STRATEGY: Driving pattern looks stable";
}

console.log(reflexPath(telemetry));
console.log(strategyPath(telemetry));

Hai hàm này hoạt động khác nhau khi có cùng dữ liệu đo từ xa. Chức năng phản xạ là một cảnh báo tức thì. Hàm chiến lược đưa ra lời khuyên huấn luyện dựa trên các quy tắc.

Tại sao bạn nghĩ rằng việc tách riêng logic này là hữu ích?

Bây giờ, hãy tạo một ứng dụng thú vị gồm nhiều phần và xem cách cấu trúc này biến các phản ứng nhanh và khả năng suy luận sâu sắc thành một hệ thống AI đáng tin cậy mà bạn có thể thực sự trải nghiệm.

5. Xây dựng máy chủ truyền dữ liệu từ xa

Giờ đây, khi đã hiểu rõ mục tiêu về kiến trúc, bạn có thể bắt đầu xây dựng pipeline dữ liệu điều khiển ứng dụng.

Trong phần này, bạn sẽ tạo một luồng dữ liệu đo từ xa đơn giản cho một chiếc xe đua ảo. Dữ liệu sẽ đến từ một nguồn CSV chứa dữ liệu GPS hoặc dữ liệu vị trí theo dõi, đồng thời ứng dụng của bạn sẽ chuyển đổi dữ liệu đó thành một luồng trực tiếp mà giao diện người dùng và lớp AI có thể sử dụng.

Trong phần này, bạn sẽ:

  • Tạo một dự án mới trong Google Cloud cho máy chủ và ứng dụng truyền phát trực tiếp của chúng ta
  • Tạo một máy chủ nhỏ để phát dữ liệu đo từ xa
  • Truyền trực tuyến những sự kiện đó đến giao diện người dùng hoặc bảng điều khiển của trình duyệt

1. Mở Cloud Shell

A. Chuyển đến Google Cloud Console.
B. Tạo một dự án mới cho lớp học lập trình này. Nhấp vào trình đơn thả xuống dự án ở trên cùng.

Google Cloud Console

Khi tạo dự án, bạn nên liên kết tài khoản thanh toán:
Liên kết tài khoản thanh toán

Nếu đã tạo một dự án, bạn có thể mở bảng điều khiển bên trái, nhấp vào Billing rồi kiểm tra xem tài khoản thanh toán có được liên kết với tài khoản GCP này hay không.

C. Lấy khoá Gemini API

Sau khi bật tín dụng Google Cloud, bạn cần có khoá API Gemini để truy cập Gemini trong Google Cloud.

Để tạo Khoá Gemini API, chúng ta cần sử dụng Google Vertex AI Studio để tạo khoá.

Trong Vertex AI Studio, hãy nhấp vào "Lấy khoá API" ở góc dưới cùng bên trái, phía trên "Tài liệu". Tạo khoá API cho Gemini (khoá này trông giống như một chuỗi dài gồm các ký tự có vẻ ngẫu nhiên). Lưu khoá này ở một nơi an toàn. Chúng ta sẽ sử dụng khoá API này trong Bước 6 "Tạo Trình mô phỏng xe đua" để xác thực quyền truy cập của chúng ta vào Gemini trên Google Cloud.

D. Nhấp vào biểu tượng Cloud Shell trong thanh trên cùng (biểu tượng thiết bị đầu cuối) để mở một thiết bị đầu cuối dựa trên trình duyệt.
Cloud Shell

E. Chờ phiên thiết bị đầu cuối bắt đầu.

Phiên đầu cuối

2. Lấy mã

Sao chép kho lưu trữ chính.

git clone https://github.com/ocupop/trustable-ai-codelab.git
cd trustable-ai-codelab

Xin lưu ý rằng có 2 thư mục trong kho lưu trữ này: "koru-application" (ứng dụng web) và "streaming-telemetry-server" (dữ liệu đo từ xa theo thời gian thực mô phỏng của xe đua). Bước này mô tả "streaming-telemetry-server". Chúng ta sẽ sử dụng "koru-application" trong bước tiếp theo.

3. Bật các API bắt buộc

Chạy một lần cho mỗi dự án:

# Set Project ID
gcloud config set project YOUR_PROJECT_ID
# Enable APIs
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com

Thay thế YOUR_PROJECT_ID bằng mã dự án thực tế của bạn (hoặc bỏ qua dòng đầu tiên nếu dự án đã được thiết lập).

Bạn có thể tìm thấy YOUR_PROJECT_ID trong danh sách Dự án

Phiên đầu cuối

4. Triển khai phần phụ trợ lên Cloud Run

Từ thư mục gốc của kho lưu trữ (tức là đảm bảo bạn đang ở trong thư mục trustable-ai-codelab):

gcloud run deploy streaming-telemetry-server \
  --source streaming-telemetry-server \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated

Xin lưu ý rằng bạn có thể phải nhấn "Y" khi được nhắc

  • Lần chạy đầu tiên có thể nhắc bạn bật API hoặc tạo một kho lưu trữ Artifact Registry; hãy chấp nhận nếu cần.
  • Nếu bạn sử dụng một khu vực khác với us-central1, hãy chỉ định khu vực đó bằng cách sử dụng --region
  • Khi quá trình triển khai hoàn tất, gcloud sẽ in service-URL. Chúng ta chỉ cần thêm "events" vào URL này để dùng làm điểm cuối đầy đủ cho máy chủ đo từ xa.

5. Sử dụng URL của sự kiện phát trực tiếp

Giờ đây, máy chủ đo từ xa đang phát dữ liệu đo từ xa mô phỏng bằng cách sử dụng Sự kiện do máy chủ gửi (SSE) tại một điểm cuối có dạng :

service-URL/events		// service-URL - the last line displayed by "deploy"

Kiểm thử trong trình duyệt: Truy cập vào URL điểm cuối của luồng này bằng Chrome. Bạn sẽ thấy dữ liệu truyền trực tuyến đến trong trình duyệt, mô phỏng dữ liệu do các cảm biến trên một chiếc xe đua phát ra.

Đầu ra từ điểm cuối truyền phát trong thẻ trình duyệt

Bạn có thể đóng thẻ trình duyệt để chấm dứt kết nối.

Kiểm thử bằng curl:

Bây giờ, hãy kiểm thử từ dòng lệnh shell.

curl -N service-URL/events		# Replace service-URL with actual deployment endpoint

Bạn sẽ thấy dữ liệu được truyền trực tuyến đến trong cửa sổ Cloud Shell.

Đầu ra từ điểm cuối truyền phát trực tiếp thông qua dòng lệnh shell

Chúng ta sẽ sử dụng dữ liệu đo từ xa này để mô phỏng dữ liệu do các cảm biến trong xe đua phát ra. Phần còn lại của lớp học lập trình sẽ sử dụng dữ liệu này. Bạn có thể kết thúc chương trình curl bằng cách nhập CTRL-C trong cửa sổ dòng lệnh.

Những điều bạn nên lưu ý

Khi bạn hoàn tất phần này, hãy chú ý đến bản chất của dữ liệu đến. Dữ liệu đo từ xa thô thường có dung lượng lớn, nhạy cảm về thời gian và không phù hợp ngay lập tức cho hoạt động suy luận bằng AI. Sau khi tạo ứng dụng giao diện người dùng, chúng ta sẽ cần lọc dữ liệu thô thành một định dạng hiệu quả mà LLM có thể xử lý nhanh chóng.

Nhưng trước tiên, hãy tạo giao diện người dùng web để trực quan hoá dữ liệu.

6. Tạo Trình mô phỏng đua xe

Trong phần này, bạn sẽ:

  • Tạo một mô phỏng xe đua
  • Kết nối máy chủ đo từ xa với ứng dụng web của xe đua
  • Xem các cuộc đua mô phỏng

Đến đây, chúng ta đã có một mô phỏng hoạt động của dữ liệu đo từ xa từ một chiếc xe đua chạy trên đám mây. Bây giờ, hãy tạo ứng dụng chạy trên máy cục bộ, kết nối với Google Cloud và trực quan hoá dữ liệu đó.

Ứng dụng AI đáng tin cậy của chúng tôi sử dụng cả sức mạnh và tính linh hoạt của các dịch vụ Google Cloud cũng như thông tin tình báo tại địa phương chạy trong Chrome.

Dịch vụ đo từ xa truyền trực tuyến chạy trong Google Cloud, nhưng ứng dụng xe đua chạy trên máy cục bộ của bạn. Điều đó có nghĩa là bạn sẽ cần sao chép kho lưu trữ một lần nữa, lần này là vào máy tính xách tay hoặc máy tính để bàn.

Để đơn giản, cùng một kho lưu trữ chứa mã cho cả máy chủ phát trực tiếp và ứng dụng xe đua.

Sao chép ứng dụng giao diện người dùng trên GitHub:

git clone https://github.com/ocupop/trustable-ai-codelab.git
cd trustable-ai-codelab

Sau khi bạn sao chép kho lưu trữ trên máy tính xách tay hoặc máy tính để bàn, hãy chạy ứng dụng.

cd koru-application		# racing car simulation app
npm install
npm run dev

VITE

Trong Chrome, hãy mở cổng trên máy cục bộ (http://localhost:5173 như trong ví dụ ở trên). Bạn sẽ thấy trang đích của ứng dụng "AI Motorsport Coaching".

Huấn luyện viên góc

Nhấp vào nút "Mở trang tổng quan ->". Thao tác này sẽ khởi động giao diện người dùng cho ứng dụng.

Trang tổng quan Koru

Tại thời điểm này, bạn có một máy chủ đo từ xa tạo ra dữ liệu đo từ xa mô phỏng của xe đua trong Google Cloud và một ứng dụng web cục bộ có thể trực quan hoá dữ liệu đó và kết nối với một LLM. Hãy kết nối chúng và kết nối với các dịch vụ LLM của Gemini.

Ở góc trên bên phải của ứng dụng, hãy nhấp vào biểu tượng bánh răng (cài đặt).

Chế độ cài đặt Koru

Nhập khoá Gemini API của bạn từ Bước 2. Điều này giúp bạn sử dụng các dịch vụ của Gemini trong Google Cloud.

Nhấp vào "Lưu" để ứng dụng ghi nhớ khoá API của bạn.

Bây giờ, hãy kết nối ứng dụng với máy chủ đo từ xa. Trong trang tổng quan của ứng dụng, hãy nhấp vào "Phiên Live".

Đầu vào luồng SSE của Koru

Nhập URL cụ thể của máy chủ đo từ xa dựa trên đám mây (Bước 5) vào trường văn bản có nội dung "SSE URL or .txt file path". URL SSE của chúng tôi có dạng:

https://streaming-telemetry-server-${PROJECT_NUMBER}.${REGION}.run.app/events

Sau khi bạn nhập URL điểm cuối của máy chủ đo từ xa, hãy nhấp vào "Kết nối" (ở bên phải trường văn bản). Đừng quên thêm "events" vào cuối URL.

Bây giờ, bạn sẽ thấy ứng dụng trực quan hoá dữ liệu mô phỏng!

Nếu tăng âm lượng loa, bạn có thể nghe thấy lời khuyên về cuộc đua xe của nhiều loại huấn luyện viên. Mỗi huấn luyện viên có một tính cách khác nhau. Hãy thử chọn các huấn luyện viên khác nhau để xem lời khuyên đa dạng của họ về cuộc đua và các phong cách giọng nói khác nhau. Nếu cần, bạn có thể tắt âm thanh bằng cách nhấp vào biểu tượng loa.

Ví dụ về ứng dụng đang chạy

Giờ đây, khi đã có một ứng dụng hoạt động, hãy cùng tìm hiểu cách chúng tôi chuẩn bị dữ liệu để LLM xử lý hiệu quả và cách chúng tôi có thể thêm các tính năng khác để nâng cao độ tin cậy của toàn bộ hệ thống.

7. Chuẩn bị dữ liệu đo từ xa cho tính năng suy luận bằng AI

Dữ liệu đo từ xa thô rất hữu ích cho việc mô phỏng, nhưng thường quá chi tiết và quá thường xuyên để gửi trực tiếp đến một LLM. Nếu gửi tất cả dữ liệu đo từ xa mà không thay đổi, bạn có thể làm tăng độ trễ, gây ra nhiễu và giảm chất lượng của hướng dẫn thu được.

Trong phần này, bạn sẽ định hình lại dữ liệu đo từ xa thành một dạng hữu ích hơn.

Trong phần này, bạn sẽ:

  • Kiểm tra JSON đo từ xa thô
  • Xác định những trường phù hợp nhất để suy luận
  • Lọc hoặc tóm tắt dữ liệu
  • Giảm chi tiết không cần thiết
  • Chuẩn bị một bản trình bày thân thiện với AI về trạng thái lái xe

Đây là một bước quan trọng trong việc xây dựng AI đáng tin cậy. Chất lượng của câu trả lời không chỉ phụ thuộc vào mô hình mà còn phụ thuộc vào cấu trúc và mức độ liên quan của dữ liệu mà mô hình nhận được.

Bây giờ, hãy khám phá dữ liệu cụ thể cho xe đua. Chúng ta có thể thử nghiệm bằng cách thay đổi các giá trị cụ thể trong ứng dụng, tải lại ứng dụng và quan sát kết quả.

../src/services/telemetryStreamService.ts near line 180

// Clamp G-forces
gLat = Math.max(-3, Math.min(3, gLat));		// sideways G-force
gLong = Math.max(-3, Math.min(3, gLong));	// front/back G-force

Lực G trong ô tô đo gia tốc hoặc độ giảm tốc. Trong một chiếc xe đua, việc hiểu rõ lực hấp dẫn giúp ích cho khả năng xử lý và hiệu suất tổng thể của xe. Nếu ứng dụng của chúng tôi không có thông tin này, thì rất khó để đưa ra lời khuyên cho người lái xe. Thêm chú thích vào hai dòng đó, đặt cả giá trị gLatgLong thành 0.0, rồi chạy lại ứng dụng.

Xin lưu ý rằng không có lời khuyên nào được đưa ra khi xe đến gần một góc cua. Điều này không hữu ích lắm đối với một tay đua!

Sau đó, huỷ thay đổi và chạy lại ứng dụng. Bạn có nhận thấy lời khuyên hữu ích bằng âm thanh khi xe đến một góc cua không? Các điểm dữ liệu về lực G là yếu tố quan trọng để đưa ra lời khuyên cho người lái xe.

Bây giờ, hãy hạn chế tốc độ của ô tô ở mức 30 dặm/giờ. Chúng tôi sẽ không giành được bất kỳ cuộc đua nào ở tốc độ đó, nhưng chắc chắn điều này sẽ cho thấy loại hình huấn luyện mà chúng tôi nhận được.

Trong cùng một tệp đó (telemetryStreamService.ts) gần dòng 158, bạn sẽ thấy hàm processPoint(). Trong hàm đó, hãy hạn chế tốc độ.

Chuyển:

private processPoint(point: GpsSSEPoint) {
...
 const speedKmh = point.speed > 200 ? point.speed : point.speed * 3.6;
...

Đến:

private processPoint(point: GpsSSEPoint) {
...
 let speedKmh = point.speed > 200 ? point.speed : point.speed * 3.6;
 speedKmh = Math.min(speedKmh, 48);   // 48 kmh is approx 30 mph
...

Chạy lại ứng dụng. Chúng ta hiện nhận được loại lời khuyên huấn luyện nào? Không cần nhiều nếu chúng ta lái xe thong thả!

Bây giờ, hãy huỷ những thay đổi đó và chạy lại ứng dụng.

Rõ ràng, tốc độ của ô tô là một điểm dữ liệu có giá trị. Bạn cần phải hiểu rõ những dữ liệu cụ thể nào là quan trọng để đưa ra lời khuyên có giá trị. Việc đánh giá dữ liệu nào không liên quan cũng quan trọng không kém.

Bạn cũng nên bắt đầu suy nghĩ về sự an toàn và lòng tin tại đây. Ngay cả khi bạn chuẩn bị kỹ lưỡng, câu hỏi đầu vào cũng không đảm bảo sẽ nhận được câu trả lời đáng tin cậy. Chúng ta vẫn cần đưa ra các quy tắc có hướng dẫn của con người và các điều kiện ràng buộc rõ ràng.

Chuẩn bị dữ liệu không chỉ là một bước tiền xử lý. Đây là một phần quan trọng trong chiến lược xây dựng lòng tin. Thông tin đầu vào càng rõ ràng thì thông tin đầu ra càng tập trung và đáng tin cậy hơn.

8. Thêm các nguyên tắc và kiến thức chuyên môn được mã hoá

Hệ thống AI đáng tin cậy không chỉ dựa vào đầu ra của mô hình. Trong nhiều trường hợp, các hệ thống đáng tin cậy nhất kết hợp khả năng suy luận của mô hình ngôn ngữ lớn với các quy tắc rõ ràng, kiến thức về miền và các ràng buộc do con người hướng dẫn.

Trong phần này, bạn sẽ thêm lớp đó.

Bạn có thể coi lớp này là kiến thức huấn luyện được mã hoá. Điều này có thể bao gồm các mẫu phản hồi ưu tiên, quy tắc xác thực, quy trình kiểm tra an toàn hoặc hướng dẫn có cấu trúc giúp hệ thống luôn hữu ích và có căn cứ.

Trong phần này, bạn sẽ:

  • Giới thiệu các quy tắc phản hồi định hình hành vi của mô hình
  • Áp dụng các quy trình kiểm tra an toàn để giảm thiểu lời khuyên sai lệch
  • Kết hợp kiến thức chuyên môn của con người đã được mã hoá vào quy trình
  • So sánh các câu trả lời trước và sau khi thêm những nội dung này

Hãy tìm hiểu cách thêm kiến thức chuyên môn về miền vào ứng dụng của chúng ta.

LLM thường không được huấn luyện về đua xe hoặc vật lý về hiệu suất của xe đua. Nếu ứng dụng của chúng tôi có kiến thức chuyên môn về lĩnh vực đó, thì người dùng có thể tin tưởng hơn vào hướng dẫn của ứng dụng. Hướng dẫn đó đến từ các quy tắc dựa trên kiến thức chuyên môn của con người, hay nói cách khác là lớp kiến thức chuyên môn về miền.

../src/utils/coachingKnowledge.ts near line 115

...
export const RACING_PHYSICS_KNOWLEDGE = `
CORE PRINCIPLES:
1. **The Friction Circle:** A tire has 100% grip. If you use 100% for braking, you have 0% for turning.
  - *Error:* Turning while 100% braking = Understeer (Plowing).
  - *Fix:* "Trail braking" (releasing brake pressure as steering angle increases).

2. **Weight Transfer:**
  - Braking shifts weight forward (Front grip UP, Rear grip DOWN).
  - Accelerating shifts weight backward (Front grip DOWN, Rear grip UP).
  - *Error:* Lifting off throttle mid-corner shifts weight forward abruptly -> Oversteer (Spin risk).

3. **The racing line:**
...

Những nguyên tắc về xe đua này là một yếu tố quan trọng để tạo ra kết quả đáng tin cậy. Điều gì sẽ xảy ra nếu chúng tôi không có chuyên môn này? Hãy cùng tìm hiểu.

Hãy xoá RACING_PHYSICS_KNOWLEDGE và khám phá các lời khuyên của chúng tôi về đua xe.

export const RACING_PHYSICS_KNOWLEDGE = ``;

Chạy lại ứng dụng. Chúng ta hiện nhận được loại lời khuyên huấn luyện nào?

Hãy lưu ý lời khuyên chung.

Chúng tôi không còn nhận được thông tin chi tiết về lực ma sát, sự chuyển trọng lượng, tốc độ thoát, v.v. Độ tin cậy của chúng tôi sẽ thấp hơn nếu không có thông tin này. Khôi phục kiến thức chuyên môn về đua xe đó và chạy lại ứng dụng.

Bước này là một khía cạnh quan trọng của hệ thống AI đáng tin cậy. Sự tin tưởng không tự nhiên mà có nhờ một câu lệnh mạnh mẽ hơn. Niềm tin xuất phát từ thiết kế hệ thống và tư duy phản biện.

LLM là một phần của giải pháp, nhưng không phải là toàn bộ giải pháp. Mức độ tin tưởng sẽ tăng lên khi kết quả của AI được hướng dẫn bằng kiến thức rõ ràng của con người.

9. Thiết kế các nhân vật huấn luyện và trải nghiệm người dùng

Sau khi bạn thiết lập quy trình suy luận, câu hỏi tiếp theo là hệ thống nên giao tiếp với người dùng như thế nào.

Trong phần này, bạn sẽ định hình trải nghiệm huấn luyện bằng cách xác định cách lớp chiến lược giao tiếp với trình điều khiển. Bạn sẽ tinh chỉnh câu lệnh hệ thống cho một trong các nhân vật huấn luyện và cân nhắc cách truyền tải hướng dẫn sao cho rõ ràng, kịp thời và quan trọng nhất là có thể hành động.

Trong phần này, bạn sẽ:

  • Tạo hoặc tinh chỉnh câu lệnh hệ thống cho một nhân vật huấn luyện
  • Thử nghiệm nhiều phong cách huấn luyện
  • Quan sát cách các thay đổi về câu lệnh ảnh hưởng đến câu trả lời
  • Xác định các yêu cầu về giao diện người dùng đối với ý kiến phản hồi đáng tin cậy
  • Tìm hiểu về tính năng chuyển văn bản sang lời nói (TTS) cho tin nhắn khẩn cấp và không khẩn cấp

Ứng dụng của chúng tôi có một số nhân vật huấn luyện. Mỗi huấn luyện viên sẽ đưa ra các loại lời khuyên huấn luyện khác nhau.

PERSONA

ĐẶC ĐIỂM

Tony

Truyền động lực, dựa trên cảm xúc

Rachel

Mang tính kỹ thuật, tập trung vào vật lý

AJ

Lệnh trực tiếp, thẳng thắn

Garmin

Tối ưu hoá dựa trên dữ liệu, tối ưu hoá delta

Super AJ

Thích ứng, chuyển đổi theo từng loại lỗi

Các nhân vật này được xác định trong tệp ../src/utils/coachingKnowledge.ts.

Trong tệp này, bạn sẽ nhận thấy một bản đồ đối tượng (COACHES) liên kết các khoá chuỗi với CoachPersonas. CoachPersona chứa các thuộc tính của từng loại huấn luyện viên. Một thuộc tính quan trọng là systemPrompt. Mỗi nhân cách đều có systemPrompt riêng để hướng dẫn LLM cách phản hồi.

Hãy thay đổi một trong những system prompts đó và xem LLM phản hồi như thế nào.

Gần dòng 31, bạn sẽ thấy systemPrompt cho "AJ", người rất thẳng thắn và trực tiếp khi đưa ra lời khuyên. Hãy thay đổi systemPrompt để AJ trở nên quá lịch sự.

systemPrompt: `You are AJ, a race engineer that is excessively polite. 
	Use telemtry terminology.  Be actionable
	Examples: 	"Lat G settling. please throttle", 
				"Brake when its convenient."
	Keep responses under 12 words. Never explain  just command.`

Chạy lại ứng dụng, chọn AJ làm huấn luyện viên và xem loại câu trả lời nào được tạo.

Bây giờ, hãy khôi phục systemPrompt ban đầu và chạy lại ứng dụng. Lưu ý rằng câu lệnh hệ thống đóng vai trò quan trọng trong việc hướng dẫn LLM đưa ra câu trả lời phù hợp với nhân vật.

Niềm tin không chỉ là sự chính xác. Đó cũng là về việc giao hàng. Lời khuyên chính xác về mặt kỹ thuật vẫn có thể không hiệu quả nếu không rõ ràng, không đúng thời điểm hoặc gây xao lãng.

Một hệ thống đáng tin cậy phải giao tiếp hiệu quả. Trải nghiệm người dùng là một phần của cấu trúc tin cậy.

10. Xem xét Cấu trúc tổng thể

Đến đây, bạn đã xây dựng xong các phần chính của hệ thống. Bây giờ, bạn cần xem xét cách các chỉ số này phối hợp với nhau.

Ứng dụng của bạn hiện bao gồm các thành phần sau:

  • Luồng dữ liệu đo từ xa
  • Lớp trực quan hoá
  • Giai đoạn chuyển đổi dữ liệu dựa trên AI
  • Các thành phần chiến lược dựa trên LLM suy luận
  • Các biện pháp bảo vệ và hướng dẫn của con người được mã hoá
  • Trải nghiệm huấn luyện trực tiếp

Một cách hữu ích và đơn giản để hiểu được quy trình tổng thể của các thành phần này là thêm tính năng ghi nhật ký vào ứng dụng của chúng ta.

Chúng ta sẽ thêm nhật ký để xem dữ liệu đo từ xa khi dữ liệu này đi qua các đường dẫn.

Trước tiên, hãy xem dữ liệu đo từ xa. Trong telemetryStreamService.ts, khoảng dòng 212 (trước this.emit(frame), hãy thêm một dòng hiển thị tốc độ, lực G ngang (gia tốc ngang) và lực mà người lái xe đang đạp phanh.

console.log('FRAME', { 
    speed: frame.speed.toFixed(1), 
    gLat: frame.gLat.toFixed(2),
    brake: frame.brake.toFixed(0) }
);

Tải lại ứng dụng. Trước khi chạy ứng dụng, hãy mở bảng điều khiển trong Công cụ cho nhà phát triển của Chrome để xem thông tin gỡ lỗi này.

Bảng điều khiển Công cụ cho nhà phát triển

Trong ứng dụng, hãy nhập điểm cuối đo từ xa rồi nhấp vào "Kết nối". Giờ đây, bạn có thể xem dữ liệu đo từ xa đến.

Bây giờ, hãy thêm tính năng ghi nhật ký cho đường dẫn phản xạ và đường dẫn chiến lược.

Trong ../src/services/coachingService.ts ở khoảng dòng 71 trước this.emit(), hãy thêm một dòng ghi nhật ký cho đường dẫn reflex:

console.log('Reflex', { 
	action: rule.action, 
	text, 
	coach: this.coachId }
);

Trong cùng một tệp, khoảng dòng 287, trước this.emit(), hãy thêm một dòng ghi nhật ký tương tự cho đường dẫn strategy (hãy thêm phản hồi huấn luyện text do Gemini API trả về):

console.log('Strategy', { 
	coach: coach.id, 
	chars: text.length, 
	preview: text.slice(0, 60) }
);

Chạy lại ứng dụng. Bạn sẽ nhận thấy trong bảng điều khiển cách dữ liệu đo từ xa truyền từ nguồn qua các đường dẫn này. Luồng dữ liệu đầu vào được lọc, gửi đến LLM, xác minh bằng kiến thức chuyên môn đáng tin cậy của con người và trình bày cho người dùng bằng giao diện người dùng phù hợp.

Xin lưu ý rằng chúng tôi đã kết nối nhiều thành phần kỹ thuật để đạt được mục tiêu lớn hơn là AI đáng tin cậy. Giá trị của kiến trúc không nằm ở bất kỳ thành phần nào. Giá trị đến từ cách các phần bổ trợ cho nhau.

AI đáng tin cậy là kết quả của kiến trúc, chứ không phải một tính năng duy nhất.

Huỷ (xoá dịch vụ)

Bạn cần nhớ xoá dịch vụ khi không cần dùng nữa. Sau khi kiểm thử xong máy chủ đo từ xa cùng với ứng dụng, bạn nên xoá dịch vụ Cloud Run và ngừng tính phí cho dịch vụ đó:

gcloud run services delete streaming-telemetry-server \
  --region us-central1 \
  --platform managed

Nhớ thay thế us-central1 bằng khu vực bạn đã dùng khi triển khai (nếu cần). Xác nhận khi được nhắc.

11. Thử thách

Giờ đây, khi ứng dụng cốt lõi đang hoạt động và bạn đã hiểu rõ các thành phần, hãy thử mở rộng thiết kế.

Thử thách được đề xuất

  • Di chuyển thêm logic huấn luyện sang cạnh
  • Sửa đổi mô phỏng để hỗ trợ mưa hoặc giảm lực kéo
  • Khám phá cách điều chỉnh mô hình hoặc điều chỉnh chi tiết có thể cải thiện hiệu suất
  • Điều chỉnh cấu trúc cho một miền khác, chẳng hạn như y học, sản xuất hoặc hậu cần

Ví dụ: hãy cân nhắc những câu hỏi này khi áp dụng các bài học rút ra được trong phòng thí nghiệm này cho một miền khác:

  • Trong một lĩnh vực khác, dữ liệu liên tục tương đương với dữ liệu đo từ xa trong cuộc đua là gì?
  • Những quyết định nào cần được đưa ra ngay lập tức và những quyết định nào mang tính chiến lược hơn?
  • Cần mã hoá loại kiến thức chuyên môn nào của con người?
  • Người dùng cần thấy những gì để tin rằng hệ thống này đáng tin cậy?

Những thử thách này khuyến khích bạn suy nghĩ vượt ra ngoài ví dụ về cuộc đua và nhận ra mẫu thiết kế rộng hơn về độ tin cậy đằng sau lớp học lập trình này.

12. Tổng kết và các bước tiếp theo

Trong lớp học lập trình này, bạn đã tạo ra nhiều thứ hơn là một bản minh hoạ đua xe. Bạn đã xây dựng một ví dụ cụ thể về cách thiết kế các hệ thống AI đáng tin cậy.

Bạn bắt đầu bằng dữ liệu đo từ xa thô, chuyển đổi dữ liệu đó thành một định dạng hữu ích cho LLM, áp dụng hoạt động suy luận bằng AI và củng cố đầu ra bằng hướng dẫn được mã hoá của con người và các ràng buộc về phản hồi. Trong quá trình này, bạn nhận thấy rằng độ tin cậy đến từ cấu trúc, chứ không chỉ từ đầu ra của mô hình.

Một hệ thống AI đáng tin cậy thường kết hợp:

  • Dữ liệu có cấu trúc theo thời gian thực
  • Suy luận dựa trên mô hình
  • Chuyên môn về miền được mã hoá
  • Rào chắn rõ ràng
  • Thiết kế trải nghiệm người dùng chu đáo

Tình huống đua xe đã giúp hiện thực hoá những ý tưởng này, nhưng bạn có thể sử dụng cùng một phương pháp ở bất kỳ nơi nào mà đề xuất của AI phải kịp thời, có thể hành động và đáng tin cậy.

Vạch đích