Published · 10 min read

بناء وكيل AI متعدد الأطراف

دليل للمبتدئين لتطوير نماذج لغة كبيرة قابلة للتخصيص لحل حالات استخدام بسيطة

مؤلف: راشيل مارتينيز ‬ دور: مطور ‬ Tag: AI وكلاء


مقدمة

مرحبا بكم في مدونتنا التقنية، حيث نجعل المفاهيم المعقدة متاحة للجميع، بغض النظر عن خلفيتهم. اليوم، نحن نتغوص في مشروع مثير: تطوير وكيل نموذج لغة كبيرة (LLM) يمكنه التكيف مع مختلف المهام.

سنقوم بإنشاء بنية تحتية قوية للاسترداد والتكبير والإنتاج (RAG) لمساعدتنا على اختيار LLM الأكثر ملائمة لكل مهمة. شركات مثل H2O و HuggingFace قد أطلقت بالفعل أنظمة مماثلة، وقد تلقت اهتمامًا من الشركات الناشئة التي ترغب في دمج تكنولوجيا AI في تطبيقاتها.

حالة الاستخدام الخاصة بنا تتطلب القدرة على استدعاء LLM باستخدام مدخل واحد (مقطعة واحدة) أو من خلال سلسلة مع بعضها البعض العديد من الاستدعاءات. هذا يتطلب إنشاء وحدات LLM قابلة للتخصيص وسهلة الاستخدام لسيناريوهات مختلفة.

إبقوا مستيقظين أثناء بداية هذه الرحلة، وتفكيك كل خطوة بطريقة بسيطة ومثيرة للاهتمام.

حالة الاستخدام الحالية

في حالة الاستخدام الحالية لدينا، نحن تعزيز محتوى سير سير سير سير المستخدم من خلال عملية خطوتين:

  1. إدخال: يدخل المستخدم أجزاء مختص المهنية و خبرة من سيرته الذاتية في النظام ويطلب من LLM إنشاء نسخة أكثر وضيقة من النص.
  2. مراجعة: يقوم المستخدم بمراجعة المحتوى الذي تم إنشاؤه من LLM ويقدم طلبات أو توجيهات إضافية لتحسين وتخصيص المخرجات ، وضمان أن تتوافق مع مهاراتهم والتجارب الفريدة.

من خلال اتباع هذا النهج، يمكن للمستخدمين الاستفادة من قوة LLM لإنشاء سير سير سير ذات ملاءمة يبرز من قبل أرباب العمل المحتملين.

الهدف

نحن نهدف إلى بناء وحدة LLM قابلة للتخصيص بالكامل التي تدعم حالة الاستخدام الخاصة بنا وتتلقّم جزئيًا على الأقل عملية إنشاء الاستئناف.

التنفيذ

الخطوة الأولى: اختيار LLM

عند اختيار LLM المناسب لاحتياجاتك، هناك فئتين رئيسيتين يجب مراعاتها: ماجستيرين في مجال القانون المفتوح المصدر والجدارة في مجال القانون الملكية. سنناقش الخيارات الشائعة من كلا المجموعتين، مع التركيز على فوائد اختيار برامج القانون المفتوحة المصدر.

القانون القانوني المفتوح المصدر

الأمثلة: Mistral AI، Phi 3، LLaMa 3.

المزايا:

  • دعم المجتمع: توفر مجتمعات كبيرة نشطة من المطورين والمستخدمين الإرشادات وتشارك الموارد والتعاون في التحسينات.
  • إمكانية تخصيص: يسمح الوصول إلى الرمز المصدر بتعديلات وتعديلات تتناسب مع حالات استخدام محددة.
  • الشفافية: فهم العمل الداخلي للنموذج أمر بالغ الأهمية للتطبيقات التي تحتوي على إرشادات أخلاقية أو خصوصية صارمة.

الـ LLM الملكية

أمثلة: GPT-4.

مزايا: أداء مثير للإعجاب وخصائص فريدة.

القيود:

  • عدم وجود قابلية للتخصيص: يقتصر على استخدام النموذج كما هو عليه.
  • تكلفة: يمكن أن تتراوح الرسوم القائمة على الاستخدام مع مرور الوقت.
  • الطبيعة الغير مرئية: صعوبة في فهم الميكانيكا الأساسية، والتي يمكن أن تكون مخاوف لأولئك الذين يعطون الأولوية للشفافية والوضوح.

