🚀 جرب Zilliz Cloud، الـ Milvus المدارة بالكامل، مجاناً — تجربة أداء أسرع بـ 10 أضعاف! جرب الآن>>

milvus-logo
LFAI
الصفحة الرئيسية
  • عمليات الدمج
  • Home
  • Docs
  • عمليات الدمج

  • مصادر البيانات

  • أبيفي

التوليد المعزز للاسترجاع: الزحف إلى مواقع الويب باستخدام Apify وحفظ البيانات في ملفوس للإجابة على الأسئلة

Open In Colab

يشرح هذا البرنامج التعليمي كيفية الزحف إلى مواقع الويب باستخدام برنامج Apify لزحف محتوى مواقع الويب وحفظ البيانات في قاعدة بيانات Milvus/Zilliz المتجهة لاستخدامها لاحقًا للإجابة عن الأسئلة.

Apify عبارة عن منصة تجريف واستخراج البيانات من الويب تقدم سوقًا للتطبيقات مع أكثر من ألفي أداة سحابية جاهزة، تُعرف باسم Actors. هذه الأدوات مثالية لحالات الاستخدام مثل استخراج البيانات المهيكلة من مواقع التجارة الإلكترونية، ووسائل التواصل الاجتماعي، ومحركات البحث، والخرائط على الإنترنت، وغيرها.

على سبيل المثال، يمكن لـ "ممثل زاحف محتوى الموقع الإلكتروني " الزحف بعمق إلى مواقع الويب، وتنظيف HTML الخاص بها عن طريق إزالة ملفات تعريف الارتباط أو التذييل أو التنقل، ثم تحويل HTML إلى Markdown.

يسهّل تكامل Apify لـ Milvus/Zilliz تحميل البيانات من الويب إلى قاعدة بيانات المتجهات.

قبل أن تبدأ

قبل تشغيل هذا الدفتر، تأكد من أن لديك ما يلي:

  • حساب Apify و APIFY_API_TOKEN.

  • حساب OpenAI وحساب OPENAI_API_API_KEY

  • حساب Zilliz Cloud (خدمة سحابية مُدارة بالكامل لـ Milvus).

  • URI قاعدة بيانات Zilliz URI والرمز المميز

تثبيت التبعيات

$ pip install --upgrade --quiet  apify==1.7.2 langchain-core==0.3.5 langchain-milvus==0.1.5 langchain-openai==0.2.0

إعداد مفاتيح Apify وOPENAI_API

import os
from getpass import getpass

os.environ["APIFY_API_TOKEN"] = getpass("Enter YOUR APIFY_API_TOKEN")
os.environ["OPENAI_API_KEY"] = getpass("Enter YOUR OPENAI_API_KEY")
Enter YOUR APIFY_API_TOKEN··········
Enter YOUR OPENAI_API_KEY··········

إعداد URI ورمز URI لقاعدة بيانات ميلفوس/زيلز والرمز المميز واسم المجموعة

تحتاج إلى URI والرمز المميز لـ Milvus/Zilliz لإعداد العميل.

  • إذا كان لديك خادم Milvus منشور ذاتيًا على Docker أو Kubernetes، استخدم عنوان الخادم والمنفذ كـ URI الخاص بك، على سبيل المثالhttp://localhost:19530. إذا قمت بتمكين ميزة المصادقة على Milvus، استخدم "<your_username>: <your_password>" كرمز مميز، وإلا فاترك الرمز المميز كسلسلة فارغة.
  • إذا كنت تستخدم Zilliz Cloud، الخدمة السحابية المدارة بالكامل لـ Milvus، اضبط uri و token ، والتي تتوافق مع نقطة النهاية العامة ومفتاح واجهة برمجة التطبيقات في Zilliz Cloud.

لاحظ أن المجموعة لا تحتاج إلى أن تكون موجودة مسبقًا. سيتم إنشاؤها تلقائيًا عند تحميل البيانات إلى قاعدة البيانات.

os.environ["MILVUS_URI"] = getpass("Enter YOUR MILVUS_URI")
os.environ["MILVUS_TOKEN"] = getpass("Enter YOUR MILVUS_TOKEN")

MILVUS_COLLECTION_NAME = "apify"
Enter YOUR MILVUS_URI··········
Enter YOUR MILVUS_TOKEN··········

استخدام زاحف محتوى الموقع الإلكتروني لكشط المحتوى النصي من Milvus.io

بعد ذلك، سنستخدم زاحف محتوى الموقع الإلكتروني مع Apify Python SDK. سنبدأ بتعريف actor_id و run_input، ثم نحدد المعلومات التي سيتم حفظها في قاعدة بيانات المتجهات.

