arc/docs/ai-agent/phase-9-adaptive-k-canary.md
2026-08-21 00:15:57 +00:00

8.5 KiB
Raw Permalink Blame History

Phase 9 — Adaptive K Canary, Live Discovery Telemetry & Production Validation

وضعیت: زیرساخت Canary و Telemetry در کد است. Flagهای production خاموش‌اند. تصمیم از روی ترافیک زنده: HOLD.
تاریخ: ۲۱ اوت ۲۰۲۶
نتایج: evals/phase-9/latest.json · evals/tool-scale/latest.json

Do not promote Adaptive K because offline Recall is good. Promote it only when real task completion, discovery misses, schema tokens, latency, and security remain acceptable in production traffic.

Hybrid فعلی از Keyword بهتر نیست و در این Phase Canary نمی‌شود.


1. Phase 8 Baseline (بدون تغییر)

مقدار
Tools ۱۸۰
Keyword Recall@10 ۹۵.۴۹٪
Keyword Recall@15 ۹۷.۵۲٪
Keyword Recall@20 / @48 ۹۸.۱۹٪
Adaptive tight (Gold) Recall ۹۶.۶۱٪ · Avg K ≈ ۱۰.۱۹
Hybrid @15 ۹۶.۳۹٪ — بدتر از Keyword
Production K Analyzer=۴۸ / Autonomous=۱۲۸

Gold ضروری است، کافی نیست. Offline Recall ≠ Production Tool Discovery Success.


2. Production defaults (امن)

قبل و بعد از این Phase، پیش‌فرض‌ها:

PROGRESSIVE_SCHEMA_LOADING = False
ADAPTIVE_DISCOVERY_K = False
ADAPTIVE_K_ROLLOUT_PERCENT = 0
HYBRID_TOOL_DISCOVERY = False

هیچ Flagی Global روشن نشد. Hybrid Canary ندارد.

دو Flag جدا می‌مانند تا اثرشان قاطی نشود:

ADAPTIVE_DISCOVERY_K          # سیاست K
PROGRESSIVE_SCHEMA_LOADING    # Schema کمتر از Discovery K

3. Canary architecture

hash_sha256(salt + business_id + user_id) % 100  → bucket 0–99
bucket < ADAPTIVE_K_ROLLOUT_PERCENT              → experiment (Adaptive K)
else                                             → control (K=48/128)
  • Assignment برای همان Tenant+User پایدار است. بین K=۴۸ و K=۱۰ تصادفی جابه‌جا نمی‌شود.
  • شناسه‌ها فقط برای bucket مصرف می‌شوند؛ در Log نیستند (adaptive_arm, adaptive_bucket, adaptive_percent).
  • مراحل مجاز: 0 → 5 → 10 → 25 → 50 → 100. مقدار نامعتبر به پایین گرد می‌شود (۷→۵، ۳→۰).
  • تفاوت بازوها فقط سیاست K است. Ranker، Security، Hybrid، Progressive بدون تغییر می‌مانند.
  • ADAPTIVE_DISCOVERY_K=True کل ترافیک را experiment می‌کند — الان False است.
  • حداقل نمونه زنده قبل از هر توصیهٔ promote: ADAPTIVE_K_MIN_LIVE_SAMPLES = 500 در هر بازو.

کد: ai_tool_canary.py · discover_tools(..., apply_adaptive=assignment.enabled).


4. Control vs Experiment

Control Experiment
Retrieval Keyword/intent فعلی همان
Security همان gate همان
Hybrid OFF OFF
K ۴۸ / ۱۲۸ Adaptive tight (≈۱۰/۱۵/۲۰)
Schema همان K همان K آزمایش (Progressive جدا و خاموش)

Agent نباید رفتار متفاوتی به‌خاطر assignment غیرمرتبط نشان دهد.


5. Telemetry (بدون دادهٔ مالی / متن Query)

هر Discovery زنده (tool_discovery_live):

adaptive_enabled, recommended_k, effective_k,
top_score, second_score, score_gap,
candidate_count, schema_count, schema_tokens,
channel, mutation, capability, confidence_level,
strategy, query_hash, latency_ms

effective_k و schema_tokens از مجموعهٔ واقعی روی سیم می‌آیند، نه از cache hint ارائه‌دهنده.

رویدادهای typed جدا (یک Event واحد نیستند):

