🚀 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

  • MengapaBagaimana

Mengintegrasikan Milvus dengan WhyHow

Panduan ini mendemonstrasikan cara menggunakan whyhow.ai dan Milvus Lite untuk melakukan Rule-based Retrieval.

Gambaran Umum

WhyHow adalah platform yang menyediakan blok bangunan yang dibutuhkan pengembang untuk mengatur, mengontekstualisasikan, dan mengambil data tidak terstruktur secara andal untuk melakukan RAG yang kompleks. Paket Rule-based Retrieval adalah paket Python yang dikembangkan oleh WhyHow yang memungkinkan orang untuk membuat dan mengelola aplikasi Retrieval Augmented Generation (RAG) dengan kemampuan pemfilteran tingkat lanjut.

Instalasi

Sebelum memulai, silakan instal semua paket python yang diperlukan untuk digunakan nanti.

pip install --upgrade pymilvus, whyhow_rbr

Selanjutnya, kita perlu menginisialisasi klien Milvus untuk mengimplementasikan Rule-based Retrieval dengan menggunakan Milvus Lite.

from pymilvus import MilvusClient

# Milvus Lite local path
path="./milvus_demo.db" # random name for local milvus lite db path

# Initialize the ClientMilvus
milvus_client = ClientMilvus(path)

Anda juga dapat menginisialisasi klien Milvus melalui Milvus Cloud

from pymilvus import MilvusClient

# Milvus Cloud credentials
YOUR_MILVUS_CLOUD_END_POINT = "YOUR_MILVUS_CLOUD_END_POINT"
YOUR_MILVUS_CLOUD_TOKEN = "YOUR_MILVUS_CLOUD_TOKEN"

# Initialize the ClientMilvus
milvus_client = ClientMilvus(
        milvus_uri=YOUR_MILVUS_CLOUD_END_POINT, 
        milvus_token=YOUR_MILVUS_CLOUD_TOKEN,
)

Membuat Koleksi

Mendefinisikan variabel yang diperlukan

# Define collection name
COLLECTION_NAME="YOUR_COLLECTION_NAME" # take your own collection name

# Define vector dimension size
DIMENSION=1536 # decide by the model you use

Menambahkan skema

Sebelum memasukkan data ke dalam database Milvus Lite, kita perlu mendefinisikan field data terlebih dahulu, yang disebut schema di sini. Dengan membuat objek CollectionSchema dan menambahkan data field melalui add_field(), kita dapat mengontrol tipe data dan karakteristiknya. Langkah ini wajib dilakukan sebelum memasukkan data apapun ke dalam Milvus.

schema = milvus_client.create_schema(auto_id=True) # Enable id matching

schema = milvus_client.add_field(schema=schema, field_name="id", datatype=DataType.INT64, is_primary=True)
schema = milvus_client.add_field(schema=schema, field_name="embedding", datatype=DataType.FLOAT_VECTOR, dim=DIMENSION)

Membuat indeks

Untuk setiap skema, akan lebih baik jika kita memiliki sebuah indeks agar proses query menjadi lebih efisien. Untuk membuat indeks, pertama-tama kita membutuhkan sebuah index_params dan kemudian menambahkan lebih banyak data indeks pada objek IndexParams ini.

# Start to indexing data field
index_params = milvus_client.prepare_index_params()
index_params = milvus_client.add_index(
    index_params=index_params,  # pass in index_params object
    field_name="embedding",
    index_type="AUTOINDEX",  # use autoindex instead of other complex indexing method
    metric_type="COSINE",  # L2, COSINE, or IP
)

Metode ini merupakan pembungkus tipis dari implementasi resmi Milvus(dokumen resmi).

Membuat koleksi

Setelah mendefinisikan semua field data dan mengindeksnya, sekarang kita perlu membuat koleksi basis data kita sehingga kita dapat mengakses data kita dengan cepat dan tepat. Yang perlu disebutkan adalah bahwa kita menginisialisasi enable_dynamic_field menjadi true sehingga Anda dapat mengunggah data apa pun dengan bebas. Konsekuensinya adalah permintaan data mungkin tidak efisien.

# Create Collection
milvus_client.create_collection(
    collection_name=COLLECTION_NAME,
    schema=schema,
    index_params=index_params
)

Mengunggah dokumen

Setelah membuat koleksi, kita siap untuk mengisinya dengan dokumen. Di whyhow_rbr, hal ini dilakukan dengan menggunakan metode upload_documents dari MilvusClient. Metode ini melakukan langkah-langkah berikut ini:

  • Pemrosesan awal: Membaca dan membagi file PDF yang disediakan menjadi beberapa bagian
  • Penyematan: Menyematkan semua potongan menggunakan model OpenAI
  • Memasukkan: Mengunggah penyematan dan metadata ke Milvus Lite
# get pdfs
pdfs = ["harry-potter.pdf", "game-of-thrones.pdf"] # replace to your pdfs path

# Uploading the PDF document
milvus_client.upload_documents(
    collection_name=COLLECTION_NAME,
    documents=pdfs
)

Menjawab pertanyaan

Sekarang kita akhirnya dapat beralih ke pengambilan augmented generation.

# Search data and implement RAG!
res = milvus_client.search(
    question='What food does Harry Potter like to eat?',
    collection_name=COLLECTION_NAME,
    anns_field='embedding',
    output_fields='text'
)
print(res['answer'])
print(res['matches'])

Aturan

Pada contoh sebelumnya, setiap dokumen dalam indeks kita dipertimbangkan. Namun, kadang-kadang mungkin bermanfaat untuk hanya mengambil dokumen yang memenuhi beberapa kondisi yang telah ditentukan (misalnya filename=harry-potter.pdf). Di whyhow_rbr melalui Milvus Lite, hal ini dapat dilakukan dengan menyesuaikan parameter pencarian.

Sebuah aturan dapat mengontrol atribut metadata berikut ini

  • filename nama berkas
  • page_numbers daftar bilangan bulat yang berhubungan dengan nomor halaman (pengindeksan 0)
  • id pengenal unik dari sebuah potongan (ini adalah filter yang paling "ekstrem")
  • Aturan lain yang didasarkan pada Ekspresi Boolean
# RULES(search on book harry-potter on page 8):
PARTITION_NAME='harry-potter' # search on books
page_number='page_number == 8'

# first create a partitions to store the book and later search on this specific partition:
milvus_client.crate_partition(
    collection_name=COLLECTION_NAME,
    partition_name=PARTITION_NAME # separate base on your pdfs type
)

# search with rules
res = milvus_client.search(
    question='Tell me about the greedy method',
    collection_name=COLLECTION_NAME,
    partition_names=PARTITION_NAME,
    filter=page_number, # append any rules follow the Boolean Expression Rule
    anns_field='embedding',
    output_fields='text'
)
print(res['answer'])
print(res['matches'])

Dalam contoh ini, pertama-tama kita membuat partisi yang menyimpan pdf yang berhubungan dengan Harry Potter, dan melalui pencarian di dalam partisi ini, kita dapat memperoleh informasi yang paling langsung. Selain itu, kami juga menerapkan nomor halaman sebagai filter untuk menentukan halaman yang ingin kami cari. Ingat, parameter filer harus mengikuti aturan boolean.

Bersihkan

Akhirnya, setelah menerapkan semua instruksi, Anda dapat membersihkan basis data dengan menghubungi drop_collection().

# Clean up
milvus_client.drop_collection(
    collection_name=COLLECTION_NAME
)

Coba Milvus yang Dikelola secara Gratis

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

Mulai
Umpan balik

Apakah halaman ini bermanfaat?