Skip to main content
إذا كانت واجهتك الأمامية تستخدم أصلًا خطّافات الواجهة في Vercel AI SDK (useChat من @ai-sdk/react، ومقابلاتها في Vue و Svelte و Angular)، فبإمكانك الإبقاء عليها وتشغيل وكيل Lousho خلف المسار. ثلاث دوال، مصدَّرة من جذر الحزمة، تتولى التحويل. وهي لا تستورد شيئًا من ai، ولا تستخدم أي وحدة node:*، وتعمل على Node و Workers وأي بيئة تشغيل مبنية على Fetch.

معالج المسار

دون جلسة، مرّر كل الرسائل بدلًا من ذلك: toUIMessageStreamResponse(agent.stream(fromUIMessages(messages))).

العميل

مقابلة الأحداث

الأحداث التي لا مقابل لها في الواجهة (إعادات المحاولة، وضغط السياق، وقرارات الصلاحيات، وحواجز الحماية، …) وأحداث الوكلاء الفرعيين لا تُمرَّر. وقيمة finishReason في الجزء finish هي من قيم AI SDK (stop، length، content-filter، tool-calls، error؛ وأي قيمة أخرى، مثل awaiting-approval أو max-steps، تصبح other).

الاستهلاك والتكلفة

يوضع الاستهلاك في messageMetadata الخاص بالجزء finish، فتجده في message.metadata على رسالة المساعد المكتملة:
usage هو AgentEventUsage الخاص بالتشغيل (ويغيب إذا فشل التشغيل)؛ وloushoFinishReason هو سبب انتهاء التشغيل نفسه، دون تحويل.

الموافقات وask_question

الأداة التي تحتاج إلى موافقة، أو استدعاء ask_question، يوقفان التشغيل مؤقتًا: ينتهي البث (finish مع loushoFinishReason: "awaiting-approval") بعد جزء بيانات مخصَّص يعرضه useChat جزءًا من النوع data-lousho-approval:
kind وquestion لا يحضران إلا في حالة ask_question. اعرض الجزء بأزرارك الخاصة وأجب عنه عبر مسار الموافقات في واجهة الجلسات (POST /chat/:sessionId/approvals/:approvalId، راجع الجلسات والموافقات): { "approved": true } أو { "approved": false, "note": "..." } للأداة، و{ "answer": "prod" } للسؤال. الاستجابة هي تتمة التشغيل في صورة بث أحداث، يمكنك قراءته بالمحلِّل الذي توفره واجهات الربط (UI bindings) أو تجاهله واستدعاء sendMessage من useChat مرة أخرى؛ أو، في مسارك الخاص، استدعِ agent.approvals.streamResolve() / streamAnswer() وأعد toUIMessageStreamResponse() للنتيجة، فتُعرض التتمة في المحادثة نفسها.

تحويل الرسائل الواردة

fromUIMessages() تحوّل الأجزاء النصية إلى نص، وأجزاء الملفات من نوع image/* إلى أجزاء صور، وأجزاء الملفات الأخرى إلى أجزاء ملفات (يصبح url الخاص بالجزء، وهو عنوان data: أو http(s)، هو البيانات). أما أجزاء الأدوات والاستدلال والبيانات والمصادر والأجزاء غير المعروفة فتُتجاهل، والرسائل التي تصبح فارغة تُحذف. قد يُضاف لاحقًا مسار فرعي مخصَّص @lousho/build-ai-agent/ai-sdk-ui؛ أما الآن فالدوال تأتي من جذر الحزمة.