Flazzo memiliki fokus utama untuk menambah nilai bisnis Anda.

Blog

Membangun Pemulihan Augmented Generation (RAG) dengan Milvus

18023869-thumb.jpg
Blog

Membangun Pemulihan Augmented Generation (RAG) dengan Milvus

[ad_1]

Bukan rahasia lagi bahwa model bahasa besar (LLM) tradisional sering kali berhalusinasi (menghasilkan informasi yang salah atau tidak masuk akal) ketika ditanyai pertanyaan intensif pengetahuan yang memerlukan informasi, pengetahuan bisnis, atau domain terkini. Keterbatasan ini terutama karena sebagian besar LLM dilatih berdasarkan informasi yang tersedia untuk umum, bukan basis pengetahuan internal organisasi Anda atau data khusus kepemilikan. Di sinilah pemulungan augmented generation (RAG), sebuah model yang diperkenalkan oleh Peneliti Meta-AIdi antara.

RAG mengatasi keterbatasan LLM yang terlalu mengandalkan data terlatih untuk menghasilkan keluaran dengan menggabungkan memori parametrik dengan memori non-parametrik melalui teknik pengambilan informasi vektor. Tergantung pada skalanya, teknik pengambilan informasi vektor ini sering kali bekerja dengan database vektor untuk memungkinkan pencarian kesamaan yang cepat, terpersonalisasi, dan akurat. Dalam panduan ini, Anda akan mempelajari cara membuat Recovery Augmented Generation (RAG) dengan Milvus.

Apa itu RAG?

RAG merupakan singkatan dari retrieval augmented generation, sebuah proses hemat biaya dalam mengoptimalkan keluaran LLM untuk menghasilkan konteks dan jawaban di luar basis pengetahuannya tanpa melatih ulang modelnya.

Hal ini penting karena LLM biasanya dibatasi oleh batas waktu data pelatihannya, yang dapat mengakibatkan respons yang tidak dapat diprediksi, tidak kontekstual, dan tidak akurat. RAG memecahkan masalah ini dengan mengintegrasikan teknik pengambilan informasi vektor waktu nyata untuk memperoleh informasi waktu nyata.

Apa itu Milvus?

Milvus adalah database vektor sumber terbuka berkinerja tinggi yang dirancang khusus untuk mengelola dan mengambil data tidak terstruktur melalui penyematan vektor. Tidak seperti database vektor lainnya, Milvus dioptimalkan untuk penyimpanan cepat dan menyediakan database yang fleksibel dan terukur kepada pengguna dengan dukungan indeks dan kemampuan pencarian.

Yang membuat database vektor menarik adalah integrasi vektor dan kemampuan penyimpanan datanya, yang disertai dengan sistem pengambilan data real-time untuk membantu mengurangi halusinasi. Yang kami maksud dengan penyematan vektor adalah representasi data digital yang menangkap makna semantik kata-kata dan memungkinkan LLM menemukan konsep yang diposisikan di dekatnya dalam ruang multidimensi.

Kutipan Integrasi Vektor

Langkah-langkah Membuat Pipeline Recovery Augmented Generation (RAG) dengan Milvus

TL;DR: Proyek ini berfokus pada pembangunan sistem RAG menggunakan Milvus dan API OpenAI untuk menjawab pertanyaan pengguna secara efisien berdasarkan panduan pengembang di repositori.

Prasyarat/ketergantungan

Untuk mengikuti tutorial ini, Anda memerlukan yang berikut ini:

Pengaturan dan instalasi

Sebelum membuat RAG, Anda perlu menginstal semua dependensi Anda. Jadi, buka Jupyter Notebook secara lokal dan jalankan.

! pip install --upgrade pymilvus openai requests tqdm

Kode ini akan menginstal dan meningkatkan:

Mengikuti, import os dan kumpulkan kunci API OpenAI Anda dari Dasbor Pengembang OpenAI.

import os 

os.environ["OPENAI_API_KEY"] = "sk-***********"

Persiapan data dan model integrasi

Untuk proyek ini Anda dapat menggunakan Repositori Panduan Pengembang Milvus sebagai sumber data untuk alur RAG Anda. Untuk melakukan ini, Anda akan mengunggah semua file ke direktori panduan pengembang repositori menggunakan skrip di bawah ini.

Skrip ini menggunakan GitHub REST API untuk mengambil dan mengunduh semua konten dokumentasi pengembang dengan .md ekstensi dan menyimpannya di milvus_docs kasus.

