Skip to main content
أدواتٌ مثل NotebookLM غيّرت ما يتوقعه الناس من كومة من الأبحاث. تُضيف مصادر، فتطرح أسئلة وتحصل على إجابات تُشير مرجعًا إلى المادة، ثم تُولِّد محادثة بين مُقدِّمَين يمكنك الاستماع إليها أثناء المشي. هذا الدليل يبني ذلك في نحو مئتَي سطر من Python، فوق خمس نقاط نهاية من Venice. لا شيء يُخزَّن خارج جهازك سوى الطلبات نفسها، وVenice لا يحتفظ بها.

Run this notebook in Google Colab

كل خطوة أدناه على هيئة دفتر قابل للتنفيذ، مع تشغيل النظرة العامة داخل الصفحة. لا شيء لتثبيته.

كيف يعمل

خمس نقاط نهاية، لكلٍّ منها مهمة واحدة: الاسترجاع هنا بسيط عن قصد: متجهات في قائمة Python، وتشابه جيب التمام في حلقة. هذا هو القدر الصحيح من الآليات لبضع عشرات من المصادر، ويُبقي الأجزاء المتحركة ظاهرة. حين تفوق ذلك، يغطي بناء روبوت RAG خاص الخطَّ نفسه بقاعدة بيانات متجهات حقيقية ومَرحلة إعادة ترتيب.

الإعداد

اعتماديّة واحدة، ومفتاح من صفحة إعدادات API.
أنشئ ملف notebook.py وابدأ بالاستيرادات والتهيئة. القائمتان في الأسفل هما كامل حالة الدفتر: sources يسجّل ما أضفتَه، وchunks يحمل القطع القابلة للبحث.
يُقابل HOSTS اسم كل مُقدِّم بصوت. كلا الصوتين ينتميان إلى tts-xai-v1، وهذا مهم: الأصوات تخص النماذج، وإرسال صوت من عائلة إلى نموذج من عائلة أخرى هو أشيع خطأ أول مع نقطة نهاية الصوت.

اختيار نموذج لن يتقادم

ترميز نموذج دردشة داخل مشروع يضمن تقادُم المشروع. تنشر Venice أيَّ نموذج يحمل حاليًا كل دور عبر /models/traits، فيمكنك طلب الافتراضي الحالي بدل تسمية نموذج بعينه.
تتوفر سمات أخرى إن لم يكن هذا الدفتر بالشكل الذي تريده. most_intelligent يمنحك نموذجًا أقوى للتلخيص الكثيف بالاستدلال، وdefault_reasoning يمنحك واحدًا يفكّر بشكل مكشوف. راجع النماذج للقائمة الكاملة.

إضافة المصادر

المصدر إمّا رابط URL أو ملفٌ على القرص، ولدى Venice نقطة نهاية لكل منهما. كلاهما يُعيد نصًّا خامًا، وهذا هو المقصود: بقيّة الدفتر لا تهتم من أين جاء المصدر.
يعيد /augment/scrape نصَّ Markdown بدل HTML الخام، فلا حاجة لكتابة كود لتجريد القوالب. يقبل /augment/text-parser ملفات PDF وWord وExcel والنص العادي حتى 25 ميغابايت، ويُبلّغ عن عدد الرموز إلى جانب النص. يغطّي معالجة المستندات خياراته بالكامل.

التقطيع والتضمين

تضمين مستند كامل يُنتج متجهًا واحدًا هو معدَّل كل ما يقوله، وهذا أعمى من أن يسترجع ادعاءً بعينه. تقطيعه يُنتج متجهات يعني كلٌّ منها شيئًا. قسِّم على حدود الفقرات لا على عدد أحرف ثابت. القطعة التي تتوقف في منتصف جملة تُسترجع رديئًا، لأن التضمين لجزء مبتور.
تُجمِّع embed الطلبات لأن نقطة النهاية تأخذ قائمة، وطلبٌ واحد لأربع وستّين قطعة أقلّ تكلفةً في الزمن الفعلي بكثير من أربعة وستّين طلبًا. يعيد text-embedding-bge-m3 متجهًا بـ1024 بُعدًا ويتعامل جيدًا مع المصادر متعددة اللغات. إضافة مصدر صارت الآن: اقرأ، وقسِّم، وضمِّن، وسجِّل. تُخزَّن سعة كل متجه إلى جانبه، لأنها لا تتغير أبدًا وإعادة حسابها داخل حلقة التشابه هدرٌ للجهد.
number هو ما يجعل الاستشهاد ممكنًا لاحقًا. كل قطعة تتذكر أيَّ مصدر جاءت منه، فيمكن للإجابة أن تُشير مرجعًا إليه.

استرجاع المقاطع الصحيحة

تشابه جيب التمام بين متجه السؤال وكل متجه قطعة، ثم فرزٌ، ثم أفضل k. لبضعة آلاف من القطع، يعمل هذا أسرع من الاستدعاء الشبكي الذي أنتج متجه السؤال.

الإجابة مع الاستشهادات

الفرق بين إجابة مؤصَّلة وتخمين واثق يكمن كليًّا في التعليمة. تعليمتان تؤدّيان العمل: أجِب فقط من الملاحظات، وقُل ذلك حين تعجز الملاحظات. من دون الثانية سيملأ النموذج الفراغ بهدوء من الذاكرة، وهذا هو نمط الفشل الذي تحاول تفاديه بالتصميم. ترقيم الملاحظات في التعليمة يمنح النموذج مفردات استشهاد. يكتب [2]، فتستطيع أنت أن تُرجع ذلك إلى مصدر.
تحليل الأقواس مرة أخرى يستحق السطر الواحد. فهو يخبرك أيّ المصادر حملت الإجابة فعلًا، وبذلك تلاحظ أن مصدرًا ظننتَه محوريًّا لا يُستشهد به أبدًا.

