RAG 기반 클라이언트 애플리케이션 만들기
상황에 맞는 데이터에 대한 Azure AI Search 인덱스 생성 시 OpenAI 모델에서 사용할 수 있습니다. 인덱스의 데이터를 사용하여 프롬프트를 접지하기 위해 Azure OpenAI SDK는 인덱스에 대한 연결 세부 정보를 사용하여 요청 확장을 지원합니다.
다음 Python 코드 예제에서는 이 패턴을 구현하는 방법을 보여 줍니다.
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)
이 예제에서 인덱스에 대한 검색은 키워드 기반 입니다. 즉, 쿼리는 인덱싱된 문서의 텍스트와 일치하는 사용자 프롬프트의 텍스트로 구성됩니다. 인덱스를 지원하는 인덱스를 사용하는 경우 대체 방법은 인덱스와 쿼리가 숫자 벡터를 사용하여 텍스트 토큰을 나타내는 벡터 기반 쿼리를 사용하는 것입니다. 벡터를 사용하여 검색하면 의미 체계 유사성과 리터럴 텍스트 일치를 기반으로 일치할 수 있습니다.
벡터 기반 쿼리를 사용하려면 포함 모델을 포함하도록 Azure AI Search 데이터 원본 세부 정보의 사양을 수정할 수 있습니다. 쿼리 텍스트를 벡터화하는 데 사용됩니다.
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>",
},
}
}
],
}