Membangun RAG dengan Llama Stack dengan Milvus

Llama Stack adalah pendekatan yang berorientasi pada layanan dan mengutamakan API untuk membangun aplikasi AI produksi. Llama Stack menyediakan tumpukan universal yang memungkinkan pengembang untuk mengembangkan di mana saja, menerapkan di mana saja, dan memanfaatkan blok bangunan yang siap produksi dengan kemandirian penyedia yang sebenarnya. Llama Stack berfokus pada model Llama Meta, komposabilitas, kesiapan produksi, dan ekosistem kemitraan.

Dalam tutorial ini, kami akan memperkenalkan cara membangun Llama Stack Server yang dikonfigurasi dengan Milvus, yang memungkinkan Anda untuk mengimpor data pribadi Anda untuk digunakan sebagai basis pengetahuan. Kita kemudian akan melakukan kueri pada server, membuat aplikasi RAG yang lengkap.

Mempersiapkan Lingkungan

Ada banyak cara untuk memulai server Llama Stack, seperti sebagai perpustakaan, membangun distribusi, dll. Untuk setiap komponen dalam Llama Stack, berbagai penyedia juga dapat dipilih. Oleh karena itu, ada banyak cara untuk meluncurkan server Llama Stack.

Tutorial ini menggunakan konfigurasi berikut sebagai contoh untuk memulai layanan. Jika Anda ingin memulainya dengan cara lain, silakan lihat Memulai Server Llama Stack.

  • Kita menggunakan Conda untuk membangun distribusi kustom dengan konfigurasi Milvus.
  • Kami menggunakan Together AI sebagai penyedia LLM.
  • Kami menggunakan all-MiniLM-L6-v2 default sebagai model penyematan.

Tutorial ini terutama mengacu pada panduan instalasi resmi dari dokumentasi Llama Stack. Jika Anda menemukan bagian yang sudah ketinggalan zaman dalam tutorial ini, Anda dapat memprioritaskan untuk mengikuti panduan resmi dan membuat masalah untuk kami.

Memulai Llama Stack Server

Menyiapkan Lingkungan

Karena kita perlu menggunakan Together AI sebagai layanan LLM, pertama-tama kita harus masuk ke situs web resminya untuk mengajukan permohonan API key dan menetapkan API key TOGETHER_API_KEY sebagai variabel lingkungan.

Kloning kode sumber Llama Stack

$ git clone https://github.com/meta-llama/llama-stack.git
$ cd llama-stack

Buat lingkungan conda dan instal dependensi

$ conda create -n stack python=3.10
$ conda activate stack

$ pip install -e .

Ubah konten di llama_stack/llama_stack/template/together/run.yaml, ubah bagian vector_io ke konfigurasi Milvus yang relevan. Sebagai contoh, tambahkan:

vector_io:
- provider_id: milvus
  provider_type: inline::milvus
  config:
    db_path: ~/.llama/distributions/together/milvus_store.db

#  - provider_id: milvus
#    provider_type: remote::milvus
#    config:
#      uri: http://localhost:19530
#      token: root:Milvus

Di Llama Stack, Milvus dapat dikonfigurasi dengan dua cara: konfigurasi lokal, yaitu inline::milvus, dan konfigurasi jarak jauh, yaitu remote::milvus.

  • Metode yang paling sederhana adalah konfigurasi lokal, yang membutuhkan pengaturan db_path, jalur untuk menyimpan file Milvus-Lite secara lokal.

  • Konfigurasi jarak jauh cocok untuk penyimpanan data yang besar.

    • Jika Anda memiliki data dalam jumlah besar, Anda dapat menyiapkan server Milvus yang berkinerja baik pada Docker atau Kubernetes. Dalam pengaturan ini, silakan gunakan URI server, misalnya, http://localhost:19530, sebagai uri. token default adalah root:Milvus.
    • Jika Anda ingin menggunakan Zilliz Cloud, layanan cloud yang dikelola sepenuhnya untuk Milvus, sesuaikan uri dan token, yang sesuai dengan Public Endpoint dan kunci API di Zilliz Cloud.

Membangun distribusi dari templat

Jalankan perintah berikut untuk membangun distribusi:

$ llama stack build --template together --image-type conda

Sebuah berkas akan dihasilkan di ~/.llama/distributions/together/together-run.yaml. Kemudian, jalankan perintah ini untuk memulai server:

$ llama stack run --image-type conda ~/.llama/distributions/together/together-run.yaml

Jika semuanya berjalan lancar, Anda akan melihat server Llama Stack berhasil berjalan pada port 8321.

Melakukan RAG dari klien

Setelah Anda memulai server, Anda dapat menulis kode klien untuk mengaksesnya. Berikut ini adalah contoh kodenya:

import uuid
from llama_stack_client.types import Document
from llama_stack_client.lib.agents.agent import Agent
from llama_stack_client.types.agent_create_params import AgentConfig

# See https://www.together.ai/models for all available models
INFERENCE_MODEL = "meta-llama/Llama-3.3-70B-Instruct-Turbo"
LLAMA_STACK_PORT = 8321


def create_http_client():
    from llama_stack_client import LlamaStackClient

    return LlamaStackClient(
        base_url=f"http://localhost:{LLAMA_STACK_PORT}"  # Your Llama Stack Server URL
    )


client = create_http_client()

# Documents to be used for RAG
urls = ["chat.rst", "llama3.rst", "memory_optimizations.rst", "lora_finetune.rst"]
documents = [
    Document(
        document_id=f"num-{i}",
        content=f"https://raw.githubusercontent.com/pytorch/torchtune/main/docs/source/tutorials/{url}",
        mime_type="text/plain",
        metadata={},
    )
    for i, url in enumerate(urls)
]

# Register a vector database
vector_db_id = f"test-vector-db-{uuid.uuid4().hex}"
client.vector_dbs.register(
    vector_db_id=vector_db_id,
    embedding_model="all-MiniLM-L6-v2",
    embedding_dimension=384,
    provider_id="milvus",
)

print("inserting...")
# Insert the documents into the vector database
client.tool_runtime.rag_tool.insert(
    documents=documents, vector_db_id=vector_db_id, chunk_size_in_tokens=1024,
)

agent_config = AgentConfig(
    model=INFERENCE_MODEL,
    # Define instructions for the agent ( aka system prompt)
    instructions="You are a helpful assistant",
    enable_session_persistence=False,
    # Define tools available to the agent
    toolgroups=[{"name": "builtin::rag", "args": {"vector_db_ids": [vector_db_id]}}],
)

rag_agent = Agent(client, agent_config)
session_id = rag_agent.create_session("test-session")
print("finish init agent...")
user_prompt = (
    "What are the top 5 topics that were explained? Only list succinct bullet points."
)

# Get the final answer from the agent
response = rag_agent.create_turn(
    messages=[{"role": "user", "content": user_prompt}],
    session_id=session_id,
    stream=False,
)
print(f"Response: ")
print(response.output_message.content)

Jalankan kode ini untuk melakukan kueri RAG. Jika semuanya berjalan dengan baik, hasilnya akan terlihat seperti ini:

inserting...
finish init agent...
Response: 
* Fine-Tuning Llama3 with Chat Data
* Evaluating fine-tuned Llama3-8B models with EleutherAI's Eval Harness
* Generating text with our fine-tuned Llama3 model
* Faster generation via quantization
* Fine-tuning on a custom chat dataset

Coba Milvus yang Dikelola secara Gratis

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

Mulai
Umpan balik

Apakah halaman ini bermanfaat?