بناء وكيل AI متعدد الوسائل

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

· Dev Rishi Khare

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

** مؤلف: ** راشيل مارتينز ** دور: ** مطور ** علامة: ** عملاء 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 (قوة)
المختلطة 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 كمزودنا لأن:

وهنامثل وظيفة لمطالبة استجابات النموذج ونتائج التأخير باستخدام نفس الأجهزة:

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.1sخفيفة النموذج، perf
المختلطة 8x22B5.3sالنموذج اللاحق، sim
LLaMa 3 70B2.6sرد فعل لائق ولكن
فاي 3 128K1.5 minالنموذج المتعدد الحركات

تم استخدام حائط وقاعدة بسيطة جداً لاختبار ما سبق:

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,

                            أنا قاد الفريق الذي وضع أدوات التحليل المالي المتقدمة القائمة على AI لمعالجة مئات الملايين من السجلات في
                            وخلق النسخة الأولى من خط البيانات الملكية للشركة. في دوري، كنت مسؤولاً عن
                            تصميم الحلول وتنفيذ العديد من APIs. في السنة الماضية إدارة فريق تركز على حلول بلوكتشين.

{"خبرة": {"عنوان": "مهندس البرمجيات"
                "شركة": "TechCorp"
                "الموقع": "سيدني"،
                "start_date": "2011-01"
                "تاريخ النهاية": "2018-12"
                "المؤشر": ['- تصميم أنظمة قاعدة البيانات القابلة للتطوير لمشروع كبير تحسن سرعة معالجة بيانات العملاء بنسبة 40٪".
                              " - قاد فريق يركز على حلول قادمة على AI ".
                              "- أدوات تحليل مالية طورت على أساس AI التي تعالج سجلات 100 مليون+ في بيئات مُوزعة".
                              " - خط البيانات الملكية للشركة التي تم إنشاؤها".
                              " - فريق إدارة حلول بلوكتشين في السنة الأخيرة".

In conclusion, since the response quality was fairly comparable among all these models, it came down to latency and cost. The experiment was run 3 times achieving very similar results. So we chose Mistral AI’s Mixtral 8x7B due to its favorable balance of latency and cost.

Step 4: Building an Orchestration Layer

Managing and coordinating multiple large-scale language models or a single model across various applications is crucial for optimal performance and adaptability. Instead of building from scratch using vanilla PyTorch, employing an orchestration framework is more practical and efficient. Here are three options:

Langchain

Advantages: Vast array of integrations, supports Python and JavaScript, extensive community support.

Drawbacks: Introduces an additional dependency, potential learning curve.

LlamaIndex

Advantages: Backed by Meta, offers interoperability with Langchain.

Drawbacks: Less developer-friendly syntax.

Haystack

Advantages: User-friendly syntax, supported by prominent tech corporations.

Drawbacks: Limited integrations as it’s still maturing.

Using an orchestration framework simplifies development, improves scalability, and provides access to a supportive community, making it a more favorable choice for our project.

Design and Data Flow

The following image shows the design diagram:

The data flow within our AI-driven system is an essential aspect of ensuring a seamless and efficient user experience. While the design diagram provides a visual representation of the process, a detailed explanation can help clarify the steps involved:

  1. User Input: The journey begins when the user enters their details, such as the “about” and “experience” sections of their resume, into the system.
  2. Prompt Generation: The user’s input is then processed and transformed into one or more prompts, which will be used to query the Large Language Model (LLM) for a more polished and impressive version of the text.
  3. LLM Integration via Langchain: The generated prompts are passed to Langchain, our chosen orchestrator framework, which facilitates the interaction with the LLM client. Langchain leverages a Pydantic schema in the form of a class to parse and validate the data using kor, ensuring that it adheres to the required format.
  4. JSONResponse Generation: Once the data is validated, it is converted into a final JSONResponse, a structured and easy-to-work-with data format that simplifies further processing and manipulation.
  5. Content Extraction and Indexing: The content part of the JSONResponse is extracted using kor and indexed by computing embeddings, which are mathematical representations of the text. These embeddings are then stored in a vector database, such as Qdrant, for efficient retrieval and comparison during subsequent queries.
  6. Caching for Context Module: The entire JSONResponse is cached for the context module to function correctly. This ensures that the system can maintain the context of the user’s input and the LLM’s output during follow-up queries.
  7. Follow-up Queries: When the user provides additional input or requests further refinement of the generated text, the cached JSONResponse is modified according to the new context and chained to the updated prompt. This modified prompt then goes through the entire process again, from LLM integration to content extraction and indexing, to provide the user with a tailored and accurate response.

By understanding the data flow within our system, we can appreciate the importance of each step and the role of the orchestrator framework in streamlining the process, ultimately resulting in an efficient and user-friendly AI-driven solution.

بناء سريع وتسلسل باستخدام 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.

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

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

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

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

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

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

Ready to hire with precision?

Start free, invite your whole team, and see your first scored candidate in 15 minutes.

ar