Udostępnij za pośrednictwem


Tworzenie aplikacji za pomocą biblioteki LlamaIndex i Azure AI Foundry

Z tego artykułu dowiesz się, jak używać usługi LlamaIndex z modelami wdrożonym z katalogu modeli usługi Azure AI w portalu Azure AI Foundry.

Modele wdrożone w usłudze Azure AI Foundry mogą być używane z indeksem LlamaIndex na dwa sposoby:

  • Korzystanie z interfejsu API wnioskowania modelu AI platformy Azure: wszystkie modele wdrożone w usłudze Azure AI Foundry obsługują interfejs API wnioskowania modelu sztucznej inteligencji platformy Azure, który oferuje wspólny zestaw funkcji, które mogą być używane w większości modeli w wykazie. Zaletą tego interfejsu API jest to, że ponieważ jest taka sama dla wszystkich modeli, zmiana z jednego na drugą jest tak prosta, jak zmiana używanego wdrożenia modelu. W kodzie nie są wymagane żadne dalsze zmiany. Podczas pracy z llamaIndex zainstaluj rozszerzenia llama-index-llms-azure-inference i llama-index-embeddings-azure-inference.

  • Korzystanie z interfejsu API specyficznego dla dostawcy modelu: niektóre modele, takie jak OpenAI, Cohere lub Mistral, oferują własny zestaw interfejsów API i rozszerzeń dla indeksu LlamaIndex. Rozszerzenia te mogą obejmować określone funkcje obsługiwane przez model i dlatego są odpowiednie, jeśli chcesz je wykorzystać. Podczas pracy z llama-indexprogramem zainstaluj rozszerzenie specyficzne dla modelu, którego chcesz użyć, na przykład llama-index-llms-openai lub llama-index-llms-cohere.

W tym przykładzie pracujemy z interfejsem API wnioskowania modelu AI platformy Azure.

Wymagania wstępne

Do uruchomienia tego samouczka potrzebne są następujące elementy:

Konfigurowanie środowiska

Aby używać usług LLM wdrożonych w portalu usługi Azure AI Foundry, potrzebny jest punkt końcowy i poświadczenia, aby nawiązać z nim połączenie. Wykonaj następujące kroki, aby uzyskać potrzebne informacje z modelu, którego chcesz użyć:

  1. Przejdź do usługi Azure AI Foundry.

  2. Otwórz projekt, w którym wdrożono model, jeśli nie jest jeszcze otwarty.

  3. Przejdź do pozycji Modele i punkty końcowe i wybierz wdrożony model zgodnie z wymaganiami wstępnymi.

  4. Skopiuj adres URL punktu końcowego i klucz.

    Zrzut ekranu przedstawiający opcję kopiowania identyfikatora URI i kluczy punktu końcowego z punktu końcowego.

    Napiwek

    Jeśli model został wdrożony przy użyciu obsługi identyfikatora Entra firmy Microsoft, nie potrzebujesz klucza.

W tym scenariuszu umieściliśmy zarówno adres URL punktu końcowego, jak i klucz w następujących zmiennych środowiskowych:

export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"

Po skonfigurowaniu utwórz klienta w celu nawiązania połączenia z punktem końcowym.

import os
from llama_index.llms.azure_inference import AzureAICompletionsModel

llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
)

Napiwek

Jeśli wdrożenie modelu jest hostowane w usłudze Azure OpenAI lub zasobie usług Azure AI Services, skonfiguruj klienta zgodnie z modelami azure OpenAI i usługą wnioskowania modelu azure AI.

Jeśli punkt końcowy obsługuje więcej niż jeden model, podobnie jak w przypadku usługi wnioskowania modelu AI platformy Azure lub modeli GitHub, musisz wskazać model_name parametr:

import os
from llama_index.llms.azure_inference import AzureAICompletionsModel

llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
    model_name="mistral-large-2407",
)

Alternatywnie, jeśli punkt końcowy obsługuje identyfikator Entra firmy Microsoft, możesz użyć następującego kodu, aby utworzyć klienta:

import os
from azure.identity import DefaultAzureCredential
from llama_index.llms.azure_inference import AzureAICompletionsModel

llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=DefaultAzureCredential(),
)

Uwaga

W przypadku korzystania z identyfikatora Entra firmy Microsoft upewnij się, że punkt końcowy został wdrożony przy użyciu tej metody uwierzytelniania i że masz wymagane uprawnienia do jego wywołania.

Jeśli planujesz użyć wywołania asynchronicznego, najlepszym rozwiązaniem jest użycie wersji asynchronicznej dla poświadczeń:

from azure.identity.aio import (
    DefaultAzureCredential as DefaultAzureCredentialAsync,
)
from llama_index.llms.azure_inference import AzureAICompletionsModel

llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=DefaultAzureCredentialAsync(),
)

Modele platformy Azure OpenAI i usługa wnioskowania modelu AI platformy Azure

Jeśli używasz usługi Azure OpenAI lub usługi wnioskowania modelu azure AI, upewnij się, że masz co najmniej wersję 0.2.4 integracji z usługą LlamaIndex. Użyj api_version parametru w przypadku, gdy musisz wybrać określony api_versionparametr .

W przypadku usługi wnioskowania modelu AI platformy Azure należy przekazać model_name parametr:

from llama_index.llms.azure_inference import AzureAICompletionsModel

llm = AzureAICompletionsModel(
    endpoint="https://<resource>.services.ai.azure.com/models",
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
    model_name="mistral-large-2407",
)

W przypadku usługi Azure OpenAI:

from llama_index.llms.azure_inference import AzureAICompletionsModel

llm = AzureAICompletionsModel(
    endpoint="https://<resource>.openai.azure.com/openai/deployments/<deployment-name>",
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
    api_version="2024-05-01-preview",
)

Napiwek

Sprawdź, która wersja interfejsu API jest używana przez wdrożenie. Użycie nieprawidłowego api_version lub nieobsługiwanego przez model powoduje ResourceNotFound wyjątek.

Parametry wnioskowania

Możesz skonfigurować sposób wnioskowania wykonywanego dla wszystkich operacji, które używają tego klienta, ustawiając dodatkowe parametry. Pomaga to uniknąć wskazywania ich przy każdym wywołaniu, które należy wykonać do modelu.

llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
    temperature=0.0,
    model_kwargs={"top_p": 1.0},
)

Parametry nieobsługiwane w interfejsie API wnioskowania modelu AI platformy Azure (odwołanie), ale dostępne w modelu bazowym, można użyć argumentu model_extras . W poniższym przykładzie parametr safe_prompt, dostępny tylko dla modeli Mistral, jest przekazywany.

llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
    temperature=0.0,
    model_kwargs={"model_extras": {"safe_prompt": True}},
)

Korzystanie z modeli LLMs

Możesz użyć klienta bezpośrednio lub skonfigurować modele używane przez kod w elemecie LlamaIndex. Aby użyć modelu bezpośrednio, użyj chat metody dla modeli instrukcji czatu:

from llama_index.core.llms import ChatMessage

messages = [
    ChatMessage(
        role="system", content="You are a pirate with colorful personality."
    ),
    ChatMessage(role="user", content="Hello"),
]

response = llm.chat(messages)
print(response)

Możesz również przesyłać strumieniowo dane wyjściowe:

response = llm.stream_chat(messages)
for r in response:
    print(r.delta, end="")

Metoda complete jest nadal dostępna dla modelu typu chat-completions. W takich przypadkach tekst wejściowy jest konwertowany na komunikat za pomocą role="user"polecenia .

Korzystanie z modeli osadzania

W taki sam sposób, jak tworzysz klienta LLM, możesz nawiązać połączenie z modelem osadzania. W poniższym przykładzie ustawiamy zmienną środowiskową, aby wskazywała teraz model osadzania:

export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"

Następnie utwórz klienta:

from llama_index.embeddings.azure_inference import AzureAIEmbeddingsModel

embed_model = AzureAIEmbeddingsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ['AZURE_INFERENCE_CREDENTIAL'],
)

W poniższym przykładzie pokazano prosty test, aby sprawdzić, czy działa:

from llama_index.core.schema import TextNode

nodes = [
    TextNode(
        text="Before college the two main things I worked on, "
        "outside of school, were writing and programming."
    )
]
response = embed_model(nodes=nodes)
print(response[0].embedding)

Konfigurowanie modeli używanych przez kod

Możesz użyć klienta modelu LLM lub osadzania indywidualnie w kodzie opracowywany za pomocą llamaIndex lub skonfigurować całą sesję przy użyciu Settings opcji. Skonfigurowanie sesji ma zaletę całego kodu przy użyciu tych samych modeli dla wszystkich operacji.

from llama_index.core import Settings

Settings.llm = llm
Settings.embed_model = embed_model

Istnieją jednak scenariusze, w których chcesz użyć ogólnego modelu dla większości operacji, ale konkretnego dla danego zadania. W takich przypadkach przydatne jest ustawienie modelu LLM lub osadzania używanego dla każdej konstrukcji LlamaIndex. W poniższym przykładzie ustawiliśmy określony model:

from llama_index.core.evaluation import RelevancyEvaluator

relevancy_evaluator = RelevancyEvaluator(llm=llm)

Ogólnie rzecz biorąc, używasz kombinacji obu strategii.