Azure OpenAI Service: implementar RAG con Azure AI Search
João Barros
15 de October de 2024
1 min de lectura
El Retrieval-Augmented Generation (RAG) es el patrón arquitectónico para crear asistentes de IA que responden con base en conocimiento específico de la organización. Combina Azure OpenAI Service (generación de texto) con Azure AI Search (recuperación de documentos relevantes).
Arquitectura RAG
1. Ingesta (offline):
Documentos → Chunking → Embedding (text-embedding-ada-002) → AI Search Index
2. Query (runtime):
Pregunta del usuario
→ Embedding de la pregunta
→ AI Search (vector + keyword search) → Top-K chunks relevantes
→ Prompt: "Con base en estos documentos: {chunks} — responde a: {pregunta}"
→ Azure OpenAI GPT-4o → Respuesta fundamentada
Indexar documentos en AI Search
import os
from azure.search.documents import SearchClient
from azure.search.documents.indexes import SearchIndexClient
from openai import AzureOpenAI
openai_client = AzureOpenAI(
api_key=os.environ["AZURE_OPENAI_KEY"],
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
api_version="2024-02-01"
)
def get_embedding(text: str) -> list[float]:
response = openai_client.embeddings.create(
model="text-embedding-ada-002",
input=text
)
return response.data[0].embedding
# Para cada chunk de documento:
search_client.upload_documents(documents=[{
"id": chunk_id,
"content": chunk_text,
"embedding": get_embedding(chunk_text),
"source": document_path
}])
Query RAG completa
def rag_query(question: str) -> str:
# 1. Embedding de la pregunta
q_embedding = get_embedding(question)
# 2. Recuperar chunks relevantes (vector search)
results = search_client.search(
search_text=question,
vector_queries=[VectorizedQuery(vector=q_embedding, k_nearest_neighbors=5, fields="embedding")],
select=["content", "source"]
)
context = "\n\n".join([r["content"] for r in results])
# 3. Generar la respuesta con GPT-4o
response = openai_client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "Responde solo con base en los documentos proporcionados. Cita las fuentes."},
{"role": "user", "content": f"Documentos:\n{context}\n\nPregunta: {question}"}
]
)
return response.choices[0].message.content
Conclusión
RAG con Azure OpenAI + AI Search es el patrón para asistentes empresariales que necesitan respuestas fundamentadas en documentos internos. Es más fiable que el fine-tuning para bases de conocimiento que cambian con frecuencia, y más controlable que permitir que el modelo use su entrenamiento base.