Langroid هو إطار بيثون بديهي وخفيف الوزن وقابل للتمديد والمبدئي لبناء تطبيقات مدعوم من LLM بسهولة ، من باحثين CMU و UW-Madison. قمت بإعداد وكلاء ، وتجهيزهم بمكونات اختيارية (LLM ، ومتجر المتجهات والأدوات/الوظائف) ، وتعيين المهام ، وجعلها تحل مشكلة تعاونية عن طريق تبادل الرسائل. هذا النموذج متعدد الوكلاء مستوحى من إطار الممثل (لكنك لا تحتاج إلى معرفة أي شيء عن هذا!).
Langroid هو تجربة جديدة على تطوير تطبيقات LLM ، حيث ذهب تفكير كبير في تبسيط تجربة المطور ؛ لا يستخدم Langchain ، أو أي إطار آخر LLM.
اقرأ نظرة عامة (WIP) على بنية Langroid
؟ الشركات تستخدم/تكييف langroid في الإنتاج . هنا اقتباس:
يستخدم Nullify وكلاء الذكاء الاصطناعي لتطوير البرمجيات الآمن. يجد ويضع الأولوية ويصلح نقاط الضعف. لقد قمنا بتكييف إطار التزامن متعدد الوكلاء في الإنتاج داخليًا ، بعد تقييم Crewai و Autogen و Langchain و Langflow ، إلخ. تجريد وكيل Langroid وتجريدات المهام بديهية ومدروسة جيدًا وتوفر تجربة مطور رائعة. أردنا أسرع طريقة للحصول على شيء في الإنتاج. مع أطر أخرى ، كان الأمر قد استغرقنا أسابيع ، ولكن مع Langroid ، حصلنا على نتائج جيدة في دقائق. موصى به للغاية!
- جاكي وونغ ، رئيس منظمة العفو الدولية في Nullify.
شاهد هذا المقدمة إلى منشور مدونة Langroid
نشرت للتو في ML للرعاية الصحية (2024): نظام خرقة متعدد الوكلاء يعتمد على Langroid
نرحب بالمساهمات: راجع وثيقة المساهمات لأفكار حول ما يساهم.
هل تقوم ببناء تطبيقات LLM ، أو تريد المساعدة في Langroid لشركتك ، أو ترغب في تحديد أولويات ميزات Langroid لحالات استخدام شركتك؟ Prasad Chalasani متاح للاستشارات (الاستشارية/التنمية): Pchalasani في Gmail Dot Com.
يتم قبول الرعاية أيضًا عبر رعاة Github
أسئلة ، ردود الفعل ، الأفكار؟ انضم إلينا في Discord!
هذا مجرد دعابة. هناك الكثير ، مثل استدعاء الوظائف/الأدوات ، والتعاون متعدد الوكلاء ، واستخراج المعلومات المهيكلة ، و docchatagent (RAG) ، و SQLChatagent ، و LLMs المحلية/غير البديلة ، وما إلى ذلك. راجع Langroid Quick-Start Colab الذي يبني على مثال مستثمر في الوكلاء باستخدام API Openai ChatCompletion. انظر أيضًا هذا الإصدار الذي يستخدم API API API Openai بدلاً من ذلك.
تم إصدارها للتو! مثال يوضح كيف يمكنك استخدام Langroid Multi-Agents وأدوات لاستخراج المعلومات المنظمة من مستند باستخدام LLM محلي فقط (Mistral-7B-instruct-V0.2).
import langroid as lr
import langroid . language_models as lm
# set up LLM
llm_cfg = lm . OpenAIGPTConfig ( # or OpenAIAssistant to use Assistant API
# any model served via an OpenAI-compatible API
chat_model = lm . OpenAIChatModel . GPT4o , # or, e.g., "ollama/mistral"
)
# use LLM directly
mdl = lm . OpenAIGPT ( llm_cfg )
response = mdl . chat ( "What is the capital of Ontario?" , max_tokens = 10 )
# use LLM in an Agent
agent_cfg = lr . ChatAgentConfig ( llm = llm_cfg )
agent = lr . ChatAgent ( agent_cfg )
agent . llm_response ( "What is the capital of China?" )
response = agent . llm_response ( "And India?" ) # maintains conversation state
# wrap Agent in a Task to run interactive loop with user (or other agents)
task = lr . Task ( agent , name = "Bot" , system_message = "You are a helpful assistant" )
task . run ( "Hello" ) # kick off with user saying "Hello"
# 2-Agent chat loop: Teacher Agent asks questions to Student Agent
teacher_agent = lr . ChatAgent ( agent_cfg )
teacher_task = lr . Task (
teacher_agent , name = "Teacher" ,
system_message = """
Ask your student concise numbers questions, and give feedback.
Start with a question.
"""
)
student_agent = lr . ChatAgent ( agent_cfg )
student_task = lr . Task (
student_agent , name = "Student" ,
system_message = "Concisely answer the teacher's questions." ,
single_round = True ,
)
teacher_task . add_sub_task ( student_task )
teacher_task . run ()نوفمبر 2024:
Agent S مع تنسيق إخراج مخطط JSON الصارم على LLMs المتوافقة والوضع الصارم لواجهة برمجة تطبيقات Openai.Qwen2.5-Coder-32b-Instruct ) المستضافة على GLHF.CHATأكتوبر 2024:
سبتمبر 2024:
o1-mini و o1-preview .DocChatAgent 0.14.0 Docchatagent الانصهار المتبادل (RRF) لترتيب القطع التي تم استردادها بطرق مختلفة.run_batch_task خيار جديد - stop_on_first_result - يسمح بإنهاء الدفعة بمجرد إرجاع أي مهمة.أغسطس 2024:
Task.run(), Task.run_async .يوليو 2024:
يونيو 2024:
RewindTool ، تتيح للوكيل "الترجيح وإعادة" رسالة سابقة (ويتم مسح جميع الرسائل التابعة بفضل تتبع النسب). اقرأ الملاحظات هنا.مايو 2024:
doc-chat ، db (للتبعيات المتعلقة بقاعدة البيانات). راجع تعليمات التثبيت المحدثة أدناه وفي المستندات.examples مسماة classmethod ، وسيتم استخدام مثال عشوائي من هذه القائمة لإنشاء مثال 1 طلقة لـ LLM. لقد تم تحسين هذا حتى تتمكن الآن من توفير قائمة بالأمثلة حيث يكون كل مثال إما مثيلًا للأداة ، أو عبارة عن (الوصف ، مثيل الأداة) ، حيث يكون الوصف "فكر" يقود LLM إلى استخدام الأداة (انظر المثال في المستندات). في بعض السيناريوهات ، يمكن أن يحسن دقة توليد أدوات LLM. أيضًا ، الآن بدلاً من مثال عشوائي ، يتم استخدام جميع الأمثلة لإنشاء أمثلة قليلة.TaskConfig . يكتشف فقط الحلقات الدقيقة ، بدلاً من الحلقات التقريبية حيث تقول الكيانات بشكل أساسي (ولكن ليس بالضبط نفس الأشياء) بشكل متكرر.RecipientTool ، مع المقايضة أنه نظرًا لأنها ليست أداة ، فلا توجد وسيلة لفرض/تذكير LLM لتحديد المرسل إليه بشكل صريح (في السيناريوهات التي يكون هذا أمرًا مهمًا).DocChatAgent .gpt-4o هو الآن الافتراضي LLM طوال الوقت ؛ تحديث الاختبارات والأمثلة للعمل مع هذا LLM ؛ استخدام Tokenizer المقابلة لـ LLM.gemini 1.5 pro Support عبر litellmQdrantDB: تحديث لدعم التضمينات المتفرقة المستفادة.أبريل 2024:
chat_model="groq/llama3-8b-8192" . انظر البرنامج التعليمي.Task.run(), Task.run_async(), run_batch_tasks لها max_cost و max_tokens للخروج عندما تتجاوز الرموز أو التكلفة حد. تتضمن النتيجة ChatDocument.metadata الآن حقل status وهو رمز يشير إلى رمز سبب إكمال المهمة. أيضا task.run() etc يمكن استدعاء مع حقل session_id صريح يستخدم كمفتاح للبحث عن إعدادات مختلفة في ذاكرة التخزين المؤقت Redis. يستخدم حاليًا فقط للبحث عن "حالة القتل" - وهذا يسمح بقتل مهمة تشغيل ، إما عن طريق task.kill() أو بواسطة classmethod Task.kill_session(session_id) . على سبيل المثال الاستخدام ، راجع test_task_kill في الاختبارات/main/test_task.pyمارس 2024:
DocChatAgent ، راجع test_doc_chat_agent.py على وجه الخصوص test_doc_chat_batch() ؛ أداة تشغيل مهمة جديدة: run_batch_task_gen حيث يمكن تحديد مولد مهام ، لإنشاء مهمة واحدة لكل إدخال.DocChatAgent ستعمل الآن مع Image-PDFS).DocChatAgentURLLoader : اكتشف وقت الملف من الرأس عندما لا ينتهي عنوان URL بحواك يمكن التعرف عليه مثل .pdf ، .docx ، إلخ.sentence_transformer متوفرة.unstructured ، haystack ، chromadb ، mkdocs ، huggingface-hub ، sentence-transformers .import langroid as lrفبراير 2024:
chat_model="ollama/mistral" . انظر ملاحظات الإصدار.يناير 2024:
SQLChatAgent ). انظر مثال البرنامج النصي باستخدام هذا الوكيل للإجابة على أسئلة حول تبعيات Python PKG..doc (بالإضافة إلى .docx )formatter الاختياري في OpenAIGPTConfig لضمان تنسيق الدردشة الدقيقة لـ LLMs المحلية.DocChatAgentConfig على معلمة جديدة: add_fields_to_content ، لتحديد حقول مستندات إضافية لإدراجها في حقل content الرئيسي ، للمساعدة في تحسين الاسترجاع.ديسمبر 2023:
DocChatAgent : إخراج بيانات Data Pandas والتصفية.LanceDocChatAgent بتعزيز LanceDB Vector-DB للبحث الفعال في المتجهات والبحث والتصفية النص الكامل.LanceRAGTaskCreator لإنشاء نظام 2 وكيل يتكون من LanceFilterAgent الذي يقرر مرشح واستعلام إعادة صياغة لإرساله إلى وكيل خرقة.Task أبسط مع ChatAgent الافتراضي.نوفمبر 2023:
0.1.126: OpenaiasSistant Agent: دعم التخزين المؤقت.
0.1.117: دعم أدوات API Assistant Assistant Assistant: استدعاء الوظائف ، والرمز ، و Retriever (RAG) ، تحميل الملفات. هذه تعمل بسلاسة مع orchestration من Langroid. حتى تصبح المستندات جاهزة ، من الأفضل رؤية أمثلة الاستخدام هذه:
الاختبارات:
مثال على البرامج النصية:
0.1.112: OpenAIAssistant هو فئة فرعية من ChatAgent التي تستفيد من API Assistant Assistant الجديد Openai. يمكن استخدامه كبديل ChatAgent ، ويعتمد على واجهة برمجة التطبيقات المساعد للحفاظ على حالة المحادثة ، ويعزز الخيوط والمساعدين المستمرة لإعادة الاتصال بهم إذا لزم الأمر. أمثلة: test_openai_assistant.py ، test_openai_assistant_async.py
0.1.111: دعم أحدث طراز Openai: GPT4_TURBO (انظر test_llm.py على سبيل المثال الاستخدام)
0.1.110: الترقية من Openai v0.x إلى V1.1.1 (استعدادًا للمساعدين API والمزيد) ؛ ( litellm تعطيل مؤقتًا بسبب صراع إصدار Openai).
أكتوبر 2023:
DocChatAgent Docchatagent: rank_with_diversity ، rank_to_periphery (ضاع في الوسط).DocChatAgentConfig.n_neighbor_chunks > 0 يسمح بعودة قطع السياق حول المباراة.DocChatAgent RelevanceExtractorAgent للحصول على أجزاء ذات صلة من LLM من القطع باستخدام رقم الجملة ، مما يؤدي إلى زيادة كبيرة في السرعة وخفض التكاليف مقارنة مع "النهج" الساذج "الذي يتولى الجملة" (كتابة الجمل الكاملة من الجمل ذات الصلة) التي يستخدمها LangChain في التقييم LLMChainExtractor .import langroid as lr . انظر وثائق الاستخدام.سبتمبر 2023:
docx (أولي).SQLChatAgent الذي يسترجع بكفاءة معلومات المخطط ذات الصلة عند ترجمة اللغة الطبيعية إلى SQL.أغسطس 2023:
GoogleSearchTool لتمكين الوكلاء (LLM) من إجراء عمليات بحث Google عبر استدعاء الوظائف/الأدوات. انظر مثال الدردشة هذا حول مدى سهولة إضافة هذه الأداة إلى وكيل.SQLChatAgent - بفضل أحدث مساهمنا Rithwik Babu!يوليو 2023:
TableChatAgent للدردشة مع مجموعات البيانات الجدولية (DataFrames ، Files ، URLs): LLM تقوم بإنشاء رمز Pandas ، ويتم تنفيذ الكود باستخدام آلية أداة/وظيفة دالة Langroid.DocChatAgent الآن ملفات PDF أو عناوين URL.لنفترض أنك ترغب في استخراج معلومات منظمة حول الشروط الرئيسية لوثيقة الإيجار التجاري. يمكنك بسهولة القيام بذلك باستخدام Langroid باستخدام نظام ثنائي الكواحين ، كما نظهر في REPO Langroid-Amplames. (انظر هذا البرنامج النصي للحصول على إصدار مع نفس الوظيفة باستخدام نموذج MISTRAL-7B المحلي.) يعرض العرض التوضيحي عددًا قليلًا من ميزات Langroid العديدة ، مثل:
LeaseExtractor مسؤول عن المهمة ، وإنشاء LLM (GPT4) يولد أسئلة يجب الإجابة عليها من قبل DocAgent .DocAgent LLM (GPT4) الاسترداد من متجر متجه للإجابة على أسئلة LeaseExtractor ، ويشير إلى المقتطف المحدد الذي يدعم الإجابة.LeaseExtractor LLM المعلومات بتنسيق منظم باستخدام وظيفة دالة.إليكم ما يبدو في العمل (مقطع فيديو MP4 قابل للتوقف هنا).

