ساخت هوش مصنوعی قابل اعتماد با سرعت ۱۰۰ مایل در ساعت

۱. مرور کلی

هوش مصنوعی اکنون بخشی از بسیاری از سیستم‌های نرم‌افزاری است، اما ساخت یک برنامه هوش مصنوعی با ساخت برنامه‌ای که کاربران بتوانند به آن اعتماد کنند، یکسان نیست. در بسیاری از محیط‌های دنیای واقعی، چالش صرفاً ایجاد یک پاسخ نیست. چالش، ایجاد پاسخی است که به موقع، مبتنی بر واقعیت، عملی و همسو با تخصص انسانی باشد.

در این آزمایشگاه کد، شما یک شبیه‌ساز مربی مسابقه خواهید ساخت که این ایده‌ها را به شیوه‌ای ملموس و جذاب نشان می‌دهد. این برنامه از تله‌متری از یک ماشین مسابقه مجازی برای متحرک‌سازی حرکت در اطراف مسیر و تولید راهنمایی‌های مربیگری استفاده می‌کند. اگرچه سناریو در مسابقات اتومبیل‌رانی است، اما همین ایده‌های معماری در مراقبت‌های بهداشتی، تولید، لجستیک و سایر حوزه‌هایی که اعتماد اهمیت دارد، اعمال می‌شود.

شما با جریانی پرسرعت از داده‌های تله‌متری کار خواهید کرد، آن را به شکلی مفید و کارآمد برای استدلال هوش مصنوعی تبدیل خواهید کرد و خروجی مبتنی بر LLM را با راهنمایی‌های کدگذاری‌شده انسانی ترکیب خواهید کرد تا پاسخ‌های قابل اعتمادتری تولید کنید.

آنچه خواهید ساخت

در این آزمایشگاه کد، شما یک نمونه اولیه هوش مصنوعی قابل اعتماد خواهید ساخت که:

  • پخش تله‌متری از یک ماشین مسابقه مجازی در حال اجرا در فضای ابری گوگل
  • با استفاده از کروم، حرکت ماشین در مسیر مسابقه را تجسم کنید
  • تبدیل داده‌های خام تله‌متری به ورودی‌های آماده برای هوش مصنوعی
  • اعمال یک لایه استراتژی با پشتیبانی گوگل جمینی
  • خروجی مدل را با راهنمایی‌های رمزگذاری‌شده انسانی و قوانین ایمنی ترکیب می‌کند
  • بازخورد مربیگری را از طریق یک رابط کاربری ارائه می‌دهد

آنچه یاد خواهید گرفت

در پایان این آزمایشگاه کد، شما قادر خواهید بود:

  • توضیح دهید چه چیزی یک سیستم هوش مصنوعی را قابل اعتمادتر می‌کند
  • هدف از معماری ماژولار هوش مصنوعی را توضیح دهید
  • ایجاد یک خط لوله تله متری شبیه سازی شده ساده
  • داده‌های مفید و ساختاریافته را برای استفاده با یک LLM آماده کنید
  • برای بهبود اعتماد، از گاردریل‌ها و قوانین هدایت‌شده توسط انسان استفاده کنید
  • ارزیابی کنید که چگونه می‌توان این معماری را در حوزه‌های دیگر به کار برد

۲. آنچه نیاز خواهید داشت

قبل از شروع، مطمئن شوید که حساب‌ها، ابزارها و سرویس‌های مورد نیاز را آماده دارید.

پیش‌نیازها

شما باید داشته باشید:

  • یک حساب گوگل شخصی با استفاده از آدرس جیمیل
  • دسترسی به فضای ابری گوگل و درک اولیه از رابط خط فرمان (CLI)
  • یک حساب صورتحساب فعال یا اعتبار ابری
  • درک سطح بالا از فضای ابری گوگل و هوش مصنوعی مولد با استفاده از Gemini

جمینی مدل هوش مصنوعی گوگل است که بر پایه استدلال پیشرفته ساخته شده و هر ایده‌ای را به واقعیت تبدیل می‌کند. این یک مدل عالی برای درک چندوجهی و کدگذاری عاملی و پویا است.

جوزا

دریافت اعتبار برای استفاده از گوگل کلود

برای دریافت اعتبار خود، به این لینک مراجعه کنید و با یک آدرس ایمیل Gmail (دامنه gmail.com ) وارد شوید. سپس، اعتبارها را در حساب صورتحساب Google Cloud Platform (GCP) خود بپذیرید و آنها به حساب شما اعمال می‌شوند.

۳. چرا هوش مصنوعی قابل اعتماد اهمیت دارد؟

بسیاری از سیستم‌های هوش مصنوعی می‌توانند پاسخ‌های روان و قانع‌کننده‌ای تولید کنند، اما روان بودن به معنای قابل اعتماد بودن نیست. در سیستم‌های دنیای واقعی، کاربران اغلب به پاسخ‌های به موقع و منطقی نیاز دارند که توسط قوانین ایمنی محدود شده و توسط تخصص در حوزه مربوطه شکل گرفته باشند.

