Milvus
Zilliz
Home
  • Integrationen
  • Home
  • Docs
  • Integrationen

  • Orchestrierung

  • Lama-Stapel

RAG mit Llama Stack mit Milvus aufbauen

Llama Stack ist ein serviceorientierter, API-basierter Ansatz für den Aufbau produktiver KI-Anwendungen. Er bietet einen universellen Stack, der es Entwicklern ermöglicht, überall zu entwickeln, überall einzusetzen und produktionsreife Bausteine mit echter Anbieterunabhängigkeit zu nutzen. Der Llama-Stack konzentriert sich auf Metas Llama-Modelle, Kompositionsfähigkeit, Produktionsreife und ein Partner-Ökosystem.

In diesem Tutorial werden wir Ihnen zeigen, wie Sie einen mit Milvus konfigurierten Llama Stack Server aufbauen, der es Ihnen ermöglicht, Ihre privaten Daten zu importieren und als Wissensbasis zu nutzen. Anschließend werden wir Abfragen auf dem Server durchführen und eine vollständige RAG-Anwendung erstellen.

Vorbereiten der Umgebung

Es gibt viele Möglichkeiten, den Llama Stack Server zu starten, z.B. als Bibliothek, als Distribution, usw. Für jede Komponente des Llama Stack können auch verschiedene Provider gewählt werden. Daher gibt es zahlreiche Möglichkeiten, den Llama Stack-Server zu starten.

Dieses Tutorial verwendet die folgende Konfiguration als Beispiel für den Start des Dienstes. Wenn Sie ihn auf eine andere Weise starten möchten, lesen Sie bitte Start eines Llama Stack Servers.

  • Wir verwenden Conda, um eine eigene Distribution mit Milvus-Konfiguration zu erstellen.
  • Wir verwenden Together AI als LLM-Anbieter.
  • Als Einbettungsmodell wird das Standardmodell all-MiniLM-L6-v2 verwendet.

Dieses Tutorial bezieht sich hauptsächlich auf die offizielle Installationsanleitung der Llama Stack Dokumentation. Wenn Sie veraltete Teile in diesem Tutorial finden, können Sie sich vorrangig an der offiziellen Anleitung orientieren und ein Issue für uns erstellen.

Llama Stack Server starten

Vorbereiten der Umgebung

Da wir Together AI als LLM-Dienst verwenden müssen, müssen wir uns zunächst auf der offiziellen Website anmelden, um einen API-Schlüssel zu beantragen und den API-Schlüssel TOGETHER_API_KEY als Umgebungsvariable zu setzen.

Klonen Sie den Quellcode von Llama Stack

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

Erstellen Sie eine conda-Umgebung und installieren Sie die Abhängigkeiten

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

$ pip install -e .

Ändern Sie den Inhalt von llama_stack/llama_stack/template/together/run.yaml, indem Sie den Abschnitt vector_io durch die entsprechende Milvus-Konfiguration ersetzen. Zum Beispiel, fügen Sie hinzu:

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

In Llama Stack kann Milvus auf zwei Arten konfiguriert werden: die lokale Konfiguration, inline::milvus, und die Remote-Konfiguration, remote::milvus.

  • Die einfachste Methode ist die lokale Konfiguration, bei der Sie db_path als Pfad für die lokale Speicherung von Milvus-Lite-Dateien angeben müssen.

  • Die Fernkonfiguration ist für große Datenmengen geeignet.

    • Wenn Sie eine große Datenmenge haben, können Sie einen performanten Milvus-Server auf Docker oder Kubernetes einrichten. Bei dieser Einrichtung verwenden Sie bitte die Server-URI, z. B. http://localhost:19530, als uri. Der Standard token ist root:Milvus.
    • Wenn Sie Zilliz Cloud, den vollständig verwalteten Cloud-Dienst für Milvus, verwenden möchten, passen Sie uri und token an, die dem öffentlichen Endpunkt und dem API-Schlüssel in Zilliz Cloud entsprechen.

Erstellen der Distribution aus der Vorlage

Führen Sie den folgenden Befehl aus, um die Distribution zu erstellen:

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

Es wird eine Datei unter ~/.llama/distributions/together/together-run.yaml erstellt. Führen Sie dann diesen Befehl aus, um den Server zu starten:

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

Wenn alles glatt läuft, sollten Sie sehen, dass der Llama Stack Server erfolgreich auf Port 8321 läuft.

RAG vom Client aus ausführen

Sobald Sie den Server gestartet haben, können Sie den Client-Code für den Zugriff auf den Server schreiben. Hier ist ein Beispielcode:

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)

Führen Sie diesen Code aus, um die RAG-Abfrage durchzuführen. Wenn alles richtig funktioniert, sollte die Ausgabe wie folgt aussehen:

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

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

War diese Seite hilfreich?