Utveckla program med LlamaIndex och Azure AI Foundry
I den här artikeln får du lära dig hur du använder LlamaIndex med modeller som distribuerats från Azure AI-modellkatalogen i Azure AI Foundry-portalen.
Modeller som distribueras till Azure AI Foundry kan användas med LlamaIndex på två sätt:
Med inferens-API:et för Azure AI-modellen: Alla modeller som distribueras till Azure AI Foundry stöder Azure AI-modellinferens-API:et, som erbjuder en gemensam uppsättning funktioner som kan användas för de flesta modeller i katalogen. Fördelen med det här API:et är att eftersom det är samma sak för alla modeller är det lika enkelt att byta från en till en annan som att ändra den modelldistribution som används. Inga ytterligare ändringar krävs i koden. När du arbetar med LlamaIndex installerar du tilläggen
llama-index-llms-azure-inference
ochllama-index-embeddings-azure-inference
.Använda modellens providerspecifika API: Vissa modeller, till exempel OpenAI, Cohere eller Mistral, erbjuder en egen uppsättning API:er och tillägg för LlamaIndex. Dessa tillägg kan innehålla specifika funktioner som modellen stöder och därför är lämpliga om du vill utnyttja dem. När du arbetar med
llama-index
installerar du tillägget som är specifikt för den modell som du vill använda, till exempelllama-index-llms-openai
ellerllama-index-llms-cohere
.
I det här exemplet arbetar vi med Azure AI-modellinferens-API:et.
Förutsättningar
Om du vill köra den här självstudien behöver du:
Ett Azure AI-projekt enligt beskrivningen i Skapa ett projekt i Azure AI Foundry-portalen.
En modell som stöder azure AI-modellinferens-API :et som distribuerats. I det här exemplet använder vi en
Mistral-Large
distribution, men använder valfri modell. För att använda inbäddningsfunktioner i LlamaIndex behöver du en inbäddningsmodell somcohere-embed-v3-multilingual
.- Du kan följa anvisningarna i Distribuera modeller som serverlösa API:er.
Python 3.8 eller senare installerat, inklusive pip.
LlamaIndex installerat. Du kan göra det med:
pip install llama-index
I det här exemplet arbetar vi med Azure AI-modellinferens-API:et, och därför installerar vi följande paket:
pip install -U llama-index-llms-azure-inference pip install -U llama-index-embeddings-azure-inference
Viktigt!
Användning av Azure AI-modellinferenstjänsten kräver version
0.2.4
förllama-index-llms-azure-inference
ellerllama-index-embeddings-azure-inference
.
Konfigurera miljön
Om du vill använda LLM:er som distribuerats i Azure AI Foundry-portalen behöver du slutpunkten och autentiseringsuppgifterna för att ansluta till den. Följ dessa steg för att hämta den information du behöver från den modell som du vill använda:
Gå till Azure AI Foundry.
Öppna projektet där modellen distribueras, om den inte redan är öppen.
Gå till Modeller + slutpunkter och välj den modell som du distribuerade enligt kraven.
Kopiera slutpunkts-URL:en och nyckeln.
Dricks
Om din modell har distribuerats med Microsoft Entra ID-stöd behöver du ingen nyckel.
I det här scenariot placerade vi både slutpunkts-URL:en och nyckeln i följande miljövariabler:
export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"
När du har konfigurerat skapar du en klient för att ansluta till slutpunkten.
import os
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
)
Dricks
Om din modelldistribution finns i Azure OpenAI-tjänsten eller Azure AI Services-resursen konfigurerar du klienten enligt vad som anges i Azure OpenAI-modeller och Azure AI-modellinferenstjänsten.
Om slutpunkten betjänar mer än en modell, till exempel med azure AI-modellens slutsatsdragningstjänst eller GitHub-modeller, måste du ange model_name
parametern:
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",
)
Om slutpunkten har stöd för Microsoft Entra-ID kan du också använda följande kod för att skapa klienten:
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(),
)
Kommentar
När du använder Microsoft Entra-ID kontrollerar du att slutpunkten har distribuerats med den autentiseringsmetoden och att du har de behörigheter som krävs för att anropa den.
Om du planerar att använda asynkront anrop är det bästa praxis att använda den asynkrona versionen för autentiseringsuppgifterna:
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(),
)
Azure OpenAI-modeller och Azure AI-modellinferenstjänst
Om du använder Azure OpenAI-tjänsten eller Azure AI-modellinferenstjänsten kontrollerar du att du har minst en version 0.2.4
av LlamaIndex-integreringen. Använd api_version
parametern om du behöver välja en specifik api_version
.
För inferenstjänsten för Azure AI-modellen måste du skicka model_name
parametern:
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",
)
För Azure OpenAI-tjänsten:
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",
)
Dricks
Kontrollera vilken API-version som distributionen använder. Om du använder ett fel api_version
eller en som inte stöds av modellen resulterar det i ett ResourceNotFound
undantag.
Slutsatsdragningsparametrar
Du kan konfigurera hur slutsatsdragning utförs för alla åtgärder som använder den här klienten genom att ange extra parametrar. Detta hjälper till att undvika att ange dem för varje anrop du gör till modellen.
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
temperature=0.0,
model_kwargs={"top_p": 1.0},
)
Parametrar som inte stöds i Azure AI-modellens slutsatsdragnings-API (referens) men som är tillgängliga i den underliggande modellen kan du använda model_extras
argumentet. I följande exempel skickas parametern safe_prompt
, som endast är tillgänglig för Mistral-modeller.
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
temperature=0.0,
model_kwargs={"model_extras": {"safe_prompt": True}},
)
Använda LLM-modeller
Du kan använda klienten direkt eller Konfigurera de modeller som används av koden i LlamaIndex. Om du vill använda modellen direkt använder du chat
metoden för chattinstruktionsmodeller:
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)
Du kan också strömma utdata:
response = llm.stream_chat(messages)
for r in response:
print(r.delta, end="")
Metoden complete
är fortfarande tillgänglig för modell av typen chat-completions
. I dessa fall konverteras indatatexten till ett meddelande med role="user"
.
Använda inbäddningsmodeller
På samma sätt som du skapar en LLM-klient kan du ansluta till en inbäddningsmodell. I följande exempel ställer vi in miljövariabeln så att den nu pekar på en inbäddningsmodell:
export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"
Skapa sedan klienten:
from llama_index.embeddings.azure_inference import AzureAIEmbeddingsModel
embed_model = AzureAIEmbeddingsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ['AZURE_INFERENCE_CREDENTIAL'],
)
I följande exempel visas ett enkelt test för att verifiera att det fungerar:
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)
Konfigurera de modeller som används av koden
Du kan använda LLM- eller inbäddningsmodellklienten individuellt i koden som du utvecklar med LlamaIndex eller så kan du konfigurera hela sessionen med hjälp av Settings
alternativen. Att konfigurera sessionen har fördelen med all kod med samma modeller för alla åtgärder.
from llama_index.core import Settings
Settings.llm = llm
Settings.embed_model = embed_model
Det finns dock scenarier där du vill använda en allmän modell för de flesta åtgärder, men en specifik för en viss uppgift. I dessa fall är det användbart att ange den LLM- eller inbäddningsmodell som du använder för varje LlamaIndex-konstruktion. I följande exempel anger vi en specifik modell:
from llama_index.core.evaluation import RelevancyEvaluator
relevancy_evaluator = RelevancyEvaluator(llm=llm)
I allmänhet använder du en kombination av båda strategierna.