• О Милвусе
  • Начать
  • Концепции
  • Руководство пользователя
  • Импорт данных
  • Инструменты искусственного интеллекта
  • Руководство по администрированию
  • Инструменты
  • Интеграции
  • Учебники
  • Вопросы и ответы
  • API Reference

Создайте RAG на основе Llama Stack с помощью Milvus

Llama Stack - это сервис-ориентированный, API-ориентированный подход к созданию производственных приложений искусственного интеллекта. Он представляет собой универсальный стек, который позволяет разработчикам разрабатывать в любом месте, развертывать в любом месте и использовать готовые к производству строительные блоки с подлинной независимостью от поставщика. Стек Llama Stack фокусируется на моделях Meta Llama, композитности, готовности к производству и партнерской экосистеме.

В этом учебном пособии мы расскажем, как создать сервер Llama Stack Server, сконфигурированный с Milvus, что позволит вам импортировать свои частные данные в качестве базы знаний. Затем мы выполним запросы на сервере, создав полноценное RAG-приложение.

Подготовка среды

Существует множество способов запустить сервер Llama Stack, например в виде библиотеки, сборки дистрибутива и т. д. Для каждого компонента Llama Stack также можно выбрать различных провайдеров. Таким образом, существует множество способов запустить сервер Llama Stack.

В этом руководстве в качестве примера используется следующая конфигурация для запуска службы. Если вы хотите запустить его другим способом, обратитесь к разделу "Запуск сервера Llama Stack".

  • Мы используем Conda для создания пользовательского дистрибутива с конфигурацией Milvus.
  • В качестве провайдера LLM мы используем Together AI.
  • В качестве модели встраивания мы используем стандартный all-MiniLM-L6-v2.

Это руководство в основном ссылается на официальное руководство по установке в документации Llama Stack. Если вы найдете в этом руководстве устаревшие части, вы можете отдать предпочтение официальному руководству и создать для нас проблему.

Запуск сервера Llama Stack

Подготовьте среду

Поскольку нам нужно использовать Together AI в качестве LLM-сервиса, мы должны сначала войти на официальный сайт, чтобы подать заявку на получение API-ключа, и установить API-ключ TOGETHER_API_KEY в качестве переменной окружения.

Клонирование исходного кода Llama Stack

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

Создайте окружение conda и установите зависимости

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

$ pip install -e .

Измените содержимое llama_stack/llama_stack/template/together/run.yaml, изменив секцию vector_io на соответствующую конфигурацию Milvus. Например, добавьте:

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

В Llama Stack Milvus может быть настроен двумя способами: локальная конфигурация, которая находится на inline::milvus, и удаленная конфигурация, которая находится на remote::milvus.

  • Самый простой способ - локальная конфигурация, которая требует установки db_path, пути для локального хранения файлов Milvus-Lite.

  • Удаленная конфигурация подходит для хранения большого объема данных.

    • Если у вас большой объем данных, вы можете создать производительный сервер Milvus на Docker или Kubernetes. При такой настройке используйте URI сервера, например, http://localhost:19530, в качестве uri. По умолчанию token - это root:Milvus.
    • Если вы хотите использовать Zilliz Cloud, полностью управляемый облачный сервис для Milvus, измените uri и token, которые соответствуют публичной конечной точке и ключу API в Zilliz Cloud.

Сборка дистрибутива из шаблона

Выполните следующую команду для сборки дистрибутива:

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

Будет создан файл по адресу ~/.llama/distributions/together/together-run.yaml. Затем выполните эту команду, чтобы запустить сервер:

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

Если все прошло гладко, вы должны увидеть, что сервер Llama Stack успешно запущен на порту 8321.

Выполнение RAG с клиента

После запуска сервера можно написать код клиента для доступа к нему. Вот пример кода:

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)

Запустите этот код для выполнения запроса RAG. Если все работает правильно, вывод должен выглядеть следующим образом:

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

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?