كتابة نصّ النظرة العامة

هنا يتوقف الدفتر عن أن يكون صندوق بحث. الملخّص شيء تقرأه؛ والنظرة العامة شيء تستمع إليه، وكلٌّ منهما يريد نثرًا مختلفًا. الحوار يعمل بشكل أفضل في الصوت لأن تبادل الأدوار يضبط الإيقاع نيابةً عنك، وسؤالٌ من أحد المُقدِّمَين طريقة طبيعية لتقديم الفكرة التالية. ثلاثة قيود تهم، وكلها تأتي من الصوت لا من النص:
  • لا Markdown ولا روابط URL. نموذج الكلام يقرأ https://docs.venice.ai حرفًا حرفًا.
  • اهجِ الاختصارات. T E E في المرة الأولى، لا tee.
  • نوِّع طول المقاطع. المقاطع المتساوية تبدو وكأن شخصَين يقرآن قائمة أحدهما للآخر.
طلب JSON بمُخطَّط هو ما يجعل النتيجة قابلة للتصيير. النص الحرّ يحتاج إلى تحليل، وتسميات المتحدثين هي بالضبط ما يُبدع فيه النموذج. القيد enum على speaker يعني أن كل مقطع يُقابل صوتًا لديك.
تُغطّي النظرة العامة المصادر بشكل عريض بدل الإجابة عن سؤال واحد، لذا يأخذ spread عيّنة من القطع عبر المجموعة كلها بدل الاسترجاع بالتشابه. أخذ كل قطعة رقم n خامٌ لكنه يعمل جيدًا: فهو يبلغ نهاية المستندات الطويلة، وأخذ الاثنتَي عشرة الأولى ما كان ليصل إليها. عامِل عدد المقاطع كتلميح لا كتعليمة. طلبُ ستة عشر أنتج هنا ما بين ستة عشر وثمانية وعشرين، بحسب ما لدى المصادر لتقوله. إن احتجتَ سقفًا صارمًا، فاقتطع turns قبل التصيير بدل مجادلة التعليمة.

تصيير صوتَين إلى مسار واحد

يصبح كل مقطع طلب كلام واحدًا، والصوت يُختار بحسب من يتكلم.
قراءة الإطارات من كل مقطع، بدل حفظ عشرين ملفًّا وخياطتها لاحقًا، هي ما يُبقي التوصيل نظيفًا. تسلسل الصوت المُشفَّر مثل MP3 لا يعمل بشكل موثوق، لأن كل ملف يحمل ترويسته الخاصة. الإطارات المفكوكة مجرد عيّنات، فربطها هو إلحاق بايتات. تفصيلان يجعلان النتيجة تبدو مقصودة. ترويسة المُخرج تأتي من أول مقطع لا من ثوابت، فيكون معدَّل العيّنات صحيحًا دائمًا مع أيِّ نموذج اخترتَه. وربع ثانية من الصمت بين المقاطع يعطي الأذن مهلةً لتُدرك أن المتحدث تغيَّر. من دونه يتحدث المُقدِّمان فوق نهايات بعضهما.
يحفظ pool.map ترتيب المُدخلات، فتعود المقاطع بالترتيب الذي كُتبت به مهما بلغ أيُّها الأول. أربعة عاملين سقفٌ متعمَّد لا حدٌّ أقصى: تزامُنٌ أكبر سيبدأ بإعادة رموز 429 على الطبقات الأدنى، والمهمة أصلًا يهيمن عليها أطول مقطع منفرد.

تشغيله

الاستيعاب والإجابة يستغرقان ثوانيَ قليلة. الصوت هو الجزء البطيء، ويتفاوت مع الحمل: نحو ست دقائق من الكلام تستغرق ما بين نصف دقيقة وثلاث دقائق للتصيير.

اجعله لك

المصادر هي اللعبة كلها. كل ما يأتي بعد ذلك محدود بما أدخلتَه. الصفحات المستخرَجة تجلب معها شريط التنقل والتذييل، وهذا غير ضارٍّ للإجابة لكنه يظهر في النظرة العامة على شكل مُقدِّم يناقش بجدٍّ فهرس توثيق. إن حدث ذلك، فأسقط القطع تحت عتبة طول أو رشِّح الأثاث الواضح قبل التضمين. استبدل الأصوات. HOSTS هو مُدخلان في قاموس. يشحن tts-xai-v1 ستة وعشرين صوتًا، وللعائلات الأخرى أصواتها؛ GET /models?type=tts يُدرج voices لكل نموذج. صوتان يتباينان بوضوح أسهل في المتابعة من صوتَين مختلفَين فقط. استنسِخ صوتك. يحوّل استنساخ الأصوات عيّنة قصيرة إلى مقبض صوت يمكنك إسقاطه مباشرة في HOSTS. أضف مشاركًا ثالثًا. لا شيء في المسار يفترض متحدثَين إلا enum المُخطَّط. إضافة مُحاوِر يطرح الأسئلة فقط تُغيّر الإحساس تغييرًا كبيرًا. احفظ النص. كتابة turns إلى ملف JSON إلى جوار الصوت تكلّف سطرَين وتوفّر إعادة تصيير كلَّ مرة تريد فيها تعديل جملة واحدة.

إلى أين تذهب بعد ذلك

روبوت RAG خاص

خط الاسترجاع نفسه بقاعدة بيانات متجهات حقيقية وإعادة ترتيب.

إجابات موثّقة مع بحث الويب

اعثر على المصادر تلقائيًا بدل تسميتها بنفسك.

النص إلى كلام

مرجع لنقطة نهاية الكلام وأصواتها والبثّ.

معالجة المستندات

كل ما يقبله محلِّل النصوص وما يعيده.