(للاطلاع على قائمة أكثر حداثة ، انظر قسم التحديثات/الإصدارات أعلاه)
Task.run() بنفس التوقيع على أساليب المستجيب للوكيل ، وهذه هي المفتاح لكيفية تفويض مهمة الوكيل إلى المهام الفرعية الأخرى: من وجهة نظر المهمة ، تكون المهام الفرعية ببساطة مستجيبين إضافيين ، لاستخدامها في أزياء مستديرة بعد المستجيبين للوكيل.Agent Task للمستخدمين تصميم الوكلاء بمهارات محددة ، ولفها في المهام ، ودمج المهام بطريقة مرنة.ToolMessage المكافئة التي تعمل مع أي LLM ، وليس فقط Openai. تتمتع استدعاء الوظائف والأدوات بنفس الواجهة التي تواجه المطور ، والتي يتم تنفيذها باستخدام Pydantic ، مما يجعل من السهل جدًا تحديد الأدوات/الوظائف وتمكين الوكلاء من استخدامها. فوائد استخدام Pydantic هي أنك لا تضطر أبدًا إلى كتابة مواصفات JSON المعقدة للاتصال بالوظائف ، وعندما تتلألأ LLM JSON ، يتم إرسال رسالة خطأ Pydantic إلى LLM حتى تتمكن من إصلاحها.langroid يتطلب Langroid Python 3.11+. نوصي باستخدام بيئة افتراضية. استخدم pip لتثبيت إصدار رفيع من langroid (من PYPI) إلى بيئتك الافتراضية:
pip install langroid تتيح لك حزمة Langroid Core استخدام نماذج Openai للتضمينات عبر API الخاصة بهم. إذا كنت ترغب بدلاً من ذلك في استخدام sentence-transformers التي تدمج النماذج من HuggingFace ، فقم بتثبيت Langroid مثل هذا:
pip install " langroid[hf-embeddings] "بالنسبة للعديد من السيناريوهات العملية ، قد تحتاج إلى تبعيات اختيارية إضافية:
doc-chat Extra: pip install " langroid[doc-chat] "db Extra: pip install " langroid[db] "
` `pip install " langroid[doc-chat,db] "all إضافي (ولكن لاحظ أن هذا سيؤدي إلى أوقات تشغيل/بدء تشغيل أطول وحجم تثبيت أكبر): pip install " langroid[all] " إذا كنت تستخدم SQLChatAgent (على سبيل المثال ، examples/data-qa/sql-chat/sql_chat.py ) ، مع db postgres ، ستحتاج إلى:
sudo apt-get install libpq-dev على Ubuntu ،brew install postgresql على Mac ، إلخ.pip install langroid[postgres] أو poetry add langroid[postgres] أو poetry install -E postgres . إذا كان هذا يمنحك خطأً ، فحاول pip install psycopg2-binary في VirtualEnV. إذا حصلت على أخطاء غريبة تتضمن mysqlclient ، فحاول القيام pip uninstall mysqlclient متبوعًا pip install mysqlclient .
للبدء ، كل ما تحتاجه هو مفتاح Openai API. إذا لم يكن لديك واحدة ، راجع صفحة Openai هذه. (لاحظ أنه على الرغم من أن هذه هي أبسط طريقة للبدء ، فإن Langroid تعمل مع أي LLM عمليا ، وليس فقط من Openai. راجع الأدلة لاستخدام LLMs المفتوح/المحلي ، وغيرها من LLMs غير المبين.)
في جذر الريبو ، انسخ ملف .env-template إلى ملف جديد .env :
cp .env-template .env ثم أدخل مفتاح Openai API الخاص بك. يجب أن يبدو ملف .env الخاص بك هكذا (المؤسسة اختيارية ولكن قد تكون مطلوبة في بعض السيناريوهات).
OPENAI_API_KEY=your-key-here-without-quotes
OPENAI_ORGANIZATION=optionally-your-organization-idبدلاً من ذلك ، يمكنك تعيين هذا كمتغير بيئة في قشرة الخاص بك (ستحتاج إلى القيام بذلك في كل مرة تفتح فيها قذيفة جديدة):
export OPENAI_API_KEY=your-key-here-without-quotesجميع الإعدادات المتغيرة للبيئة التالية اختيارية ، وبعضها مطلوب فقط لاستخدام ميزات محددة (كما هو مذكور أدناه).
.env ، كقيمة لـ MOMENTO_AUTH_TOKEN (انظر مثال ملف أدناه) ،.env SET CACHE_TYPE=momento (بدلاً من CACHE_TYPE=redis وهو الافتراضي).GoogleSearchTool . لاستخدام Google Search كأداة/مكون إضافي/مكونات البرنامج المساعد LLM ، ستحتاج إلى إعداد مفتاح Google API ، ثم قم بإعداد محرك بحث Google Custom (CSE) والحصول على معرف CSE. (يمكن أن تكون الوثائق الخاصة بهذه التحديات ، نقترح أن نطلب من GPT4 للحصول على دليل خطوة بخطوة.) بعد الحصول على بيانات الاعتماد هذه ، تخزينها كقيم GOOGLE_API_KEY و GOOGLE_CSE_ID في ملف .env الخاص بك. ستأتي الوثائق الكاملة حول استخدام هذا (وغيرها من الأدوات "عديمة الجنسية") قريبًا ، ولكن في الوقت نفسه ، ألقِ نظرة خاطفة على مثال الدردشة هذا ، والذي يوضح كيف يمكنك بسهولة تجهيز وكيل مع GoogleSearchtool . إذا قمت بإضافة كل هذه المتغيرات الاختيارية ، فيجب أن يبدو ملف .env الخاص بك هكذا:
OPENAI_API_KEY=your-key-here-without-quotes
GITHUB_ACCESS_TOKEN=your-personal-access-token-no-quotes
CACHE_TYPE=redis # or momento
REDIS_PASSWORD=your-redis-password-no-quotes
REDIS_HOST=your-redis-hostname-no-quotes
REDIS_PORT=your-redis-port-no-quotes
MOMENTO_AUTH_TOKEN=your-momento-token-no-quotes # instead of REDIS* variables
QDRANT_API_KEY=your-key
QDRANT_API_URL=https://your.url.here:6333 # note port number must be included
GOOGLE_API_KEY=your-key
GOOGLE_CSE_ID=your-cse-id عند استخدام Azure Openai ، هناك حاجة إلى متغيرات بيئة إضافية في ملف .env . توفر هذه الصفحة Microsoft Azure Openai مزيدًا من المعلومات ، ويمكنك تعيين كل متغير بيئة على النحو التالي:
AZURE_OPENAI_API_KEY ، من قيمة API_KEYAZURE_OPENAI_API_BASE من قيمة ENDPOINT ، يبدو عادةً https://your.domain.azure.com .AZURE_OPENAI_API_VERSION ، يمكنك استخدام القيمة الافتراضية في .env-template ، ويمكن العثور على أحدث إصدار هناAZURE_OPENAI_DEPLOYMENT_NAME هو اسم النموذج المنشور ، والذي يتم تعريفه من قبل المستخدم أثناء إعداد النموذجAZURE_OPENAI_MODEL_NAME Azure Openai يتيح أسماء طرازات محددة عند تحديد النموذج لنشرك. تحتاج إلى وضع اسم الطراز الدقيق الذي تم تحديده. على سبيل المثال ، GPT-4 (يجب أن يكون gpt-4-32k أو gpt-4 ).AZURE_OPENAI_MODEL_VERSION مطلوب إذا كان AZURE_OPENAI_MODEL_NAME = gpt=4 ، والذي سيساعد Langroid على تحديد تكلفة النموذج نحن نقدم نسخة حاوية من مستودع langroid-examples عبر صورة Docker هذه. كل ما عليك فعله هو إعداد متغيرات البيئة في ملف .env . يرجى اتباع هذه الخطوات لإعداد الحاوية:
# get the .env file template from `langroid` repo
wget -O .env https://raw.githubusercontent.com/langroid/langroid/main/.env-template
# Edit the .env file with your favorite editor (here nano), and remove any un-used settings. E.g. there are "dummy" values like "your-redis-port" etc -- if you are not using them, you MUST remove them.
nano .env
# launch the container
docker run -it --rm -v ./.env:/langroid/.env langroid/langroid
# Use this command to run any of the scripts in the `examples` directory
python examples/ < Path/To/Example.py > هذه مضايقات سريعة لإعطاء لمحة عما يمكنك القيام به مع Langroid وكيف سيبدو الكود الخاص بك.
langroid-examples .
تم اختبار مختلف مطالبات LLM والتعليمات في Langroid للعمل بشكل جيد مع GPT-4 (وإلى حد ما GPT-4O). من السهل التحول إلى LLMS (المحلية/المفتوحة والملكية) أمرًا سهلاً (انظر الأدلة المذكورة أعلاه) ، وقد يكون كافياً لبعض التطبيقات ، ولكن بشكل عام قد ترى نتائج أدنى ما لم تقم بضبط المطالبات و/أو الإعداد متعدد الوكلاء.
انظر أيضًا Getting Started Guide في برنامج تعليمي مفصل.
انقر لتوسيع أي من أمثلة التعليمات البرمجية أدناه. كل هذه يمكن تشغيلها في دفتر كولاب:
import langroid . language_models as lm
mdl = lm . OpenAIGPT ()
messages = [
lm . LLMMessage ( content = "You are a helpful assistant" , role = lm . Role . SYSTEM ),
lm . LLMMessage ( content = "What is the capital of Ontario?" , role = lm . Role . USER ),
]
response = mdl . chat ( messages , max_tokens = 200 )
print ( response . message ) cfg = lm . OpenAIGPTConfig (
chat_model = "local/localhost:8000" ,
chat_context_length = 4096
)
mdl = lm . OpenAIGPT ( cfg )
# now interact with it as above, or create an Agent + Task as shown below. إذا تم دعم النموذج بواسطة liteLLM ، فلن تكون هناك حاجة إلى تشغيل خادم الوكيل. ما عليك سوى تعيين param chat_model أعلاه إلى litellm/[provider]/[model] ، مثل litellm/anthropic/claude-instant-1 واستخدم كائن التكوين على النحو الوارد أعلاه. لاحظ أنه لاستخدام litellm ، تحتاج إلى تثبيت langroid مع litellm Extra: poetry install -E litellm أو pip install langroid[litellm] . بالنسبة للنماذج البعيدة ، ستحتاج عادةً إلى تعيين مفاتيح API وما إلى ذلك كمتغيرات بيئة. يمكنك تعيين تلك بناء على مستندات litellm. إذا كانت أي متغيرات بيئة مطلوبة مفقودة ، فإن Langroid يعطي رسالة خطأ مفيدة تشير إلى أي منها مطلوب. لاحظ أنه لاستخدام langroid مع litellm ، تحتاج إلى تثبيت litellm extra ، أي إما pip install langroid[litellm] في env الظاهري الخاص بك ، أو إذا كنت تتطور داخل repo langroid ، poetry install -E litellm .
pip install langroid[litellm] import langroid as lr
agent = lr . ChatAgent ()
# get response from agent's LLM, and put this in an interactive loop...
# answer = agent.llm_response("What is the capital of Ontario?")
# ... OR instead, set up a task (which has a built-in loop) and run it
task = lr . Task ( agent , name = "Bot" )
task . run () # ... a loop seeking response from LLM or User at each turn لعبة أرقام الألعاب ، حيث عند إعطاء الرقم n :
repeater_task 's LLM ببساطة إرجاع n ،even_task n/2 إذا كان n حتى ، يقول "لا تعرف"odd_task 's LLM 3*n+1 إذا كان n غريبًا ، فالمثل يقول "لا تعرف" يقوم كل من هذه Task تلقائيًا بتكوين ChatAgent افتراضي.
import langroid as lr
from langroid . utils . constants import NO_ANSWER
repeater_task = lr . Task (
name = "Repeater" ,
system_message = """
Your job is to repeat whatever number you receive.
""" ,
llm_delegate = True , # LLM takes charge of task
single_round = False ,
)
even_task = lr . Task (
name = "EvenHandler" ,
system_message = f"""
You will be given a number.
If it is even, divide by 2 and say the result, nothing else.
If it is odd, say { NO_ANSWER }
""" ,
single_round = True , # task done after 1 step() with valid response
)
odd_task = lr . Task (
name = "OddHandler" ,
system_message = f"""
You will be given a number n.
If it is odd, return (n*3+1), say nothing else.
If it is even, say { NO_ANSWER }
""" ,
single_round = True , # task done after 1 step() with valid response
) ثم أضف even_task و odd_task كمهام فرعية لـ repeater_task ، وقم بتشغيل repeater_task ، وطرحها برقم كمدخلات:
repeater_task . add_sub_task ([ even_task , odd_task ])
repeater_task . run ( "3" )تقوم Langroid بتعزيز Pydantic لدعم واجهة برمجة تطبيقات Openai الوظيفية بالإضافة إلى أدواتها الأصلية. الفوائد هي أنه لا يتعين عليك كتابة أي JSON لتحديد المخطط ، وأيضًا إذا كان LLM هلوسًا بناء جملة للأدوات المشوهة ، يرسل Langroid خطأ التحقق من صحة Pydantic (تم تطهيره بشكل مناسب) إلى LLM حتى يتمكن من إصلاحه!
مثال بسيط: قل أن الوكيل لديه قائمة سرية للأرقام ، ونريد أن تجد LLM أصغر رقم في القائمة. نريد أن نعطي LLM أداة/دالة probe التي تأخذ رقمًا واحدًا n كوسيطة. تقوم طريقة معالج الأدوات في الوكيل بإرجاع عدد الأرقام الموجودة في قائمته على n .
حدد الأداة أولاً باستخدام فئة أدوات Langroid's ToolMessage :
import langroid as lr
class ProbeTool ( lr . agent . ToolMessage ):
request : str = "probe" # specifies which agent method handles this tool
purpose : str = """
To find how many numbers in my list are less than or equal to
the <number> you specify.
""" # description used to instruct the LLM on when/how to use the tool
number : int # required argument to the tool ثم حدد SpyGameAgent على أنه فئة فرعية من ChatAgent ، مع probe طريقة تعالج هذه الأداة:
class SpyGameAgent ( lr . ChatAgent ):
def __init__ ( self , config : lr . ChatAgentConfig ):
super (). __init__ ( config )
self . numbers = [ 3 , 4 , 8 , 11 , 15 , 25 , 40 , 80 , 90 ]
def probe ( self , msg : ProbeTool ) -> str :
# return how many numbers in self.numbers are less or equal to msg.number
return str ( len ([ n for n in self . numbers if n <= msg . number ]))بعد ذلك ، نستند إلى الوكيل وتمكينه من استخدام الأداة والرد عليها:
spy_game_agent = SpyGameAgent (
lr . ChatAgentConfig (
name = "Spy" ,
vecdb = None ,
use_tools = False , # don't use Langroid native tool
use_functions_api = True , # use OpenAI function-call API
)
)
spy_game_agent . enable_message ( ProbeTool ) للحصول على مثال عمل كامل ، راجع نص الدردشة على tool.py في repo langroid-examples .
لنفترض أنك تريد أن يستخرج وكيل الشروط الرئيسية لعقد الإيجار ، من وثيقة الإيجار ، كهيكل JSON المتداخل. أولاً ، حدد الهيكل المطلوب عبر نماذج Pydantic:
from pydantic import BaseModel
class LeasePeriod ( BaseModel ):
start_date : str
end_date : str
class LeaseFinancials ( BaseModel ):
monthly_rent : str
deposit : str
class Lease ( BaseModel ):
period : LeasePeriod
financials : LeaseFinancials
address : str ثم حدد أداة LeaseMessage كفئة فرعية من Langroid's ToolMessage . لاحظ أن الأداة لها terms الوسيطة المطلوبة من Lease النوع:
import langroid as lr
class LeaseMessage ( lr . agent . ToolMessage ):
request : str = "lease_info"
purpose : str = """
Collect information about a Commercial Lease.
"""
terms : Lease ثم حدد LeaseExtractorAgent مع طريقة lease_info التي تتولى هذه الأداة ، وتثبيت الوكيل ، وتمكينها من استخدام هذه الأداة والاستجابة لها:
class LeaseExtractorAgent ( lr . ChatAgent ):
def lease_info ( self , message : LeaseMessage ) -> str :
print (
f"""
DONE! Successfully extracted Lease Info:
{ message . terms }
"""
)
return json . dumps ( message . terms . dict ())
lease_extractor_agent = LeaseExtractorAgent ()
lease_extractor_agent . enable_message ( LeaseMessage ) راجع البرنامج النصي chat_multi_extract.py في repo langroid-examples للحصول على مثال عمل كامل.
يوفر Langroid فئة وكيل متخصصة DocChatAgent لهذا الغرض. إنه يشتمل على شد المستندات ، والتضمين ، والتخزين في ناقل DB ، وجيل استعلام الاستعلام الذي تم التغلب عليه الاسترجاع. من السهل استخدام هذا الفصل للدردشة مع مجموعة من المستندات. قم أولاً بإنشاء مثيل DocChatAgentConfig ، مع حقل doc_paths يحدد المستندات للدردشة معها.
import langroid as lr
from langroid . agent . special import DocChatAgentConfig , DocChatAgent
config = DocChatAgentConfig (
doc_paths = [
"https://en.wikipedia.org/wiki/Language_model" ,
"https://en.wikipedia.org/wiki/N-gram_language_model" ,
"/path/to/my/notes-on-language-models.txt" ,
],
vecdb = lr . vector_store . QdrantDBConfig (),
) ثم قم بتأسيس DocChatAgent (هذا يتلخص المستندات في متجر المتجهات):
agent = DocChatAgent ( config )ثم يمكننا إما طرح الأسئلة لمرة واحدة للوكيل ،
agent . llm_response ( "What is a language model?" ) أو لفها في Task وقم بتشغيل حلقة تفاعلية مع المستخدم:
task = lr . Task ( agent )
task . run () شاهد البرامج النصية الكاملة العاملة في مجلد docqa من repo langroid-examples .
باستخدام Langroid ، يمكنك إعداد جهاز TableChatAgent باستخدام مجموعة بيانات (مسار الملف ، عنوان URL أو DataFrame) ، والاستعلام عنه. تقوم شركة LLM الخاصة بالوكيل بإنشاء رمز Pandas للرد على الاستعلام ، عبر استدعاء الوظائف (أو الأداة/المكون الإضافي) ، وتنفيذ طريقة معالجة وظائف الوكيل الرمز وإرجاع الإجابة.
إليكم كيف يمكنك القيام بذلك:
import langroid as lr
from langroid . agent . special import TableChatAgent , TableChatAgentConfig قم بإعداد TableChatAgent لملف البيانات أو عنوان URL أو DataFrame (تأكد من أن جدول البيانات يحتوي على صف رأس ؛ تم تحديد محدد/فاصل تلقائيًا):
dataset = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"
# or dataset = "/path/to/my/data.csv"
# or dataset = pd.read_csv("/path/to/my/data.csv")
agent = TableChatAgent (
config = TableChatAgentConfig (
data = dataset ,
)
)قم بإعداد مهمة ، وطرح أسئلة لمرة واحدة مثل هذا:
task = lr . Task (
agent ,
name = "DataAssistant" ,
default_human_response = "" , # to avoid waiting for user input
)
result = task . run (
"What is the average alcohol content of wines with a quality rating above 7?" ,
turns = 2 # return after user question, LLM fun-call/tool response, Agent code-exec result
)
print ( result . content )أو بدلاً من ذلك ، قم بإعداد مهمة وقم بتشغيلها في حلقة تفاعلية مع المستخدم:
task = lr . Task ( agent , name = "DataAssistant" )
task . run () للاطلاع على مثال عمل كامل ، انظر البرنامج النصي table_chat.py في repo langroid-examples .
إذا كنت تحب هذا المشروع ، فالرجاء إعطائه نجمًا و؟ انشر الكلمة في شبكتك أو وسائل التواصل الاجتماعي:
سيساعد دعمك على بناء زخم ومجتمع Langroid.