Sekarang setelah Anda mendapatkan penurunan harga, Anda akan mengumpulkan semua teksnya .md file, pisahkan dan simpan dalam satu daftar bernama text_lines.

import requests

api_url = "
raw_base_url = "
docs_path = "milvus_docs"

if not os.path.exists(docs_path):
    os.makedirs(docs_path)

response = requests.get(api_url)

if response.status_code == 200:
    files = response.json()

    for file in files:
        if file['name'].endswith('.md'):  # Only select markdown files
            file_url = raw_base_url + file['name']

            # Download each markdown file
            file_response = requests.get(file_url)
            if file_response.status_code == 200:
                # Save the content to a local markdown file
                with open(os.path.join(docs_path, file['name']), "wb") as f:
                    f.write(file_response.content)
                print(f"Downloaded: {file['name']}")
            else:
                print(f"Failed to download: {file_url} (Status code: {file_response.status_code})")
else:
    print(f"Failed to fetch file list from {api_url} (Status code: {response.status_code})")

Siapkan model integrasi dengan OpenAI

Teknik penyematan memastikan bahwa kesamaan, klasifikasi, dan tugas pencarian dapat dilakukan pada teks kita. Model tersebut akan mengubah teks kita menjadi vektor bilangan floating point dan menggunakan jarak antara setiap vektor untuk mewakili kesamaan teks.

from glob import glob

text_lines = []

for file_path in glob(os.path.join(docs_path, "*.md"), recursive=True):
    with open(file_path, "r", encoding="utf-8") as file:
        file_text = file.read()

    text_lines += file_text.split("# ")

Kami akan menggunakan klien OpenAI untuk membuat permintaan ke OpenAI API dan berinteraksi dengan model integrasinya. Dokumentasi OpenAI (ditautkan sebelumnya) memberikan informasi lebih lanjut tentang model integrasi.

from openai 

import OpenAI openai_client = OpenAI()

Selanjutnya Anda perlu menulis sebuah fungsi, emb_textyang mengambil string teks Anda dan mengembalikan vektor penyematannya.

def emb_text(text):
    return (
        openai_client.embeddings.create(input=text, model="text-embedding-3-small")
        .data[0]
        .embedding
    )

Memuat dan memasukkan data ke Milvus

Anda dapat menjalankan Milvus dengan berbagai cara:

  • Milvus Lite adalah versi ringan Milvus yang ideal untuk proyek skala kecil.
  • Melalui Buruh pelabuhan Atau Kubernet: Namun Anda memerlukan server untuk berfungsi sebagai URI (Milvus instance).
  • Melalui Awan ZillizSolusi cloud yang terkelola sepenuhnya: Anda memerlukan URL dan kunci API untuk akun Zilliz Cloud Anda.

Karena kami menggunakan Milvus Lite, kami perlu menginstalnya terlebih dahulu pymilvus untuk terhubung ke Milvus menggunakan Milvus Python SDK.

Selanjutnya, Anda akan membuat sebuah instance dari MilvusClient dan tentukan URI ("./milvus_demo.db") untuk menyimpan data. Setelah itu, tentukan koleksi Anda. Bayangkan koleksi sebagai skema data yang berfungsi sebagai wadah vektor. Hal ini penting untuk mengatur dan mengindeks data Anda secara efisien untuk pencarian kesamaan.

Kutipan definisi koleksi

from pymilvus import MilvusClient

milvus_client = MilvusClient(uri="./milvus_demo.db")

collection_name = "my_rag_collection"

if milvus_client.has_collection(collection_name):
    milvus_client.drop_collection(collection_name)

Kemudian Anda bisa mengujinya.

test_embedding = emb_text("This is a test")
embedding_dim = len(test_embedding)
print(embedding_dim)
print(test_embedding[:10])

Kemudian Anda membuat koleksi. Secara default, Milvus menghasilkan tiga bidang:

  • bidang ID untuk identifikasi unik
  • bidang vektor untuk menyimpan embeddings
  • bidang JSON untuk mengakomodasi data yang tidak ditentukan oleh skema
milvus_client.create_collection(
    collection_name=collection_name,
    dimension=embedding_dim,
    metric_type="IP",  # Inner product distance
    consistency_level="Strong",  # Strong consistency level
)

Setelah selesai, masukkan datanya.

from tqdm import tqdm

data = []

for i, line in enumerate(tqdm(text_lines, desc="Creating embeddings")):
    data.append({"id": i, "vector": emb_text(line), "text": line})

milvus_client.insert(collection_name=collection_name, data=data)

Membangun RAG

Anda mulai dengan menentukan pertanyaan.

