هوش مصنوعی در وب‌اپلیکیشن؛ معماری امن، Eval و MLOps

اضافه‌کردن یک فراخوانی مدل به Backend چند ساعت زمان می‌برد؛ ساختن قابلیتی که در اینترنت ناپایدار، ورودی فارسی، بار واقعی و حالت خطا قابل اعتماد بماند، مسئله اصلی است. بسیاری از پروژه‌های AI نه به‌خاطر انتخاب مدل ضعیف، بلکه به‌خاطر Use case مبهم، Ground truth نامعلوم، داده بدون مجوز، API بدون Timeout، خروجی کنترل‌نشده و نبود مسیر Fallback شکست می‌خورند.

این راهنما برای توسعه‌دهنده، Product، Data/ML، Security و SRE نوشته شده است. هدف آن تبلیغ «AI در همه‌چیز» نیست؛ هدف این است که تشخیص دهید کجا Rule/Search/UX ساده کافی است، کجا ML کلاسیک یا مدل مولد ارزش دارد، و چگونه آن را از PoC به Web application قابل سنجش و قابل بازگشت ببرید.

خلاصه اجرایی: ابتدا Outcome، Baseline، Risk و Acceptance contract را تعریف کنید. سپس میان Client-side، سرویس داخلی، Managed API، Async و Hybrid بر اساس داده، Latency، Cost و Capability تصمیم بگیرید. مدل را پشت Backend contract نگه دارید؛ Schema خروجی را اعتبارسنجی کنید؛ Authorization را هرگز به مدل نسپارید؛ Prompt/model/data/tool را نسخه‌دار کنید؛ Eval فارسی را پیش از Release اجرا و با Shadow/Canary منتشر کنید؛ برای Timeout، Budget و Provider outage مسیر Degrade/Fallback داشته باشید.

هوش مصنوعی در وب‌اپلیکیشن دقیقاً چه معنایی دارد؟

«AI feature» می‌تواند از یک مدل Logistic regression کوچک تا سیستم Recommendation، Semantic search، OCR، تشخیص تقلب، خلاصه‌سازی، دستیار گفتگو یا Agent ابزارمحور باشد. این خانواده‌ها ورودی، Failure mode، معیار و معماری یکسان ندارند. LLM فقط یکی از گزینه‌هاست.

خانوادهنمونه وبخروجیریسک شاخص
Rule/Heuristicاعتبارسنجی فرم، EligibilityقطعیRule drift و Edge case
ML کلاسیکChurn، Fraud score، RankingScore/ClassBias، Drift، Threshold
Recommendation/Searchکالا یا محتوای مرتبطRanked listFilter bubble، Inventory constraint
Computer vision/SpeechOCR، Caption، TranscriptionText/Label/Regionکیفیت ورودی و داده حساس
Generative AIDraft، Summary، Q&Aاحتمالی و بازConfabulation، Injection، هزینه
Agent/Tool useاستعلام یا اقدام در سامانهPlan + ActionExcessive agency و Authorization

AI الزام نیست؛ با Baseline کم‌پیچیدگی شروع کنید

اگر شرط کسب‌وکار قطعی، قابل توضیح و کم‌تغییر است، Rule engine انتخاب بهتری است. اگر Keyword search نیاز را حل می‌کند، Semantic retrieval هنوز ارزش اضافه نکرده است. اگر کاربر به اطلاعات دقیق سفارش نیاز دارد، Query مستقیم پایگاه‌داده از تولید متن معتبرتر است.

پرسشاگر پاسخ منفی است
آیا Job و کاربر مشخص‌اند؟Discovery انجام دهید؛ مدل انتخاب نکنید
آیا Baseline فعلی اندازه‌گیری شده؟Rule/Search/Manual flow را بسنجید
آیا داده مجاز و نماینده دارید؟Data contract و Consent را حل کنید
آیا خطا قابل کشف و مهار است؟دامنه را کوچک یا Human review اضافه کنید
آیا Outcome ارزش Cost/Risk را دارد؟Prototype را Stop کنید

برای برآورد TCO، Cost per accepted outcome و تصمیم Scale/Stop از راهنمای هزینه پیاده‌سازی AI استفاده کنید. Speed یک PoC، شاهد Production fit نیست؛ چارچوب Assumption و Evidence در راهنمای نمونه‌سازی سریع آمده است.