این امر به ویژه زمانی اهمیت پیدا می‌کند که سیستمی با داده‌های سریع کار می‌کند. پاسخی که خیلی دیر برسد ممکن است بی‌فایده باشد. پاسخی که مطمئن به نظر برسد اما زمینه مهم را نادیده بگیرد ممکن است گمراه‌کننده باشد. پاسخی که هیچ ارتباطی با تخصص انسانی نداشته باشد، حتی اگر شسته‌رفته به نظر برسد، ممکن است به سختی بتوان به آن اعتماد کرد.

در سناریوی ماشین مسابقه‌ای که در این آزمایشگاه کد استفاده شده است، مسئله این نیست که آیا هوش مصنوعی می‌تواند حرف جالبی بزند یا خیر. مسئله این است که آیا سیستم می‌تواند توصیه‌ای ارائه دهد که مفید، ایمن، به موقع و مناسب با موقعیت باشد یا خیر.

بیایید به یک نمونه کوچک از اندازه‌گیری از راه دور نگاهی بیندازیم و دو خروجی ممکن را با هم مقایسه کنیم:

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

پاسخ ساده هوش مصنوعی

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

پاسخ مبتنی بر اعتماد

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

متوجه تفاوت شدید؟

چه اتفاقی می‌افتد اگر فقط به پاسخ ساده هوش مصنوعی تکیه کنیم؟

پاسخ اول مطمئن به نظر می‌رسد، اما ریسک را نادیده می‌گیرد. پاسخ دوم مفیدتر است زیرا منعکس کننده زمینه و محدودیت است.

به جای اینکه LLM را به عنوان کل سیستم در نظر بگیرید، باید آن را به عنوان بخشی از یک معماری گسترده‌تر در نظر بگیرید تا قابلیت اعتماد افزایش یابد. علاوه بر این، بسیاری از کاربردها نیاز دارند که توصیه‌ها به اندازه کافی سریع ارائه شوند تا قابل اجرا باشند، مانند ماشین مسابقه، رویه پزشکی، هوانوردی، شبکه برق، سیستم تجارت، ناوبری دریایی و غیره.

حالا، بیایید بفهمیم چگونه چنین معماری‌ای ایجاد کنیم.

۴. درک هوش مصنوعی پرسرعت و معماری قابل اعتماد ماژولار

برخی از سیستم‌های هوش مصنوعی به انواع بسیار متفاوتی از رفتار نیاز دارند. آن‌ها باید به سرعت به شرایط متغیر واکنش نشان دهند و همچنین از استدلال کندتر و متفکرانه‌تر پشتیبانی کنند.

یک معماری ماژولار این مسئولیت‌ها را به مسیرهای مجزا تقسیم می‌کند. یک مسیر می‌تواند انعکاسی باشد و تفسیر فوری و حساس به زمان سیگنال‌های ورودی را مدیریت کند. مسیر دیگر می‌تواند بر استراتژی تمرکز کند و از استدلال سطح بالاتر و تصمیم‌گیری آگاهانه‌تر پشتیبانی کند. مسیرهای دیگر انواع دیگری از عملکردها را هدف قرار می‌دهند.

نمودار معماری

بعضی از تصمیمات باید در لحظه گرفته شوند. بعضی از تصمیمات از تفکر طولانی‌تر سود می‌برند.

هوش مصنوعی قابل اعتماد اغلب به هر دو نیاز دارد.

این جداسازی معماری به سیستم کمک می‌کند تا ضمن پشتیبانی از راهنمایی‌های غنی‌تر مبتنی بر هوش مصنوعی، پاسخگو باقی بماند. همچنین مکانی شفاف برای معرفی محدودیت‌های هدایت‌شده توسط انسان و دانش دامنه ایجاد می‌کند.

در این برنامه کوچک، ما یک مسیر رفلکس و یک مسیر استراتژی داریم که به صورت توابع پایتون پیاده‌سازی شده‌اند.

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));

این دو تابع با توجه به داده‌های تله‌متری یکسان، رفتار متفاوتی دارند. تابع رفلکس یک هشدار فوری است. تابع استراتژی بر اساس قوانین، توصیه‌های مربیگری به ما می‌دهد.

چرا فکر می‌کنید جدا نگه داشتن این منطق مفید است؟

حالا، بیایید یک برنامه‌ی چندبخشی و سرگرم‌کننده بسازیم و ببینیم که چگونه این معماری، واکنش‌های سریع و استدلال عمیق‌تر را به یک سیستم هوش مصنوعی قابل اعتماد تبدیل می‌کند که واقعاً می‌توانید آن را تجربه کنید.

