کاربر میگوید «پرداخت را انجام نده»؛ ASR فقط یک واژه را اشتباه میشنود، NLU همان Intent پرداخت را انتخاب میکند و سرویس مالی پاسخ ۲۰۰ میدهد. اگر تیم فقط WER کلی، دقت Intent یا سلامت API را ببیند، همهچیز سبز است؛ اما محصول دقیقاً کار خطرناک را انجام داده است. تست رابط کاربری صوتی (VUI) یعنی بررسی زنجیرهٔ کامل از صدا و زمینه تا تصمیم، اقدام، بازخورد و امکان اصلاح—نه فقط امتحانکردن چند جمله با میکروفن.
در این راهنما یک روش عملی میسازیم: Decision/Risk → Conversation contract → Corpus/Slices → Layered Oracle → Audio/Environment matrix → End-to-end task → Safety/Accessibility/Privacy → Production evidence → Release/rollback. مثال اصلی، دستیار صوتی فارسی برای پرداخت یک بازارگاه ایرانی است؛ همهٔ نامها، دادهها و آمار مثال ساختگیاند.
پاسخ کوتاه: تست VUI چیست؟
- اول Test object را مشخص کنید: Wake word/VAD، ضبط صوت، ASR، NLU، Dialog manager، API، TTS یا تجربهٔ End-to-end.
- Intent، Entity، Negation، Reference و اقدام مورد انتظار را در Conversation contract نسخهدار کنید.
- Corpus را از Population/Use context بسازید؛ «تنوع لهجه» بدون تعریف، نمونه و رضایت Test coverage نیست.
- ورودی Text را برای منطق NLU، صوت کنترلشده را برای ASR و جلسهٔ کاربر را برای Task/repair جدا نگه دارید.
- WER را با task success، critical semantic error، false accept/reject، repair و latency کنار هم بخوانید.
- مبلغ، مقصد، حذف، خرید و سایر اقدامهای برگشتناپذیر را با Read-back/confirmation و idempotency تست کنید.
- No input، No match، ASR error، NLU ambiguity، dependency failure و user correction یک failure واحد نیستند.
- فارسی معیار، گونههای گفتاریِ در Scope، اعداد، نیمفاصله، نام خاص، کد/شماره و code-switch را Slice کنید.
- مسیر غیرصوتی، transcript قابلبررسی، کنترل زمان و خروج امن را جزئی از محصول بدانید.
- صدا و transcript میتوانند دادهٔ شخصی/حساس باشند؛ جمعآوری، دسترسی، نگهداری و حذف را تست کنید.
Intent جستوجو و کلیدواژهها
Intent اصلی اطلاعاتی/اجرایی است: «رابط کاربری صوتی را چگونه تست کنیم؟» کلیدواژهٔ اصلی تست رابط کاربری صوتی است. عبارتهای مکمل: تست VUI، Voice User Interface Testing، تست دستیار صوتی فارسی، تست ASR، تست تشخیص گفتار، تست NLU، تست Intent و Entity، تست مکالمه، Conversation Testing، ساخت Test Corpus صوتی، محاسبه WER، تست لهجه فارسی، تست نویز صدا، تست TTS، Voice UX Testing، تست Voice Bot بانکی، تست امنیت دستیار صوتی، تست دسترسپذیری VUI و اتوماسیون تست صوتی.
این صفحه مالک آزمودن زنجیرهٔ Voice→Meaning→Dialogue→Action است. مبانی تست سیستمهای AI/ML، طراحی مطالعه در راهنمای تست کاربردپذیری، معیارهای پژوهش در راهنمای Task Success و SUS و معیارهای فنی تست دسترسپذیری را تکرار نمیکند؛ اینجا آنها را برای Interaction صوتی به یک Evidence chain متصل میکنیم.
VUI، ASR و Voice recognition را یکی نگیرید
| واژه | سؤال | نمونه خروجی | خطای رایج |
|---|---|---|---|
| Speech recognition / ASR | چه واژههایی گفته شد؟ | Transcript + confidence/alternatives | برابر دانستن با فهم Intent |
| Speaker/Voice recognition | چه کسی صحبت میکند؟ | Identity/verification score | نامیدن هر ASR بهعنوان biometric |
| NLU | منظور و Entity چیست؟ | Intent، slots، confidence | استنتاج قطعی از Transcript ناقص |
| Dialog management | State بعدی چیست؟ | Prompt/action/repair/exit | نادیدهگرفتن context و history |
| TTS | پاسخ چگونه شنیده میشود؟ | Audio + prosody/pronunciation | برابر دانستن Text درست با Audio قابلفهم |
| VUI/VUX | آیا کاربر با این زنجیره به هدف امن میرسد؟ | Task/repair/trust/evidence | تقلیل تجربه به WER |
W3C WAI نیز Speech recognition—تشخیص واژه برای Dictation یا رابط گفتاری—را از Voice/Speaker recognition برای تشخیص شخص جدا میکند. این صفحهٔ آموزشی، Standard انطباق VUI نیست؛ فقط واژگان را دقیقتر میکند.
نقشهٔ زنجیره: Failure را در لایهٔ درست پیدا کنید
User goal / language / ability / environment
Wake word or push-to-talk / microphone permission
Capture / echo cancellation / VAD / endpointing
Audio transport / codec / resampling / network
ASR transcript / alternatives / timestamps
Normalization / digits / names / profanity policy
NLU intent / entities / negation / confidence
Dialog state / memory / prompt / repair / confirmation
Authentication / authorization / policy / risk gate
Business API / idempotency / timeout / reconciliation
Response generation / localization / redaction
TTS / pronunciation / prosody / barge-in
Speaker / display / transcript / alternate channel
Telemetry / feedback / retention / deletion / audit
یک «No match» میتواند از میکروفن بسته، clipping، VAD زودهنگام، شبکه، مدل ASR، normalizer عدد، NLU، state منقضی یا Intent خارج از Scope آمده باشد. اولین لایهٔ Fail و آخرین لایهٔ Pass را ثبت کنید. آزمون متن→NLU خطای صوت را حذف میکند؛ آزمون audio→ASR منطق کسبوکار را ثابت نمیکند؛ E2E بدون observability نیز Root cause نمیدهد.
Voice Test Contract را پیش از Corpus بنویسید
Decision / user task / harm / non-goal
Population and excluded/out-of-scope groups
Locale, language varieties and code-switch policy
Device, microphone, channel, codec and environment
Conversation version / prompts / grammar / state model
ASR/NLU/TTS/provider/model/config versions
Intent, entity, negation and ambiguity semantics
Critical values and irreversible action policy
Reference transcript / annotation guide / adjudication
Corpus source / consent / license / representativeness
Slice definitions / minimum evidence / missingness
Oracle per layer / metric formulas / thresholds
No-input / no-match / low-confidence / system-error repair
Authentication / confirmation / cancel / undo / timeout
Latency phase budgets / load / dependency behavior
Privacy classification / access / retention / deletion
Pass / Fail / Inconclusive / Environment-invalid
Owner / reviewer / expiry / rollback / monitoring
Threshold عمومی برای WER، Intent confidence، silence timeout یا latency وجود ندارد. قرارداد باید Use case را بازتاب دهد: اشتباه در نام آهنگ با اشتباه در مبلغ یا دارو Risk یکسان ندارد. «فارسی» نیز Population نیست؛ کانال، منطقه، موقعیت، توانایی گفتاری، دستگاه و Task روی داده اثر دارند.
Risk first: پیش از Accuracy، Consequence را مدل کنید
| Action | نمونه semantic error | اثر | Guardrail قابلآزمون |
|---|---|---|---|
| اطلاعات | هوای شهر دیگر | سردرگمی | نمایش/تکرار شهر + اصلاح |
| کنترل خانه | خاموشکردن دستگاه اشتباه | ایمنی/هزینه | Scope، device name، state feedback، undo |
| پیام | گیرندهٔ همنام | حریم خصوصی | disambiguation + recipient read-back |
| پرداخت | مبلغ/مقصد/نفی اشتباه | زیان مالی | strong auth + amount/payee confirmation + idempotency |
| حذف/خرید | Intent یا quantity اشتباه | برگشتناپذیری | review، explicit confirm، cancel/undo |
| سلامت/خودرو | دستور/اطلاعات بحرانی اشتباه | آسیب جسمی | domain authority، fail-safe، alternate channel؛ تست تخصصی |
Risk score دلخواه را جای تحلیل نگذارید. سناریو، جمعیت متاثر، reversibility، detectability، authority و control را بنویسید. مسئول Product/Security/Legal/Domain باید Risk acceptance را انجام دهد؛ QA Evidence و Unknown را ارائه میکند.
Conversation State Model؛ فقط Happy path را ننویسید
IDLE → LISTENING → CAPTURED → INTERPRETED
INTERPRETED → NEEDS_SLOT → CONFIRM_CRITICAL → AUTHORIZED
AUTHORIZED → ACTION_PENDING → COMMITTED → REPORTED
Any listening state → NO_INPUT / BARGE_IN / CANCEL
Any interpretation state → NO_MATCH / AMBIGUOUS / CORRECTION
Any dependency state → TIMEOUT / RETRYABLE / UNKNOWN_COMMIT
Any user state → HELP / REPEAT / ALTERNATE_CHANNEL / EXIT
State، Event، Guard و Transitionهای معتبر/نامعتبر را با تکنیک تست انتقال حالت استخراج کنید. Context فقط «تبریز» در سؤال بعدی نیست؛ شامل user/session/device identity، زمان، slotهای تاییدشده، اقدام pending، retry و expiry نیز هست. Context یک کاربر یا session نباید به دیگری نشت کند.
Conversation Test Case چه فیلدهایی دارد؟
| فیلد | نمونه | Oracle |
|---|---|---|
| Pre-state | پرداخت draft، هنوز تایید نشده | state snapshot |
| User utterance | «نه، صد و بیست هزار تومن» | audio + reference |
| Expected semantics | CORRECT_AMOUNT=1,200,000 IRR | intent/entity/negation |
| Expected prompt | مبلغ canonical و گیرنده را بخواند | meaning + redaction |
| Forbidden action | commit پیش از auth/confirm | ledger/command spy |
| Repair | repeat/edit/cancel/text path | reachable states |
| Evidence | artifact/model/state/trace IDs | cross-layer correlation |
| Privacy | audio retention off در synthetic CI | storage/access/delete logs |
Expected prompt را word-for-word فقط وقتی Copy ثابت Contract است Assert کنید. برای variation مجاز، semantic requirements، prohibited claims، critical value، brevity و next-action clarity را بررسی کنید؛ snapshot دقیق متن ممکن است تغییر بیضرر را شکننده کند.
Test Corpus را مثل محصول نسخهدار مدیریت کنید
Corpus ID / version / purpose / owner
Source: consented human, synthetic, replay, production-derived
License / consent scope / withdrawal / expiry
Audio hash / format / sample rate / channel / duration
Locale / language variety / code-switch / speech condition
Device / microphone / distance / environment / SNR method
Task / intent / entities / negation / criticality
Reference transcript / normalization / annotation version
Annotators / blind adjudication / disagreement
Split: development / validation / held-out / regression
Speaker/session separation and leakage controls
Slice labels / missing groups / prohibited inference
Expected layer outputs / tolerance / verdict
Encryption / access / retention / deletion evidence
یک فایل نمیتواند هم برای Prompt tuning، هم انتخاب threshold و هم ادعای Release بیطرفانه استفاده شود. Speaker و session را طوری Split کنید که صدای یک فرد میان Train و held-out نشت نکند. متن مصنوعی برای منطق و تغییرات ارزان مفید است، اما نمایندهٔ مکث، self-correction، clipping، اتاق و گفتار واقعی نیست.
Corpus فارسی: Slice را با Risk و جمعیت تعریف کنید
| بُعد | نمونهٔ فارسی/ایران | چیزی که ثبت شود | هشدار |
|---|---|---|---|
| عدد/پول | ۱۲۰ هزار، صد و بیست، 120k، تومان/ریال | spoken form + canonical IRR | تبدیل واحد پنهان |
| نام خاص | نام شخص، شهر، بانک، فروشگاه | approved lexicon/version | نام مشهور نمایندهٔ Tail نیست |
| گونهٔ گفتاری | رسمی/محاورهای و گونههای در Scope | self-described/context label | حدس هویت از صدا |
| Code-switch | «سفارش Premium رو cancel کن» | token/language policy | یک زبان غالب کافی نیست |
| نفی/تصحیح | نکن، نه اون، گفتم دویست | semantic critical label | WER کم اما harm زیاد |
| گفتار | مکث، تکرار، stutter، سرعت/بلندی متفاوت | consented condition/context | برچسب پزشکی بدون مجوز |
| تقویم/زمان | امروز، پسفردا، نوروز، تاریخ شمسی | UTC + Asia/Tehran + display | وابستگی به زمان اجرا |
| کانال | موبایل، تماس، خودرو، اتاق | codec/device/noise/distance | لهجه را علت هر خطا ننامید |
سن، جنسیت، قومیت، معلولیت، شهر یا لهجه را از روی صدا استنتاج نکنید. اگر تحلیل گروهی برای Harm/Reliability لازم است، Purpose، رضایت، تعریف self-report، حداقل نمونه، Unknown، دسترسی و non-use را با Privacy/Legal owner تصویب کنید. Slice کوچک را با رتبهبندی فرد یا ادعای جامعه تعمیم ندهید.
Reference Transcript خودش یک Oracle نیاز دارد
- قاعدهٔ نیمفاصله، علائم، filler، تکرار، واژهٔ بریده و noise marker را پیشاپیش بنویسید.
- اعداد گفتاری را هم raw و هم canonical نگه دارید؛ تبدیل «تومن» به IRR را در Reference پنهان نکنید.
- کلمهٔ نامفهوم را حدس نزنید؛ Unknown/inaudible و بازهٔ زمانی ثبت کنید.
- نمونههای بحرانی/مبهم را مستقل annotate و disagreement را adjudicate کنید.
- Reference version و ابزار/Normalizer را همراه score نگه دارید؛ با تغییر قاعده، baseline را بیسروصدا بازنویسی نکنید.
- Annotation agreement کیفیت حقیقت را تضمین نمیکند؛ دو annotator میتوانند یک Context را یکسان بد بفهمند.
WER چیست و چه چیزی را اندازه نمیگیرد؟
Word Error Rate معمولاً از فاصلهٔ ویرایشی واژهای نسبت به Reference محاسبه میشود: WER = (Substitutions + Deletions + Insertions) / Reference words. راهنمای رسمی Microsoft برای ارزیابی Speech WER را معیار رایج Accuracy معرفی و روش مقایسه با transcript مرجع را توضیح میدهد؛ این مستند سرویس Azure است، نه Threshold عمومی Release یا معیار عدالت/UX.
| WER میبیند | WER بهتنهایی نمیبیند |
|---|---|
| تعداد editهای واژه نسبت به Reference | اهمیت معنایی «بده/نده» یا رقم |
| Aggregate روی Corpus تعریفشده | Task، اقدام واقعی و consequence |
| اثر Tokenization/Normalization | Intent/Entity/Dialog correctness |
| Insertion/Deletion/Substitution | Calibration confidence و repair quality |
| Comparison در نسخه/دادهٔ ثابت | Population واقعی، representativeness و drift |
| خطای Transcript | TTS، latency، auth، idempotency و accessibility |
آزمایش قابلبازتولید: WER بهتر، تصمیم خطرناکتر
برای نشاندادن محدودیت KPI تکعددی، یک اسکریپت Node.js بدون وابستگی روی شش عبارت ساختگی اجرا شد. Referenceها مجموعاً ۳۷ واژه دارند. دو عبارت بحرانی مربوط به نفی پرداخت و مبلغاند؛ چهار عبارت کمریسک با «لطفاً» شروع میشوند. مدلها واقعی نیستند و Hypothesisها عمداً توسط نویسنده ساخته شدهاند.
{"model":"modelA","utterances":6,"referenceWords":37,"edits":2,"corpusWER":5.41,"exactTaskSuccess":4,"criticalTaskSuccess":0,"criticalTaskTotal":2,"failedIds":["PAY_NEGATION","PAY_AMOUNT"]}
{"model":"modelB","utterances":6,"referenceWords":37,"edits":4,"corpusWER":10.81,"exactTaskSuccess":2,"criticalTaskSuccess":2,"criticalTaskTotal":2,"failedIds":["WEATHER","LIGHT","ORDER","MUSIC"]}
تفسیر محدود خروجی
مدل A با دو edit، WER برابر ۵٫۴۱٪ و چهار Exact match دارد؛ اما هر دو مورد بحرانی را Fail میکند: «نده» را «بده» و «دویست» را «بیست» میکند. مدل B با حذف «لطفاً» در چهار عبارت، WER بدتر ۱۰٫۸۱٪ و فقط دو Exact match دارد؛ با این حال هر دو عبارت بحرانی را حفظ میکند. بنابراین روی این دادهٔ دستساز، رتبهبندی بر اساس WER با رتبهبندی Critical task success متفاوت است.
چه چیزی ثابت نشده است
این آزمایش ASR، فایل صوتی، لهجه، Noise، confidence، latency، مدل واقعی یا کاربر ندارد. Corpus کوچک، غیرنماینده و کاملاً نویسندهساخته است؛ وزن همهٔ editها در WER برابر و Exact task oracle نیز عمدی است. خروجی هیچ نرخ قابلانتظار، برتری Vendor، Threshold، significance، causality، Fairness یا ایمنی محصول واقعی را ثابت نمیکند و برای Benchmark، خرید سرویس یا Release gate مناسب نیست.
درس اجرایی برای Metric contract
WER را حذف نکنید؛ آن را کنار Semantic critical error، Intent/Entity/Negation، Task outcome، Slice، repair و harm بخوانید. Corpus/version/normalization/denominator را منتشر کنید و اختلاف دو مدل را با held-out audio و uncertainty مناسب بررسی کنید. Aggregate بهتر نباید Hard guardrail بحرانی را جبران کند.
Metric Contract: هر عدد سؤال خودش را دارد
| Metric | صورت/مخرج لازم | Slice ضروری | سوءاستفاده |
|---|---|---|---|
| WER | edits / reference words | task/audio/language/channel | معادل UX یا Safety |
| Semantic critical error | critical wrong meanings / critical utterances | negation/amount/payee/action | تعریف «critical» پس از دیدن نتیجه |
| Intent recall | true matched intent / reference intent cases | intent + out-of-scope | حذف No-matchها |
| Entity exact/tolerant | correct entities / annotated entities | type/value/range | مخلوطکردن نام و مبلغ |
| False accept | forbidden accepted / negative attempts | auth/risk/context | گزارش فقط success |
| Task success | tasks meeting criteria / eligible attempts | independent/unassisted/repaired | تعریف success با API ۲۰۰ |
| Repair success | recovered tasks / repair-eligible failures | no-input/no-match/correction/system | تکرار Prompt بهعنوان recovery |
| Latency | distribution per named phase | network/device/load/task | فقط میانگین end-to-end |
| Abandonment | ended-before-outcome / eligible sessions | state/reason/unknown | نسبتدادن علت به مدل |
هر Metric باید Name، decision، population، window، numerator، denominator، exclusions، source، formula، uncertainty، threshold rationale، owner، countermetric و non-use داشته باشد. Confidence score خروجی مدل الزاماً Probability درستبودن نیست؛ calibration را روی Slice و Context واقعی بسنجید و low-confidence policy را مستقل تست کنید.
Oracle ماتریسی: برای هر لایه چه چیزی را Assert کنیم؟
| لایه | Oracle نمونه | Evidence | چیزی که ثابت نمیشود |
|---|---|---|---|
| Capture/VAD | شروع/پایان/عدم clipping در tolerance | waveform/timestamps/config | معنای درست |
| ASR | reference/alternatives/critical tokens | audio+transcript+model ID | Intent/action |
| Normalizer | spoken→canonical mapping | raw/normalized/diff | درستبودن reference |
| NLU | intent/entity/negation/OOS | labeled text+scores | ASR/audio |
| Dialogue | state/guard/prompt/repair | trace+state snapshot | backend commit |
| Policy/Auth | allowed/denied/step-up/consent | policy version+audit | امنیت کل سامانه |
| API/Action | contract/idempotency/state reconciliation | request/response/ledger/outbox | کاربر فهمیده است |
| TTS | text/pronunciation/audibility/redaction | source text+audio+voice ID | Task completion |
| E2E | user goal + harm guardrails | correlated trace + user observation | Root cause بدون layer evidence |
برای Contractهای backend از راهنمای تست API استفاده کنید؛ VUI نباید منطق مالی یا Idempotency را دوباره تعریف کند. Stub برای خطایابی سریع مفید است، اما Fidelity سرویس واقعی، شبکه و Provider را اثبات نمیکند.
ماتریس صوت و محیط را Combinatorial بسازید
| عامل | سطوح نمونه | روش کنترل |
|---|---|---|
| Device/mic | low/mid phone، headset، car mic | مدل/OS/permission/gain |
| Distance/orientation | نزدیک، دور، off-axis | فاصله/زاویه/اتاق |
| Noise | سکوت، خیابان، خودرو، تلویزیون، چندگوینده | source/license/mix method |
| Signal quality | clean، clipping، packet loss، narrowband | codec/sample rate/SNR method |
| Speech | آرام/تند، مکث، self-correction، overlapped | consented labels |
| Language | رسمی/محاورهای، code-switch، digits/names | Scope/versioned lexicon |
| Network | stable، latency، loss، offline | profile/replay/timestamps |
| Output | speaker، Bluetooth، screen transcript | route/volume/interruptions |
تمام ضرب دکارتی معمولاً پرهزینه و بیمعناست. بر اساس Risk، فراوانی و Interaction، ترکیبهای نماینده را انتخاب کنید و موارد بحرانی را عمیقتر بپوشانید. SNR نیز بدون تعریف signal/noise segment و ابزار قابلمقایسه نیست. افزودن Noise مصنوعی به یک Clip تمیز، Lombard effect، reverberation واقعی یا رفتار کاربر در محیط شلوغ را بازسازی نمیکند.
ASR را با Audio واقعی و Counterfactual تست کنید
- Clean anchor: یک نمونهٔ کنترل برای تشخیص regression پایه.
- Critical token: نفی، رقم، واحد، نام گیرنده، جهت و action verb.
- Minimal pair: «بده/نده»، «بیست/دویست» یا نامهای نزدیک؛ بدون ادعای پوشش زبان.
- Equivalent replay: codec/sample rate/channelهای مجاز با حفظ provenance.
- Truncation/endpoint: ابتدا یا انتهای واژهٔ بحرانی بریده شود.
- Interruption: notification، تماس، Bluetooth route change یا app background.
- Out-of-scope: زبان/درخواست/کیفیت خارج از Contract باید امن Reject یا Redirect شود.
- Metamorphic: تغییر Noise یا gain در محدودهای که انتظار Relation تعریف شده، نه الزام Transcript یکسان عمومی.
Vendor confidence، alternatives و timestamp را Evidence خام نگه دارید، اما Threshold را با held-out data و cost خطا انتخاب کنید. Retryهای یک Clip روی یک سرویس لزوماً مستقل نیستند. قواعد Trial، Replay و verdict آماری برای سامانههای غیرقطعی در راهنمای تست سیستمهای غیرقطعی آمدهاند.
NLU: Intent، Entity، Negation و Out-of-scope
| Test family | نمونه | Expected |
|---|---|---|
| Paraphrase | «پرداخت کن» / «صورتحساب رو تسویه کن» | Intent در Context تعریفشده |
| Entity boundary | «بانک شهر» در برابر شهر=تهران | Type/value صحیح یا ambiguity |
| Negation | «انجام نده» / «نمیخوام لغوش کنی» | Scope صحیح negation |
| Correction | «صد هزار—نه، صد و ده هزار» | آخرین اصلاح معتبر + confirmation |
| Context | «همون قبلی» بعد از چند Referent | disambiguate، نه حدس |
| Near-intent | «موجودی» در برابر «گردش حساب» | intent درست/clarification |
| OOS/adversarial | درخواست نامجاز یا Prompt-like content | policy-safe refusal/route |
| Empty/filler | مکث، «اِمم»، fragment | no-input/repair policy |
NLU را ابتدا با Text مرجع تست کنید تا خطای مدل را از ASR جدا کنید، سپس Transcript واقعی و E2E را اضافه کنید. Intent accuracy کلی بدون confusion matrix، OOS، Slice و cost خطای asymmetric گمراهکننده است. Entity exact match برای شماره/مبلغ ممکن است لازم باشد؛ برای نام یا آدرس شاید normalized/tolerant oracle با Review لازم شود.
No Input، No Match و System error سه Repair متفاوتاند
| Failure | سیستم چه میداند؟ | Repair مفید | ضدالگو |
|---|---|---|---|
| No input | پاسخ قابلاستفاده دریافت نشده | repeat/restate/options/exit | سرزنش کاربر |
| No match | ورودی هست، تفسیر کافی نیست | contextual clarification/examples | تکرار عین Prompt |
| Ambiguous | چند interpretation معتبر | سؤال تمایزبخش کوتاه | انتخاب تصادفی |
| Low confidence | score پایین طبق مدل | confirm/alternate input طبق calibration | score=truth |
| System error | درک شد، dependency شکست | شفافیت، status، next step، safe retry | «نفهمیدم» دروغین |
| Unknown commit | نتیجهٔ action نامعلوم | reconcile قبل از retry | اجرای دوباره |
| User correction | کاربر تفسیر را رد کرده | edit state + re-confirm | حفظ slot قبلی |
راهنمای Conversation Design گوگل دربارهٔ Error handling No Input، No Match و System error را جدا و Repair را context-specific توصیف میکند. اعداد تکرار و الگوی خروج آن برای محصول/پلتفرم خودش نوشته شدهاند و Threshold جهانی نیستند؛ تیم باید بر اساس خطر، هزینه، کانال و پژوهش کاربر قرارداد خودش را بسازد.
Confirmation باید Semantic و Risk-based باشد
- Implicit confirmation فقط برای اطلاعات کمخطر و قابلاصلاح: «هوای شیراز را بررسی میکنم».
- Explicit confirmation برای مبلغ، مقصد، حذف، خرید و actionهای حساس: مقدار و گیرنده را شفاف بخواند.
- Selective confirmation وقتی فقط یک Entity مشکوک/بحرانی است؛ بازخوانی همهچیز Cognitive load میسازد.
- Confidence-triggered confirmation فقط اگر Score در Slice واقعی calibrated است و guardrail مستقل دارید.
- Authentication با confirmation یکی نیست؛ «بله» هویت یا مجوز را اثبات نمیکند.
- Prompt تایید نباید پاسخ را القا یا ارزش بحرانی را مبهم/سریع تلفظ کند.
- Cancel، edit و repeat باید قبل از commit و در صورت امکان پس از آن قابلدسترسی باشند.
Confirmation بیشتر همیشه بهتر نیست؛ fatigue میتواند کاربر را به «بله» عادت دهد. نرخ confirmation، correction after confirmation، false accept، abandonment و task time را همراه Harm بسنجید. برای اقدام غیرقابلبرگشت، UI مکمل یا عامل انسانی ممکن است لازم باشد.
Latency را به فازهای قابلاقدام بشکنید
T0 user speech starts
T1 endpoint detected / capture closed
T2 upload accepted
T3 first/final ASR result
T4 NLU/dialog decision
T5 dependency request/response
T6 response text ready
T7 first audio byte / playback starts
T8 playback ends / action feedback visible
Report distributions: p50 / p90 / p95 / p99 + errors + sample count
Slice by task, device, channel, network, provider, cache and load
«چند صد میلیثانیه بیشتر گفتگو را خراب میکند» قانون عمومی نیست. Endpointing سریع ممکن است آخر واژه را ببرد؛ صبر طولانی نیز Turn-taking را کند میکند. Time budget را با Task و کاربر بسنجید و میانگین را جای Tail نگذارید. Streaming partial transcript، barge-in و TTS playback نیز perceived latency را تغییر میدهند.
TTS و خروجی صوتی: Text درست کافی نیست
- تلفظ نام ایرانی، واژهٔ انگلیسی، acronym، عدد، تاریخ و مبلغ را با Lexicon/version آزمایش کنید.
- ریال/تومان را صریح و Canonical value را در Evidence نگه دارید؛ «یک و دویست» مبهم است.
- Prosody، سرعت، مکث و emphasis روی مقدار/گزینهٔ بحرانی را با کاربر ارزیابی کنید.
- Text و Audio باید Secret، token، شماره کامل یا دادهٔ شخصی را در مکان عمومی افشا نکنند.
- Barge-in نباید action commitشده را بدون وضعیت روشن رها کند.
- Route change، Bluetooth disconnect، mute/volume و concurrent audio را تست کنید.
- TTS fallback و Vendor switch باید Voice/locale/pronunciation regression داشته باشد.
دسترسپذیری: Voice-only راهحل همگانی نیست
Speech input برای بعضی کاربران ضروری است و برای بعضی دیگر—از جمله فرد ناشنوا، دارای گفتار atypical، در محیط پرصدا یا فاقد حریم مکانی—مانع است. W3C Natural Language Interface Accessibility User Requirements نیازهایی مانند روشهای چندگانهٔ ورودی/خروجی، transcript، زمان کافی، help، correction، confirmation پیش از اقدام برگشتناپذیر و راه جایگزین را گردآوری میکند. NAUR یک W3C Note و مجموعهٔ نیازهای کاربر است، نه Baseline انطباق یا جایگزین WCAG/پژوهش با افراد دارای معلولیت.
| User need/context | Feature/Oracle | Test |
|---|---|---|
| نمیتواند صحبت کند | text/keyboard/switch path | همان Task بدون Voice |
| نمیتواند Audio را بشنود | synchronized transcript/visual status | complete task silent |
| گفتار atypical | correction/training/alternate input | consented representative study |
| حافظه/پردازش شناختی | repeat، pace، short choices، history | comprehension/error recovery |
| Blind/low vision | spoken state + nonvisual controls | screen reader/voice path |
| محیط عمومی | privacy-safe output + text switch | no sensitive spoken disclosure |
| زمان/حرکت محدود | adjustable timeout/no forced speed | slow interaction and pause |
با Keyboard/Screen reader و مسیرهای غیرصوتی نیز آزمون کنید و از افراد دارای نیازهای واقعی با رضایت و جبران منصفانه بازخورد بگیرید. VUI مکمل دسترسپذیری است، نه اثبات خودکار آن.
حریم خصوصی و دادهٔ صوتی را Test object کنید
Purpose / lawful-applicability owner / notice
Capture indicator / wake or push-to-talk / bystander handling
Raw audio / transcript / features / embeddings classification
ASR/TTS/provider/subprocessor/data-region flow
Consent or other approved basis / withdrawal / alternate path
Training/evaluation/analytics use boundaries
Minimization / redaction / encryption / access / export
Retention per artifact / legal hold / backup / deletion SLA
User access/correction/deletion evidence
Incident / breach / vendor exit / model-training opt-out
Prohibited inference and prohibited individual evaluation
NIST Privacy Framework یک ابزار داوطلبانه برای مدیریت ریسک حریم خصوصی سازمان است؛ قانون ایران یا پاسخ آماده برای Audio retention نیست. همچنین ضبط صدا لزوماً همان Biometric template نیست، ولی میتواند دادهٔ شخصی باشد و اگر برای شناسایی فنی Speaker پردازش شود، حساسیت و الزامات بیشتری پیدا میکند. Applicability، رضایت/مبنای پردازش و انتقال برونمرزی را مسئول حقوقی/حریم خصوصی تعیین کند.
- چراغ/نشانهٔ Capture را در wake، timeout، background و crash تست کنید.
- Mic permission denied/revoked، OS privacy toggle و browser/app lifecycle را پوشش دهید.
- صدا/Transcript را از log، APM، analytics، prompt، Ticket و screenshot نشت ندهید.
- Delete را در primary store، cache، search index، backup policy و Vendor path با Evidence کنترل کنید.
- Test Corpus واقعی را برای آموزش مدل دوباره استفاده نکنید مگر Scope/رضایت/مجوز آن روشن باشد.
- صدای همراه، کودک یا رهگذر را بهعنوان «داده رایگان Production» جمع نکنید.
- دادهٔ مصنوعی را برچسب بزنید؛ Synthetic به معنی private، unbiased یا representative نیست.
امنیت VUI: صدا مجوز اجرای فرمان نیست
| Threat/Failure | آزمون | Control |
|---|---|---|
| Replay/recorded command | فایل/بلندگوی نزدیک در Scope مجاز | auth/context/risk gate؛ نه ادعای liveness عمومی |
| TV/other speaker activation | bystander/media audio | wake/push-to-talk/confirmation |
| Unauthorized user | same device/different session | authorization independent of ASR |
| Prompt/content injection | untrusted content read aloud | separate data/instruction/policy |
| PII disclosure | locked/public mode | redaction + alternate channel |
| Transcript/log tampering | trace integrity/access | signed/audited events where needed |
| Dependency spoof/timeout | fault injection | authenticated API + reconcile |
| Model/provider change | unsigned/unapproved version | pin/allowlist/rollback |
Speaker recognition یا «صدای آشنا» را بهتنهایی عامل قوی برای پرداخت فرض نکنید. Threat model، authentication، authorization، rate limit، secret management و audit باید مستقل از Voice UX طراحی شوند. فایل صوتی مخرب را فقط در محیط و تجهیزات مجاز پخش کنید؛ تست فیزیکی/رادیویی خارج از Scope ممکن است به افراد و دستگاههای اطراف اثر بگذارد.
سناریوی ایرانی: دستیار صوتی پرداخت بازارگاه
یک بازارگاه خیالی به کاربر اجازه میدهد بگوید: «فاکتور سفارش ۷۲۱ رو با کیف پول پرداخت کن». سامانه باید مبلغ نمایشدادهشده به تومان را به مقدار canonical ریال متصل کند، order و payment attempt را جدا بشناسد و قبل از commit، مبلغ/گیرنده را با احراز هویت مناسب تایید کند. این مثال توصیهٔ حقوقی/بانکی، طراحی Production یا ادعای پشتیبانی PSP نیست.
Voice Payment Contract — fictional
Order ID: ORD-721
Payment Attempt ID: PAY-721-03
Idempotency Key: voice:ORD-721:PAY-721-03
Displayed amount: ۱۲۰٬۰۰۰ تومان
Canonical amount: 1,200,000 IRR
User utterance raw: «فاکتور هفتصد و بیست و یک رو پرداخت کن»
Expected intent: PAY_ORDER
Expected entity: order_id=721
Critical entities: amount, merchant/payee, order, negation
Pre-commit: read-back + approved step-up authentication
Commit oracle: Payment + Order + Ledger + Outbox
Unknown commit: reconcile before any retry
Callback: duplicate, late and out-of-order safe
Privacy: synthetic audio; no PAN/CVV2/OTP/token/real phone
Time evidence: UTC instant + Asia/Tehran + Jalali display version
مسیر Happy و Confirmation
ASR باید Order ID را حفظ کند؛ NLU آن را به Intent پرداخت نگاشت کند؛ Backend مبلغ canonical را از منبع معتبر بخواند، نه از گفتار کاربر؛ Prompt بگوید «پرداخت ۱۲۰ هزار تومان برای سفارش ۷۲۱؟» و کاربر امکان تایید، اصلاح یا لغو داشته باشد. «بله» فقط در همان State و زمان معتبر مصرف شود. مبلغ در log با IRR و واحد نمایش صریح بماند.
Faultها و Oracle مالی
| Fault | انتظار VUI | Oracle مستقل |
|---|---|---|
| «نکن» به «بکن» | هیچ commit؛ correction/confirm | zero new payment attempt |
| Order همنام/ناموجود | disambiguate یا Reject | order ownership/state |
| Timeout قبل از commit | retry امن/شفاف | PSP/Ledger no-commit |
| Timeout بعد از commit | وضعیت نامعلوم؛ نه پرداخت دوباره | reconciliation/idempotency |
| User retry | همان نتیجه/وضعیت | یک اثر مالی |
| Callback تکراری/دیر | state درست و پیام غیرمتناقض | Order/Ledger/Outbox |
| Auth منقضی | step-up یا خروج امن | authorization audit |
| TTS در مکان عمومی | عدم افشای دادهٔ حساس | approved redaction policy |
فارسی، رقم و زمان
«یک و دویست»، «صد و بیست تومن»، رقمهای فارسی/عربی/لاتین، جداکنندهٔ هزارگان، «هفتصد و بیست و یک» و نام فروشنده باید Normalization صریح داشته باشند. IRR منبع canonical است و تومان فقط واحد نمایش مشتقشده و برچسبدار. timestamp پردازش با UTC و Asia/Tehran ثبت و تاریخ شمسی فقط Presentation است؛ «امروز» باید به Instant و منطقهٔ زمانی Resolve شود.
اتوماسیون تست VUI را به Laneهای پایدار تقسیم کنید
| Lane | ورودی | هدف | سرعت/Fidelity |
|---|---|---|---|
| L0 Pure logic | structured intent/entity/state | business/policy/state | بسیار سریع/بدون Voice |
| L1 Text→NLU | reference/paraphrase text | intent/entity/OOS | سریع/بدون ASR |
| L2 Audio→ASR | versioned clips | transcript/critical tokens | میانی/provider-dependent |
| L3 Audio→Dialogue stub | clips + fake backend | repair/state/prompt | قابلکنترل/Backend مصنوعی |
| L4 E2E sandbox | audio/device/network | action/idempotency/TTS | کند/Fidelity بیشتر |
| L5 Human study | representative tasks/users | discoverability/repair/comprehension | دورهای/نه CI |
| L6 Production observation | consented/minimized telemetry | drift/unknown harm | واقعی/محدودیت attribution |
منطق کاندید، هزینه و نگهداری را با راهنمای اتوماسیون تست بسنجید. Audio E2E را برای هر Paraphrase در هر Pull Request اجرا نکنید؛ لایهٔ ارزانتر را مالک feedback سریع کنید و مجموعهٔ نمایندهٔ پرریسک را در Sandbox/Device lane ببرید. تست کاربر را نمیتوان به Playback تقلیل داد، اما این به معنی «اتوماسیون VUI ناممکن است» نیست.
ابزار را بر اساس Interface و Evidence انتخاب کنید
| نیاز | قابلیت ابزار | Proof of Concept | Exit risk |
|---|---|---|---|
| Corpus runner | audio/text batch + deterministic manifests | held-out slice/report | فرمت بسته/Export |
| Conversation simulator | state/events/stubs/faults | repair/unknown commit | platform semantics |
| Device lab | mic/speaker/OS/route control | representative matrix | hardware/remote access |
| Annotation | audio spans/version/adjudication | Persian normalization | PII/access/vendor use |
| Metric pipeline | WER/semantic/slice/uncertainty | recompute from raw refs | opaque aggregate |
| Observability | cross-layer trace/redaction | first-fail localization | secret/audio retention |
| Provider emulator | quota/timeout/error/version | documented fidelity | false confidence |
فهرست Vendor «پیشرو» سریع منقضی میشود. ابزار را با supported locale، API/contract، reproducibility، data terms، region/access از ایران، قیمت ارزی، quota، export، self-host option و owner عملیاتی انتخاب کنید. Demo موفق روی انگلیسی یا صدای توسعهدهنده، Proof فارسی Production نیست.
تست کاربردپذیری مکالمه: Task، نه شخصیت خیالی
کاربر با «شخصیت» تست نمیشود؛ با Task، Context و محدودیت واقعی تعامل میکند. Persona و Tone ابزار طراحیاند، نه Oracle موفقیت. مطالعه باید بسنجد کاربر چه میخواهد، چه میگوید، پاسخ را چگونه میفهمد، خطا را چگونه تشخیص/اصلاح میکند و آیا مسیر جایگزین را پیدا میکند.
Voice Usability Session
Research question / task / risk / success criteria
Participant criteria / exclusions / recruitment / compensation
Device / room / noise / privacy / recording consent
Starting context without teaching exact command
Independent task success / assisted / repaired / abandoned
First utterance / turns / no-match / correction / help
Critical misunderstanding / confirmation comprehension
Time with phase/context—not speed as universal quality
Observed behavior versus participant interpretation
Post-task question / accessibility needs / alternate path
Facilitator interventions / technical failures / missing data
Debrief / withdrawal / redaction / retention / reporting limits
Discoverability را با دادن فهرست Commands پیش از Task نسنجید؛ Help/onboarding را جدا بررسی کنید. Completion با کمک Moderator را independent success گزارش نکنید. CSAT/SUS/SEQ در Scope خود مفیدند، اما تجربهٔ یک Turn، کل محصول یا Safety را ثابت نمیکنند.
Production telemetry بدون شنود بیمرز
| Signal | کاربرد | Countermetric/محدودیت |
|---|---|---|
| No-input/no-match by state | محل friction | device/network/intent mix |
| Correction/repair path | recoverability | silent abandonment |
| Critical confirmation reject | potential misinterpretation | user changed mind |
| Unknown commit/reconcile | financial safety | backend attribution |
| Latency distribution | tail/provider drift | task/channel mix |
| Fallback/alternate channel | access/escape | not automatically failure |
| Feedback/correction sample | new failure hypotheses | selection/label/privacy bias |
| Model/config/version shift | change correlation | not causal proof |
Raw audio را «برای شاید بعداً» نگه ندارید. تا حد امکان event/semantic telemetry کمینه و pseudonymous بسازید؛ purpose، notice، opt-out/alternate route، access، retention و deletion را اجرا و تست کنید. Sampling باید Missingness و opt-out bias را آشکار کند. Conversation transcript را برای ارزیابی فرد، احساس، قومیت، سلامت، استخدام یا تبلیغ هدفمند استفاده نکنید مگر اختیار و مبنای صریح جداگانهای وجود داشته باشد.
Drift و تغییر Provider را با Shadow Evidence کنترل کنید
- Model/provider/config/prompt/lexicon/normalizer/corpus version را همراه هر نتیجه ثبت کنید.
- Frozen regression anchors را از fresh representative sample جدا نگه دارید.
- تغییر Corpus mix را از تغییر مدل تفکیک کنید؛ Aggregate shift ممکن است فقط mix shift باشد.
- Challenger را روی data مجاز بهصورت Shadow مقایسه کنید؛ output آن نباید action واقعی بسازد.
- Critical guardrail و Slice regression را پیش از average improvement بررسی کنید.
- Rollback artifact، routing، cache و schema compatibility را تمرین کنید.
- تغییر Vendor terms، data region، retention و supported locale را Technical drift بدانید.
- Threshold را بعد از دیدن Holdout فقط برای Pass کردن تغییر ندهید؛ decision trail نگه دارید.
Voice Failure Packet برای بازتولید و تصمیم
Task / expected outcome / harm / actual action
First failing layer / last passing layer
Conversation, policy and backend contract versions
Audio source/hash/access pointer—not unsafe attachment
Device/OS/mic/channel/codec/sample rate/network/environment
Reference/raw/normalized transcript + annotation version
ASR model/config/alternatives/confidence/timestamps
NLU intent/entities/negation/OOS + scores/version
Dialog state before/after + prompt/repair/confirmation
Auth/policy decision + API/idempotency/trace/job IDs
TTS source text/voice/version + output route
Order/payment/ledger/outbox/reconciliation evidence
Retry history preserving first attempt
Privacy/redaction/consent/retention classification
Minimal synthetic reproduction / unknowns / next discriminator
Owner / severity rationale / rollback / correction / expiry
فایل صدای واقعی کاربر را بدون دسترسی و ضرورت به Ticket عمومی نچسبانید. اگر امکان دارد minimal synthetic clip بسازید و Hash/محل امن اصل را ثبت کنید. Transcript تنها جای Audio را برای clipping/noise نمیگیرد و Audio تنها state/backend effect را نشان نمیدهد.
AI مولد در VUI: پاسخ آزاد، Oracle را سختتر میکند
اگر پاسخ از LLM تولید میشود، علاوه بر زنجیرهٔ Voice باید grounding، tool call، instruction/data separation، hallucination، refusal، policy، prompt injection، output variability و versioning را آزمود. Transcript اشتباه میتواند Prompt را عوض کند و پاسخ درستنمای مدل را به Action خطرناک وصل کند. راهنمای پایه در مقالهٔ AI/ML مالک این حوزه است؛ VUI اینجا فقط boundary صوت/گفتگو/ابزار را اضافه میکند.
- LLM نباید مبلغ/گیرندهٔ ناموجود را پر کند یا confirmation را دور بزند.
- Tool call فقط از schema/policy/auth معتبر، نه از prose تولیدشده، عبور کند.
- Response variation را با semantic/property/safety Oracle بسنجید، نه snapshot متن واحد.
- Prompt، model، provider، temperature/tool schema/knowledge snapshot نسخهدار باشند.
- صدای کاربر، Transcript، Secret و business data را به Provider بیمجوز نفرستید.
- تولید صدای شخص یا تقلید Voice نیازمند Authority/consent و Threat model جداست.
- Human-like persona نباید هویت انسانی، قطعیت یا capability کاذب القا کند.
Release Gate چندلایه و Rollback
| Gate | Evidence | Hard stop نمونه | Authority |
|---|---|---|---|
| Contract | scope/risk/population/layers | critical action نامشخص | Product/Domain |
| Data | corpus/provenance/slices/holdout | بدون رضایت/مجوز | Data/Privacy |
| Model | WER+semantic+slice+calibration | critical regression | ML/QA |
| Conversation | state/repair/confirmation/help | مسیر cancel/alternate غایب | Design/Product |
| Action | auth/idempotency/reconcile | duplicate/unknown commit unsafe | Security/Service |
| Accessibility | multimodal/user evidence | Task ضروری voice-only خارج از تصمیم | Accessibility/Product |
| Operations | telemetry/alert/runbook/rollback | model/version ناشناخته | Operations |
همهٔ Gateها عدد یکسان یا Score ترکیبی نمیخواهند. یک WER خوب نمیتواند فقدان مجوز داده یا idempotency را جبران کند. Rollback ممکن است Model، Lexicon، Prompt، Feature flag، Provider routing یا خود قابلیت Voice action را برگرداند؛ مسیر Text/Manual fallback و وضعیت actionهای pending را حفظ کنید.
محدودیتهای عملی ایران
- پشتیبانی واقعی fa-IR، واژهٔ محاورهای، نام ایرانی و رقم/پول را با Corpus خودتان بسنجید؛ برچسب «Persian supported» کافی نیست.
- تحریم، region، VPN، account suspension، پرداخت ارزی، quota و API latency را در Vendor risk و exit plan وارد کنید.
- Audio/Transcript را بدون بررسی data residency، subprocessor، training use، retention و deletion به Cloud نفرستید.
- Offline/on-device یا Provider دوم را تنها پس از مقایسهٔ privacy، fidelity، footprint، update و support انتخاب کنید.
- شبکهٔ موبایل، تماس narrowband، deviceهای رایج و Bluetooth خودرو را بر اساس Population واقعی اولویت دهید.
- تقویم شمسی، Asia/Tehran، نوروز/تعطیلات، ریال/تومان و رقمهای فارسی/عربی/لاتین را Version کنید.
- Dialect/قومیت/سلامت را از Voice حدس نزنید و کارکنان را با Accent/WER فردی رتبهبندی نکنید.
- برای حوزهٔ مالی/سلامت/خودرو، مقررات و مسئول تخصصی محلی را جای مقاله یا Vendor doc بنشانید.
برنامهٔ ۳۰روزهٔ Pilot
| بازه | کار | خروجی |
|---|---|---|
| روز ۱–۵ | Task/Risk/Population/stack map | Voice Test Contract |
| روز ۶–۱۰ | state/intent/entity/repair model | Conversation suite + oracles |
| روز ۱۱–۱۵ | consented/synthetic Corpus + annotation | versioned splits/slices |
| روز ۱۶–۲۰ | text/ASR/audio/fault lanes | layer baseline + Failure Pack |
| روز ۲۱–۲۵ | representative usability/accessibility tasks | task/repair/comprehension evidence |
| روز ۲۶–۳۰ | shadow/sandbox gate + runbook | Adopt/Adapt/Defer/Stop + expiry |
Pilot را با یک Task محدود و قابلبرگشت شروع کنید. اگر action مالی است، ابتدا فقط inquiry یا draft بسازید و commit را فعال نکنید. معیار موفقیت «Demo حرف زد» نیست؛ Evidence کافی برای تصمیم، Unknownهای ثبتشده، guardrail، owner و امکان Stop است.
۲۰ ضدالگوی تست رابط کاربری صوتی
- برابر دانستن VUI با ASR یا NLU.
- آزمون فقط با صدای توسعهدهندگان.
- «لهجههای مختلف» بدون Population و Consent.
- حدس قومیت، جنسیت، سن یا سلامت از صدا.
- Corpus مشترک برای tuning و ادعای Release.
- Reference transcript بدون راهنمای Normalization.
- WER کلی بهعنوان Quality/Safety/UX.
- Intent accuracy بدون OOS/confusion/cost.
- Confidence بهعنوان Probability حقیقت.
- فایل Noise مصنوعی بهعنوان دنیای واقعی.
- تکرار Clipها بهعنوان نمونههای مستقل.
- No input، No match و System error با یک Prompt.
- Confirmation برای همه یا برای هیچچیز.
- Voice confirmation بهعنوان Authentication.
- Retry پرداخت پیش از Reconciliation.
- API ۲۰۰ بهعنوان Task success.
- Voice-only بهعنوان دسترسپذیری خودکار.
- ضبط Production برای «مصرف آینده».
- ابزار/Vendor محبوب بدون PoC فارسی و Exit.
- رتبهبندی کارمند یا گروه با WER/Accent.
چکلیست ۲۰نقطهای Release
- Task، Decision، Harm و non-goal مشخصاند.
- Population/Context/Excluded scope نسخهدار است.
- زنجیرهٔ Capture تا Action و owner هر لایه معلوم است.
- Conversation state/transition/expiry ثبت شدهاند.
- Intent/Entity/Negation/OOS semantics صریحاند.
- Critical value/action و confirmation policy تعریف شدهاند.
- Corpus source/consent/license/retention روشن است.
- Reference/normalization/annotation/adjudication نسخهدار است.
- Train/dev/held-out/regression و speaker leakage کنترل شدهاند.
- Device/audio/noise/network matrix بر Risk بنا شده است.
- Text، ASR، dialogue، E2E و user lanes جدا هستند.
- WER کنار semantic/task/slice/repair metric خوانده میشود.
- Uncertainty، missingness و Inconclusive حفظ میشوند.
- No input/match/ambiguity/system/unknown commit repair دارند.
- Auth، authorization، idempotency و reconciliation مستقلاند.
- TTS/مبلغ/نام/Secret/route/barge-in تست شدهاند.
- مسیر multimodal/alternate/cancel/undo قابلاستفاده است.
- Privacy، access، vendor flow و deletion Evidence دارند.
- Production drift/alert/runbook/rollback تمرین شدهاند.
- Decision، authority، dissent، expiry و بازبینی ثبت شدهاند.
جمعبندی: Voice را از صدا تا اثر واقعی تست کنید
رابط صوتی یک «همصحبت» جادویی یا یک مدل ASR تنها نیست؛ سامانهای چندلایه است که صدا، زبان، state، سیاست، سرویس، خروجی و انسان را به هم وصل میکند. خطای یک واژه میتواند بیاثر یا بحرانی باشد و WER پایین میتواند Action غلط را پنهان کند.
از یک Task واقعی شروع کنید: Contract و Risk را بنویسید، Corpus فارسیِ مجاز و Sliceهای معنیدار بسازید، Oracle هر لایه را جدا کنید، Repair و مسیر غیرصوتی را با کاربر بیازمایید و اثر backend را با idempotency/reconciliation ثابت کنید. سپس Metricها را با محدودیتشان گزارش دهید و فقط با Evidence قابلبازبینی Release کنید.
پرسشهای متداول دربارهٔ تست VUI
تفاوت تست VUI با تست ASR چیست؟
تست ASR بررسی میکند Audio چگونه به Transcript تبدیل میشود. تست VUI زنجیرهٔ کامل Capture، ASR، NLU، context/dialog، policy/auth، API/action، TTS، repair، accessibility و نتیجهٔ Task را میسنجد. ASR درست میتواند به NLU یا action غلط برسد؛ ASR دارای edit کوچک نیز ممکن است هنوز Task کمخطر را درست انجام دهد.
آیا WER مهمترین معیار رابط صوتی است؟
خیر؛ «مهمترین» معیار عمومی وجود ندارد. WER خطای واژه نسبت به Reference را میسنجد و برای مقایسهٔ ASR روی Corpus ثابت مفید است، اما اهمیت معنایی، Task، Harm، repair یا Action را وزن نمیکند. آن را کنار critical semantic error، Intent/Entity، Task success، Slice، latency و guardrail بخوانید.
آیا تست رابط صوتی را میتوان کاملاً خودکار کرد؟
بخشهای زیادی—منطق، Text→NLU، Corpus replay، Contract، fault injection و sandbox E2E—قابلاتوماسیوناند. اما discoverability، comprehension، repair، context واقعی، دسترسپذیری و رفتار محیطی به مطالعهٔ نماینده نیاز دارند. نسبت ثابت دستی/خودکار وجود ندارد؛ Risk، Fidelity، تکرارپذیری، هزینه و تصمیم تعیین میکنند.
برای تست لهجههای فارسی چه Corpusی لازم است؟
عدد جهانی برای Clip یا Speaker وجود ندارد. از Population، Task، کانال، خطر و Variation در Scope شروع کنید؛ consent/source/license، self-described labels، device/noise، speaker-disjoint split، held-out data، Reference/adjudication و missing groups را ثبت کنید. Sample کوچک را به کل لهجه یا جمعیت تعمیم ندهید.
برای پرداخت صوتی چه تستهایی حیاتیاند؟
نفی، مبلغ/واحد، گیرنده و Order را critical کنید؛ read-back و confirmation را از authentication جدا نگه دارید؛ authorization، timeout قبل/بعد commit، user retry، idempotency، duplicate/late callback، Ledger/Outbox/Reconciliation، cancel/undo، redaction و مسیر جایگزین را تست کنید. Voice بهتنهایی مجوز انتقال پول نیست.

