Azure AI Arama'da Artırılmış Nesil (RAG) alma
Alma Artırılmış Nesil (RAG), topraklama verileri sağlayan bir bilgi alma sistemi ekleyerek ChatGPT gibi bir Büyük Dil Modelinin (LLM) özelliklerini geliştiren bir mimaridir. Bilgi alma sistemi eklemek, bir LLM tarafından yanıt formüle edildiğinde kullanılan topraklama verileri üzerinde denetim sahibi olmanıza yardımcı olur. Kurumsal bir çözüm için RAG mimarisi, vektörleştirilmiş belgelerden ve görüntülerden ve bu içerik için model eklediyseniz diğer veri biçimlerinden kaynaklanan kurumsal içeriğinizle üretken yapay zekayı kısıtlayabileceğiniz anlamına gelir.
LLM'ye girişleri belirlediği için hangi bilgi alma sisteminin kullanılacağına karar vermek kritik önem taşır. Bilgi alma sistemi aşağıdakileri sağlamalıdır:
İçeriğinizin tümü için gereken sıklıkta büyük ölçekte yükleyip yenilenen dizin oluşturma stratejileri.
Sorgu özellikleri ve ilgi ayarı. Sistem, LLM girişlerinin belirteç uzunluğu gereksinimlerini karşılamak için gereken kısa biçim biçimlerinde ilgili sonuçları döndürmelidir.
Hem veriler hem de işlemler için güvenlik, genel erişim ve güvenilirlik.
Dizin oluşturma için ekleme modelleri ve alma için sohbet modelleri veya dil anlama modelleri ile tümleştirme.
Azure AI Search, RAG mimarisinde bilgi almak için kanıtlanmış bir çözümdür. Azure bulutunun altyapısı ve güvenliği ile dizin oluşturma ve sorgu özellikleri sağlar. Kod ve diğer bileşenler aracılığıyla, özel içeriğiniz üzerinde üretken yapay zeka için tüm öğeleri içeren kapsamlı bir RAG çözümü tasarlayabilirsiniz.
Not
Yardımcı pilot ve RAG kavramlarını yeni mi edindin? Oluşturucu yapay zeka uygulamaları için Vektör araması ve son durum alma işlemini izleyin.
Azure AI Arama ile RAG yaklaşımları
Microsoft,Azure AI Search'i bir RAG çözümünde kullanmak için çeşitli yerleşik uygulamalara sahiptir.
- Azure AI Studio, vektör dizini ve alma artırması kullanın.
- Azure OpenAI, vektörlerle veya vektörler olmadan bir arama dizini kullanın.
- Azure Machine Learning, bir arama dizinini bir istem akışında vektör deposu olarak kullanın.
Seçilmiş yaklaşımlar kullanmaya başlamayı kolaylaştırır, ancak mimari üzerinde daha fazla denetim için özel bir çözüme ihtiyacınız vardır. Bu şablonlar şunlarda uçtan uca çözümler oluşturur:
Araçlar ve şablonlar uygulama gereksinimlerinizi karşılamıyorsa, Azure AI Arama API'lerini kullanarak özel bir RAG çözümü oluşturabilirsiniz. Bu makalenin geri kalanında Azure AI Search'ün özel bir RAG çözümüne nasıl uyduğunu inceler.
Azure AI Arama için özel RAG deseni
Desenin üst düzey bir özeti şöyle görünür:
- Bir kullanıcı sorusu veya isteği (istem) ile başlayın.
- İlgili bilgileri bulmak için Azure AI Search'e gönderin.
- Bir LLM'ye en yüksek dereceli arama sonuçlarını döndürün.
- İlk istem için bir yanıt oluşturmak için LLM'nin doğal dil anlama ve mantık özelliklerini kullanın.
Azure AI Search, LLM istemine giriş sağlar ancak modeli eğitmez. RAG mimarisinde ek eğitim yoktur. LLM, genel veriler kullanılarak önceden eğitilir, ancak bu örnekte Azure AI Search adlı retriever'dan alınan bilgilerle genişletilmiş yanıtlar oluşturur.
Azure AI Search içeren RAG desenleri aşağıdaki çizimde belirtilen öğelere sahiptir.
- Kullanıcı deneyimi için uygulama UX (web uygulaması)
- Uygulama sunucusu veya düzenleyici (tümleştirme ve koordinasyon katmanı)
- Azure AI Search (bilgi alma sistemi)
- Azure OpenAI (üretken yapay zeka için LLM)
Web uygulaması sunu, bağlam ve kullanıcı etkileşimi sağlayarak kullanıcı deneyimi sağlar. Bir kullanıcıdan gelen sorular veya istemler buradan başlar. Girişler tümleştirme katmanından geçer, arama sonuçlarını almak için önce bilgi alma bölümüne gider, aynı zamanda bağlamı ve amacı ayarlamak için LLM'ye gider.
Uygulama sunucusu veya düzenleyici, bilgi alma ve LLM arasındaki iletimleri koordine eden tümleştirme kodudur. İş akışını koordine etmek için yaygın çözümler arasında LangChain bulunur. LangChain, Azure AI Search ile tümleştirerek Azure AI Search'ün iş akışınıza bir retriever olarak eklenmesini kolaylaştırır. LlamaIndex ve Anlam Çekirdeği diğer seçeneklerdir.
Bilgi alma sistemi aranabilir dizini, sorgu mantığını ve yükü (sorgu yanıtı) sağlar. Arama dizini vektörler veya nonvector içeriği içerebilir. Çoğu örnek ve tanıtım vektör alanı içerse de, bu bir gereksinim değildir. Sorgu, Anahtar sözcük (veya terim) ve vektör sorgularını işleyebilen Azure AI Search'teki mevcut arama altyapısı kullanılarak yürütülür. Dizin, tanımladığınız şemaya göre önceden oluşturulur ve dosyalardan, veritabanlarından veya depolamadan alınan içeriğinizle birlikte yüklenir.
LLM özgün istemi ve Azure AI Search'ten sonuçları alır. LLM sonuçları analiz eder ve bir yanıt formüle eder. LLM ChatGPT ise, kullanıcı etkileşimi bir ileri geri konuşma olabilir. Davinci kullanıyorsanız, istem tamamen oluşturulmuş bir yanıt olabilir. Bir Azure çözümü büyük olasılıkla Azure OpenAI kullanır, ancak bu hizmete bağımlı değildir.
Azure AI Search, istem akışları veya sohbet koruması için yerel LLM tümleştirmesi sağlamadığından düzenleme ve durumu işleyen kod yazmanız gerekir. Tam çözümün ne gerektirdiğine ilişkin bir şema için tanıtım kaynağını (Azure-Samples/azure-search-openai-demo) gözden geçirebilirsiniz. Ayrıca LLM'lerle tümleşen RAG tabanlı Azure AI Search çözümleri oluşturmak için Azure AI Studio'yu öneririz.
Azure AI Search'te aranabilir içerik
Azure AI Search'te, aranabilir tüm içerik arama hizmetinizde barındırılan bir arama dizininde depolanır. Arama dizini milisaniyelik yanıt süreleri olan hızlı sorgular için tasarlanmıştır, bu nedenle bu hedefi desteklemek için iç veri yapıları vardır. Bu amaçla, arama dizini tüm PDF'ler veya görüntüler gibi içerik dosyalarının tamamını değil, dizine alınan içeriği depolar. Veri yapıları dahili olarak belirteçli metnin ters dizinlerini, eklemeler için vektör dizinlerini ve ayrıntılı eşleştirmenin gerekli olduğu durumlar için değiştirilmemiş metinleri (örneğin, filtreler, benzer arama, normal ifade sorgularında) içerir.
RAG çözümünüz için verileri ayarlarken, Azure AI Search'te dizin oluşturup yükleyen özellikleri kullanırsınız. Dizin, kaynak içeriğinizi çoğaltan veya temsil eden alanlar içerir. Dizin alanı basit aktarım (kaynak belgedeki başlık veya açıklama, arama dizininde başlık veya açıklamaya dönüşebilir) veya bir alan, bir görüntünün gösterimini veya metin açıklamasını oluşturan vektörleştirme veya beceri işleme gibi bir dış işlemin çıkışını içerebilir.
Büyük olasılıkla ne tür bir içerik aramak istediğinizi bildiğinizden, her içerik türü için geçerli olan dizin oluşturma özelliklerini göz önünde bulundurun:
İçerik türü | Dizine alınan: | Özellikler |
---|---|---|
text | belirteçler, değiştirilmemiş metin | Dizin oluşturucular , Azure Depolama ve Cosmos DB gibi diğer Azure kaynaklarından düz metin çekebilir. Ayrıca herhangi bir JSON içeriğini bir dizine gönderebilirsiniz. Sürümdeki metni değiştirmek için, dizin oluşturma sırasında sözcük temelli işleme eklemek için çözümleyicileri ve normalleştiricileri kullanın. Kaynak belgelerde sorguda kullanılabilecek terminoloji eksikse eş anlamlı eşlemeleri yararlıdır. |
text | vektörler 1 | Metin bir dizin oluşturucu işlem hattında öbeklenebilir ve vektörleştirilebilir ya da dışarıdan işlenip dizininizde vektör alanları olarak dizinlenebilir. |
görüntü | belirteçler, değiştirilmemiş metin 2 | OCR ve Görüntü Analizi becerileri , metin tanıma veya görüntü özellikleri için görüntüleri işleyebilir. Görüntü bilgileri aranabilir metne dönüştürülür ve dizine eklenir. Becerilerin dizin oluşturucu gereksinimi vardır. |
görüntü | vektörler 1 | Görüntüler bir dizin oluşturucu işlem hattında vektörleştirilebilir veya görüntü içeriğinin matematiksel bir gösterimi için dışarıdan işlenebilir ve ardından dizininizde vektör alanları olarak dizine eklenebilir. Metni ve resimleri aynı ekleme alanında vektörleştirmek için Azure AI Vision'ı çok modüllü veya OpenAI CLIP gibi bir açık kaynak modeli kullanabilirsiniz. |
1 Azure AI Search tümleşik veri öbekleme ve vektörleştirme sağlar, ancak dizin oluşturuculara ve beceri kümelerine bağımlı olmanız gerekir. Dizin oluşturucu kullanamıyorsanız, Microsoft'un Anlam Çekirdeği veya diğer topluluk teklifleri tam yığın çözümünde size yardımcı olabilir. Her iki yaklaşımı da gösteren kod örnekleri için bkz . azure-search-vectors deposu.
2 Beceriler, uygulanan yapay zeka için yerleşik destek sağlar. OCR ve Görüntü Analizi için dizin oluşturma işlem hattı, Azure AI Vision API'lerine bir iç çağrı yapar. Bu beceriler, ayıklanan bir görüntüyü işlenmek üzere Azure AI'ye geçirir ve çıkışı Azure AI Search tarafından dizine alınan metin olarak alır. Beceriler, tümleşik veri öbekleme (Metin Bölme becerisi) ve tümleşik ekleme (Azure AI Vision çok modüllü, Azure OpenAI ve Azure AI Studio model kataloğundaki modelleri çağıran beceriler) için de kullanılır.
İçerik, matematik gösterimlerinde evrensel olarak ifade edildiğinden vektörler, farklı içerikler (birden çok dosya biçimi ve dil) için en iyi konaklamayı sağlar. Vektörler, benzerlik aramasını da destekler: vektör sorgusuna en benzer koordinatlarda eşleştirme. Belirteçli terimlerle eşleşen anahtar sözcük aramasına (veya terim aramasına) kıyasla benzerlik araması daha incedir. İçerikte veya sorgularda belirsizlik veya yorumlama gereksinimleri varsa bu daha iyi bir seçimdir.
Azure AI Search'te içerik alma
Verileriniz bir arama dizinine girdikten sonra, içeriği almak için Azure AI Search'ün sorgu özelliklerini kullanırsınız.
RAG olmayan bir düzende, sorgular bir arama istemcisinden gidiş dönüş yapar. Sorgu gönderilir, bir arama altyapısında yürütülür ve yanıt istemci uygulamasına döndürülür. Yanıt veya arama sonuçları yalnızca dizininizde bulunan ayrıntılı içerikten oluşur.
RAG düzeninde sorgular ve yanıtlar arama altyapısı ile LLM arasında koordine edilir. Kullanıcının sorusu veya sorgusu hem arama altyapısına hem de llm'ye istem olarak iletilir. Arama sonuçları arama motorundan geri gelir ve bir LLM'ye yönlendirilir. Kullanıcıya geri dönmesini sağlayan yanıt, LLM'den bir toplama veya yanıt olarak üretken yapay zekadır.
Azure AI Search'te yeni yanıtlar oluşturan anlamsal veya vektör araması bile olmayan bir sorgu türü yoktur. Yalnızca LLM, üretken yapay zeka sağlar. Azure AI Search'te sorguları formüle etmek için kullanılan özellikler şunlardır:
Sorgu özelliği | Purpose | Neden kullanmalı |
---|---|---|
Basit veya tam Lucene söz dizimi | Metin ve görsel olmayan sayısal içerik üzerinden sorgu yürütme | Tam metin araması, benzer eşleşmeler yerine tam eşleşmeler için en iyisidir. Tam metin arama sorguları BM25 algoritması kullanılarak derecelenir ve puanlama profilleri aracılığıyla ilgi ayarlamayı destekler. Ayrıca filtreleri ve modelleri de destekler. |
Filtreler ve modeller | Yalnızca metin veya sayısal (nonvector) alanları için geçerlidir. Dahil etme veya dışlama ölçütlerine göre arama yüzeyi alanını azaltır. | Sorgularınıza duyarlık ekler. |
Anlam dereceleyicisi | Anlamsal modelleri kullanarak bm25 sonuç kümesini yeniden sıralar. LLM girişleri olarak yararlı olan kısa biçimli açıklamalı alt yazılar ve yanıtlar oluşturur. | Profil puanlamaktan daha kolaydır ve içeriğinize bağlı olarak, ilgi ayarı için daha güvenilir bir tekniktir. |
Vektör araması | Benzerlik araması için vektör alanları üzerinde sorgu yürütme; burada sorgu dizesi bir veya daha fazla vektördür. | Vektörler, herhangi bir dilde tüm içerik türlerini temsil edebilir. |
Karma arama | Yukarıdaki sorgu tekniklerinin herhangi birini veya tümünü birleştirir. Vektör ve nonvector sorguları paralel olarak yürütülür ve birleşik bir sonuç kümesinde döndürülür. | Duyarlık ve yakalamada en önemli kazançlar karma sorgular aracılığıyla elde edilir. |
Sorgu yanıtını yapılandırma
Sorgunun yanıtı LLM'ye giriş sağladığından, arama sonuçlarınızın kalitesi başarı açısından kritik önem taşır. Sonuçlar tablosal bir satır kümesidir. Sonuçların bileşimi veya yapısı şunlara bağlıdır:
- Yanıta dizinin hangi bölümlerinin dahil olduğunu belirleyen alanlar.
- Dizinden eşleşmeyi temsil eden satırlar.
Öznitelik "alınabilir" olduğunda arama sonuçlarında alanlar görüntülenir. Dizin şemasındaki bir alan tanımının öznitelikleri vardır ve bunlar bir alanın yanıtta kullanılıp kullanılmadığını belirler. Tam metin veya vektör sorgusu sonuçlarında yalnızca "alınabilir" alanlar döndürülür. Varsayılan olarak tüm "alınabilir" alanlar döndürülür, ancak bir alt küme belirtmek için "select" kullanabilirsiniz. "Alınabilir" ifadesinin yanı sıra, alanda herhangi bir kısıtlama yoktur. Alanlar herhangi bir uzunlukta veya türde olabilir. Uzunlukla ilgili olarak, Azure AI Search'te alan uzunluğu üst sınırı yoktur, ancak API isteğinin boyutuyla ilgili sınırlar vardır.
Satırlar sorguyla eşleşir, ilgi, benzerlik veya her ikisine göre derecelenir. Varsayılan olarak, sonuçlar tam metin araması için ilk 50 eşleşmede veya vektör araması için en yakın k komşu eşleşmelerinde eşlenir. Sınırı en fazla 1.000 belge olacak şekilde artırmak veya azaltmak için varsayılan değerleri değiştirebilirsiniz. Ayrıca, sonuçları bir dizi sayfalanmış sonuç olarak almak için top ve skip disk belleği parametrelerini de kullanabilirsiniz.
İlgiyi ve geri çekmeyi en üst düzeye çıkarma
Karmaşık süreçler, büyük miktarda veri ve milisaniyelik yanıtlar için beklentilerle çalışırken, her adımın değer eklemesi ve sonucun kalitesini artırması kritik önem taşır. Bilgi alma tarafında ilgi ayarı, LLM'ye gönderilen sonuçların kalitesini artıran bir etkinliktir. Sonuçlara yalnızca en ilgili veya en benzer eşleşen belgeler dahil edilmelidir.
İlgi ve geri çağırmayı en üst düzeye çıkarmak için bazı ipuçları aşağıdadır:
Anahtar sözcük (nonvector) aramasını ve vektör aramasını birleştiren karma sorgular , girişler aynı olduğunda size maksimum geri çağırma sağlar. Karma sorguda, aynı girişi ikiye katlarsanız, bir metin dizesi ve vektör eşdeğeri anahtar sözcükler ve benzerlik araması için paralel sorgular oluşturur ve birleşik sonuç kümesindeki her sorgu türünden en uygun eşleşmeleri döndürür.
Karma sorgular da geniş kapsamlı olabilir. Ayrıntılı öbeklenmiş içerik üzerinde benzerlik araması ve aynı istekteki adlar üzerinde anahtar sözcük araması çalıştırabilirsiniz.
İlgi ayarı şu şekilde desteklenir:
Eşleşmeler belirli bir arama alanında veya diğer ölçütlerde bulunursa arama puanını artıran puanlama profilleri.
İlk sorguya daha iyi bir anlamsal uyum sağlamak için sonuçları yeniden sıralamak için Bing'den semantik modelleri kullanarak ilk sonuç kümesini yeniden sıralayan anlam dereceleyici.
İnce ayar için sorgu parametreleri. Vektör sorgularının önemini artırabilir veya karma sorguda BM25 dereceli sonuçların miktarını ayarlayabilirsiniz. Düşük puanlama sonuçlarını vektör sorgusundan dışlamak için minimum eşikler de ayarlayabilirsiniz.
Karşılaştırma ve karşılaştırma testlerinde, anlamsal derecelendirme ile desteklenen metin ve vektör alanlarıyla karma sorgular en uygun sonuçları üretir.
RAG iş akışı için örnek kod
Aşağıdaki Python kodu, Azure AI Search'teki BIR RAG iş akışının temel bileşenlerini gösterir. İstemcileri ayarlamanız, bir sistem istemi tanımlamanız ve bir sorgu sağlamanız gerekir. İstem LLM'ye yalnızca sorgudaki sonuçları kullanmasını ve sonuçların nasıl döndürüleceği hakkında bilgi gönderir. Bu örneği temel alan diğer adımlar için bu RAG hızlı başlangıcına bakın.
# Set up the query for generating responses
from azure.identity import DefaultAzureCredential
from azure.identity import get_bearer_token_provider
from azure.search.documents import SearchClient
from openai import AzureOpenAI
credential = DefaultAzureCredential()
token_provider = get_bearer_token_provider(credential, "https://cognitiveservices.azure.com/.default")
openai_client = AzureOpenAI(
api_version="2024-06-01",
azure_endpoint=AZURE_OPENAI_ACCOUNT,
azure_ad_token_provider=token_provider
)
search_client = SearchClient(
endpoint=AZURE_SEARCH_SERVICE,
index_name="hotels-sample-index",
credential=credential
)
# This prompt provides instructions to the model.
# The prompt includes the query and the source, which are specified further down in the code.
GROUNDED_PROMPT="""
You are a friendly assistant that recommends hotels based on activities and amenities.
Answer the query using only the sources provided below in a friendly and concise bulleted manner.
Answer ONLY with the facts listed in the list of sources below.
If there isn't enough information below, say you don't know.
Do not generate answers that don't use the sources below.
Query: {query}
Sources:\n{sources}
"""
# The query is sent to the search engine, but it's also passed in the prompt
query="Can you recommend a few hotels near the ocean with beach access and good views"
# Retrieve the selected fields from the search index related to the question
search_results = search_client.search(
search_text=query,
top=5,
select="Description,HotelName,Tags"
)
sources_formatted = "\n".join([f'{document["HotelName"]}:{document["Description"]}:{document["Tags"]}' for document in search_results])
response = openai_client.chat.completions.create(
messages=[
{
"role": "user",
"content": GROUNDED_PROMPT.format(query=query, sources=sources_formatted)
}
],
model="gpt-35"
)
print(response.choices[0].message.content)
Tümleştirme kodu ve LLM'ler
Azure AI Search içeren bir RAG çözümü yerleşik veri öbekleme ve vektörleştirme özelliklerinden yararlanabilir veya Anlam Çekirdeği, LangChain veya LlamaIndex gibi platformları kullanarak kendi platformlarınızı oluşturabilirsiniz.
Demo deposundaki not defterleri, LLM tümleştirmesi desenlerini gösterdiğinden harika bir başlangıç noktasıdır. RAG çözümündeki kodun büyük bir kısmı LLM'ye yapılan çağrılardan oluşur, bu nedenle bu API'lerin bu makalenin kapsamı dışında nasıl çalıştığını anlamanız gerekir.
Kullanmaya başlama
Öğretici: Azure AI Search'te , arama dizininden temel veri alan RAG çözümlerine yönelik özelliklere ve desene odaklanan bir kapsam için BIR RAG çözümü oluşturma.
Çözüm hızlandırıcılarıyla başlayın:
Contoso ve Northwind için kurgusal sistem durumu planı belgelerini kullanarak kurumsal sohbet uygulaması şablonlarını kullanarak Azure kaynaklarını, kodunu ve örnek topraklama verilerini dağıtın. Bu uçtan uca çözüm, size 15 dakika kadar kısa bir sürede işlemsel bir sohbet uygulaması sağlar. Bu şablonların kodu, çeşitli sunularda öne çıkan azure-search-openai-demodur . Aşağıdaki bağlantılar dile özgü sürümler sağlar:
Verileri nasıl almak ve yenilemek istediğinizi belirlemek için dizin oluşturma kavramlarını ve stratejilerini gözden geçirin. Vektör araması mı, anahtar sözcük araması mı yoksa karma arama mı kullanacağınıza karar verin. Üzerinde arama yapmanız gereken içerik türü ve çalıştırmak istediğiniz sorgu türü dizin tasarımını belirler.
Arama isteği söz dizimi ve gereksinimleri hakkında daha fazla bilgi edinmek için sorgu oluşturmayı gözden geçirin.
Not
Bazı Azure AI Arama özellikleri insan etkileşimi için tasarlanmıştır ve RAG düzeninde kullanışlı değildir. Özellikle, otomatik tamamlama ve öneriler gibi özellikleri atlayabilirsiniz. Model ve düzen gibi diğer özellikler yararlı olabilir, ancak bir RAG senaryosunda sık rastlanmayan bir durum olabilir.