Gate صفر: Use-case contract بنویسید

Actor: چه کسی و با چه سطح دسترسی؟
Job: در چه موقعیتی چه پیشرفتی می‌خواهد؟
Input: چه داده‌ای، از کجا و با چه مجوزی؟
Output: چه Schema و چه تصمیمی را پشتیبانی می‌کند؟
Baseline: راه فعلی و کیفیت/زمان/هزینه آن چیست؟
Failure: خطای قابل قبول و خطای غیرقابل قبول چیست؟
Authority: مدل پیشنهاد می‌دهد یا اقدام می‌کند؟
Human gate: چه چیزی تأیید انسانی می‌خواهد؟
Fallback: در Timeout/Refusal/Outage چه می‌شود؟
Acceptance: حداقل Quality/Latency/Cost/Safety چیست؟
Owner: چه کسی Outcome و Residual risk را می‌پذیرد؟

مثلاً «چت‌بات هوشمند» Use case نیست. «پاسخ به پرسش وضعیت سفارش با داده همان کاربر، بدون تغییر سفارش، با Citation به رکورد و Escalation در ابهام» Contract قابل ارزیابی است.

Risk tier؛ میزان خودکارسازی را با پیامد خطا تنظیم کنید

TierنمونهAuthorityکنترل انتشار
کمپیشنهاد Tag برای Draftپیشنهاد، قابل UndoSample review
متوسطRanking یا پاسخ Help centerنمایش با Grounding/FallbackOffline eval + Canary
زیادتقلب، اعتبار، سلامت، حقوقDecision support محدودمتخصص، Appeal، Audit و Requirement جاری
اقدام‌محورRefund، حذف، ارسال پیامLeast privilege + ConfirmationTool allowlist، Policy engine و Replay

NIST AI Resource Center منابع AI RMF و آزمون/ارزیابی/Verification/Validation را گردآوری می‌کند. این Framework تصمیم محصول را جایگزین نمی‌کند، اما برای مستندسازی Govern/Map/Measure/Manage و Risk owner مفید است.

Build، Buy یا مدل آماده؛ تصمیم روی Lifecycle است

گزینهمزیتهزینه پنهانمناسب وقتی
Rule/Searchقابل توضیح و ارزاننگهداری Rule و Recall محدودمنطق قطعی است
Managed model APIشروع سریع و Capability بالاLatency، Usage cost، Terms، Lock-inProvider fit و Exit دارید
Pre-trained self-hostedکنترل Deployment/Data بیشترGPU/ops، patch، evaluationتیم و Scale توجیه دارد
Fine-tuneتطبیق Behavior/TaskDataset، Drift، نسخه و بازآموزیPrompt/Retrieval کافی نیست
مدل اختصاصیFit بالا برای مسئله خاصData/ML lifecycle کاملمزیت و داده پایدار دارید

زبان برنامه‌نویسی «بهترین مطلق» ندارد. Python، JavaScript/TypeScript، Java، Go، Rust یا C# می‌توانند بخشی از Stack باشند. معیار، Runtime، کتابخانه، Skill تیم، Latency، Operability و Supply chain است؛ نه محبوبیت یک زبان.

پنج الگوی معماری برای AI در وب

الگومسیرمزیتقید اصلی
Client-sideBrowser → Local modelOffline و حذف Round tripDownload/Memory/Device/Exposure
Internal servingWeb → Backend → Model serviceکنترل و جداسازیPlatform/MLOps
Managed APIWeb → Backend → Providerسرعت عرضهTerms/Data/Quota/Exit
Async/BatchWeb → Queue → Worker → Resultکنترل بار و کار طولانیState/Idempotency/Notification
HybridLocal pre/post + Server inferenceتقسیم کاردو Runtime و Failure surface بیشتر

Hybrid خودبه‌خود «بهترین دو دنیا» نیست؛ ممکن است هر دو پیچیدگی را جمع کند. تصمیم را با Device matrix، P95 latency، حجم Model، Privacy boundary، Cost و Failure drill اثبات کنید.

Client-side inference؛ چه زمانی واقعاً مناسب است؟