في ختام الأمر، في حين أن كلا من برامج القانون المفتوحة المصدر والمتخصّصة لها مزايا وسلبياتها، توفر برامج القانون المفتوحة المصدر مثل Mistral AI، Phi 3، و LLaMa 3 إمكانية الوصول والتكييف والشفافية التي يمكن أن تكون مفيدة للغاية لمجموعة واسعة من المستخدمين.

الخطوة الثانية: النظر في التكاليف والخصائص

إن برامج القانون المفتوحة المصدر عادة ما تكون فعالة من حيث التكلفة حيث يمكن استضافةها على خوادمك الخاصة أو مع مزودي مثل Azure أو AWS مع نموذج الدفع حسب المبلغ. وفيما يلي خلاصة عن تكاليف وتخصيصات استضافة مختلف الـ LLM:

LLMتفاصيلطول السياقالتكلفة
المختلطة 8x7BMoE LLM بواسطة Mistral Aالمدربين: 8192 رمزرموز $0.7/1M (CEA)
المختلطة 8x22Bخليفة Mixtralالمدربين: 32768 رمزالرموز البيانية 2 مليون دولار
LLaMa 3 70Bالنموذج غير MoE من قبل Metمدربين: 2048 رمزارموز $0.02/1K (Azu)
فاي 3 128K"المتعدد الحركات "SLM بواسطتيالمتدربون والجميع: 3رموز $0.002/1K (Az)
GPT-4 توربوالملكية LLM من O16K افتراضي، أعلىغير متوفرة على AWS

الخطوة الثالثة: اختبار باستخدام APIs عامة مطابقة OpenRouter

اختيار واختبار أفضل LLM يتطلب طريقة مبسطة للوصول إلى النماذج المختلفة وتقييمها. OpenRouter، وهو معيار مفتوح المصدر API، يتيح التبديل السلس بين مختلف نماذج وخدمات AI. لقد اخترنا فايرفوكس AI كمزودنا لأن:

  • نموذج التنوع: يقدم مجموعة واسعة من نماذج AI, بما في ذلك الشهيرة LLM مفتوح المصدر مثل Mistral AI, Phi 3 و LLaMa 3.
  • سهولة التكامل: يتبع معيار OpenRouter، مما يسهل التكامل في البنية التحتية القائمة.
  • القياسية: مصممة للتعامل مع حجم كبير من الطلبات وتحديدها بسلاسة.

وهنا عمل نموذجي لإستدعاء استجابات النموذج ونتائج التأخير باستخدام نفس الأجهزة:

import json

def get_sanitized_json_response(user_input, guardrail):
    final = chain.invoke({"text": f"Sanitize {user_input}. Guardrail: {guardrail}"})
    final = chain.invoke({"text": final.content})
    return json.loads(final.content.replace("<json>", "").replace("</json>", "").replace("\n",""))
النموذجالتأخيرملاحظات
المختلطة 8x7B2.1 ثانيةأخف النموذج ، Perf
المختلطة 8x22B5.3 ثانيةالنموذج الخلفي، sim
LLaMa 3 70B2.6 ثانيةاستجابة لائقة ولكن
فاي 3 128K1.5 دقيقةالنموذج المتعدد الحركات

تم استخدام رصيف ومدخل بسيط جداً لاختبار ما سبق:

guardrail = """Format details as bullets and use the XYZ method to format the relevant detail.
            For example:
            - I did X boosting Y percent resulting in Z.
"""

حصلنا على رد فعل جسون التالي بعد استدعائه:

get_sanitized_json_response("""I served as Junior as a Software Engineer at TechCorp in Sydney in January 2011 and worked there until December 2018. During my tenure,
                            I led the team that developed advanced AI-driven financial analytics tools for processing hundreds of millions of records in a
                            distributed environment and created the initial version of the company's proprietary data pipeline. In my role, I was responsible for
                            designing solutions and implementing multiple APIs. In my last year managing a team focused on blockchain solutions.""", guardrail)

{'experience': [{'title': 'Software Engineer',
                'company': 'TechCorp',
                'location': 'Sydney',
                'start_date': '2011-01',
                'end_date': '2018-12',
                'highlights': ['- Engineered scalable database systems of a major project that improved client data processing speed by 40%.',
                              '- Spearheaded a team focused on AI-driven solutions.',
                              '- Developed AI-driven financial analytics tools processing 100M+ records in distributed environments.',
                              '- Created company\'s proprietary data pipeline.',
                              '- Managed team on blockchain solutions in final year.']}]}

