Kurz: Vyhledávání dat pomocí modelu chatu (RAG ve službě Azure AI Search)
Definování charakteristik řešení RAG ve službě Azure AI Search odesílá dotazy do rozsáhlého jazykového modelu (LLM) pro konverzační vyhledávání prostřednictvím indexovaného obsahu. Pokud implementujete jenom základní informace, může to být překvapivě snadné.
V tomto kurzu se naučíte:
- Nastavení klientů
- Pokyny k zápisu pro LLM
- Zadání dotazu určeného pro vstupy LLM
- Kontrola výsledků a prozkoumání dalších kroků
Tento kurz vychází z předchozích kurzů. Předpokládá se, že máte index vyhledávání vytvořený kanálem indexování.
Požadavky
Visual Studio Code s rozšířením Pythonu a balíčkem Jupyter Další informace najdete v pythonu v editoru Visual Studio Code.
Azure AI Search ve sdílené oblasti s Azure OpenAI
Azure OpenAI s nasazením gpt-4o. Další informace najdete v tématu Výběr modelů pro RAG ve službě Azure AI Search.
Stažení ukázky
Stejný poznámkový blok použijete v předchozím kurzu kanálu indexování. Skripty pro dotazování LLM se řídí kroky vytvoření kanálu. Pokud poznámkový blok ještě nemáte, stáhněte si ho z GitHubu.
Konfigurace klientů pro odesílání dotazů
Model RAG ve službě Azure AI Search je synchronizovaná řada připojení k indexu vyhledávání za účelem získání podkladových dat, po kterém následuje připojení k LLM, které formuluje odpověď na otázku uživatele. Oba klienti používají stejný řetězec dotazu.
Nastavujete dva klienty, takže potřebujete koncové body a oprávnění k oběma prostředkům. V tomto kurzu se předpokládá, že jste nastavili přiřazení rolí pro autorizovaná připojení, ale měli byste zadat koncové body v ukázkovém poznámkovém bloku:
# Set endpoints and API keys for Azure services
AZURE_SEARCH_SERVICE: str = "PUT YOUR SEARCH SERVICE ENDPOINT HERE"
# AZURE_SEARCH_KEY: str = "DELETE IF USING ROLES, OTHERWISE PUT YOUR SEARCH SERVICE ADMIN KEY HERE"
AZURE_OPENAI_ACCOUNT: str = "PUR YOUR AZURE OPENAI ENDPOINT HERE"
# AZURE_OPENAI_KEY: str = "DELETE IF USING ROLES, OTHERWISE PUT YOUR AZURE OPENAI KEY HERE"
Ukázkový skript pro výzvu a dotaz
Tady je skript Pythonu, který vytvoří instanci klientů, definuje výzvu a nastaví dotaz. Tento skript můžete spustit v poznámkovém bloku a vygenerovat odpověď z nasazení modelu chatu.
V případě cloudu Azure Government upravte koncový bod rozhraní API poskytovatele tokenu na "https://cognitiveservices.azure.us/.default"
.
# Import libraries
from azure.search.documents import SearchClient
from openai import AzureOpenAI
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
)
deployment_name = "gpt-4o"
search_client = SearchClient(
endpoint=AZURE_SEARCH_SERVICE,
index_name=index_name,
credential=credential
)
# Provide instructions to the model
GROUNDED_PROMPT="""
You are an AI assistant that helps users learn from the information found in the source material.
Answer the query using only the sources provided below.
Use bullets if the answer has multiple points.
If the answer is longer than 3 sentences, provide a summary.
Answer ONLY with the facts listed in the list of sources below. Cite your source when you answer the question
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}
"""
# Provide the search query.
# It's hybrid: a keyword search on "query", with text-to-vector conversion for "vector_query".
# The vector query finds 50 nearest neighbor matches in the search index
query="What's the NASA earth book about?"
vector_query = VectorizableTextQuery(text=query, k_nearest_neighbors=50, fields="text_vector")
# Set up the search results and the chat thread.
# Retrieve the selected fields from the search index related to the question.
# Search results are limited to the top 5 matches. Limiting top can help you stay under LLM quotas.
search_results = search_client.search(
search_text=query,
vector_queries= [vector_query],
select=["title", "chunk", "locations"],
top=5,
)
# Newlines could be in the OCR'd content or in PDFs, as is the case for the sample PDFs used for this tutorial.
# Use a unique separator to make the sources distinct.
# We chose repeated equal signs (=) followed by a newline because it's unlikely the source documents contain this sequence.
sources_formatted = "=================\n".join([f'TITLE: {document["title"]}, CONTENT: {document["chunk"]}, LOCATIONS: {document["locations"]}' for document in search_results])
response = openai_client.chat.completions.create(
messages=[
{
"role": "user",
"content": GROUNDED_PROMPT.format(query=query, sources=sources_formatted)
}
],
model=deployment_name
)
print(response.choices[0].message.content)
Kontrola výsledků
V této odpovědi je odpověď založena na pěti vstupech (top=5
) sestávajících z bloků dat určených vyhledávacím webem, aby byl nejrelevavantnější. Pokyny v příkazovém řádku říkají LLM, aby používala pouze informace ve sources
výsledcích hledání nebo formátované výsledky hledání.
Výsledky z prvního dotazu "What's the NASA earth book about?"
by měly vypadat podobně jako v následujícím příkladu.
The NASA Earth book is about the intricate and captivating science of our planet, studied
through NASA's unique perspective and tools. It presents Earth as a dynamic and complex
system, observed through various cycles and processes such as the water cycle and ocean
circulation. The book combines stunning satellite images with detailed scientific insights,
portraying Earth’s beauty and the continuous interaction of land, wind, water, ice, and
air seen from above. It aims to inspire and demonstrate that the truth of our planet is
as compelling as any fiction.
Source: page-8.pdf
Očekává se, že LLM vrátí různé odpovědi, i když se výzva a dotazy nezmění. Výsledek může vypadat velmi jinak než v příkladu. Další informace najdete v tématu Informace o použití reprodukovatelného výstupu.
Poznámka:
V tomto kurzu jsme viděli různé odpovědi, některé relevantnější než jiné. Několikrát, opakování stejného požadavku způsobilo zhoršení odpovědi, s největší pravděpodobností kvůli nejasnostem v historii chatu, pravděpodobně kvůli modelu, který zaregistruje opakované žádosti jako neuspokojivost s vygenerovanou odpovědí. Správa historie chatu je pro tento kurz mimo rozsah, ale zahrnutí do kódu aplikace by mělo toto chování zmírnit nebo dokonce eliminovat.
Přidat filtr
Vzpomeňte si, že jste vytvořili locations
pole pomocí použité umělé inteligence, naplněné místy rozpoznanými dovedností Rozpoznávání entit. Definice pole pro umístění obsahuje filterable
atribut. Zopakujme předchozí požadavek, ale tentokrát přidáme filtr, který vybere termín led v poli Umístění.
Filtr zavádí kritéria zahrnutí nebo vyloučení. Vyhledávací web stále provádí vektorové vyhledávání "What's the NASA earth book about?"
, ale teď se vyloučí shody, které neobsahují led. Další informace o filtrování podle kolekcí řetězců a vektorových dotazů najdete v tématech Základy textového filtru, Vysvětlení filtrů kolekcí a Přidání filtrů do vektorového dotazu.
Nahraďte definici search_results následujícím příkladem, který obsahuje filtr:
query="what is the NASA earth book about?"
vector_query = VectorizableTextQuery(text=query, k_nearest_neighbors=50, fields="text_vector")
# Add a filter that selects documents based on whether locations includes the term "ice".
search_results = search_client.search(
search_text=query,
vector_queries= [vector_query],
filter="search.ismatch('ice*', 'locations', 'full', 'any')",
select=["title", "chunk", "locations"],
top=5
)
sources_formatted = "=================\n".join([f'TITLE: {document["title"]}, CONTENT: {document["chunk"]}, LOCATIONS: {document["locations"]}' for document in search_results])
Výsledky z filtrovaného dotazu by teď měly vypadat podobně jako následující odpověď. Všimněte si důrazu na ledový kryt.
The NASA Earth book showcases various geographic and environmental features of Earth through
satellite imagery, highlighting remarkable landscapes and natural phenomena.
- It features extraordinary views like the Holuhraun Lava Field in Iceland, captured by
Landsat 8 during an eruption in 2014, with false-color images illustrating different elements
such as ice, steam, sulfur dioxide, and fresh lava ([source](page-43.pdf)).
- Other examples include the North Patagonian Icefield in South America, depicted through
clear satellite images showing glaciers and their changes over time ([source](page-147.pdf)).
- It documents melt ponds in the Arctic, exploring their effects on ice melting and
- heat absorption ([source](page-153.pdf)).
Overall, the book uses satellite imagery to give insights into Earth's dynamic systems
and natural changes.
Změna vstupů
Zvýšení nebo snížení počtu vstupů do LLM může mít velký vliv na odpověď. Zkuste stejný dotaz spustit znovu po nastavení top=8
. Když zvýšíte počet vstupů, model pokaždé vrátí různé výsledky, i když se dotaz nezmění.
Tady je jeden příklad toho, co model vrátí po zvýšení vstupů na 8.
The NASA Earth book features a range of satellite images capturing various natural phenomena
across the globe. These include:
- The Holuhraun Lava Field in Iceland documented by Landsat 8 during a 2014 volcanic
eruption (Source: page-43.pdf).
- The North Patagonian Icefield in South America, highlighting glacial landscapes
captured in a rare cloud-free view in 2017 (Source: page-147.pdf).
- The impact of melt ponds on ice sheets and sea ice in the Arctic, with images from
an airborne research campaign in Alaska during July 2014 (Source: page-153.pdf).
- Sea ice formations at Shikotan, Japan, and other notable geographic features in various
locations recorded by different Landsat missions (Source: page-168.pdf).
Summary: The book showcases satellite images of diverse Earth phenomena, such as volcanic
eruptions, icefields, and sea ice, to provide insights into natural processes and landscapes.
Vzhledem k tomu, že model je vázán na uzemnění dat, bude odpověď při zvětšení velikosti vstupu větší. Ladění relevance můžete použít k potenciálně generování zaměřených odpovědí.
Změna výzvy
Můžete také změnit výzvu k řízení formátu výstupu, tónu a toho, jestli má model doplnit odpověď vlastními trénovacími daty změnou výzvy.
Tady je další příklad výstupu LLM, pokud výzvu refokusujeme na identifikaci umístění pro vědeckou studii.
# Provide instructions to the model
GROUNDED_PROMPT="""
You are an AI assistant that helps scientists identify locations for future study.
Answer the query cocisely, using bulleted points.
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.
Do not exceed 5 bullets.
Query: {query}
Sources:\n{sources}
"""
Výstup z změny jenom výzvy, jinak zachování všech aspektů předchozího dotazu může vypadat jako v tomto příkladu.
The NASA Earth book appears to showcase various locations on Earth captured through satellite imagery,
highlighting natural phenomena and geographic features. For instance, the book includes:
- The Holuhraun Lava Field in Iceland, detailing volcanic activity and its observation via Landsat 8.
- The North Patagonian Icefield in South America, covering its glaciers and changes over time as seen by Landsat 8.
- Melt ponds in the Arctic and their impacts on the heat balance and ice melting.
- Iceberg A-56 in the South Atlantic Ocean and its interaction with cloud formations.
(Source: page-43.pdf, page-147.pdf, page-153.pdf, page-39.pdf)
Tip
Pokud budete pokračovat v kurzu, nezapomeňte výzvu obnovit na předchozí hodnotu (You are an AI assistant that helps users learn from the information found in the source material
).
Změna parametrů a výzev ovlivní odpověď z LLM. Při vlastním zkoumání mějte na paměti následující tipy:
top
Zvýšení hodnoty může v modelu vyčerpat dostupnou kvótu. Pokud neexistuje kvóta, vrátí se chybová zpráva nebo model může vrátit zprávu "Nevím".top
Zvýšení hodnoty nemusí nutně zlepšit výsledek. Při testování v horní části si někdy všimneme, že odpovědi nejsou výrazně lepší.Tak co by mohlo pomoct? Odpověď obvykle ladí podle relevance. Zlepšení relevance výsledků hledání z Azure AI Search je obvykle nejúčinnějším přístupem k maximalizaci nástroje LLM.
V další sérii kurzů se fokus přesune na maximalizaci relevance a optimalizaci výkonu dotazů pro rychlost a zřetězení. Pro implementaci funkcí relevance se znovu podíváme na definici schématu a logiku dotazu, ale zbytek kanálu a modelů zůstane nedotčený.