Milvus
Zilliz
الصفحة الرئيسية
  • عمليات الدمج
  • Home
  • Docs
  • عمليات الدمج

  • التنسيق

  • كومة اللاما

بناء RAG مع Llama Stack مع Milvus

Llama Stack هو نهج مكدسLlama Stack هو نهج موجه نحو الخدمة يعتمد على واجهة برمجة التطبيقات أولاً لبناء تطبيقات الذكاء الاصطناعي للإنتاج. وهو يوفر مكدسًا عالميًا يسمح للمطورين بالتطوير في أي مكان، والنشر في كل مكان، والاستفادة من وحدات البناء الجاهزة للإنتاج مع استقلالية حقيقية للمزود. تركز حزمة Llama Stack على نماذج Llama الخاصة ب Meta، وقابلية التركيب، والجاهزية للإنتاج، والنظام البيئي للشراكة.

سنقدم في هذا البرنامج التعليمي كيفية إنشاء خادم Llama Stack المكدس الذي تم تكوينه باستخدام Milvus، مما يتيح لك استيراد بياناتك الخاصة لتكون بمثابة قاعدة معرفية. سنقوم بعد ذلك بإجراء استعلامات على الخادم، وإنشاء تطبيق RAG كامل.

إعداد البيئة

هناك العديد من الطرق لبدء تشغيل خادم Llama Stack، مثل مكتبة أو بناء توزيع، إلخ. لكل مكوّن في Llama Stack، يمكن أيضًا اختيار مزودين مختلفين. لذلك، هناك العديد من الطرق لبدء تشغيل خادم Llama Stack.

يستخدم هذا البرنامج التعليمي التكوين التالي كمثال لبدء تشغيل الخدمة. إذا كنت ترغب في بدء تشغيله بطريقة أخرى، يرجى الرجوع إلى بدء تشغيل خادم Llama Stack.

  • نستخدم كوندا لبناء توزيع مخصص مع تكوين ميلفوس.
  • نستخدم Together AI كموفر LLM.
  • نستخدم الافتراضي all-MiniLM-L6-v2 كنموذج التضمين.

يشير هذا البرنامج التعليمي بشكل أساسي إلى دليل التثبيت الرسمي لوثائق Llama Stack. إذا وجدت أي أجزاء قديمة في هذا البرنامج التعليمي، يمكنك إعطاء الأولوية لاتباع الدليل الرسمي وإنشاء مشكلة لنا.

بدء تشغيل خادم لاما ستاك

إعداد البيئة

نظرًا لأننا نحتاج إلى استخدام الذكاء الاصطناعي معًا كخدمة LLM، يجب علينا أولاً تسجيل الدخول إلى الموقع الرسمي لتقديم طلب للحصول على مفتاح API وتعيين مفتاح API TOGETHER_API_KEY كمتغير بيئة.

استنساخ كود مصدر Llama Stack

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

إنشاء بيئة كوندا وتثبيت التبعيات

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

$ pip install -e .

قم بتعديل المحتوى في llama_stack/llama_stack/template/together/run.yaml ، وتغيير قسم vector_io إلى تكوين ميلفوس ذي الصلة. على سبيل المثال، أضف:

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 الخادم URI، على سبيل المثال، http://localhost:19530 ، كـ uri. الافتراضي token هو root:Milvus.
    • إذا كنت ترغب في استخدام Zilliz Cloud، الخدمة السحابية المدارة بالكامل لـ Milvus، فاضبط uri و token ، والتي تتوافق مع نقطة النهاية العامة ومفتاح واجهة برمجة التطبيقات في 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 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