Creación de una aplicación cliente basada en RAG
Cuando haya creado un índice de Azure AI Search para los datos contextuales, puede usarlo con un modelo de OpenAI. Para basar las indicaciones en datos de su índice, el SDK de Azure OpenAI admite ampliar la solicitud con detalles de conexión para el índice.
En el siguiente ejemplo de código de Python se muestra cómo implementar este patrón.
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)
En este ejemplo, la búsqueda en el índice se basa en palabras clave, es decir, la consulta consta del texto de la entrada del usuario, que coincide con el texto de los documentos indexados. Cuando se usa un índice que lo admite, un enfoque alternativo consiste en usar una consulta basada en vectores en la que el índice y la consulta usan vectores numéricos para representar tokens de texto. La búsqueda con vectores permite la coincidencia en función de la similitud semántica, así como las coincidencias de texto literal.
Para usar una consulta basada en vectores, puede modificar la especificación de los detalles del origen de datos de Azure AI Search para incluir un modelo de inserción; que se usa para vectorizar el texto de la consulta.
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>",
},
}
}
],
}