وكيل أطلس (تحكّم لغوي)
وكيل أطلس
يحوّل أطلس أمراً نصّياً حراً إلى إجراء خريطة مُهيكَل وقابل للتنفيذ يشغّله تطبيقك على الخريطة. وهو في جوهره وكيل ذكاء اصطناعي يستدعي الأدوات: يفهم اللغة الطبيعية بأي لغة (وفي مقدّمتها العربية والإنجليزية، بما في ذلك اللهجة الأردنية)، يختار الإجراء الصحيح، ولأي سؤال معلوماتي يبني إجابته على بيانات Navvo الحيّة (أماكن وتقييمات حقيقية وحالة سير آنية) بدل التخمين. نقطة واحدة تغطّي البحث والملاحة والدبابيس والتحكّم بالطبقات/الأنماط وخطط الرحلات اليومية وتحسين الأساطيل والإجابات الحوارية المبنيّة على بيانات.
عقد الاستجابة لم يتغيّر ومتوافق مع الإصدارات السابقة — لا تزال تتفرّع حسب action كما كان. وتعود الردود بنفس لغة المستخدم. أطلس مرن: إذا تعذّر الوصول للنموذج الأساسي مؤقتاً يتحوّل تلقائياً إلى نموذج محلي ومحلِّل حتمي، فتبقى النقطة تعمل. وتُتابَع سلامة المزوّدين على مستوى المنصّة كلها، فيُتجاوَز النموذج الأساسي المتعطّل فورًا — فلا يكلّف انقطاعه سوى تحويل سريع واحد بدل مهلة انتظار في كل طلب — ولكل طلب حدّ زمني إجمالي ثابت.
ولا يذكر أطلس إلا الحقائق الآتية من بيانات نافّو نفسها في المحادثة ذاتها: الأماكن والمسافات والمسارات وحركة المرور. وحيث لا تغطي تلك البيانات أمرًا ما — كساعات العمل مثلًا — يقول الردّ ذلك بدل التخمين، فاعتبر الردّ الذي يمتنع عن تفصيل ما إجابةً صحيحة لا خطأً.
النطاق المطلوب: places.
المصادقة: يتطلب Atlas مُستدعيًا معرَّفًا — إمّا مستخدم Navvo مسجّل الدخول (رمز Bearer كما في navvo.io) أو مفتاح API الخاص بك (x-api-key). الطلبات المجهولة تتلقى 401.
"model": "navvo-ai". المحرّك الأساسي تفصيل داخلي في Navvo وقد يتغيّر دون إشعار — لا تعتمد أبداً على اسم نموذج بعينه.message على حروف عربية، يعود كل ردّ — بما في ذلك تأكيدات الرجوع الحتمي ورسائل «الخدمة مشغولة» الثابتة — بالعربية. أما الرسائل الإنجليزية (أو أي نص بغير الحرف العربي) فتحصل على السلاسل الإنجليزية.history ترسله والردود الخاصة بنقاط نهاية الذكاء الاصطناعي للدردشة على الخادم لمدة تصل إلى 30 يومًا ثم تُحذف. اذكر ذلك في إشعار الخصوصية لتطبيقك. لا ترسل أسرارًا في message/context/history.POST /ai/atlas
| الحقل | النوع | ملاحظات |
|---|---|---|
message | string | مطلوب — أمر المستخدم باللغة الطبيعية، حتى 8,000 حرف (الأطول → 400) |
userName | string | اختياري — اسم المستخدم المسجّل؛ يخاطبه Atlas باسمه الأول |
context | string | اختياري — تلميح سياق/محادثة قصير، حتى 32,000 حرف (الأطول → 400) |
history | array | اختياري — الأدوار السابقة لسياق متعدّد الجولات، بحد أقصى 12 عنصرًا من { role, content } حيث role هو "user" أو "assistant" وcontent سلسلة نصية (بحد أقصى 2000 حرف). الأقدم أولاً. حذفه (أو []) مطابق تمامًا للسلوك السابق أحادي الجولة. تجاوز الحد / أدوار خاطئة / محتوى أطول من الحد → 400. |
{
"message": "take me to the second one",
"context": "Camera: 31.95,35.91 z15 …",
"history": [
{ "role": "user", "content": "find pharmacies near Abdoun" },
{ "role": "assistant", "content": "Here's what I found for \"pharmacies near Abdoun\"." }
]
}
يقبل كلٌّ من POST /ai/atlas وPOST /ai/assistant الحقل history بنفس القواعد.
curl -s -X POST "https://navvo.io/api/v1/ai/atlas" \
-H "x-api-key: $NAVVO_API_KEY" -H "content-type: application/json" \
-d '{ "message": "plan a 3 hour trip with cafes and museums" }'
لكل استجابة reply (جملة بشرية قصيرة) وaction وmodel وunavailable. وتعتمد بقية الحقول على الإجراء:
action | حقول إضافية | المعنى — ما الذي يفعله تطبيقك |
|---|---|---|
search | query | نفّذ بحث أماكن عن query واعرض النتائج |
directions | query | ابدأ التوجيه إلى query |
navigate | query | بدء الإرشاد خطوة بخطوة إلى query فورًا ("ابدأ الملاحة إلى…") |
pin | query | ضع دبّوساً عند query |
locate | query | وسِّط/قرِّب الخريطة على query |
control | target, value | بدِّل طبقة/نمط/لوحة — target مثل traffic/satellite/3d/transit/weather؛ وvalue هو on/off/toggle |
itinerary | timeBudgetMin, interests | ابنِ خطة يوم — نادِ POST /itinerary/auto بهذه + موقع المستخدم |
optimize_fleet | — | حسِّن محطات توصيل المستخدم — نادِ محسِّن الأسطول |
report_incident | incidentType (accident/hazard/police/camera/closure/jam)، وquery (نسخة قديمة مكرّرة) | تبليغ حادث جماعي بدون استخدام اليدين — سجِّله عند موقع المستخدم عبر POST /incidents ("في حادث قدام"). فضّل الحقل الجديد incidentType (موجود على هذا الإجراء فقط؛ وقيمته الافتراضية hazard)؛ ولا يزال query يعكسه للعملاء الأقدم. |
answer | — | مفتوح — reply ردّ حواري |
أمثلة التخطيط
// "plan a 3 hour trip with cafes and museums"
{ "action": "itinerary", "timeBudgetMin": 180, "interests": ["cafe","museum"],
"reply": "Planning a 3-hour itinerary around cafe, museum near you." }
// "what can I do in 90 minutes near here"
{ "action": "itinerary", "timeBudgetMin": 90, "interests": [], "reply": "Planning a 1.5-hour itinerary near you." }
// "optimize my deliveries"
{ "action": "optimize_fleet", "reply": "Optimizing your stops into the fastest route order." }
تُستخرَج المدّة من النص (3 hours، 90 minutes، half-day ← 240، afternoon ← 240)؛ وتُطابَق الاهتمامات مع مفردات تصنيف (cafe، restaurant، museum، park، shopping، historic، art، market، nature، …).
أمثلة أخرى
{ "action": "directions", "query": "the airport", "reply": "Routing you to the airport." } // "directions to the airport"
{ "action": "search", "query": "cafes", "reply": "Here's what I found for \"cafes\"." } // "find cafes nearby"
{ "action": "control", "target": "traffic", "value": "on", "reply": "Turning on traffic." } // "turn on traffic"
ما الذي يجيب عنه أطلس
أطلس مساعد خرائط. يجيب عن الأماكن والأنشطة التجارية، والاتجاهات، والملاحة، وحركة المرور، والمواقف، والخريطة وطبقاتها، والرحلات وخطط اليوم، وعن Navvo نفسها، وعن المكان أو المنطقة التي يوجد فيها المستخدم أو يعرضها، بما في ذلك تاريخها وما تشتهر به. أما أي شيء آخر، مثل القصائد والواجبات المدرسية والمعلومات العامة ونتائج المباريات والبرمجة غير المتعلقة، فيُرَدّ عليه بجملة ودّية واحدة بلغة المستخدم توضّح ما يستطيع أطلس المساعدة فيه. وتُرفَض بالطريقة نفسها طلبات تجاوز هذه القواعد.
// "اكتب لي قصيدة"
{ "action": "answer", "query": "", "reply": "أستطيع المساعدة فقط في الأماكن والطرق وحركة المرور والخريطة. جرّب أن تطلب مني البحث عن مكان أو تخطيط طريق أو معرفة حركة المرور قربك." }
// "شو قصة جبل القلعة؟"
{ "action": "answer", "reply": "جبل القلعة في عمّان موقع تاريخي يعود إلى العصور القديمة..." }
الاعتذار إجابة answer عادية، فاعرض reply كما تعرض أي إجابة أخرى.
إجابات مبنيّة على بيانات
للأسئلة المعلوماتية يجلب أطلس بيانات Navvo الحقيقية قبل أن يجيب — لا يخترع أماكن أو تقييمات أو إحداثيات أو حالة سير:
// "is there a pharmacy near me?" → إجابة من بحث الأماكن الحيّ
{ "action": "answer", "reply": "Yes — the closest is Airport Bridge Pharmacy (4.8), with Airport Pharmacy nearby too." }
// "كيف حالة السير الآن؟" → إجابة من السير الحيّ، بالعربية
{ "action": "answer", "reply": "لا توجد تقارير مرور حية في منطقتك الآن. أخبرني باسم الشارع وسأتحقق لك." }
// "كيف بتكون الحركة بكرة الساعة 8؟" → إجابة من حركة المرور المُحلَّلة (المتوقَّعة)، وليست حيّة
{ "action": "answer", "reply": "بكرة الساعة 08:00 تكون الحركة حولك عادةً متوسطة، لأنه أول يوم عمل في الأسبوع. ويُتوقع أن تكون أخف بين 10:00 و12:00." }
الأسئلة عن حركة المرور المعتادة أو المتوقَّعة، أو عن وقت آخر («بكرة الساعة 8»، «مساء الجمعة»، «في رمضان»)، أو عن طقس افتراضي («إذا أمطرت»)، أو عن أفضل وقت للانطلاق، يُجاب عنها من حركة المرور المُحلَّلة وبالتوقيت المحلي للمستخدم. وتُعرض هذه الإجابات دائمًا على أنها حركة مرور معتادة أو متوقَّعة، لا قراءة حيّة.
places — السجلات التي بُنيت عليها الإجابة
حين يرجع أطلس إلى فهرس الأماكن ليجيب، تحمل الاستجابة أيضًا places: السجلات التي اطّلع عليها.
الحقل إضافي واختياري — تجاهله ولا يتغيّر شيء — لكنه ما يتيح للعميل أن يُظهر مصدره بدل أن يطلب من
المستخدم تصديق جملة. وإذا كانت message بالعربية، فإن name هو الاسم العربي للمكان حين يتوفّر لدى نافّو
(وإلا فالاسم الإنجليزي)، فتتطابق الإجابة مع السجلات. وتُبحث أسئلة حركة المرور عن طريق أو منطقة مسمّاة قرب
موقع المستخدم حين ترسله.
| الحقل | النوع | ملاحظات |
|---|---|---|
slug | نص | معرّف المكان في نافّو — استخدمه لفتح السجل أو التوجّه إليه أو حفظه |
name | نص | |
category | نص | null | |
rating | رقم | null | |
lat / lng | رقم | null | ارسمها؛ وأي عميل لديه خريطة ينبغي أن يفعل |
// "هل توجد صيدلية قريبة؟"
{
"action": "answer",
"reply": "نعم — الأقرب صيدلية جسر المطار (٤٫٨)، وصيدلية المطار قريبة أيضًا.",
"places": [
{ "slug": "airport-bridge-pharmacy-1a2b3c", "name": "Airport Bridge Pharmacy",
"category": "pharmacy", "rating": 4.8, "lat": 31.7226, "lng": 35.9932 }
]
}
والحقل غائب لا [] حين لا يحدث بحث — فوجوده إشارة موثوقة إلى أن للإجابة ما يُرسم. وقد يظهر
كذلك مع إجراء (مثل search استندت إجابته إلى بحث سابق).
action: "answer" إلا للرسائل المفتوحة أو المعلوماتية. وبما أنّ المخطط لم يتغيّر، لا تحتاج التكاملات الحالية أي تعديل.المهام (بيانات الحشود)
تحسين بيانات تشاركي مُحفَّز — إظهار مهام صغيرة لسدّ فجوات البيانات القريبة، وجمع الإجابات في قائمة المراجعة، ومنح المساهمين نقاطاً.
المستخدمون والمزامنة
الحسابات والملفات الشخصية والأماكن المحفوظة والسجل ومشاركة الموقع الحي — واجهة البيانات الشخصية لبناء تطبيق مستهلك بتسجيل دخول على Navvo.