في النهاية، نظرًا لأن جودة الاستجابة كانت مقارنة نسبيًا بين جميع هذه النماذج، انخفضت إلى التأخير والتكلفة. تم إجراء التجربة ثلاث مرات وتحقيق نتائج مماثلة جدا. لذلك اخترنا Mistral AIs Mixtral 8x7B بسبب توازن مناسب بين التأخير والتكلفة.

الخطوة الرابعة: بناء طبقة موسيقية

إدارة وتنسيق نماذج لغة متعددة على نطاق واسع أو نموذج واحد عبر تطبيقات مختلفة أمر حاسم لتحقيق أداء وقدرة التكيف الأمثل. بدلاً من بناء من الصفر باستخدام فانيلا PyTorch ، فإن استخدام إطار ترقيم هو أكثر عملية وكفاءة. وهنا ثلاثة خيارات:

Langchain

مزايا: مجموعة واسعة من التكاملات، تدعم Python و JavaScript، دعم مجتمعي واسع.

العيوب: يقدم اعتمادا إضافيا، وعرض التعلم المحتمل.

LlamaIndex

مزايا: مدعومة من قبل Meta، توفر التفاعلية مع Langchain.

عيوب: نحو أقل صداقة للمطورين.

حبة الخشب

مزايا: نحو سهل الاستخدام، مدعوم من قبل شركات تكنولوجيا بارزة.

العيوب: التكاملات المحدودة حيث أنها لا تزال تتقدم.

استخدام إطار التنسيق يسهل التنمية، ويحسن القدرة على التوسع، ويوفر الوصول إلى مجتمع يدعم، مما يجعله خيارًا أكثر مواتية لمشروعنا.

التصميم وتدفق البيانات

الصورة التالية تظهر رسم التصميم:

تدفق البيانات داخل نظامنا القائم على AI هو جانب أساسي لضمان تجربة المستخدم السلسة والفعالة. في حين أن مخطط التصميم يوفر تمثيلاً بصرياً للعملية، يمكن أن يساعد تفسير مفصل على توضيح الخطوات المرتبطة:

  1. إدخال المستخدم: تبدأ الرحلة عندما يدخل المستخدم تفاصيله ، مثل أجزاء about و experience من سيرته الذاتية ، في النظام.
  2. الجيل السريع: يتم بعد ذلك معالجة مدخلات المستخدم وتحويلها إلى واحد أو أكثر من الدعوات، والتي سيتم استخدامها لاستعراض نموذج اللغة الكبيرة (LLM) للحصول على نسخة أكثر شقاعة وإثارة للإعجاب من النص.
  3. LLM الاندماج عبر Langchain: يتم نقل الطلبات التي يتم إنشاؤها إلى Langchain، إطار الموسيقي المختار لدينا، والذي يسهل التفاعل مع عميل LLM. تستفيد Langchain من مخطط Pydantic في شكل فئة لتحليل وتؤكيد البيانات باستخدام kor، لضمان الالتزام بالشكل المطلوب.
  4. JSONResponse Generation: بمجرد تأكيد البيانات ، يتم تحويلها إلى JSONResponse النهائي ، وهو شكل مهيكلي وسهل العمل مع البيانات يسهل المعالجة والتلاعب بالبيانات.
  5. استخراج المحتوى وتصفية: يتم استخراج جزء المحتوى من JSONResponse باستخدام kor وتصفية بواسطة التوابل الحاسوبية ، والتي هي تمثيلات رياضية للنص. ثم يتم تخزين هذه التوابل في قاعدة بيانات متجهة، مثل Qdrant، للحصول على استرداد ومقارنة فعالة خلال الاستفسارات اللاحقة.
  6. تخزين لمودول السياق: يتم تخزين كل JSONResponse حتى يعمل مودول السياق بشكل صحيح. هذا يضمن أن النظام يمكن أن يحافظ على سياق المدخلات المستخدم والخروج LLM خلال استفسارات المتابعة.
  7. استفسارات متابعة: عندما يقدم المستخدم إضافة إضافية أو يطلب المزيد من التحسينات في النص المولود، يتم تعديل JSONResponse المحفوظ في الاحتفاظ بحسب السياق الجديد ويتم ربطه بالطلب المحدث. ثم يمر هذا الإشارة المعدلة من خلال العملية بأكملها مرة أخرى، من دمج LLM إلى استخراج المحتوى والترتيب، لتوفير الاستجابة المخصصة والدقيقة للمستخدم.

