Store Ticket Assistant
نموذج أولي مستقل · مُحزَّم (حزمة تطبيق v0.1.0) · مُختبَر في التكامل المستمر · مستودع عام
الملخص
مساعد محلي أولًا لسير عمل أعرفه جيدًا: تحويل تفاصيل مكالمة الدعم إلى تذكرة منظّمة. الهندسة المثيرة فيه تكمن فيما يرفض فعله (مغادرة الجهاز) وفي كيفية معالجة جودة النص المفرَّغ دون نموذج سحابي: مصنّف للهلوسة، وقاموس تصحيح قابل للعكس، وحزم انحدار مبنية من نصوص مكالمات حقيقية بعد أن أخفقت اختبارات الوحدة في رصد انحدارين في المحلّل.
المشكلة والمستفيدون
يعيد فنيو الدعم كتابة تفاصيل المكالمة نفسها في التذاكر، وإرسال ملاحظات المكالمات الداخلية إلى خدمة سحابية غير مقبول. كان على الأداة أن تلتقط المكالمة مرة واحدة، وبخصوصية، على جهاز الفني نفسه.
فنيو دعم تقنية المتاجر الذين يكتبون التذاكر من المكالمات. بُني في وقتي الخاص وعلى أجهزتي دون أي بيانات من جهة العمل؛ وأسماء منتجات التذاكر والحقول الداخلية غائبة عن هذه الصفحة عن قصد.
دوري
عمل فردي. حدّدت موقف الخصوصية (كل شيء محلي؛ وأي استدعاء لنموذج مقيّد بالمضيف المحلي)، وصمّمت خط جودة النص المفرَّغ وقائمة فحص الإصدار وحزم الانحدار. كان التنفيذ بمساعدة الذكاء الاصطناعي تحت توجيهي.
البنية
الحدّ صريح: تملك Rust الآثار الجانبية، وتملك TypeScript المنطق الخالص، وملف صلاحيات Tauri هو عقد الخصوصية. تسمح صلاحية HTTP بمصدرَين محليين اثنين بالضبط، فحتى مسار النموذج الاختياري لا يستطيع الوصول إلى الشبكة.
القرارات والمفاضلات
- توجيه استدعاءات النموذج عبر الغلاف، لا عبر عرض الويب. تفشل طلبات المتصفح إلى نموذج محلي في فحص CORS المسبق. وبدل مطالبة المستخدمين بإعادة إعداد خادم النموذج، تمرّ الطلبات عبر إضافة HTTP في Rust بعناوين محصورة بالصلاحيات.
- القواعد قبل النماذج لأدوار المتحدثين. نماذج تمييز المتحدثين كبيرة وتحتاج إلى بيانات تدريب؛ وكان موزّع أدوار سؤال/جواب قائم على القواعد بتسميات استرشادية وإعادة تسمية بنقرة واحدة كافيًا وقابلًا للاختبار بالكامل.
- حزم انحدار من نصوص مكالمات حقيقية. بعد أن نجحت اختبارات الوحدة بينما انحدر المحلّل مرتين، يعيد سكربتان تشغيل نصوص مسجّلة (12 نصًا و73 فحصًا للحقول) في التكامل المستمر.
- تصحيحات قابلة للعكس. تسجّل كل قاعدة تصحيح ما غيّرته حتى يمكن استثناء إصلاح خاطئ من الاستمارات بدل أن يُثبَّت فيها بصمت.
نتائج مُتحقَّق منها
| المقياس | النتيجة | الدليل |
|---|---|---|
| الاختبارات | 292 ناجحًا عبر 25 ملفًا؛ وسكربتا انحدار لنصوص المكالمات | تشغيل التكامل المستمر 33564104141 على main، سبتمبر 2026 (2026-09-01) |
| التحزيم | بُنيت حزمة تطبيق macOS بالإصدار v0.1.0 | الحزمة على القرص؛ لا خط إصدار، يدوي لكل منصة |
| حدّ الخصوصية | صلاحية HTTP محصورة في localhost:11434 وlocalhost:1234 | src-tauri/capabilities/default.json |
| نظافة المستودع | أُصلح عطل النسخة النظيفة (قاعدة في gitignore ابتلعت src/data)؛ وأُزيلت حزمة تطبيق بحجم 20 ميغابايت من التتبّع؛ والتحذيرات 11 ← 2 | الإيداعات c94df80 و9636427 و694e672 |
القيود والعمل المتبقي
- نموذج أولي، ليس قيد الاستخدام الإنتاجي؛ وأرقام الدقة في README (معدلات المرشّح وتسمية المتحدثين) مُصرَّح بها ذاتيًا ولا تُكرَّر هنا.
- جانب Rust ليس له اختبارات خاصة به؛ والمنطق الخاضع للاختبار هو طبقة TypeScript.
- صفحتان في الواجهة مجرّد عناصر نائبة؛ والإصدارات يدوية لكل منصة.