اجرای مدل در مرورگر برای کارهای کوچک، تعاملی، Offline یا داده‌ای که نباید برای Inference ارسال شود جذاب است. اما Artifact مدل به دستگاه کاربر می‌رسد، Capability مرورگر یکسان نیست، Main thread ممکن است مسدود شود و «داده خارج نمی‌شود» فقط وقتی درست است که Telemetry، CDN، Plugin و کد دیگر آن را ارسال نکنند.

به‌جای ONNX.js قدیمی، مستندات فعلی ONNX Runtime Web بسته onnxruntime-web و Execution Providerهای WASM/WebGPU/WebNN را توضیح می‌دهد؛ Operator و Browser support یکسان نیست. TensorFlow.js نیز اجرای مدل در Browser و Node.js را پوشش می‌دهد. انتخاب باید با Prototype روی Deviceهای واقعی باشد.

Gate مرورگرآزمونFallback
CapabilityBrowser/OS/Execution providerWASM یا Server
ArtifactBundle/model bytes و CacheLazy load و مدل کوچک‌تر
PerformanceInit، warm/cold P95، Memory، BatteryWorker، quantization، degrade
UXProgress، Cancel، tab backgroundManual path
SecurityCSP، integrity، model provenanceSame-origin و pinned artifact
PrivacyNetwork audit و local retentionConsent/clear storage

Server-side model service؛ مرز قابل عملیات

برای مدل سنگین، داده Backend، Authorization متمرکز یا IP مدل، سرویس سمت سرور مناسب‌تر است. GPU الزام نیست؛ CPU، accelerator یا inference managed بر اساس Workload انتخاب می‌شود. Container و Kubernetes نیز «مرحله استاندارد» نیستند؛ یک سرویس ساده یا Job queue ممکن است برای بار واقعی کافی باشد.

لایهمسئولیت
Web/API gatewayAuthN، Rate، request size، Trace ID
AI orchestrationPolicy، Prompt، Retrieval، Tool routing
Model adapterProvider/self-host contract و normalization
InferenceModel runtime، batching و resource limit
EvaluationDataset، grader، threshold و regression
TelemetryLatency breakdown، quality، cost و safety

Managed API؛ کلید را هرگز در Frontend قرار ندهید

Browser باید به Backend خودتان درخواست دهد و Backend با Secret manager به Provider وصل شود. Obfuscation، Environment variable سمت Client یا محدودیت Domain جای Secret boundary را نمی‌گیرد. Backend همچنین Authorization، Budget، Redaction، Timeout، Audit و Provider abstraction را اعمال می‌کند.

در نمونه OpenAI، راهنمای رسمی API SDK سمت سرور و Responses API را نشان می‌دهد. Capability و Model catalog تغییر می‌کنند؛ Alias یا Model را بر اساس Eval انتخاب و نسخه/تنظیم مؤثر را در Trace ثبت کنید، نه اینکه نام یک مدل را برای همیشه در Business logic پخش کنید.

Async و Batch؛ کار طولانی را داخل Request نگه ندارید

برای Indexing، پردازش فایل، Transcription طولانی، Enrichment و Generation سنگین، الگوی Job بهتر از HTTP باز است. کاربر Job ID می‌گیرد، Status را Poll یا از Event دریافت می‌کند و Cancel/Expiry دارد.

POST /ai/v1/jobs
→ 202 Accepted { job_id, status_url, expires_at }

State machine:
queued → running → succeeded
                 ↘ failed_retryable → queued
                 ↘ failed_terminal
queued/running → cancelled

Required:
idempotency_key, actor_id, purpose, input_ref,
model_policy, budget, timeout, result_schema_version

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

نیازClientInternalManagedAsync
Offlineقویضعیفضعیفضعیف
مدل بزرگضعیفقویقویقوی
شروع سریعمتوسطضعیفقویمتوسط
کنترل Runtimeمتوسطقویضعیفوابسته
Task طولانیضعیفمتوسطمتوسطقوی
Device consistencyضعیفقویقویقوی
Data controlقوی با Network auditقوی با Governanceوابسته به Contractوابسته

Data contract؛ قبل از Prompt، مسیر داده را رسم کنید

