Membangun Pemulihan Augmented Generation (RAG) dengan Milvus
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.
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:
- pimilvusyang merupakan Milvus Python SDK
- membukaperpustakaan OpenAI Python API
- permintaan untuk membuat permintaan HTTP
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_text
yang 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.
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_search
Anda 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)
Penerapan sistem
Anda dapat melihat kode lengkapnya di sini Repositori GitHub. Untuk menerapkan aplikasi Google Colab RAG Anda menggunakan Docker, ikuti langkah-langkah berikut:
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.
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:
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]