question = "What are the key features of Milvus that make it suitable for handling vector databases in AI applications?"

Menggunakan milvus_searchAnda mencari pertanyaan menggunakan 3 kecocokan semantik pertama di penyimpanan koleksi Anda.

search_res = milvus_client.search(
    collection_name=collection_name,
    data=[
        emb_text(question)
    ],  
    limit=3,  # Return top 3 results
    search_params={"metric_type": "IP", "params": {}},  
    output_fields=["text"],  # Return the text field
)

Sekarang Anda memproses teks dan menggunakan salah satu model GPT-3 untuk menghasilkan jawaban atas pertanyaan tersebut. Anda dapat menggunakan template OpenAI GPT-3.5-turbo.

import json

retrieved_lines_with_distances = [
    (res["entity"]["text"], res["distance"]) for res in search_res[0]
]
print(json.dumps(retrieved_lines_with_distances, indent=4))

context = "\n".join(
    [line_with_distance[0] for line_with_distance in retrieved_lines_with_distances]
)

SYSTEM_PROMPT = """
Human: You are an AI assistant. You are able to find answers to the questions from the contextual passage snippets provided.
"""
USER_PROMPT = f"""
Use the following pieces of information enclosed in  tags to provide an answer to the question enclosed in  tags.

{context}


{question}

"""
response = openai_client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": USER_PROMPT},
    ],
)
print(response.choices[0].message.content)

Keluaran respons

Penerapan sistem

Anda dapat melihat kode lengkapnya di sini Repositori GitHub. Untuk menerapkan aplikasi Google Colab RAG Anda menggunakan Docker, ikuti langkah-langkah berikut:

  1. Pertama, unggah file Google Colab Anda sebagai .py Dan .ipynb dan memasukkannya ke dalam folder. Anda juga dapat mengunggah file ke GitHub dan mengkloning repositori.

git clone 

2. Buat a .env untuk variabel Anda.

OPENAI_API_KEY= sk-*********** 

MILVUS_ENDPOINT=./milvus_demo.db 

COLLECTION_NAME=my_rag_collection ```

3. Kemudian instal dependensi Anda. Alternatifnya, Anda dapat membuat requirements.txt deposito.

komponen file persyaratan.txt

4. Selanjutnya, Anda akan membangun dan menjalankan aplikasi dalam container Docker dengan membuat Dockerfile.

5. Mulailah dengan mengunduh milvus-standalone-docker-compose.yml dan tambahkan ke folder dengan Anda .py deposito. Beri nama file yang diunduh sebagai buruh pelabuhan-compose.yml.

Namun, jika file Anda tidak ada atau salah diunduh, Anda dapat mengunduh ulang menggunakan perintah di bawah ini:

Invoke-WebRequest -Uri " -OutFile "docker-compose.yml"

6. Mulai Milvus dengan berlari docker-compose up -d. Anda dapat mempelajari lebih lanjut tentang Milvus Otonom dengan Docker Compose dalam dokumentasi.

7. Di direktori proyek Anda, buat Dockerfile.

FROM python:3.9-slim

WORKDIR /app

COPY . /app

RUN pip install -r requirements.txt
EXPOSE 8501

ENV OPENAI_API_KEY=your_openai_api_key
ENV MILVUS_ENDPOINT=./milvus_demo.db
ENV COLLECTION_NAME=my_rag_collection

# Run the app
CMD ["streamlit", "run", "build_rag_with_milvus.py"]

8. Selanjutnya, buat dan jalankan image Docker Anda:

Buat dan jalankan image Docker

docker build -t my_rag_app . 

docker run -it -p 8501:8501 my_rag_app

Membangun dengan Milvus

LLM sangat bagus, tetapi memiliki keterbatasan tertentu, seperti halusinasi. Namun, dengan alat yang tepat, keterbatasan ini dapat diatasi. Artikel ini menunjukkan cara menangani halusinasi secara lancar dengan membuat RAG dengan Milvus. Milvus memudahkan pengembang untuk melakukan pencarian kesamaan bawaan dan menggunakan data tidak terstruktur untuk LLM mereka. Dengan menggunakan Milvus dalam proyek Anda, Anda dapat membuat LLM yang akurat dan informatif dengan informasi terkini. Selain itu, arsitektur Milvus terus ditingkatkan karena merupakan database vektor sumber terbuka.

Jika Anda sudah membaca sejauh ini, saya ingin mengucapkan terima kasih – saya menghargainya! Anda dapat menghubungi saya di LinkedIn atau tinggalkan komentar.

[ad_2]