"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إنشاء وكيل RAG محلي باستخدام Ollama وLangChain

كيفية إنشاء وكيل RAG محلي باستخدام Ollama وLangChain

تم النشر بتاريخ 2024-08-14
تصفح:747

How to Create a Local RAG Agent with Ollama and LangChain

ما هو RAG؟

RAG تعني الجيل المعزز للاسترجاع، وهي تقنية قوية مصممة لتحسين أداء نماذج اللغات الكبيرة (LLMs) من خلال تزويدها بسياق محدد ذي صلة في شكل مستندات. على عكس ماجستير إدارة الأعمال التقليدي الذي يولد استجابات تعتمد فقط على معرفتهم المدربة مسبقًا، يتيح لك RAG مواءمة مخرجات النموذج بشكل أوثق مع النتائج المرجوة من خلال استرداد واستخدام البيانات في الوقت الفعلي أو المعلومات الخاصة بالمجال.

RAG مقابل الضبط الدقيق

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

بناء وكيل RAG

تثبيت المتطلبات

قم بتثبيت أولاما

يوفر Olma البنية التحتية الخلفية اللازمة لتشغيل LLaMA محليًا. للبدء، توجه إلى موقع Ollama وقم بتنزيل التطبيق. اتبع التعليمات لإعداده على جهازك المحلي.

تثبيت متطلبات LangChain

LangChain هو إطار عمل Python مصمم للعمل مع العديد من حاملي شهادات LLM وقواعد بيانات المتجهات، مما يجعله مثاليًا لبناء وكلاء RAG. قم بتثبيت LangChain وتبعياته عن طريق تشغيل الأمر التالي:

pip install langchain

ترميز وكيل RAG

إنشاء وظيفة API

أولاً، ستحتاج إلى وظيفة للتفاعل مع مثيل LLaMA المحلي لديك. إليك كيفية إعداده:

from requests import post as rpost

def call_llama(prompt):
    headers = {"Content-Type": "application/json"}
    payload = {
        "model": "llama3.1",
        "prompt": prompt,
        "stream": False,
    }

    response = rpost(
        "http://localhost:11434/api/generate",
        headers=headers,
        json=payload
    )
    return response.json()["response"]

إنشاء LangChain LLM

بعد ذلك، قم بدمج هذه الوظيفة في فئة LLM مخصصة داخل LangChain:

from langchain_core.language_models.llms import LLM

class LLaMa(LLM):
    def _call(self, prompt, **kwargs):
        return call_llama(prompt)

    @property
    def _llm_type(self):
        return "llama-3.1-8b"

دمج وكيل RAG

إعداد المسترد

المسترد مسؤول عن جلب المستندات ذات الصلة بناءً على استعلام المستخدم. إليك كيفية إعداده باستخدام FAISS لتخزين المتجهات ودمجات HuggingFace المدربة مسبقًا:

from langchain.vectorstores import FAISS
from langchain_huggingface import HuggingFaceEmbeddings

documents = [
    {"content": "What is your return policy? ..."},
    {"content": "How long does shipping take? ..."},
    # Add more documents as needed
]

texts = [doc["content"] for doc in documents]

retriever = FAISS.from_texts(
    texts,
    HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
).as_retriever(k=5)

إنشاء القالب الفوري

حدد قالب المطالبة الذي سيستخدمه وكيل RAG لإنشاء ردود بناءً على المستندات المستردة:

from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder

faq_template = """
You are a chat agent for my E-Commerce Company. As a chat agent, it is your duty to help the human with their inquiry and make them a happy customer.

Help them, using the following context:

{context}

"""

faq_prompt = ChatPromptTemplate.from_messages([
    ("system", faq_template),
    MessagesPlaceholder("messages")
])

إنشاء سلاسل المستندات والمستردات

دمج استرجاع المستندات وإنشاء LLaMA في سلسلة متماسكة:

from langchain.chains.combine_documents import create_stuff_documents_chain

document_chain = create_stuff_documents_chain(LLaMa(), faq_prompt)

def parse_retriever_input(params):
    return params["messages"][-1].content

retrieval_chain = RunnablePassthrough.assign(
    context=parse_retriever_input | retriever
).assign(answer=document_chain)

ابدأ تشغيل خادم Olama الخاص بك

قبل تشغيل وكيل RAG الخاص بك، تأكد من أن خادم Ollama قيد التشغيل. ابدأ الخادم بالأمر التالي:

ollama serve

اطلب من وكيل RAG الخاص بك

الآن، يمكنك اختبار وكيل RAG الخاص بك عن طريق إرسال استعلام:

from langchain.schema import HumanMessage

response = retrieval_chain.invoke({
    "messages": [
        HumanMessage("I received a damaged item. I want my money back.")
    ]
})

print(response)

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


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

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/dmuraco3/how-to-create-a-local-rag-agent-with-ollama-and-langchain-1m9a?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang @163.com حذف
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3