actor_id="apify/website-content-crawler" هو معرّف زاحف محتوى الموقع الإلكتروني. يمكن التحكم بسلوك الزاحف بشكل كامل من خلال معلمات run_input (انظر صفحة الإدخال لمزيد من التفاصيل). في هذا المثال، سنقوم في هذا المثال بالزحف إلى وثائق ميلفوس، والتي لا تتطلب عرض جافا سكريبت. لذلك، نقوم بتعيين crawlerType=cheerio ، وتحديد startUrls ، والحد من عدد الصفحات التي يتم الزحف إليها عن طريق تعيين maxCrawlPages=10.

from apify_client import ApifyClient

client = ApifyClient(os.getenv("APIFY_API_TOKEN"))

actor_id = "apify/website-content-crawler"
run_input = {
    "crawlerType": "cheerio",
    "maxCrawlPages": 10,
    "startUrls": [{"url": "https://milvus.io/"}, {"url": "https://zilliz.com/"}],
}

actor_call = client.actor(actor_id).call(run_input=run_input)

سيقوم زاحف محتوى الموقع الإلكتروني بالزحف إلى الموقع بشكل كامل حتى يصل إلى الحد المحدد مسبقًا الذي تم تعيينه بواسطة maxCrawlPages. سيتم تخزين البيانات التي تم كشطها في Dataset على منصة Apify. للوصول إلى هذه البيانات وتحليلها، يمكنك استخدام defaultDatasetId

dataset_id = actor_call["defaultDatasetId"]
dataset_id
'P9dLFfeJAljlePWnz'

يقوم الكود التالي بجلب البيانات التي تم كشطها من Apify Dataset ويعرض أول موقع تم كشطه

item = client.dataset(dataset_id).list_items(limit=1).items
item[0].get("text")
'The High-Performance Vector Database Built for Scale\nStart running Milvus in seconds\nfrom pymilvus import MilvusClient client = MilvusClient("milvus_demo.db") client.create_collection( collection_name="demo_collection", dimension=5 )\nDeployment Options to Match Your Unique Journey\nMilvus Lite\nLightweight, easy to start\nVectorDB-as-a-library runs in notebooks/ laptops with a pip install\nBest for learning and prototyping\nMilvus Standalone\nRobust, single-machine deployment\nComplete vector database for production or testing\nIdeal for datasets with up to millions of vectors\nMilvus Distributed\nScalable, enterprise-grade solution\nHighly reliable and distributed vector database with comprehensive toolkit\nScale horizontally to handle billions of vectors\nZilliz Cloud\nFully managed with minimal operations\nAvailable in both serverless and dedicated cluster\nSaaS and BYOC options for different security and compliance requirements\nTry Free\nLearn more about different Milvus deployment models\nLoved by GenAI developers\nBased on our research, Milvus was selected as the vector database of choice (over Chroma and Pinecone). Milvus is an open-source vector database designed specifically for similarity search on massive datasets of high-dimensional vectors.\nWith its focus on efficient vector similarity search, Milvus empowers you to build robust and scalable image retrieval systems. Whether you’re managing a personal photo library or developing a commercial image search application, Milvus offers a powerful foundation for unlocking the hidden potential within your image collections.\nBhargav Mankad\nSenior Solution Architect\nMilvus is a powerful vector database tailored for processing and searching extensive vector data. It stands out for its high performance and scalability, rendering it perfect for machine learning, deep learning, similarity search tasks, and recommendation systems.\nIgor Gorbenko\nBig Data Architect\nStart building your GenAI app now\nGuided with notebooks developed by us and our community\nRAG\nTry Now\nImage Search\nTry Now\nMultimodal Search\nTry Now\nUnstructured Data Meetups\nJoin a Community of Passionate Developers and Engineers Dedicated to Gen AI.\nRSVP now\nWhy Developers Prefer Milvus for Vector Databases\nScale as needed\nElastic scaling to tens of billions of vectors with distributed architecture.\nBlazing fast\nRetrieve data quickly and accurately with Global Index, regardless of scale.\nReusable Code\nWrite once, and deploy with one line of code into the production environment.\nFeature-rich\nMetadata filtering, hybrid search, multi-vector and more.\nWant to learn more about Milvus? View our documentation\nJoin the community of developers building GenAI apps with Milvus, now with over 25 million downloads\nGet Milvus Updates\nSubscribe to get updates on the latest Milvus releases, tutorials and training from Zilliz, the creator and key maintainer of Milvus.'