فیلدسؤال
Sourceداده از کاربر، DB، فایل یا Vendor می‌آید؟
Purposeاستفاده اعلام‌شده و مجاز چیست؟
Classعمومی، داخلی، شخصی، حساس یا Secret؟
Minimizeکدام فیلد لازم نیست؟
TransformRedact، tokenize، aggregate یا pseudonymize؟
LocationBrowser، Server، Provider، Log، Cache، Eval؟
Retentionچه مدت، چرا و با چه حذف قابل اثبات؟
RightsAccess/correction/deletion چگونه اجرا می‌شود؟
Ownerچه کسی مجوز و Risk را تأیید می‌کند؟

«API داده را Train نمی‌کند» به‌تنهایی Data review نیست. Retention، Application state، ابزار متصل، Region، Subprocessor و Feature می‌توانند متفاوت باشند. برای نمونه، مستند رسمی کنترل داده OpenAI رفتار را به تفکیک Endpoint و قابلیت شرح می‌دهد و باید هنگام طراحی دوباره خوانده شود. بودجه و Evidence چرخه حریم خصوصی در راهنمای حریم خصوصی داده آمده است.

API contract؛ AI را پشت Endpoint دامنه‌محور پنهان کنید

Frontend نباید Provider prompt یا response خام را بشناسد. Endpoint را بر اساس Job نام‌گذاری کنید: /support/answer-draft یا /catalog/search، نه /call-llm. قرارداد API کامل—Version، Auth، Idempotency، Error و Retry—در راهنمای طراحی Web API بررسی شده است.

POST /support/v1/answer-drafts
Authorization: user/session on server
Idempotency-Key: UUID
X-Request-ID: trace-safe ID

{
  "ticket_id": "opaque-id",
  "locale": "fa-IR",
  "intent": "order_status",
  "max_sources": 3
}

200 {
  "schema_version": "1.2",
  "status": "draft | abstained",
  "answer": "...",
  "source_refs": ["order:..."],
  "review_required": true
}

Structured Output شکل را محدود می‌کند، حقیقت را نه

برای خروجی برنامه‌پذیر از JSON Schema و Enum استفاده کنید. Structured Outputs در مستند OpenAI خروجی منطبق با Schema را توضیح می‌دهد؛ بااین‌حال مقدار داخل فیلد هنوز می‌تواند از نظر حقیقت، مجوز یا منطق کسب‌وکار غلط باشد. پس Refusal/Incomplete، Semantic validation، Authorization و Business invariant همچنان لازم‌اند.

لایه Validationنمونه
SyntacticJSON parse و Schema
Semanticتاریخ معتبر و جمع مبلغ
Referentialorder_id متعلق به همان Tenant
Policyاین Actor اجازه Refund ندارد
SafetyHTML/URL/SQL/Markdown در Sink مناسب Encode شود
Confidence/abstainEvidence کافی نیست؛ مسیر انسانی

Streaming؛ Latency ادراکی را با صحت اشتباه نگیرید

Streaming زمان اولین Token را کاهش می‌دهد، اما پاسخ کامل را سریع‌تر یا درست‌تر نمی‌کند. متن جزئی ممکن است تغییر معنا دهد یا قبل از Safety/Source check دیده شود. UI باید Draft بودن، Cancel، Disconnect، Resume و Final state را مدیریت کند.

State UIرفتار
queuedانتظار و Cancel
streamingPartial label، Focus ثابت، Stop
validatingعدم فعال‌کردن Action زودهنگام
completeSource، Copy، Feedback
abstainedدلیل قابل فهم و مسیر جایگزین
failedRetry امن، حفظ Input و Request ID

تاب‌آوری: Timeout، Retry و Budget را طراحی کنید

Retry کور می‌تواند هزینه و اقدام تکراری بسازد. فقط خطای transient و عملیات Idempotent را با Backoff/Jitter تکرار کنید. Deadline باید از Browser تا Provider منتقل شود؛ Queue و Tool call نیز سهم Budget داشته باشند.

FailureکنترلFallback
TimeoutDeadline و Abort propagationSearch/manual flow
429/QuotaRate limit و queue/backoffمدل/Provider مجاز یا Defer
Provider outageCircuit breaker و health signalFeature flag off
Bad outputSchema/semantic checkAbstain یا Human review
Cost spikePer-request/user/tenant budgetSmaller context/model یا Stop
Model driftPinned policy + regression evalRollback adapter/config