۵. یک سرور استریمینگ تله‌متری بسازید

حالا که هدف معماری را درک کرده‌اید، وقت آن رسیده که خط لوله داده‌ای که برنامه را هدایت می‌کند، بسازید.

در این بخش، شما یک جریان تله‌متری ساده برای یک ماشین مسابقه مجازی ایجاد خواهید کرد. داده‌ها از یک منبع CSV حاوی داده‌های GPS یا موقعیت مسیر می‌آیند و برنامه شما آن را به یک جریان زنده تبدیل می‌کند که رابط کاربری و لایه هوش مصنوعی می‌توانند از آن استفاده کنند.

در این بخش، شما:

  • یک پروژه جدید در Google Cloud برای سرور استریم و برنامه ما ایجاد کنید
  • یک سرور کوچک برای انتشار داده‌های تله‌متری ایجاد کنید
  • آن رویدادها را به رابط کاربری یا کنسول مرورگر منتقل کنید

۱. پوسته ابری را باز کنید

الف) به کنسول ابری گوگل بروید.
ب. یک پروژه جدید برای این آزمایشگاه کد ایجاد کنید. روی منوی کشویی پروژه در بالا کلیک کنید.

کنسول ابری گوگل

هنگام ایجاد یک پروژه، فرصت خوبی است که حساب صورتحساب را پیوند دهید:
حساب صورتحساب پیوند

در صورت تمایل، اگر قبلاً پروژه‌ای ایجاد کرده‌اید، می‌توانید پنل سمت چپ را باز کنید، روی Billing کلیک کنید و بررسی کنید که آیا حساب Billing به این حساب GCP مرتبط است یا خیر.

ج. دریافت کلید API جمینی

پس از فعال کردن اعتبار گوگل کلود، برای دسترسی به جمینی در گوگل کلود به یک کلید API جمینی نیاز دارید.

برای ایجاد کلید API Gemini، باید از Google Vertex AI Studio برای تولید کلیدها استفاده کنیم.

در داخل Vertex AI Studio، روی «دریافت کلید API» در گوشه پایین سمت چپ بالای «مستندات» کلیک کنید. یک کلید API برای Gemini ایجاد کنید (به نظر می‌رسد رشته‌ای طولانی از کاراکترهای به ظاهر تصادفی است). این کلید را در یک مکان امن ذخیره کنید. ما از این کلید API در مرحله 6 «ساخت شبیه‌ساز ماشین مسابقه» برای تأیید دسترسی خود به Gemini در Google Cloud استفاده خواهیم کرد.

د. روی آیکون Cloud Shell در نوار بالا (آیکون ترمینال) کلیک کنید تا یک ترمینال مبتنی بر مرورگر باز شود.
پوسته ابری

ه. منتظر بمانید تا جلسه ترمینال شروع شود.

جلسه ترمینال

۲. کد را دریافت کنید

مخزن اصلی را کلون کنید.

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

توجه داشته باشید که دو پوشه در این مخزن وجود دارد: "koru-application" (برنامه وب) و "streaming-telemetry-server" (تله متری ماشین مسابقه شبیه سازی شده در زمان واقعی). این مرحله "streaming-telemetry-server" را شرح می‌دهد. ما در مرحله بعدی از "koru-application" استفاده خواهیم کرد.

۳. فعال کردن API های مورد نیاز

یک بار برای هر پروژه اجرا شود:

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

YOUR_PROJECT_ID را با شناسه پروژه واقعی خود جایگزین کنید (یا اگر پروژه از قبل تنظیم شده است، خط اول را نادیده بگیرید).

می‌توانید YOUR_PROJECT_ID را در فهرست پروژه‌ها پیدا کنید.

جلسه ترمینال

۴. بک‌اند را روی Cloud Run مستقر کنید

از ریشه مخزن (یعنی مطمئن شوید که در پوشه trustable-ai-codelab هستید):

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

توجه داشته باشید که ممکن است لازم باشد در صورت درخواست، «Y» را فشار دهید.

  • در اولین اجرا ممکن است از شما خواسته شود که APIها را فعال کنید یا یک مخزن Artifact Registry ایجاد کنید؛ در صورت نیاز، آن را بپذیرید.
  • اگر از منطقه‌ای متفاوت از us-central1 استفاده می‌کنید، آن منطقه را با استفاده از --region مشخص کنید.
  • وقتی استقرار تمام شد، gcloud آدرس اینترنتی سرویس (service-URL) را چاپ می‌کند. ما فقط باید "events" را به این آدرس اینترنتی اضافه کنیم تا از آن به عنوان نقطه پایانی کامل برای سرور تله‌متری استفاده کنیم.

۵. از آدرس اینترنتی جریان استفاده کنید

سرور تله‌متری اکنون داده‌های تله‌متری شبیه‌سازی‌شده را با استفاده از Server-Sent-Events (SSE) در نقطه پایانی فرم منتشر می‌کند:

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