لتحميل البيانات إلى قاعدة بيانات Milvus، نستخدم تكامل Apify Milvus. أولاً، نحتاج إلى إعداد المعلمة لقاعدة بيانات Milvus. بعد ذلك، نختار الحقول (datasetFields) التي نريد تخزينها في قاعدة البيانات. في المثال أدناه، نقوم بحفظ الحقل text و metadata.title.

milvus_integration_inputs = {
    "milvusUri": os.getenv("MILVUS_URI"),
    "milvusToken": os.getenv("MILVUS_TOKEN"),
    "milvusCollectionName": MILVUS_COLLECTION_NAME,
    "datasetFields": ["text", "metadata.title"],
    "datasetId": actor_call["defaultDatasetId"],
    "performChunking": True,
    "embeddingsApiKey": os.getenv("OPENAI_API_KEY"),
    "embeddingsProvider": "OpenAI",
}

الآن، سنستدعي apify/milvus-integration لتخزين البيانات

actor_call = client.actor("apify/milvus-integration").call(
    run_input=milvus_integration_inputs
)

يتم الآن تخزين جميع البيانات التي تم كشطها في قاعدة بيانات ميلفوس وهي جاهزة للاسترجاع والإجابة عن الأسئلة

الاسترجاع وخط أنابيب توليد LLM

بعد ذلك، سنقوم بتعريف خط أنابيب الاسترجاع المعزز باستخدام لانجشين. يعمل خط الأنابيب على مرحلتين:

  • مخزن المتجهات (ميلفوس): تسترجع Langchain المستندات ذات الصلة من Milvus من خلال مطابقة تضمينات الاستعلام مع تضمينات المستندات المخزنة.
  • استجابة LLM: توفر المستندات المسترجعة سياقًا لـ LLM (على سبيل المثال، GPT-4) لتوليد إجابة مستنيرة.

للمزيد من التفاصيل حول سلسلة RAG، يُرجى الرجوع إلى وثائق لانغشين.

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_milvus.vectorstores import Milvus
from langchain_openai import ChatOpenAI, OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

vectorstore = Milvus(
    connection_args={
        "uri": os.getenv("MILVUS_URI"),
        "token": os.getenv("MILVUS_TOKEN"),
    },
    embedding_function=embeddings,
    collection_name=MILVUS_COLLECTION_NAME,
)

prompt = PromptTemplate(
    input_variables=["context", "question"],
    template="Use the following pieces of retrieved context to answer the question. If you don't know the answer, "
    "just say that you don't know. \nQuestion: {question} \nContext: {context} \nAnswer:",
)


def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)


rag_chain = (
    {
        "context": vectorstore.as_retriever() | format_docs,
        "question": RunnablePassthrough(),
    }
    | prompt
    | ChatOpenAI(model="gpt-4o-mini")
    | StrOutputParser()
)

بمجرد حصولنا على البيانات في قاعدة البيانات، يمكننا البدء في طرح الأسئلة


question = "What is Milvus database?"

rag_chain.invoke(question)
'Milvus is an open-source vector database specifically designed for billion-scale vector similarity search. It facilitates efficient management and querying of vector data, which is essential for applications involving unstructured data, such as AI and machine learning. Milvus allows users to perform operations like CRUD (Create, Read, Update, Delete) and vector searches, making it a powerful tool for handling large datasets.'

الخاتمة

أوضحنا في هذا البرنامج التعليمي كيفية الزحف إلى محتوى موقع الويب باستخدام Apify، وتخزين البيانات في قاعدة بيانات Milvus vector، واستخدام خط أنابيب معزز للاسترجاع لأداء مهام الإجابة عن الأسئلة. من خلال الجمع بين إمكانات Apify في كشط الويب مع Milvus/Zilliz لتخزين المتجهات وLangchain لنماذج اللغة، يمكنك بناء أنظمة استرجاع معلومات فعالة للغاية.

ولتحسين جمع البيانات وتحديثها في قاعدة البيانات، يوفر تكامل Apify تحديثات تدريجية، والتي تقوم بتحديث البيانات الجديدة أو المعدلة فقط بناءً على المجموع الاختباري. بالإضافة إلى ذلك، يمكنه إزالة البيانات القديمة التي لم يتم الزحف إليها خلال فترة زمنية محددة تلقائيًا. تساعد هذه الميزات في الحفاظ على تحسين قاعدة بياناتك المتجهة وضمان بقاء خط أنابيب الاسترجاع المعزز فعالاً ومحدثاً بأقل جهد يدوي ممكن.

للمزيد من التفاصيل حول تكامل Apify-Milvus، يُرجى الرجوع إلى وثائق Apify Milvus وملف README للتكامل.