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

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

  • هندسة المعرفة

  • كوجني

Open In Colab GitHub Repository

بناء RAG مع Milvus و Cognee

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

وبفضل الدعم القوي لمخازن المتجهات مثل Milvus وقواعد بيانات الرسوم البيانية وLLMs، توفر Cognee إطار عمل مرن وقابل للتخصيص لبناء أنظمة توليد الاسترجاع المعزز (RAG). تضمن بنيتها الجاهزة للإنتاج تحسين الدقة والكفاءة للتطبيقات التي تعمل بالذكاء الاصطناعي.

في هذا البرنامج التعليمي، سنوضح لك في هذا البرنامج التعليمي كيفية بناء خط أنابيب (RAG) للتوليد المعزز للاسترجاع باستخدام Milvus وCognee.

$ pip install pymilvus git+https://github.com/topoteretes/cognee.git

إذا كنت تستخدم Google Colab، لتمكين التبعيات المثبتة للتو، قد تحتاج إلى إعادة تشغيل وقت التشغيل (انقر على قائمة "وقت التشغيل" في أعلى الشاشة، وحدد "إعادة تشغيل الجلسة" من القائمة المنسدلة).

بشكل افتراضي، يستخدم OpenAI كـ LLM في هذا المثال. يجب إعداد مفتاح واجهة برمجة التطبيقات، وتعيينه في وظيفة التكوين set_llm_api_key().

لتهيئة Milvus كقاعدة بيانات المتجهات، قم بتعيين VECTOR_DB_PROVIDER إلى milvus وحدد VECTOR_DB_URL و VECTOR_DB_KEY. نظرًا لأننا نستخدم Milvus Lite لتخزين البيانات في هذا العرض التوضيحي، يجب توفير VECTOR_DB_URL فقط.

import os

import cognee

cognee.config.set_llm_api_key("YOUR_OPENAI_API_KEY")


os.environ["VECTOR_DB_PROVIDER"] = "milvus"
os.environ["VECTOR_DB_URL"] = "./milvus.db"

أما بالنسبة لمتغيرات البيئة VECTOR_DB_URL و VECTOR_DB_KEY:

  • يعد تعيين VECTOR_DB_URL كملف محلي، على سبيل المثال./milvus.db ، هو الطريقة الأكثر ملاءمة، حيث أنه يستخدم تلقائيًا ملف Milvus Lite لتخزين جميع البيانات في هذا الملف.
  • إذا كان لديك حجم كبير من البيانات، يمكنك إعداد خادم Milvus أكثر أداءً على docker أو kubernetes. في هذا الإعداد، يُرجى استخدام الخادم uri، على سبيل المثالhttp://localhost:19530 ، كـ VECTOR_DB_URL.
  • إذا كنت ترغب في استخدام Zilliz Cloud، الخدمة السحابية المدارة بالكامل لـ Milvus، اضبط VECTOR_DB_URL و VECTOR_DB_KEY ، والتي تتوافق مع نقطة النهاية العامة ومفتاح Api في Zilliz Cloud.

إعداد البيانات

نستخدم صفحات الأسئلة الشائعة من وثائق ميلفوس 2.4.x كمعرفة خاصة في RAG الخاص بنا، وهو مصدر بيانات جيد لخط أنابيب RAG بسيط.

قم بتنزيل الملف المضغوط واستخراج المستندات إلى المجلد milvus_docs.

$ wget https://github.com/milvus-io/milvus-docs/releases/download/v2.4.6-preview/milvus_docs_2.4.x_en.zip
$ unzip -q milvus_docs_2.4.x_en.zip -d milvus_docs

نقوم بتحميل جميع ملفات تخفيض السعر من المجلد milvus_docs/en/faq. بالنسبة لكل مستند، نستخدم ببساطة "# " لفصل المحتوى في الملف، وهو ما يمكن أن يفصل تقريبًا محتوى كل جزء رئيسي من ملف تخفيض السعر.

from glob import glob

text_lines = []

for file_path in glob("milvus_docs/en/faq/*.md", recursive=True):
    with open(file_path, "r") as file:
        file_text = file.read()

    text_lines += file_text.split("# ")

بناء RAG

إعادة تعيين بيانات كوجني

await cognee.prune.prune_data()
await cognee.prune.prune_system(metadata=True)

مع وجود قائمة نظيفة جاهزة، يمكننا الآن إضافة مجموعة البيانات الخاصة بنا ومعالجتها في رسم بياني معرفي.

إضافة البيانات والتعرف على

await cognee.add(data=text_lines, dataset_name="milvus_faq")
await cognee.cognify()

# [DocumentChunk(id=UUID('6889e7ef-3670-555c-bb16-3eb50d1d30b0'), updated_at=datetime.datetime(2024, 12, 4, 6, 29, 46, 472907, tzinfo=datetime.timezone.utc), text='Does the query perform in memory? What are incremental data and historical data?\n\nYes. When ...
# ...

