🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda
  • Integrasi
    • Rekayasa Pengetahuan
  • Home
  • Docs
  • Integrasi

  • Rekayasa Pengetahuan

  • Cognee

Open In Colab GitHub Repository

Membangun RAG dengan Milvus dan Cognee

Cognee adalah platform khusus pengembang yang menyederhanakan pengembangan aplikasi AI dengan pipeline ECL (Extract, Cognify, Load) modular yang dapat diskalakan. Dengan mengintegrasikan secara mulus dengan Milvus, Cognee memungkinkan koneksi dan pengambilan percakapan, dokumen, dan transkripsi yang efisien, mengurangi halusinasi dan mengoptimalkan biaya operasional.

Dengan dukungan yang kuat untuk penyimpanan vektor seperti Milvus, basis data grafik, dan LLM, Cognee menyediakan kerangka kerja yang fleksibel dan dapat disesuaikan untuk membangun sistem retrieval-augmented generation (RAG). Arsitekturnya yang siap produksi memastikan peningkatan akurasi dan efisiensi untuk aplikasi yang didukung AI.

Dalam tutorial ini, kami akan menunjukkan kepada Anda cara membuat pipeline RAG (Retrieval-Augmented Generation) dengan Milvus dan Cognee.

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

Jika Anda menggunakan Google Colab, untuk mengaktifkan dependensi yang baru saja diinstal, Anda mungkin perlu memulai ulang runtime (klik menu "Runtime" di bagian atas layar, dan pilih "Restart session" dari menu tarik-turun).

Secara default, ia menggunakan OpenAI sebagai LLM dalam contoh ini. Anda harus menyiapkan kunci api, dan mengaturnya dalam fungsi konfigurasi set_llm_api_key().

Untuk mengkonfigurasi Milvus sebagai basis data vektor, atur VECTOR_DB_PROVIDER ke milvus dan tentukan VECTOR_DB_URL dan VECTOR_DB_KEY. Karena kita menggunakan Milvus Lite untuk menyimpan data pada demo ini, maka hanya VECTOR_DB_URL yang perlu disediakan.

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"

Sedangkan untuk variabel lingkungan VECTOR_DB_URL dan VECTOR_DB_KEY:

  • Mengatur VECTOR_DB_URL sebagai file lokal, misalnya./milvus.db, adalah metode yang paling mudah, karena secara otomatis menggunakan Milvus Lite untuk menyimpan semua data dalam file ini.
  • Jika Anda memiliki data dalam skala besar, Anda dapat mengatur server Milvus yang lebih berkinerja pada docker atau kubernetes. Dalam pengaturan ini, silakan gunakan uri server, misalnyahttp://localhost:19530, sebagai VECTOR_DB_URL.
  • Jika Anda ingin menggunakan Zilliz Cloud, layanan cloud yang dikelola sepenuhnya untuk Milvus, sesuaikan VECTOR_DB_URL dan VECTOR_DB_KEY, yang sesuai dengan Public Endpoint dan Api key di Zilliz Cloud.

Siapkan data

Kami menggunakan halaman FAQ dari Dokumentasi Milvus 2.4.x sebagai pengetahuan pribadi dalam RAG kami, yang merupakan sumber data yang baik untuk pipeline RAG sederhana.

Unduh file zip dan ekstrak dokumen ke folder 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

Kami memuat semua file penurunan harga dari folder milvus_docs/en/faq. Untuk setiap dokumen, kita cukup menggunakan "# " untuk memisahkan konten dalam file, yang secara kasar dapat memisahkan konten dari setiap bagian utama dari file penurunan harga.

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("# ")

Membangun RAG

Mengatur Ulang Data Cognee

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

Dengan catatan yang bersih, kita sekarang dapat menambahkan kumpulan data kita dan memprosesnya menjadi grafik pengetahuan.

Menambahkan Data dan Mengenali

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 ...
# ...

Metode add memuat set data (Milvus FAQ) ke dalam Cognee dan metode cognify memproses data untuk mengekstrak entitas, hubungan, dan rangkuman, membangun grafik pengetahuan.

Mengajukan Pertanyaan untuk Rangkuman

Setelah data diproses, mari kita melakukan kueri pada grafik pengetahuan.

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.'}

Kueri ini mencari ringkasan yang terkait dengan teks kueri, dan kandidat yang paling terkait akan dicetak.

Mengajukan Kueri untuk Potongan

Ringkasan menawarkan wawasan tingkat tinggi, tetapi untuk detail yang lebih terperinci, kita dapat melakukan kueri untuk potongan data tertentu secara langsung dari kumpulan data yang telah diproses. Potongan-potongan ini berasal dari data asli yang ditambahkan dan dianalisis selama pembuatan grafik pengetahuan.

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)

Mari kita format dan tampilkan agar lebih mudah dibaca!

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.

###

Pada langkah sebelumnya, kami menanyakan dataset FAQ Milvus untuk ringkasan dan potongan data tertentu. Meskipun hal ini memberikan wawasan yang rinci dan informasi granular, dataset ini sangat besar, sehingga sulit untuk memvisualisasikan ketergantungan dengan jelas di dalam grafik pengetahuan.

Untuk mengatasi hal ini, kita akan mengatur ulang lingkungan Cognee dan bekerja dengan set data yang lebih kecil dan lebih terfokus. Hal ini akan memungkinkan kita untuk menunjukkan hubungan dan ketergantungan yang diekstrak selama proses cognify dengan lebih baik. Dengan menyederhanakan data, kita dapat dengan jelas melihat bagaimana Cognee mengatur dan menyusun informasi dalam grafik pengetahuan.

Mengatur Ulang Cognee

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

Menambahkan Dataset Terfokus

Di sini, kumpulan data yang lebih kecil dengan hanya satu baris teks ditambahkan dan diproses untuk memastikan grafik pengetahuan yang terfokus dan mudah diinterpretasikan.

# 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()

Mengajukan Pertanyaan untuk Wawasan

Dengan berfokus pada kumpulan data yang lebih kecil ini, kita sekarang dapat dengan jelas menganalisis hubungan dan struktur di dalam knowledge graph.

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').

Output ini mewakili hasil dari kueri grafik pengetahuan, menampilkan entitas (node) dan hubungannya (edge) yang diekstrak dari dataset yang diproses. Setiap tupel mencakup entitas sumber, jenis hubungan, dan entitas target, bersama dengan metadata seperti ID unik, deskripsi, dan stempel waktu. Grafik menyoroti konsep-konsep utama dan hubungan semantiknya, memberikan pemahaman yang terstruktur tentang kumpulan data.

Selamat, Anda telah mempelajari penggunaan dasar cognee dengan Milvus. Jika Anda ingin mengetahui penggunaan cognee yang lebih lanjut, silakan lihat halaman resminya.

Daftar isi

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?