Criar um aplicativo cliente baseado em RAG
Ao criar um índice do Azure AI Search para seus dados contextuais, você pode usá-lo com um modelo OpenAI. Para fundamentar solicitações com dados do seu índice, o SDK do Azure OpenAI oferece suporte à extensão da solicitação com detalhes de conexã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 no índice é baseada em palavra-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 compatível com 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 similaridade semântica, bem como em 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 inserção; que é 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>",
},
}
}
],
}