في هذه المقالة، سوف نتعلم كيفية إنشاء وكيل مخصص يستخدم مادة مفتوحة المصدر (llama3.1) يتم تشغيلها محليًا على جهاز الكمبيوتر الخاص بنا. سوف نستخدم أيضًا Ollama وLangChain.
اتبع التعليمات بناءً على نوع نظام التشغيل لديك في ملف README الخاص بـ GitHub لتثبيت Ollama:
https://github.com/ollama/ollama
أنا أستخدم جهاز كمبيوتر يعمل بنظام Linux، لذا سأقوم بتشغيل الأمر التالي في الجهاز الطرفي الخاص بي:
curl -fsSL https://ollama.com/install.sh | sh
إحضار نموذج LLM المتوفر عبر الأمر التالي:
ollama pull llama3.1
سيؤدي هذا إلى تنزيل الإصدار الافتراضي المميز للنموذج. عادةً ما يشير الإعداد الافتراضي إلى أحدث وأصغر نموذج لمعلمة الحجم. في هذه الحالة سيكون نموذج llama3.1:8b.
لتنزيل نسخة أخرى من النموذج يمكنك الذهاب إلى: https://ollama.com/library/llama3.1 واختيار الإصدار المراد تثبيته، ثم تشغيل أمر سحب ollama مع النموذج ورقم الإصدار الخاص به . مثال: ollama سحب llama3.1:70b
على نظام Mac، سيتم تنزيل النماذج إلى ~/.olma/models
على Linux (أو WSL)، سيتم تخزين النماذج على /usr/share/ollama/.ollama/models
قم بتشغيل الأمر التالي لبدء تشغيل ollama دون تشغيل تطبيق سطح المكتب.
ollama serve
يتم تقديم جميع النماذج تلقائيًا على المضيف المحلي:11434
أنشئ مجلدًا جديدًا على جهاز الكمبيوتر الخاص بك ثم افتحه باستخدام محرر الأكواد مثل VS Code.
افتح المحطة. استخدم الأمر التالي لإنشاء بيئة افتراضية .venv وتفعيلها:
python3 -m venv .venv
source .venv/bin/activate
قم بتشغيل الأمر التالي لتثبيت langchain و langchain-ollama:
pip install -U langchain langchain-ollama
سيقوم الأمر أعلاه بتثبيت أو ترقية حزم LangChain و LangChain-Ollama في Python. تضمن العلامة -U تثبيت أحدث الإصدارات من هذه الحزم، لتحل محل أي إصدارات أقدم قد تكون موجودة بالفعل.
قم بإنشاء ملف بايثون على سبيل المثال: main.py وأضف الكود التالي:
from langchain_ollama import ChatOllama from langchain.agents import tool from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain.agents.format_scratchpad.openai_tools import ( format_to_openai_tool_messages, ) from langchain.agents import AgentExecutor from langchain.agents.output_parsers.openai_tools import OpenAIToolsAgentOutputParser llm = ChatOllama( model="llama3.1", temperature=0, verbose=True ) @tool def get_word_length(word: str) -> int: """Returns the length of a word.""" return len(word) tools = [get_word_length] prompt = ChatPromptTemplate.from_messages( [ ( "system", "You are very powerful assistant", ), ("user", "{input}"), MessagesPlaceholder(variable_name="agent_scratchpad"), ] ) llm_with_tools = llm.bind_tools(tools) agent = ( { "input": lambda x: x["input"], "agent_scratchpad": lambda x: format_to_openai_tool_messages( x["intermediate_steps"] ), } | prompt | llm_with_tools | OpenAIToolsAgentOutputParser() ) # Create an agent executor by passing in the agent and tools agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) result = agent_executor.invoke({"input": "How many letters in the word educa"}) if result: print(f"[Output] --> {result['output']}") else: print('There are no result..')
يقوم مقتطف الكود أعلاه بإعداد وكيل LangChain باستخدام نموذج ChatOllama (llama3.1) لمعالجة إدخال المستخدم واستخدام أداة مخصصة تحسب طول الكلمة. فهو يحدد قالبًا سريعًا للوكيل، ويربط الأداة بنموذج اللغة، ويبني وكيلًا يعالج المدخلات وينسق الخطوات المتوسطة. وأخيرًا، يقوم بإنشاء AgentExecutor لاستدعاء الوكيل بإدخال محدد. نمرر سؤالًا بسيطًا لطرحه "كم عدد الحروف في كلمة educa" ثم نطبع الناتج أو نشير إلى ما إذا لم يتم العثور على نتيجة.
عند التشغيل نحصل على النتيجة التالية:
> Entering new AgentExecutor chain... Invoking: `get_word_length` with `{'word': 'educa'}` 5The word "educa" has 5 letters. > Finished chain. [Output] --> The word "educa" has 5 letters.
ترى الوكيل يستخدم النموذج (llama3.1) لاستدعاء الأداة بشكل صحيح للحصول على عدد الحروف في الكلمة.
شكرا على القراءة.
تحقق من مستودع Ollama هنا: https://github.com/ollama/ollama
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3