تست در مرورگر: با استفاده از کروم به این آدرس اینترنتی نقطه پایانی استریم مراجعه کنید. باید داده‌های استریم ورودی را در مرورگر مشاهده کنید که داده‌های منتشر شده توسط حسگرهای یک ماشین مسابقه را شبیه‌سازی می‌کنند.

خروجی از نقطه پایانی جریان در یک برگه مرورگر

برای قطع اتصال، می‌توانید تب مرورگر را ببندید.

با curl تست کنید:

حالا بیایید از خط فرمان shell تست کنیم.

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

شما باید داده‌های استریم‌شده‌ی ورودی را در پنجره‌ی پوسته‌ی ابری ببینید.

خروجی از نقطه پایانی جریان از طریق خط فرمان shell

ما از این داده‌های تله‌متری برای شبیه‌سازی داده‌های منتشر شده توسط حسگرها در یک ماشین مسابقه استفاده خواهیم کرد. بقیه‌ی بخش کد از این داده‌ها استفاده خواهد کرد. می‌توانید با وارد کردن CTRL-C در پنجره‌ی ترمینال، برنامه‌ی curl را خاتمه دهید.

آنچه باید توجه کنید

هنگام تکمیل این بخش، به ماهیت داده‌های ورودی توجه کنید. داده‌های خام تله‌متری اغلب حجم بالایی دارند، حساس به زمان هستند و بلافاصله برای استدلال هوش مصنوعی مناسب نیستند. پس از ساخت برنامه front-end، باید داده‌های خام را به فرمتی کارآمد فیلتر کنیم که یک LLM بتواند به سرعت پردازش کند.

اما اول، بیایید رابط کاربری وب را برای تجسم داده‌ها بسازیم.

۶. شبیه‌ساز ماشین مسابقه را بسازید

در این بخش، شما:

  • ساخت شبیه ساز ماشین مسابقه
  • اتصال سرور تله‌متری به برنامه وب ماشین مسابقه
  • مسابقات شبیه‌سازی شده را ببینید

در این مرحله، ما یک شبیه‌سازی عملی از داده‌های تله‌متری یک ماشین مسابقه‌ای که در فضای ابری در حال حرکت است، داریم. حالا بیایید برنامه‌ای بسازیم که روی دستگاه محلی شما اجرا شود، به فضای ابری گوگل متصل شود و داده‌ها را مصورسازی کند.

برنامه هوش مصنوعی قابل اعتماد ما از قدرت و انعطاف‌پذیری سرویس‌های ابری گوگل و هوش محلی در حال اجرا در کروم استفاده می‌کند.

سرویس استریم تله‌متری در گوگل کلود اجرا می‌شود، اما اپلیکیشن ماشین مسابقه روی دستگاه محلی شما اجرا می‌شود. این یعنی شما باید دوباره مخزن را کپی کنید، این بار روی لپ‌تاپ یا کامپیوتر رومیزی خود.

برای سادگی، همان مخزن شامل کد مربوط به سرور استریم و برنامه ماشین مسابقه است.

برنامه front-end را از GitHub کپی کنید:

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

پس از اینکه مخزن روی لپ‌تاپ یا دسکتاپ شما کلون شد، بیایید برنامه را اجرا کنیم.

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

وایت

