Criar um aplicativo cliente baseado em RAG

Concluído

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>",
                },
            }
        }
    ],
}