هذا المنشور جزء من بانوراما الأصلية للذكاء الاصطناعي لـ Aurabase. لا يقدم أي من الإطارين موصلاً خاصًا لقاعدة بيانات: يتم الاتصال بـ Postgres، في كلتا الحالتين، من خلال برنامج تشغيل SQL عام (SQLAlchemy على جانب Python) وسلسلة اتصال قياسية. ينطبق هذا على Aurabase كما ينطبق على أي Postgres مُدار.
- LangChain: الإطار العام لتنسيق LLM (السلاسل، الأدوات، الذاكرة). يتم إنشاء الوكلاء اليوم عبر
LangGraph، ويتم التعامل مع SQL كمجموعة أدوات واحدة من بين مجموعة أدوات أخرى. - LlamaIndex: إطار بيانات تم إنشاؤه لـ RAG والاستعلام عن المصادر المنظمة. محرك SQL الأصلي (
NLSQLTableQueryEngine)، الوكلاء عبر محركWorkflowsالخاص به. - CrewAI وAutoGen ليسا بديلين لـ LangChain/LlamaIndex: فهما عبارة عن طبقات تنسيق متعددة الوكلاء، موضوعة فوق واحدة من الاثنين (أو وظيفة Python داخلية).
- لا يقدم LangChain ولا LlamaIndex موصل Postgres خاصًا: كلاهما يستخدم SQLAlchemy، وهو متوافق مع أي Postgres مُدار، بما في ذلك Aurabase.
- لا يوجد تكامل معبأ في Aurabase لهذه الأطر حتى الآن. يتم الاتصال عبر سلسلة اتصال Postgres القياسية التي يكشفها كل مشروع.
إطاران ولدا لاحتياجات مختلفة
ظهر كل من LangChain وLlamaIndex خلال نفس الفترة، في أعقاب إصدار ChatGPT في نهاية عام 2022. وتختلف نقطة بدايتهما بشكل ملحوظ. تقوم LangChain بتصميم تطبيق LLM كسلسلة من الخطوات القابلة للتركيب: موجه، استدعاء نموذج، أداة، ذاكرة، وكلها مجمعة عبر LCEL أو رسم بياني LangGraph.
نماذج LlamaIndex الأولى للبيانات: المستندات، والعقد، والفهارس، ومحرك الاستعلام. VectorStoreIndex أو SQLDatabase هم مواطنون من الدرجة الأولى، وليسوا أدوات مضافة إلى وكيل عام. كلاهما مفتوح المصدر (ترخيص MIT)، ومتوفر في Python وTypeScript، ويغطي اليوم نطاقًا متداخلًا إلى حد كبير: الوكلاء، RAG، استدعاء الأدوات، اتصال SQL.
هذا التقارب يجعل المقارنة أكثر فائدة في البنية مقارنة بقائمة الميزات: يمكن لكل منهما أن يفعل نفس الشيء تقريبًا. ما يتغير هو كيف.
كيف يقوم الجميع بالتوصيل إلى Postgres، دون التكامل المعبأ
على جانب LangChain، تحتوي الوحدة langchain_community.utilities.SQLDatabase على محرك SQLAlchemy. يقوم وكيل create_sql_agent بعد ذلك بعرضه كمجموعة من الأدوات: سرد الجداول، ووصف المخطط، وتنفيذ استعلام، والتحقق من الاستعلام قبل التنفيذ.
على جانب LlamaIndex، التجريد المكافئ هو llama_index.core.SQLDatabase، المبني أيضًا على محرك SQLAlchemy. يقوم محرك الاستعلام NLSQLTableQueryEngine بترجمة سؤال اللغة الطبيعية إلى استعلام SQL، وتنفيذه، ثم إعادة صياغة النتيجة كاستجابة.
ولا يعتمد أي من المستخلصين على Aurabase. يعد برنامج تشغيل SQLAlchemy وسلسلة اتصال Postgres القياسية كافيين، تمامًا كما هو الحال مع Supabase أو RDS أو مثيل مستضاف ذاتيًا.
LangGraph مقابل سير العمل: طريقتان لتنسيق الوكيل
اقترحت LangChain أولاً حلقة وكيل كلاسيكية (AgentExecutor، نمط ReAct). منذ ذلك الحين، قام المشروع بتجميع وكلائه نحو LangGraph: يتم تمثيل الوكيل هناك كرسم بياني واضح للعقد والحواف، مع نقاط التفتيش والتدخل البشري المحتمل بين المرحلتين.
يستجيب LlamaIndex بـ Workflows: تنسيق يحركه الحدث، حيث تصدر كل خطوة الأحداث المكتوبة وتستهلكها. يتم توصيل محرك الاستعلام SQL أو المتجه مباشرة كخطوة، بدون طبقة تكيف إضافية، نظرًا لأن هذه المحركات هي بالفعل عناصر أولية أصلية لإطار العمل.
بالنسبة للوكيل الذي يستعلم عن Postgres، فإن الاختلاف العملي هو كما يلي: يوفر LangGraph تحكمًا دقيقًا في الفروع ويعيد المحاولة حول استدعاء SQL. يتطلب LlamaIndex كود ربط أقل عندما يتعلق السؤال أولاً بالبيانات المفهرسة بالفعل بواسطة إطار العمل.
التعمق أكثر: البرنامج التعليمي لاستدعاء الوظيفة لوكيل Postgres
حيث يبقى LlamaIndex خطوة تاريخية إلى الأمام
تم تصميم LlamaIndex منذ البداية لربط LLM بمصادر البيانات، مع كتالوج الموصلات (LlamaHub) والفهارس المتخصصة اعتمادًا على نوع المحتوى. تظل RAG حالة الاستخدام الأكثر مباشرة لإطار العمل، وليست ميزة تمت إضافتها بعد حدوثها.
تغطي LangChain نفس الحاجة عبر retrievers وسلاسل الجلب، مع تكامل ناضج بنفس القدر في نظام LangGraph البيئي. لا يتعلق الاختلاف بالقدرة بقدر ما يتعلق بالمكان الذي يعيش فيه منطق الأعمال: مدمج في المؤشر على جانب LlamaIndex، ويتم تجميعه بشكل واضح في سلسلة على جانب LangChain.
كلاهما يعرف كيفية استخدام pgvector كقاعدة متجهة: llama-index-vector-stores-postgres على جانب LlamaIndex، وفئة PGVector من الحزمة langchain-postgres على جانب LangChain. في مشروع Aurabase، يكون pgvector 0.8.6 موجودًا بالفعل في صورة مستأجر Postgres: تتصل كلا الحزمتين به بنفس سلسلة الاتصال، بدون خطوة تنشيط منفصلة.
CrewAI وAutoGen: عندما لا يكون هناك وكيل واحد كافيًا
يقوم CrewAI بتنسيق العديد من الوكلاء لكل دور: يتلقى كل وكيل هدفًا وسياقًا (backstory) وأدوات، مجمعة في Crew مع تنفيذ Task بالتسلسل أو وفقًا للتسلسل الهرمي. إنه إطار عمل تنسيقي كامل، وليس امتدادًا لـ LangChain.
AutoGen، وهو مشروع بحثي لشركة Microsoft، يتبع أسلوبًا مختلفًا: وكلاء يتحدثون مع بعضهم البعض (AssistantAgent, UserProxyAgent, GroupChat)، مع القدرة على تنفيذ التعليمات البرمجية في بيئة معزولة. يبدو التنسيق وكأنه محادثة، وليس رسمًا بيانيًا واضحًا للحالة مثل LangGraph.
ولا يحل أي منهما محل طبقة اتصال البيانات. وكيل CrewAI أو AutoGen الذي يحتاج إلى قراءة مكالمات Postgres، في الممارسة العملية، أداة SQL تم إنشاؤها باستخدام LangChain أو LlamaIndex، أو وظيفة Python بسيطة حول psycopg2. يجيب CrewAI وAutoGen على "من يفعل ماذا وبأي ترتيب"، وليس "كيفية قراءة قاعدة البيانات".
ما لا يفعله أصلاً في قاعدة بيانات Postgres
create_sql_agent وNLSQLTableQueryEngine ينفذان الاستعلام الذي أنشأه النموذج مقابل الاتصال المقدم. لا يحد أي منهما عدد الصفوف التي يتم إرجاعها افتراضيًا، ولا يمنع طلب الكتابة: حاجز الحماية الفعلي هو دور Postgres المستخدم في سلسلة الاتصال، وليس خيار إطار العمل.
يعد هذا اختلافًا هيكليًا عن NL2SQL الأصلي لـ Aurabase، والذي يترجم السؤال إلى SQL على جانب الخادم، ويتحقق من صحة الاستعلام الذي تم إنشاؤه (تحليل SQL، ورفض حقول الخادم المخادعة) ويحدد LIMIT قبل التنفيذ. إنها ليست نفس الطوب: تستجيب نقطة نهاية NL2SQL بدورة واحدة، مع تثبيت حواجز الحماية بواسطة النظام الأساسي؛ يقوم وكيل LangChain أو LlamaIndex بإجراء الأسباب على عدة مراحل، مع ضمانات لتجميع نفسك.
من الناحية العملية، يكمل النهجان بعضهما البعض بدلاً من استبعاد بعضهما البعض: نقطة نهاية NL2SQL محدودة لسؤال بسيط يتعرض له المستخدم النهائي، وكيل للاستدلال متعدد الخطوات الذي يجمع بين عدة أدوات خارج SQL.
راجع أيضًا: البرنامج التعليمي NL2SQL على Postgres باستخدام Aurabase
LangChain، LlamaIndex، CrewAI، AutoGen في جدول واحد
| الهدف الرئيسي | تنسيق LLM العام | إطار البيانات / RAG | تنسيق متعدد الوكلاء حسب الأدوار | تنسيق المحادثة متعدد الوكلاء |
|---|---|---|---|---|
| الوكيل البدائي | LangGraph (الرسم البياني للحالة) | سير العمل (خطوات الحدث) | الطاقم / المهمة / العملية | مساعد الوكيل/الدردشة الجماعية |
| اتصال SQL الأصلي | SQLDatabase + create_sql_agent | SQLDatabase + NLSQLTableQueryEngine | لا شيء (أداة خارجية) | لا شيء (أداة خارجية) |
| دعم pgvector | لانجشين بوستجرس (PGVector) | اللاما-مؤشر-ناقلات-مخازن-postgres | لا مواطن | لا مواطن |
| وكيل متعدد أصلي | لا (LangGraph متعدد العقد) | لا (تدفق وكيل واحد) | نعم | نعم |
| الترخيص | معهد ماساتشوستس للتكنولوجيا | معهد ماساتشوستس للتكنولوجيا | معهد ماساتشوستس للتكنولوجيا | معهد ماساتشوستس للتكنولوجيا (مشروع أبحاث مايكروسوفت) |
| لانجشين | لاميندكس | كريواي | أوتوجين |
قم بتوصيل LangChain أو LlamaIndex بواجهة Postgres الخلفية القياسية
تكفي ثلاث خطوات، بغض النظر عن إطار العمل المختار، ولا تعتمد على أي موصل خاص بالمنصة.
الخطوة الثالثة أكثر أهمية من اختيار الإطار. يظل دور Postgres المقتصر على الحقوق الضرورية حقًا هو الضمان الوحيد الموثوق به ضد الطلب المُنشأ الذي يتجاوز نطاقه، بغض النظر عن الوكيل الذي ينفذه. راجع وثائق AI للتعرف على تكوين موفري LLM الأصليين لـ Aurabase (OpenAI وAnthropic وGemini) القابلين للاستخدام من جانب الوكيل.
أي واحد تختار وفقا لمشروعك
لا يتفوق أي من الإطارين تمامًا على الوكيل المتصل بـ Postgres. يعد سياق البدء للمشروع أكثر حسمًا من قائمة الوظائف.
- LangChain: إذا كان يجب على الوكيل الجمع بين عدة أدوات غير متجانسة (SQL وواجهات برمجة التطبيقات الخارجية وبحث الويب) مع التحكم الدقيق في التدفق عبر LangGraph، وإذا كان الفريق يقدر النظام البيئي التكاملي الأوسع في السوق.
- LlamaIndex: إذا كان قلب المشروع هو RAG أو الاستعلام عن البيانات المفهرسة بالفعل، مع وجود حاجة قوية لموصلات المصدر ونموذج فهرس/استعلام يتناسب مباشرة مع حالة الاستخدام.
- CrewAI أو AutoGen بالإضافة إلى: بمجرد أن لا يعد وكيل واحد كافيًا ويجب توزيع العمل بين عدة أدوار متخصصة، فوق واحد أو آخر من إطاري البيانات.
يمكن أن يتواجد الاثنان أيضًا في نفس المشروع: يعد محرك استعلام LlamaIndex الذي يتم عرضه كأداة في وكيل LangGraph نمطًا شائعًا. إن الحفاظ على إطارين ينطوي على تكلفة تعقيد حقيقية، ويجب مقارنتها بالمكاسب قبل اعتمادها افتراضيًا.