Threat model؛ مدل یک مرز اعتماد نیست

OWASP Top 10 for LLM Applications 2025 ریسک‌هایی مانند Prompt injection، افشای اطلاعات حساس، Improper output handling، Supply chain و Excessive agency را صورت‌بندی می‌کند. آن را Awareness/Threat input بدانید و Requirement قابل آزمون برای معماری خود بسازید.

تهدیدکنترل مهندسی
Direct/indirect prompt injectionتفکیک instruction/data، provenance، tool policy و آزمون adversarial
Data exfiltrationLeast data، redaction، egress allowlist و secret isolation
Unsafe outputSchema، validation، contextual encoding و CSP
Resource abusesize/token/tool/time/cost limits
Supply chainModel/dataset/package origin، hash، SBOM و patch
OverrelianceSource، uncertainty، human review و appeal
Excessive agencyکمینه‌کردن Tool، scope، approval و transaction guard

NIST SP 800-218A شیوه‌های توسعه امن را برای مدل‌های مولد و Foundation model در چرخه نرم‌افزار تکمیل می‌کند. کنترل‌های API مانند Object/Function authorization، Inventory و Rate را نیز با راهنمای امنیت API پوشش دهید.

Prompt injection را با «Prompt قوی‌تر» حل نکنید

هر متن بازیابی‌شده از وب، فایل، ایمیل یا کاربر Untrusted است. Instruction سلسله‌مراتب مفید است، اما Policy enforceable باید بیرون مدل باشد. مدل نباید بتواند مجوز را افزایش دهد، URL دلخواه را Fetch کند، Query دلخواه اجرا کند یا Secret بخواند.

Model proposes:
{ tool: "get_order", arguments: { order_id: "..." } }

Application enforces:
1. tool is allowlisted for this workflow
2. actor is authenticated
3. order belongs to actor/tenant
4. fields are schema-valid and size-limited
5. request has budget and rate allowance
6. result is minimized before returning to model
7. high-impact action requires confirmation

Tool و Agent؛ اختیار را کمینه و قابل Replay کنید

اصلپیاده‌سازی
Least privilegeTool کوچک و دامنه‌محور، Credential جدا
Read before writeنمایش State و Diff قبل از اقدام
Human confirmationمبلغ، گیرنده، دامنه و پیامد مشخص
IdempotencyKey و transaction boundary
Policy outside modelABAC/RBAC و Business rule قطعی
AuditActor، proposal، approval، tool result، version
Stopحد Call/Depth/Time/Cost و kill switch

Eval contract؛ قبل از Production بگویید «خوب» یعنی چه

Demo انتخابی معیار نیست. Dataset باید Job واقعی، نرخ وقوع، Edge case، داده فارسی، Attack و Failure پرهزینه را نمایندگی کند. Eval را Version کنید و هنگام تغییر Model، Prompt، Retrieval، Tool، Schema یا Policy دوباره اجرا کنید.

مجموعههدف
Goldenنمونه‌های نماینده با Expected behavior
Hard/edgeابهام، کمبود داده، طول زیاد و تناقض
Persian localeرسم‌الخط، محاوره، BiDi، عدد و تاریخ
AdversarialInjection، exfiltration، unsafe tool request
RegressionBugها و Incidentهای گذشته
Drift sliceSegment/زمان/نسخه‌ای که تغییر کرده

معیار را با Task انتخاب کنید

TaskOfflineOnline/OutcomeGuardrail
ClassificationPrecision/Recall/F1 by sliceزمان/کیفیت تصمیمFalse positive پرهزینه
RankingNDCG/Recall@KTask completion/incrementalityDiversity، stock، margin constraint
Retrieval Q&ARetrieval recall، citation supportResolution و escalationUnsupported answer
GenerationRubric pass و factual supportAccepted outcomeHarm، complaint، edit distance
AgentTask success + exact policySafe completed actionUnauthorized/irreversible action

در Recommendation و Personalization، Click به‌تنهایی ارزش افزوده را ثابت نمی‌کند. طراحی Candidate/constraint/holdout و سنجش Incrementality در راهنمای شخصی‌سازی فروشگاه با AI آمده است.