تقوم الطريقة add بتحميل مجموعة البيانات (الأسئلة الشائعة في ملف Milvus) إلى Cognee وتقوم الطريقة cognify بمعالجة البيانات لاستخراج الكيانات والعلاقات والملخصات، وبناء رسم بياني معرفي.

الاستعلام عن الملخصات

الآن بعد أن تمت معالجة البيانات، دعونا نستعلم عن الرسم البياني المعرفي.

from cognee.api.v1.search import SearchType

query_text = "How is data stored in milvus?"
search_results = await cognee.search(SearchType.SUMMARIES, query_text=query_text)

print(search_results[0])
{'id': 'de5c6713-e079-5d0b-b11d-e9bacd1e0d73', 'text': 'Milvus stores two data types: inserted data and metadata.'}

يقوم هذا الاستعلام بالبحث في الرسم البياني المعرفي عن ملخص مرتبط بنص الاستعلام، ويتم طباعة المرشح الأكثر ارتباطًا.

الاستعلام عن الأجزاء

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

from cognee.api.v1.search import SearchType

query_text = "How is data stored in milvus?"
search_results = await cognee.search(SearchType.CHUNKS, query_text=query_text)

لنقم بتنسيقها وعرضها لسهولة القراءة بشكل أفضل!

def format_and_print(data):
    print("ID:", data["id"])
    print("\nText:\n")
    paragraphs = data["text"].split("\n\n")
    for paragraph in paragraphs:
        print(paragraph.strip())
        print()


format_and_print(search_results[0])
ID: 4be01c4b-9ee5-541c-9b85-297883934ab3

Text:

Where does Milvus store data?

Milvus deals with two types of data, inserted data and metadata.

Inserted data, including vector data, scalar data, and collection-specific schema, are stored in persistent storage as incremental log. Milvus supports multiple object storage backends, including [MinIO](https://min.io/), [AWS S3](https://aws.amazon.com/s3/?nc1=h_ls), [Google Cloud Storage](https://cloud.google.com/storage?hl=en#object-storage-for-companies-of-all-sizes) (GCS), [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs), [Alibaba Cloud OSS](https://www.alibabacloud.com/product/object-storage-service), and [Tencent Cloud Object Storage](https://www.tencentcloud.com/products/cos) (COS).

Metadata are generated within Milvus. Each Milvus module has its own metadata that are stored in etcd.

###

في خطواتنا السابقة، استعلمنا عن مجموعة بيانات الأسئلة الشائعة في ميلفوس عن كل من الملخصات وأجزاء محددة من البيانات. على الرغم من أن ذلك وفّر رؤى مفصّلة ومعلومات دقيقة، إلا أن مجموعة البيانات كانت كبيرة، مما جعل من الصعب تصور التبعيات بوضوح داخل الرسم البياني المعرفي.

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

إعادة تعيين Cognee

await cognee.prune.prune_data()
await cognee.prune.prune_system(metadata=True)

إضافة مجموعة البيانات المركزة

هنا، تتم إضافة مجموعة بيانات أصغر تحتوي على سطر واحد فقط من النص ومعالجتها لضمان الحصول على رسم بياني معرفي مركّز وسهل التفسير.

# We only use one line of text as the dataset, which simplifies the output later
text = """
    Natural language processing (NLP) is an interdisciplinary
    subfield of computer science and information retrieval.
    """

await cognee.add(text)
await cognee.cognify()

الاستعلام عن الرؤى

من خلال التركيز على مجموعة البيانات الأصغر هذه، يمكننا الآن تحليل العلاقات والبنية داخل الرسم البياني المعرفي بوضوح.

query_text = "Tell me about NLP"
search_results = await cognee.search(SearchType.INSIGHTS, query_text=query_text)

for result_text in search_results:
    print(result_text)

# Example output:
# ({'id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'name': 'natural language processing', 'description': 'An interdisciplinary subfield of computer science and information retrieval.'}, {'relationship_name': 'is_a_subfield_of', 'source_node_id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'target_node_id': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 15, 473137, tzinfo=datetime.timezone.utc)}, {'id': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'name': 'computer science', 'description': 'The study of computation and information processing.'})
# (...)
#
# It represents nodes and relationships in the knowledge graph:
# - The first element is the source node (e.g., 'natural language processing').
# - The second element is the relationship between nodes (e.g., 'is_a_subfield_of').
# - The third element is the target node (e.g., 'computer science').

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

تهانينا، لقد تعلمت الاستخدام الأساسي لـ cognee مع ميلفوس. إذا كنت ترغب في معرفة المزيد من الاستخدامات المتقدمة لـ cognee، يرجى الرجوع إلى صفحته الرسمية .

جدول المحتويات

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