أنا أعمل على مساعد بنكي ذكي (LLM) خاص لمساعد بنكي، والموديل يعتمد على JSON ثابت فيه حقول مثل:
conversation
entities
session
message
reply
metadata
success
حاليًا عندي Dataset مبدئي لأمثلة بسيطة (جملة واحدة → رد واحد) للخدمات التالية:
alias_transfer (تحويل بالاسم)
mobile_transfer (تحويل لرقم موبايل)
check_balance (الاستعلام عن الرصيد)
find_atms (البحث عن أقرب صراف آلي)
customer_support (الدعم العام والخدمات)
null (رسائل خارج نطاق الخدمات البنكية)
وأيضًا عندي مثال جاهز لسيناريو اسمه:
UWallet Multi-turn Reset Training Examples
مثل الحوار التالي:
"بدي احول 100 دينار لمحمد"
"خليهم 50"
"خليهم 70"
"رجع من الأول"
"بدي احول 20 دينار لعلي"
"نعم"
المطلوب من المستقل
أحتاج مستقل يساعدني في:
تصميم وكتابة أمثلة تدريب Multi-turn (محادثات كاملة) لكل خدمة من الخدمات التالية:
alias_transfer
mobile_transfer
check_balance
find_atms
customer_support
null (أسئلة عامة/طلبات غير بنكية)
كل سيناريو يكون عبارة عن حوار كامل (3–10 رسائل) مع مراعاة الحالات التالية:
تعديل المبلغ أكثر من مرة قبل التأكيد
تغيير المستفيد (من محمد → علي، أو من alias → mobile والعكس)
عبارات مثل:
"رجع من الأول" (إعادة العملية من الصفر)
"لا، غير المبلغ"
"لا، خليه لرقم 079..."
رسائل غير بنكية وسط عملية التحويل مثل:
"بدي شورما" → النظام يحافظ على الكيانات ويطلب من المستخدم إذا يحب يكمل العملية أو لا
تأكيد نهائي: "نعم" / "ايوا" / "حولهم"
إلغاء: "لا" / "بعدين" / "ما بدي"
كل خطوة في الحوار لازم يكون لها JSON Output جاهز بنفس الشكل الموجود عندي الآن، مثل المثال التالي (فقط مثال للتنسيق):
{
"conversation": {
"state": "confirming",
"intent": "alias_transfer",
"requires_confirmation": true,
"is_complete": false
},
"entities": {
"amount": 20.0,
"currency": "JOD",
"alias": "محمد",
"mobile_number": null
},
"session": {
"action": "keep",
"status": "active"
},
"message": "هل تؤكد التحويل 20.0 JOD إلى محمد؟"
}
المهم:
عدم تغيير بنية الـ JSON ولا أسماء الحقول
فقط نغيّر القيم حسب سياق الحوار (state, intent, entities, session.action, message, …)
تنظيم البيانات في ملف واحد بصيغة JSONL مثل الموجود عندي حاليًا:
{"input": "...", "output": "...json..."}
{"input": "...", "output": "...json..."}
...
input = إمّا رسالة واحدة، أو "Context: {...}\n\nنص الرسالة"
output = JSON كنص (string) جاهز للاستخدام في التدريب.
المخرجات المتوقعة
ملف multi_turn_training.jsonl يحتوي تقريبًا:
محتاج 100-150 حوار كامل (كل حوار 5-10 خطوات) سيناريو متعدد الخطوات موزّعة على كل Intent
مع التركيز على:
التحويل + التعديل
التحويل + switch بين alias/mobile
التحويل + رسائل غير بنكية (شورما/سؤال عام)
reset: "رجع من الأول"
ملف توضيحي بسيط (README.md أو ملاحظات) يشرح:
أنواع السيناريوهات
كيف تم تمثيل الـ Context
أي افتراضات مهمة استخدمتها
المهارات المطلوبة
خبرة في التعامل مع LLMs وبيانات التدريب (prompt / completion أو input / output).
فهم جيد للغة العربية (لهجة أردنية/عامية) والتعابير البنكية اليومية.
إتقان JSON ويفضّل Python لتوليد الملف بسهولة.
دقة في الحفاظ على نفس شكل الـ JSON الحالي بدون تغيير.
import json
# أمثلة تدريب لسيناريو حوار متعدد الخطوات مع "رجع من الأول"
# الحوار:
# 1) "بدي احول 100 دينار لمحمد"
# 2) "خليهم 50"
# 3) "خليهم 70"
# 4) "رجع من الأول"
# 5) "بدي احول 20 دينار لعلي"
# 6) "نعم"
multi_turn_examples = [
# 1) أول رسالة: يبدأ تحويل جديد 100 دينار لمحمد → نروح مباشرة لحالة التأكيد
{
"input": "بدي احول 100 دينار لمحمد",
"output": json.dumps({
"conversation": {"state": "confirming", "intent": "alias_transfer"},
"entities": {"amount": 100.0, "currency": "JOD", "alias": "محمد", "mobile_number": None},
"session": {"action": "keep", "status": "active"},
"message": "هل تؤكد التحويل 100.0 JOD إلى محمد؟"
}, ensure_ascii=False),
},
# 2) تعديل المبلغ من 100 → 50 داخل نفس العملية (state=confirming)
{
"input": (
"Context: {\"entities\": {\"amount\": 100.0, \"currency\": \"JOD\", \"alias\": \"محمد\", \"mobile_number\": null}, "
"\"state\": \"confirming\", \"intent\": \"alias_transfer\"}\n\nخليهم 50"
),
"output": json.dumps({
"conversation": {"state": "confirming", "intent": "alias_transfer"},
"entities": {"amount": 50.0, "currency": "JOD", "alias": "محمد", "mobile_number": None},
"session": {"action": "keep", "status": "active"},
"message": "هل تؤكد التحويل 50.0 JOD إلى محمد؟"
}, ensure_ascii=False),
},
# 3) تعديل ثاني للمبلغ من 50 → 70 داخل نفس العملية
{
"input": (
"Context: {\"entities\": {\"amount\": 50.0, \"currency\": \"JOD\", \"alias\": \"محمد\", \"mobile_number\": null}, "
"\"state\": \"confirming\", \"intent\": \"alias_transfer\"}\n\nخليهم 70"
),
"output": json.dumps({
"conversation": {"state": "confirming", "intent": "alias_transfer"},
"entities": {"amount": 70.0, "currency": "JOD", "alias": "محمد", "mobile_number": None},
"session": {"action": "keep", "status": "active"},
"message": "هل تؤكد التحويل 70.0 JOD إلى محمد؟"
}, ensure_ascii=False),
},
# 4) "رجع من الأول" → نرجّع الحالة لبداية محادثة جديدة داخل نفس الجلسة
# نستخدمها لتعليم الموديل إنه يمسح الكيانات ويرجع state=greeting/collecting_info بدون تنفيذ
{
"input": (
"Context: {\"entities\": {\"amount\": 70.0, \"currency\": \"JOD\", \"alias\": \"محمد\", \"mobile_number\": null}, "
"\"state\": \"confirming\", \"intent\": \"alias_transfer\"}\n\nرجع من الأول"
),
"output": json.dumps({
"conversation": {
"state": "greeting",
"intent": None,
},
"entities": {
"amount": None,
"currency": "JOD",
"alias": None,
"mobile_number": None,
},
"session": {"action": "keep", "status": "active"},
"message": "تمام، رح نرجع من البداية. احكيلي من جديد شو حاب تعمل؟",
}, ensure_ascii=False),
},
# 5) بعد reset، يبدأ تحويل جديد 20 دينار لعلي → تأكيد جديد
{
"input": (
"Context: {\"entities\": {\"amount\": null, \"currency\": \"JOD\", \"alias\": null, \"mobile_number\": null}, "
"\"state\": \"greeting\", \"intent\": null}\n\nبدي احول 20 دينار لعلي"
),
"output": json.dumps({
"conversation": {"state": "confirming", "intent": "alias_transfer"},
"entities": {"amount": 20.0, "currency": "JOD", "alias": "علي", "mobile_number": None},
"session": {"action": "keep", "status": "active"},
"message": "هل تؤكد التحويل 20.0 JOD إلى علي؟",
}, ensure_ascii=False),
},
# 6) "نعم" بعد التأكيد الثاني → إتمام العملية وإغلاق الجلسة
{
"input": (
"Context: {\"entities\": {\"amount\": 20.0, \"currency\": \"JOD\", \"alias\": \"علي\", \"mobile_number\": null}, "
"\"state\": \"confirming\", \"intent\": \"alias_transfer\"}\n\nنعم"
),
"output": json.dumps({
"conversation": {"state": "completed", "intent": "alias_transfer"},
"entities": {
"amount": None,
"currency": "JOD",
"alias": None,
"mobile_number": None,
},
"session": {"action": "close", "status": "completed"},
"message": " تم التحويل 20.0 JOD إلى علي بنجاح.",
}, ensure_ascii=False),
},
]
# مثال: دمج الأمثلة الجديدة مع training_data الحالية
# training_data.extend(multi_turn_examples)
السلام عليكم يا استاذ ابراهيم , انا كيرلس نبيل متخصص ذكاء اصطناعي و محلل بيانات بخبرة 3 سنين أنا اطلعت على طلب حضرتك كويس وفاهم كويس جدا إنت محتاج إيه بالظبط با...
ما الذي سأقوم بتنفيذه لكم ١) إعداد 100150 سيناريو Multi-turn حقيقي جميع السيناريوهات باللهجة العامية المناسبة للاستخدام البنكي (أردنية/عربية بسيطة). تتضمن الحال...
السلام عليكم ورحمة الله معك احمد مبرمج python وواجهة البرمجيات api اعمل وخبير ذكاء صناعي يمكنني العمل معك ودمج المطلوب الذي اردته بحيت يتوافق مع طلبك سأوفر لك ....
السلام عليكم أستاذ ابراهيم أقترح بدل ما ندخل في مرحلة تدريب طويلة ومكلفة، إننا نستغني نهائيا عن التدريب ونبني شات بوت ذكي مبني على RAG. هذا الحل يعطينا أداء أعل...
وعليكم السلام، معك المهندسة حنان من شركة Aqdveloper الأردنية. اشتغلت قبل هيك على مشروع نفس فكرتك تماما بخص داتاسيت محادثات بنكية بالعربي، وبناء سيناريوهات multi...