بسته Eval فارسی و ایران

  • ی/ک فارسی و عربی، نیم‌فاصله، فاصله و غلط رایج را پوشش دهید.
  • رسمی، نیمه‌محاوره‌ای، محاوره و Code-switch فارسی/انگلیسی را Slice کنید.
  • عدد فارسی/لاتین، موبایل، کدملی آزمایشی، Order ID، URL و Email را در BiDi بسنجید.
  • ریال/تومان را با واحد صریح و Fixture مبلغ‌های بزرگ/اعشاری آزمایش کنید.
  • تاریخ شمسی/میلادی، منطقه زمانی ایران و Deadline را مبهم نگذارید.
  • نام شهر، برند، محصول و اصطلاح محلی را از داده مجاز و به‌روز بگیرید.
  • نمونه‌های نبود اطلاعات و Abstention را به‌اندازه پاسخ‌های موفق تست کنید.
  • Segmentهای کم‌حجم را در Average پنهان نکنید.

Progressive delivery؛ Model change هم Release است

مرحلهTraffic/اثرGate
Offlineبدون کاربرEval/Threat/Cost pass
Replayداده مجاز گذشتهPrivacy و expected behavior
ShadowOutput دیده نمی‌شودLatency/cost/quality comparison
InternalDogfoodIssue triage و runbook
CanarySegment کوچکSLO و guardrail
Rampافزایش مرحله‌ایStop/rollback rule
DefaultعمومیDrift و periodic eval

Artifact، Prompt، Eval و Policy را در همان Delivery contract نسخه‌دار کنید. مسیر Build once، provenance، Feature flag، Canary و Rollback در راهنمای CI/CD امن تکمیل شده است.

Observability؛ Trace بدون متن خام هم ممکن است

برای Debug به Prompt کامل در Log نیاز ندارید. شناسه و Metadata کمینه ثبت کنید و محتوای حساس را پیش‌فرض حذف کنید. Telemetry را از Outcome جدا نکنید: Latency خوب با پاسخ بی‌فایده موفقیت نیست.

بعدفیلد/Metric
Requesttrace_id، use_case، tenant tier، locale، input class/size
Versionmodel adapter، prompt، retrieval index، tool/schema/policy
Performancequeue، retrieval، provider، tool، validation، end-to-end P50/P95
Usage/Costtoken/compute، cache، retry، cost per accepted outcome
Qualityabstain، edit/accept، citation support، task success
Safetyblocked، injection signal، unauthorized proposal، escalation
Reliabilitytimeout، ۴۲۹، bad schema، fallback، circuit open

طراحی Signal/SLO، Trace correlation، Alert و Runbook عمومی سامانه را در راهنمای Observability وب ببینید.

Cost engineering؛ هزینه را به Outcome وصل کنید

Cost per accepted outcome =
(inference + retrieval + storage + egress + observability
 human review + retry + incident + platform labor)
/ accepted outcomes
اهرمTrade-off
Context کمترهزینه/Latency کمتر؛ خطر Recall پایین
Model routingCost کمتر؛ نیازمند Eval و policy
Cacheصرفه‌جویی؛ Staleness و privacy key
Batch/asyncThroughput بهتر؛ پاسخ دیرتر
On-deviceServing cost کمتر؛ device cost و artifact load
Human review نمونه‌ایهزینه کنترل‌شده؛ Coverage محدود

نمونه ایرانی: پیش‌نویس پاسخ وضعیت سفارش

فرض کنید فروشگاه ایرانی می‌خواهد پاسخ Ticket «پول کم شد ولی سفارش ثبت نشد» را سریع‌تر کند. مدل نباید وضعیت پرداخت را حدس بزند یا Refund انجام دهد. Backend با مجوز همان کاربر، State سفارش و Payment را از Source of truth می‌خواند؛ داده کمینه و بدون شماره کارت را به Draft generator می‌دهد؛ خروجی به Source ref و Schema محدود می‌شود و Agent پشتیبانی تأیید می‌کند.

جزءقرارداد
JobDraft فارسی روشن با وضعیت و قدم بعدی
Forbiddenتضمین بازگشت، تغییر سفارش، نمایش داده Tenant دیگر
Dataorder state، payment state، مبلغ+واحد، timestamp، SLA واقعی
EvalPending/Failed/Verified/Refunded، ریال/تومان، BiDi، فقدان رکورد
FallbackTemplate قطعی و Escalation به مالی
MetricResolution time، edit distance، reopen، complaint، wrong-state rate
ReleaseShadow → داخلی → Canary برای یک Queue