Event معنی
retrieval_miss Tool لازم در ranked candidate نبود
schema_miss در ranked بود، Schema در context نبود
authorization_failure Tool غیرمجاز / خارج از permission
unknown_tool نام در Registry نیست
tool_discovery_miss فقط umbrella برای retrieval+schema
tool_rediscovery صف نوبت بعد (حداکثر ۱)
rediscovery_recovered / rediscovery_failed نتیجهٔ همان miss
tool_execution_success / execution_failure نتیجهٔ اجرای واقعی

Privacy: بدون user_id / business_id / session_id / متن query / payload مالی. Tool names، scores، intent/capability، latency مجازند.

KPI اصلی Canary:

Discovery Success WITHOUT Rediscovery

یعنی K کوچک + درست + بدون round-trip اضافه. Task Completion زنده مهم‌تر از Recall خام است.


6. Rediscovery و امنیت

LLM asks for X
  ├─ not in registry → unknown_tool, no rediscovery
  ├─ unauthorized    → authorization_failure, no rediscovery
  ├─ authorized, not ranked → retrieval_miss → queue (max 1)
  └─ ranked, schema missing → schema_miss → queue (max 1)
  • Tool مجاز ولی unoffered = Discovery failure نه Security failure.
  • Tool غیرمجاز هرگز برای «موفق شدن Agent» وارد Discovery/Rediscovery نمی‌شود.
  • max_discovery_retries = 1.
  • rediscovery_recovery_rate = recovered / queued.

7. Segmentation

Live telemetry کانال را نگه می‌دارد: chat / subagent / crm / ticket / workflow.

High-risk: mutation در {write, destructive, export, execute}. کاهش K نباید Safety یا Approval coverage را کم کند.

طبقه‌بندی business (simple / power / large / high-tool-usage) در محصول تعریف نشده — Gold فقط difficulty و category را به‌عنوان proxy آفلاین دارد.


8. Gold proxy (نه ترافیک زنده)

Control = discover @۴۸. Experiment = همان لیست، truncate با tight.

این Recall retrieval است نه Task Completion مدل. Schema miss زنده در Gold صفر است چون Schema Loader در eval اجرا نمی‌شود.

جزئیات عددی: evals/phase-9/latest.json.

Live در این محیط: ۰ درخواست → تصمیم خودکار HOLD. هیچ آستانهٔ کیفیت ساختگی hardcode نشد.


9. Index study (فقط Benchmark / معماری)

Semantic linear در ۱۰k ≈ ۲s (Phase 8). برای ۵k+ این‌ها گزینه‌اند، هیچ‌کدام Production نشد:

گزینه نقش
A. Inverted keyword Prototype در ai_tool_scale_bench — candidate gen واژه‌ای
B. PostgreSQL GIN / trigram فازی روی metadata موجود؛ ANN نیست
C. pgvector ANN فقط با embedding واقعی؛ n-gram فعلی کافی نیست
D. HNSW لازم اگر semantic در ۵k+ بخواهیم
E. Hybrid inverted + vector هدف Phase 10: inverted → ANN → ranker فعلی → Adaptive K → Progressive Schema → LLM

Semantic روی ۱۰k Tool Production نرفت.


10. Rollout gate

ارتقای درصد فقط با نمونهٔ کافی و مقایسهٔ Control/Experiment روی:

Recall proxy · Miss rate · Rediscovery · Unknown tool · Task success · Execution success · Average K · Schema tokens/request · Latency · High-risk · Channel

بدون baseline زنده، درصد را بالا نبرید. Canary را با تعداد درخواست بسنجید نه فقط با روزهای تقویم.


11. تصمیم این Phase

HOLD — زیرساخت آماده است؛ ترافیک Canary صفر است. Gold tight هنوز Case A را پیشنهاد می‌کند (هزینه کمتر، Recall≥۹۵٪) ولی اصل Phase 9 ترافیک واقعی است.

Hybrid: OFF. Phase 10 اگر Adaptive در Production موفق شد: Scalable Tool Index نه tuning دوبارهٔ Hybrid.


12. Files

فایل نقش
ai_tool_canary.py bucket پایدار، درصد، assignment
ai_tool_discovery_telemetry.py نمونه‌ها، miss typed، snapshot
ai_tool_rollout.py rediscovery typed؛ Progressive جدا
ai_tool_discovery.py apply_adaptive بدون تغییر ranker
ai_service.py resolve assignment → discover → live metrics
ai_tool_phase9_eval.py Control vs Adaptive روی Gold
ai_tool_scale_bench.py keyword / inverted / semantic تا ۱۰k