Erstellen einer RAG-basierten Clientanwendung
Wenn Sie einen Azure AI Search-Index für Ihre Kontextdaten erstellt haben, können Sie ihn mit einem OpenAI-Modell verwenden. Um Eingabeaufforderungen mit Daten aus Ihrem Index zu grounden, unterstützt das Azure OpenAI SDK das Erweitern der Anforderung mit Verbindungsdetails für den Index.
Das folgende Python-Codebeispiel zeigt, wie dieses Muster implementiert wird.
from openai import AzureOpenAI
# Get an Azure OpenAI chat client
chat_client = AzureOpenAI(
api_version = "2024-12-01-preview",
azure_endpoint = open_ai_endpoint,
api_key = open_ai_key
)
# Initialize prompt with system message
prompt = [
{"role": "system", "content": "You are a helpful AI assistant."}
]
# Add a user input message to the prompt
input_text = input("Enter a question: ")
prompt.append({"role": "user", "content": input_text})
# Additional parameters to apply RAG pattern using the AI Search index
rag_params = {
"data_sources": [
{
"type": "azure_search",
"parameters": {
"endpoint": search_url,
"index_name": "index_name",
"authentication": {
"type": "api_key",
"key": search_key,
}
}
}
],
}
# Submit the prompt with the index information
response = chat_client.chat.completions.create(
model="<model_deployment_name>",
messages=prompt,
extra_body=rag_params
)
# Print the contextualized response
completion = response.choices[0].message.content
print(completion)
In diesem Beispiel ist die Suche mit dem Index schlüsselwortbasiert , d. h. die Abfrage besteht aus dem Text in der Benutzeraufforderung, der mit Text in den indizierten Dokumenten übereinstimmt. Bei Verwendung eines Indexes, der ihn unterstützt, besteht ein alternativer Ansatz darin, eine vektorbasierte Abfrage zu verwenden, in der der Index und die Abfrage numerische Vektoren verwenden, um Texttoken darzustellen. Die Suche mit Vektoren ermöglicht den Abgleich basierend auf semantischer Ähnlichkeit sowie Literaltextüberstimmungen.
Um eine vektorbasierte Abfrage zu verwenden, können Sie die Spezifikation der Azure AI Search-Datenquellendetails ändern, um ein Einbettungsmodell einzuschließen. die dann zum Vektorisieren des Abfragetexts verwendet wird.
rag_params = {
"data_sources": [
{
"type": "azure_search",
"parameters": {
"endpoint": search_url,
"index_name": "index_name",
"authentication": {
"type": "api_key",
"key": search_key,
},
# Params for vector-based query
"query_type": "vector",
"embedding_dependency": {
"type": "deployment_name",
"deployment_name": "<embedding_model_deployment_name>",
},
}
}
],
}