این معماری ممکن است با Rule/Template به نتیجه کافی برسد؛ مدل فقط وقتی باقی می‌ماند که بهبود کیفیت یا زمان را با Guardrail ثابت کند.

ملاحظات اجرا برای تیم ایرانی

  • Eligibility کشور/شخصیت حقوقی، Terms، End use، Payment و Export restriction هر Provider را پیش از طراحی و سپس دوره‌ای بررسی کنید؛ با هویت، نشانی یا روش پرداخت جعلی محدودیت را دور نزنید.
  • Latency و Availability را روی ISP/اپراتور/منطقه واقعی و در ساعت‌های مختلف اندازه بگیرید؛ نتیجه یک دیتاسنتر خارجی را تعمیم ندهید.
  • برای Provider خارجی، Data path، Retention، Subprocessor، Support، Incident notice و Exit/export را قراردادی بررسی کنید.
  • برای Self-hosting داخلی، تأمین Accelerator، برق، خنک‌سازی، Driver، Patch، Capacity و Recovery را وارد TCO کنید.
  • Dataset فارسی مجاز، Label guideline و Reviewer حوزه‌ای بسازید؛ ترجمه Dataset انگلیسی کافی نیست.
  • واحد پول، تقویم، منطقه زمانی، BiDi، فونت و متن محاوره‌ای بخشی از Acceptance contract هستند.
  • Feature flag و Manual fallback را برای اختلال Provider/شبکه حفظ کنید.

RACI؛ مسئولیت بین Product، ML و Web گم نشود

تصمیمResponsibleAccountableConsulted
Use case/OutcomeProductBusiness ownerUser research، Domain expert
Data contractData/PrivacyData ownerSecurity، Legal، ML
Model/EvalML/AI engineerModel ownerDomain reviewer
API/UXBackend/FrontendEngineering ownerDesign، Accessibility
Threat controlsSecurityRisk ownerPlatform، Privacy
Release/SLOPlatform/SREService ownerProduct، Support
Residual riskCross-functionalNamed business ownerهمه نقش‌های بالا

چهار Runbook ضروری

۱. Provider یا Model outage

Circuit را باز کنید؛ Job جدید را Queue/Reject کنترل‌شده کنید؛ Feature را به Template/Search/Manual degrade دهید؛ Status و زمان Update بعدی را بگویید؛ Recovery را با Canary انجام دهید.

۲. افت کیفیت یا Drift

Slice و اولین نسخه معیوب را پیدا کنید؛ Prompt/model/index/tool تغییرات را مقایسه کنید؛ Rollback یا Scope را محدود کنید؛ نمونه Incident را به Regression set اضافه کنید.

۳. افشای داده یا Prompt injection

Tool/egress و Session مربوط را متوقف کنید؛ Credential را Rotate کنید؛ Evidence را با حداقل دسترسی حفظ کنید؛ Scope داده و افراد اثرپذیرفته را بررسی و فرایند Incident جاری را اجرا کنید.

۴. Cost/Quota runaway

Tenant/use-case/model را از Tagهای مصرف جدا کنید؛ Budget/loop/retry را متوقف کنید؛ درخواست‌های تکراری و Context growth را پیدا کنید؛ پس از Fix با Limit پایین و Alert زودهنگام بازگردید.

برنامه ۹۰روزه از مسئله تا Production

بازهکارGate خروج
روز ۱–۱۵Use case، Baseline، Data map، Risk tierOwner و Acceptance contract
روز ۱۶–۳۰Rule/ML/Provider options و Spike معماریDecision record + Exit
روز ۳۱–۴۵Golden/Persian/adversarial eval و API schemaThreshold و Fallback
روز ۴۶–۶۰Threat model، timeout/budget، telemetry و runbookPre-production review
روز ۶۱–۷۵Shadow/Internal/Canary و Human feedbackSLO/quality/safety/cost pass
روز ۷۶–۹۰Ramp یا Stop، Drift cadence، RACI و exit drillProduction decision با Evidence