من خلال فهم تدفق البيانات داخل نظامنا، يمكننا أن ندرك أهمية كل خطوة ودور إطار الموسيقي في تبسيط العملية، مما يؤدي في نهاية المطاف إلى حل فعال وسهل الاستخدام مدفوع من AI.

بناء سريع وتسلسل باستخدام LCEL

هذه هي مثال على عينة PromptTemplate:

from langchain.core.output_parsers import PydanticOutputParser
prompt = PromptTemplate(
    template="Please extract the following information from the given text and format it as a JSON object according to the schema:\n\n{format_instructions}\n{query}\n",
    input_variables=["query"],
    partial_variables={"format_instructions": output_parser.get_format_instructions()},
)

chain = prompt | chat_model | output_parser

نموذج نموذجي يتكون من اثنين من الحجج الرئيسية (هناك المزيد ولكن هذا خارج نطاق هذا المدونة) التي هي input_variables و template. يقبل الحجة الأولى قائمة من السلاسل التي سيتم حقنها في القالب المطلوب في وقت التشغيل. هذا المتغير يعمل عادة مثل تلك التي في Jinja2Template أو f-strings. chat_model هنا سيكون LLM التي نستخدمها ويتم ربطها إلى الإشارة. عامل | (الأنابيب) مشابه لعامل BASH | يمثل سلسلة. هذه هي المختصرة الملائمة المقدمة من قِبل مواصفات LCEL (لغة التعبير LangChain). هذا سيسمح لنا بتسلسل استجابة طلب واحد إلى مدخل آخر. كما أنه يدعم الاتصال بالوظائف، وبعبارة أخرى، يمكن للمرء أن يسلسل تعبيرات لامبدا أو بعض الوظائف لتنظيف المخرج عادة. هذا يقلل من تعقيد الرمز ببساطة كتابة السلاسل بدلا من الوظائف الكبيرة.

الخطوة 5: استخدام VectorDBs

قواعد البيانات المتجهة (VectorDBs) تخزين وإدارة وتبحث بكفاءة متجهات عالية الأبعاد ، مثل إدخال النص الذي يولده LLM. وهنا مقارنة بين الخيارات الشائعة:

قدران

مزايا: أداء عال، وسهولة التكامل، والمجتمع النشط.

العيوب: لا شيء كبير.

ميلفوس

المزايا: مقاييس المسافة المتعددة، أداة تصور البيانات.

العيوب: منحنى التعلم السلس.

الكروم

مزايا: سهلة الاستخدام Python API, تصميم وحدات.

عيوب: دعم مجتمعي جديد نسبياً، أقل مدى.

PGVector

مزايا: تستفيد من قدرات PostgreSQLs، استفسارات SQL القائمة.

عيوب: أقل أداء للبحث عن متجهات عالية الأبعاد.

FAISS

مزايا: البحث عالي الأداء، دعم GPU.

عيوب: يتطلب دمج مع قواعد البيانات الأخرى.

تُجعل من قابلية Qdrant للتوسع وسهولة التكامل والتطوير النشط خيارًا مناسبًا لحلنا القائم على AI.

الاستفادة من VectorDBs كحل قوي من IR

إن إنشاء حل لاسترداد المعلومات (IR) باستخدام VectorDBs يتضمن:

  1. النص مقدمة المعالجة: تنظيف وتدريب بيانات النص الخام مقدما.
  2. إضافة النص جيل: تحويل النص المعدل مسبقا إلى متجهات عالية الأبعاد باستخدام LLM.
  3. تخزين المشاركات في VectorDB: المشاركات في المؤشر لبحث فعال.
  4. معالجة الأسئلة: معالجة مسبقة وتحويل أسئلة المستخدم إلى إضافة.
  5. البحث عن التشابه: قم ببحث عن التشابه في VectorDB للعثور على التوابل ذات الصلة.
  6. النتائج المرتبة والعرض: ترتيب التوابل التي تم استردادها وتحويلها إلى نص لإظهارها.

من خلال اتباع هذه العملية واستخدام VectorDBs، يمكننا بناء نظام IR فعال وفعال.

هل أنت مستعد للتوظيف بدقة؟

ابدأ مجانًا، وادعُ فريقك بالكامل، وشاهد أول مرشح مُقيَّم خلال 15 دقيقة.

ar