Tworzenie aplikacji klienckiej opartej na usłudze RAG

Ukończone

Po utworzeniu indeksu usługi Azure AI Search dla danych kontekstowych możesz użyć go z modelem OpenAI. Aby połączyć monity z danymi z indeksu, Azure OpenAI SDK obsługuje rozszerzenie żądania o szczegóły połączenia z indeksem.

Poniższy przykład kodu w języku Python pokazuje, jak zaimplementować ten wzorzec.

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)

W tym przykładzie wyszukiwanie względem indeksu jest oparte na słowach kluczowych — innymi słowy zapytanie składa się z tekstu w wierszu polecenia użytkownika, który jest dopasowany do tekstu w indeksowanych dokumentach. W przypadku korzystania z indeksu, który go obsługuje, alternatywną metodą jest użycie zapytania opartego na wektorach , w którym indeks i zapytanie używają wektorów liczbowych do reprezentowania tokenów tekstowych. Wyszukiwanie za pomocą wektorów umożliwia dopasowywanie na podstawie podobieństwa semantycznego oraz dosłowne dopasowanie tekstu.

Aby użyć zapytania opartego na wektorach, możesz zmodyfikować specyfikację szczegółów źródła danych usługi Azure AI Search, aby uwzględnić model osadzania; następnie służy do wektoryzacji tekstu zapytania.

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