Criar um aplicativo cliente baseado em RAG
Ao criar um índice de Pesquisa de IA do Azure para seus dados contextuais, você pode usá-lo com um modelo OpenAI. Para fundamentar os prompts com dados do seu índice, o SDK do Azure OpenAI permite a extensão do pedido com informações de ligação para o índice.
O exemplo de código Python a seguir mostra como implementar esse padrão.
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)
Neste exemplo, a pesquisa em relação ao índice é baseada em palavras-chave - em outras palavras, a consulta consiste no texto no prompt do usuário, que é correspondido ao texto nos documentos indexados. Ao usar um índice que ofereça suporte a ele, uma abordagem alternativa é usar uma consulta baseada em vetor na qual o índice e a consulta usam vetores numéricos para representar tokens de texto. A pesquisa com vetores permite a correspondência com base na semelhança semântica, bem como correspondências de texto literal.
Para usar uma consulta baseada em vetor, você pode modificar a especificação dos detalhes da fonte de dados do Azure AI Search para incluir um modelo de incorporação; que é então usado para vetorizar o texto da 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>",
},
}
}
],
}