در کروم، پورت را روی دستگاه محلی خود باز کنید (مانند مثال بالا ، http://localhost:5173 ). صفحه فرود برنامه "AI Motorsport Coaching" را مشاهده خواهید کرد.

مربی گوشه شما

روی دکمه‌ی "باز کردن داشبورد ->" کلیک کنید. این کار رابط کاربری برنامه را اجرا می‌کند.

داشبورد کورو

در این مرحله، شما یک سرور تله‌متری دارید که تله‌متری شبیه‌سازی‌شده مسابقات اتومبیل‌رانی را در Google Cloud تولید می‌کند و یک برنامه وب محلی دارید که می‌تواند آن داده‌ها را تجسم کند و به یک LLM متصل شود. بیایید آنها را به هم متصل کنیم و همچنین به سرویس‌های Gemini LLM متصل شویم.

در گوشه سمت راست بالای برنامه، روی نماد چرخ دنده (تنظیمات) کلیک کنید.

تنظیمات کورو

کلید API مربوط به Gemini خود را که در مرحله ۲ ارائه دادید، وارد کنید. این به شما امکان دسترسی به سرویس‌های Gemini در Google Cloud را می‌دهد.

روی «ذخیره» کلیک کنید تا برنامه کلید API شما را به خاطر بسپارد.

حالا، بیایید برنامه را به سرور تله‌متری متصل کنیم. در داشبورد برنامه، روی «جلسه زنده» کلیک کنید.

ورودی جریان Koru SSE

آدرس اینترنتی (URL) خاص سرور تله‌متری مبتنی بر ابر خود (مرحله ۵) را در فیلد متنی که عبارت « SSE URL or .txt file path » را دارد، وارد کنید. آدرس اینترنتی SSE ما به شکل زیر بود:

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

پس از وارد کردن آدرس اینترنتی (URL) سرور تله‌متری، روی «اتصال» (در سمت راست فیلد متن) کلیک کنید. فراموش نکنید که در انتهای URL، «رویدادها» را وارد کنید.

اکنون باید برنامه را در حال نمایش داده‌های شبیه‌سازی شده ببینید!

اگر صدای بلندگوی شما زیاد باشد، می‌توانید توصیه‌های مربوط به مسابقات اتومبیل‌رانی را از مربیان مختلف بشنوید. هر مربی شخصیت متفاوتی دارد. سعی کنید مربیان مختلفی را انتخاب کنید تا توصیه‌های متنوع مسابقه‌ای و سبک‌های صوتی مختلف آنها را ببینید. در صورت نیاز، می‌توانید با کلیک روی نماد بلندگو، صدا را غیرفعال کنید.

نمونه‌ای از برنامه در حال اجرا

حالا که یک برنامه‌ی کاربردی داریم، بیایید بررسی کنیم که چگونه داده‌ها را برای پردازش کارآمد توسط LLM آماده کردیم و چگونه می‌توانیم ویژگی‌های اضافی را برای افزایش قابلیت اعتماد به کل سیستم اضافه کنیم.

۷. تله‌متری را برای استدلال هوش مصنوعی آماده کنید

داده‌های خام تله‌متری برای شبیه‌سازی مفید هستند، اما معمولاً برای ارسال مستقیم به یک LLM بیش از حد دقیق و مکرر هستند. اگر تمام داده‌های تله‌متری را بدون تغییر ارسال کنید، ممکن است تأخیر افزایش یابد، نویز ایجاد شود و کیفیت راهنمایی حاصل کاهش یابد.

در این بخش، شما تله‌متری را به شکلی مفیدتر تغییر شکل خواهید داد.

در این بخش، شما:

  • بررسی JSON خام تله‌متری
  • مشخص کنید کدام فیلدها برای استدلال مرتبط‌تر هستند
  • فیلتر کردن یا خلاصه کردن داده‌ها
  • جزئیات غیرضروری را کاهش دهید
  • یک نمایش سازگار با هوش مصنوعی از وضعیت رانندگی تهیه کنید

این یک گام مهم در ساخت هوش مصنوعی قابل اعتماد است. کیفیت پاسخ نه تنها به مدل، بلکه به ساختار و مرتبط بودن داده‌های دریافتی نیز بستگی دارد.

حالا بیایید داده‌های خاص مربوط به ماشین‌های مسابقه‌ای را بررسی کنیم. می‌توانیم با تغییر مقادیر خاص در برنامه، بارگذاری مجدد آن و مشاهده نتیجه، آزمایش کنیم.

../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

نیروهای G در یک ماشین، شتاب یا کاهش سرعت را اندازه‌گیری می‌کنند. در یک ماشین مسابقه، درک نیروهای G به هندلینگ و عملکرد کلی ماشین کمک می‌کند. اگر برنامه ما این اطلاعات را نداشته باشد، ارائه مشاوره به راننده دشوار است. آن دو خط را کامنت کنید، هر دو مقدار gLat و gLong را روی 0.0 تنظیم کنید و برنامه را دوباره اجرا کنید.

توجه داشته باشید که وقتی ماشین به پیچ نزدیک می‌شود، هیچ هشداری داده نمی‌شود. این برای یک راننده مسابقه خیلی مفید نیست!

سپس تغییر خود را لغو کرده و برنامه را دوباره اجرا کنید. به توصیه‌های صوتی مفید هنگام رسیدن خودرو به پیچ توجه کنید؟ داده‌های نیروی گرانش برای ارائه توصیه به راننده بسیار مهم هستند.

حالا، بیایید به طور مصنوعی سرعت ماشین را به سرعت آرام ۴۸ کیلومتر در ساعت محدود کنیم. ما با این سرعت در هیچ مسابقه‌ای برنده نخواهیم شد، اما مطمئناً نوع آموزشی را که دریافت می‌کنیم نشان خواهد داد.

در همان فایل ( telemetryStreamService.ts ) نزدیک خط ۱۵۸، تابع processPoint() را خواهید یافت. در آن تابع، بیایید سرعت را محدود کنیم.

تغییر:

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

به:

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
...

برنامه را دوباره اجرا کنید. اکنون چه نوع توصیه‌های مربیگری دریافت می‌کنیم؟ اگر با سرعت کم رانندگی می‌کنیم، چیز زیادی لازم نیست!

اکنون آن تغییرات را به حالت اولیه برگردانید و برنامه را دوباره اجرا کنید.

واضح است که سرعت خودرو یک داده ارزشمند است. درک اینکه چه داده‌های خاصی برای ارائه توصیه‌های ارزشمند حیاتی هستند بسیار مهم است. به همان اندازه ارزیابی اینکه چه داده‌هایی مرتبط نیستند نیز مهم است.

شما همچنین باید در اینجا به ایمنی و اعتماد فکر کنید. حتی ورودی‌های از پیش آماده‌شده هم تضمین‌کننده‌ی پاسخی قابل اعتماد نیستند. ما هنوز نیاز به معرفی قوانین هدایت‌شده توسط انسان و محدودیت‌های صریح داریم.

آماده‌سازی داده‌ها فقط یک مرحله پیش‌پردازش نیست. بلکه بخش مهمی از استراتژی اعتماد است. ورودی‌های تمیزتر اغلب منجر به خروجی‌های متمرکزتر و قابل اعتمادتر می‌شوند.

۸. گاردریل‌ها و تخصص انسانی کدگذاری‌شده را اضافه کنید

یک سیستم هوش مصنوعی قابل اعتماد نباید تنها به خروجی مدل متکی باشد. در بسیاری از موارد، قابل اعتمادترین سیستم‌ها، استدلال مدل زبانی بزرگ را با قوانین صریح، دانش دامنه و محدودیت‌های هدایت‌شده توسط انسان ترکیب می‌کنند.

در این بخش، آن لایه را اضافه خواهید کرد.

می‌توانید این لایه را به عنوان دانش مربیگری کدگذاری شده در نظر بگیرید. این دانش می‌تواند شامل الگوهای پاسخ ترجیحی، قوانین اعتبارسنجی، بررسی‌های ایمنی یا راهنمایی‌های ساختاریافته باشد که به سیستم کمک می‌کند تا پایدار و مفید بماند.

در این بخش، شما:

  • معرفی قوانین پاسخ که رفتار مدل را شکل می‌دهند
  • برای کاهش توصیه‌های گمراه‌کننده، بررسی‌های ایمنی را اعمال کنید
  • تخصص انسانی کدگذاری‌شده را در فرآیند تولید بگنجانید
  • پاسخ‌ها را قبل و بعد از این اضافات مقایسه کنید

بیایید بررسی کنیم که چگونه تخصص دامنه به برنامه ما اضافه می‌شود.

یک LLM معمولاً در مسابقات اتومبیل‌رانی یا فیزیک عملکرد ماشین‌های مسابقه آموزش نمی‌بیند. اگر برنامه ما شامل آن تخصص در آن حوزه باشد، کاربران می‌توانند اعتماد بیشتری به راهنمایی‌های آن داشته باشند. این راهنمایی از قوانینی مبتنی بر تخصص انسانی، به عبارت دیگر، یک لایه تخصص در آن حوزه، ناشی می‌شود.

../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:**
...

این اصول ماشین‌های مسابقه‌ای، عنصر کلیدی در ارائه خروجی قابل اعتماد هستند. اگر این تخصص را نداشتیم چه اتفاقی می‌افتاد؟ بیایید بفهمیم.

بیایید RACING_PHYSICS_KNOWLEDGE را حذف کنیم و توصیه‌های مسابقه‌ای خود را بررسی کنیم.

export const RACING_PHYSICS_KNOWLEDGE = ``;

دوباره درخواست را اجرا کنید. اکنون چه نوع مشاوره کوچینگی دریافت می‌کنیم؟

به توصیه‌های عمومی توجه کنید.

ما دیگر اطلاعات دقیقی در مورد اصطکاک، انتقال وزن، سرعت خروج و غیره دریافت نمی‌کنیم. بدون این اطلاعات، قابلیت اعتماد ما کمتر است. آن تجربه مسابقه‌ای را بازیابی کنید و برنامه را دوباره اجرا کنید.

این مرحله جنبه‌ای حیاتی از یک سیستم هوش مصنوعی قابل اعتماد است. اعتماد به طور جادویی و با یک دستور قوی ایجاد نمی‌شود. اعتماد از طراحی سیستم و تفکر انتقادی ناشی می‌شود.

LLM بخشی از راه حل است، اما تمام راه حل نیست. اعتماد زمانی بهبود می‌یابد که خروجی هوش مصنوعی توسط دانش صریح انسانی هدایت شود.

۹. شخصیت‌های مربیگری و تجربه کاربری را طراحی کنید

وقتی خط لوله استدلال شما آماده شد، سوال بعدی این است که سیستم چگونه باید با کاربر ارتباط برقرار کند.

در این بخش، شما با تعریف نحوه ارتباط لایه استراتژی با راننده، تجربه مربیگری را شکل خواهید داد. شما دستورالعمل سیستم را برای یکی از شخصیت‌های مربیگری اصلاح خواهید کرد و در نظر خواهید گرفت که چگونه راهنمایی آن باید واضح، به موقع و از همه مهم‌تر، عملی باشد.

در این بخش، شما:

  • یک درخواست سیستمی برای یک شخصیت مربیگری ایجاد یا اصلاح کنید
  • سبک‌های مختلف مربیگری را امتحان کنید
  • مشاهده کنید که چگونه تغییرات سریع بر پاسخ‌ها تأثیر می‌گذارند
  • تعریف الزامات رابط کاربری برای بازخورد قابل اعتماد
  • پشتیبانی از تبدیل متن به گفتار (TTS) برای پیام‌های فوری و غیرفوری را درک کنید.

اپلیکیشن ما شامل چندین شخصیت کوچینگ است که هر کدام انواع مختلفی از مشاوره کوچینگ را ارائه می‌دهند.

پرسونا

ویژگی‌ها

تونی

انگیزشی، مبتنی بر احساس

راشل

فنی، متمرکز بر فیزیک

ای جی

دستورات مستقیم و بی‌پرده

گارمین

بهینه‌سازی دلتا، متمرکز بر داده

سوپر ای جی

تطبیقی، سوئیچ‌ها بر اساس نوع خطا

این پرسوناها در فایل ../src/utils/coachingKnowledge.ts تعریف شده‌اند.

در این فایل، متوجه یک نقشه شیء ( COACHES ) خواهید شد که کلیدهای رشته‌ای را با CoachPersonas مرتبط می‌کند. یک CoachPersona شامل ویژگی‌های هر نوع مربی است. یکی از ویژگی‌های مهم systemPrompt است. هر شخصیت systemPrompt مخصوص به خود را دارد که LLM را در نحوه پاسخگویی راهنمایی می‌کند.

بیایید یکی از آن system prompts را تغییر دهیم و ببینیم LLM چگونه پاسخ می‌دهد.

نزدیک خط ۳۱، systemPrompt مربوط به "AJ" را خواهید دید که در توصیه‌هایش بسیار رک و بی‌پرده است. بیایید systemPrompt را طوری تغییر دهیم که AJ بیش از حد مودب باشد.

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.`

برنامه را دوباره اجرا کنید، AJ را به عنوان مربی انتخاب کنید و ببینید چه نوع پاسخ‌هایی تولید می‌شود.

حالا systemPrompt اصلی را بازیابی کنید و برنامه را دوباره اجرا کنید. توجه داشته باشید که system prompt در هدایت LLM برای ارائه پاسخی متناسب با شخصیت، بسیار مهم است.

اعتماد فقط به درست بودن مربوط نمی‌شود. بلکه به نحوه‌ی ارائه نیز مربوط می‌شود. توصیه‌ای که از نظر فنی دقیق است، اگر مبهم، نامناسب در زمان‌بندی یا حواس‌پرت‌کننده باشد، همچنان می‌تواند بی‌اثر باشد.

یک سیستم قابل اعتماد باید به خوبی ارتباط برقرار کند. تجربه کاربری بخشی از معماری اعتماد است.

۱۰. معماری سرتاسری را بررسی کنید

در این مرحله، شما بخش‌های اصلی سیستم را ساخته‌اید. اکنون زمان آن رسیده است که به عقب برگردیم و نحوه‌ی همکاری آنها را بررسی کنیم.

برنامه شما اکنون شامل این اجزا است:

  • جریان تله‌متری
  • لایه تجسم
  • مرحله تبدیل داده‌های آماده برای هوش مصنوعی
  • اجزای استراتژی مبتنی بر استدلال LLM
  • نرده‌های محافظ و راهنمایی‌های رمزگذاری شده انسانی
  • تجربه مربیگری کاربرپسند

یک راه مفید و ساده برای درک جریان کلی این اجزا، اضافه کردن قابلیت ثبت وقایع (logging) به برنامه‌مان است.

ما قابلیت ثبت وقایع (logging) را اضافه خواهیم کرد تا داده‌های تله‌متری را هنگام عبور از مسیرها مشاهده کنیم.

ابتدا، بیایید داده‌های تله‌متری را مشاهده کنیم. در telemetryStreamService.ts ، حدود خط ۲۱۲ (قبل از this.emit(frame) ، خطی اضافه کنید که سرعت، نیروی G جانبی (شتاب جانبی) و میزان فشار راننده بر پدال ترمز را نشان دهد.

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

برنامه را مجدداً بارگذاری کنید. قبل از اجرای برنامه، بیایید کنسول را در DevTools کروم باز کنیم تا این اطلاعات اشکال‌زدایی را مشاهده کنیم.

کنسول DevTools

در برنامه، نقطه پایانی تله‌متری را وارد کرده و روی "اتصال" کلیک کنید. اکنون می‌توانید داده‌های تله‌متری ورودی را مشاهده کنید.

حالا، بیایید ثبت وقایع را برای مسیر رفلکس و مسیر استراتژی اضافه کنیم.

در ../src/services/coachingService.ts حدود خط ۷۱ قبل از this.emit() ، یک خط گزارش‌گیری برای مسیر رفلکس اضافه کنید:

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

و در همان فایل، حدود خط ۲۸۷، قبل از this.emit() ، یک خط گزارش‌گیری مشابه برای مسیر استراتژی اضافه کنید (بیایید text پاسخ مربیگری که توسط API Gemini برگردانده شده است را اضافه کنیم):

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

برنامه را دوباره اجرا کنید. در کنسول متوجه خواهید شد که چگونه داده‌های تله‌متری از منبع از طریق این مسیرها جریان می‌یابند. جریان ورودی فیلتر می‌شود، به LLM ارسال می‌شود، با تخصص انسانی مورد اعتماد تأیید می‌شود و با استفاده از یک رابط کاربری مناسب به کاربر ارائه می‌شود.

توجه داشته باشید که ما اجزای فنی مختلف را به هم متصل کرده‌ایم تا هدف بزرگتر هوش مصنوعی قابل اعتماد را محقق کنیم. ارزش این معماری به هیچ یک از اجزا به تنهایی مربوط نیست. ارزش آن از نحوه تقویت یکدیگر توسط اجزا ناشی می‌شود.

هوش مصنوعی قابل اعتماد یک نتیجه معماری است، نه یک ویژگی واحد.

تخریب (حذف سرویس)

مهم است که به یاد داشته باشید وقتی دیگر به سرویس نیازی ندارید، آن را حذف کنید. پس از اتمام آزمایش سرور تله‌متری به همراه برنامه، باید سرویس Cloud Run را حذف کرده و پرداخت هزینه آن را متوقف کنید:

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

در صورت لزوم، به یاد داشته باشید که us-central1 را با منطقه‌ای که هنگام استقرار استفاده کرده‌اید جایگزین کنید. در صورت درخواست، تأیید کنید.

۱۱. چالش‌ها

حالا که هسته برنامه کار می‌کند و اجزای مختلف را درک کرده‌اید، سعی کنید طراحی را گسترش دهید.

چالش‌های پیشنهادی

  • منطق مربیگری را بیشتر به حاشیه ببرید
  • شبیه‌سازی را برای پشتیبانی از باران یا کاهش کشش اصلاح کنید
  • بررسی کنید که چگونه تنظیم یا تنظیم دقیق مدل می‌تواند عملکرد را بهبود بخشد
  • معماری را برای حوزه دیگری مانند پزشکی، تولید یا لجستیک تطبیق دهید

برای مثال، هنگام به‌کارگیری درس‌های آموخته‌شده در این آزمایشگاه در حوزه‌ای دیگر، این سؤالات را در نظر بگیرید:

  • معادل مسافت سنجی مسابقه ای، یعنی داده های پیوسته، در حوزه دیگری چیست؟
  • کدام تصمیمات باید فوری و کدام تصمیمات استراتژیک‌تر باشند؟
  • چه نوع تخصص انسانی باید رمزگذاری شود؟
  • کاربران برای اینکه باور کنند سیستم قابل اعتماد است، باید چه چیزی را ببینند؟

این چالش‌ها شما را تشویق می‌کنند که فراتر از مثال مسابقه‌ای فکر کنید و الگوی طراحی گسترده‌ترِ قابل اعتماد بودنِ پشت این آزمایشگاه کد را تشخیص دهید.

۱۲. جمع‌بندی و مراحل بعدی

در این آزمایشگاه کد، شما چیزی بیش از یک دموی مسابقه‌ای ساختید. شما یک مثال عینی از چگونگی طراحی سیستم‌های هوش مصنوعی قابل اعتماد ساختید.

شما با تله‌متری خام شروع کردید، آن را به قالبی مفید برای یک LLM تبدیل کردید، استدلال هوش مصنوعی را به کار بردید و خروجی را با راهنمایی‌های انسانی کدگذاری شده و محدودیت‌های پاسخ تقویت کردید. در طول مسیر، دیدید که اعتماد از معماری ناشی می‌شود، نه فقط از خروجی مدل.

یک سیستم هوش مصنوعی قابل اعتماد اغلب موارد زیر را با هم ترکیب می‌کند:

  • داده‌های بلادرنگ ساختاریافته
  • استدلال مبتنی بر مدل
  • تخصص دامنه رمزگذاری شده
  • نرده‌های محافظ آشکار
  • طراحی تجربه کاربری متفکرانه

سناریوی مسابقه به ملموس شدن این ایده‌ها کمک کرد، اما همین رویکرد را می‌توان در هر جایی که توصیه‌های هوش مصنوعی باید به موقع، عملی و قابل اعتماد باشند، استفاده کرد.

خط پایان