چک‌لیست نهایی ادغام AI در وب‌اپلیکیشن

  • Use case، Actor، Outcome، Baseline و Failure پرهزینه روشن‌اند.
  • Rule/Search/Manual baseline واقعاً مقایسه شده است.
  • Risk tier، Authority، Human gate و Appeal تعیین شده‌اند.
  • Client/Internal/Managed/Async/Hybrid با Benchmark انتخاب شده است.
  • Secret فقط سمت سرور و Provider پشت Adapter دامنه‌محور است.
  • Data purpose/class/minimize/location/retention/delete/owner ثبت شده‌اند.
  • Schema، Semantic validation، Authorization و Business invariant جدا هستند.
  • Timeout، Retry، Idempotency، Rate، Budget، Circuit و Fallback آزموده شده‌اند.
  • Prompt injection، output handling، supply chain، exfiltration و agency Threat model دارند.
  • Model/Prompt/Index/Tool/Schema/Policy و Dataset نسخه‌دارند.
  • Golden، Edge، Persian، Adversarial، Regression و Drift suite اجرا شده‌اند.
  • Shadow/Canary/Feature flag/Rollback و Runbook وجود دارند.
  • Telemetry محتوای حساس را کمینه و Outcome/Cost/Safety را Join می‌کند.
  • Eligibility، Terms، Payment، Data و Exit Provider برای ایران بررسی شده‌اند.

جمع‌بندی: مدل فقط یک Dependency است

وب‌اپلیکیشن قابل اعتماد حول Model demo ساخته نمی‌شود؛ حول Contract ساخته می‌شود. وقتی Input، Output، Authority، Data، Failure، Eval، Budget و Fallback روشن باشند، تعویض Provider یا Model یک تغییر کنترل‌شده است. وقتی این مرزها وجود ندارند، حتی بهترین مدل نیز فقط Failure surface را بزرگ‌تر می‌کند.

از کوچک‌ترین Job قابل اندازه‌گیری شروع کنید، Baseline را نگه دارید، فارسی و Edge case را جدی بگیرید و برای «نمی‌دانم» مسیر محصول بسازید. Production readiness یعنی سیستم در پاسخ درست، پاسخ غلط، Refusal، Timeout، Outage و تغییر مدل رفتار تعریف‌شده دارد.

پرسش‌های متداول

بهترین معماری برای هوش مصنوعی در وب‌اپلیکیشن چیست؟

بهترین مطلق وجود ندارد. Client-side برای مدل کوچک و نیاز Offline، Server برای کنترل و داده Backend، Managed API برای شروع سریع، Async برای کار طولانی و Hybrid برای تقسیم اثبات‌شده مناسب‌اند. تصمیم باید با Data boundary، P95 latency، Device، Cost، Capability و Fallback گرفته شود.

آیا اجرای مدل در مرورگر همیشه خصوصی‌تر و سریع‌تر است؟

خیر. Round trip حذف می‌شود و داده Inference می‌تواند محلی بماند، اما Download/Initialization، قدرت دستگاه، Main-thread، Battery و Telemetry بر سرعت و حریم خصوصی اثر دارند. Network audit و Benchmark روی Device واقعی لازم است.

چطور OpenAI API را به وب‌اپلیکیشن وصل کنیم؟

Frontend به Backend خودتان درخواست می‌دهد و Backend با Secret امن به API متصل می‌شود؛ کلید نباید در Browser باشد. Use-case endpoint، Authorization، Data minimization، Timeout/Budget، Structured Output، Validation، Eval و Fallback را پیش از Production اضافه و مستند رسمی جاری را بررسی کنید.

تفاوت Structured Output و پاسخ درست چیست؟

Structured Output شکل و نوع فیلدها را با Schema محدود می‌کند؛ درست‌بودن مقدار، مالکیت رکورد، مجوز اقدام و سازگاری با Business rule را تضمین نمی‌کند. Semantic/Referential/Policy validation باید بیرون مدل اجرا شود.

چه زمانی یک قابلیت AI آماده Production است؟

وقتی Acceptance contract را روی Eval نماینده و فارسی پاس کند، Threat/Data review داشته باشد، SLO و Cost guardrail برقرار باشند، Shadow/Canary موفق باشد و برای Bad output، Refusal، Timeout، Provider outage، Drift و Rollback مسیر آزموده‌شده وجود داشته باشد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *