Skapa ett RAG-baserat klientprogram

Slutförd

När du har skapat ett Azure AI Search-index för dina kontextuella data kan du använda det med en OpenAI-modell. För att koppla samman frågor med data från ditt index, har Azure OpenAI SDK stöd för att utöka begäran med anslutningsinformation för indexet.

Följande Python-kodexempel visar hur du implementerar det här mönstret.

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)

I det här exemplet är sökningen mot indexet nyckelordsbaserad , med andra ord består frågan av texten i användarprompten, som matchas med text i de indexerade dokumenten. När du använder ett index som stöder det är en alternativ metod att använda en vektorbaserad fråga där indexet och frågan använder numeriska vektorer för att representera texttoken. Sökning med vektorer möjliggör matchning baserat på semantisk likhet och literala textmatchningar.

Om du vill använda en vektorbaserad fråga kan du ändra specifikationen för datakällan i Azure AI Search så att den innehåller en inbäddningsmodell. som sedan används för att vektorisera frågetexten.

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