Zelfstudie: Uw gegevens doorzoeken met behulp van een chatmodel (RAG in Azure AI Search)
Het definiërende kenmerk van een RAG-oplossing in Azure AI Search is het verzenden van query's naar een Large Language Model (LLM) voor een gesprekszoekervaring voor uw geïndexeerde inhoud. Het kan verrassend eenvoudig zijn als u alleen de basisbeginselen implementeert.
In deze zelfstudie hebt u:
- Clients instellen
- Instructies schrijven voor de LLM
- Een query opgeven die is ontworpen voor LLM-invoer
- Bekijk de resultaten en verken de volgende stappen
Deze zelfstudie bouwt voort op de vorige zelfstudies. Hierbij wordt ervan uitgegaan dat u een zoekindex hebt gemaakt door de indexeringspijplijn.
Vereisten
Visual Studio Code met de Python-extensie en het Jupyter-pakket. Zie Python in Visual Studio Code voor meer informatie.
Azure AI Search, in een regio die wordt gedeeld met Azure OpenAI.
Azure OpenAI, met een implementatie van gpt-4o. Zie Modellen kiezen voor RAG in Azure AI Search voor meer informatie
Het voorbeeld downloaden
U gebruikt hetzelfde notebook uit de vorige zelfstudie voor het indexeren van pijplijnen. Scripts voor het uitvoeren van query's op de LLM volgen de stappen voor het maken van pijplijnen. Als u het notebook nog niet hebt, downloadt u het vanuit GitHub.
Clients configureren voor het verzenden van query's
Het RAG-patroon in Azure AI Search is een gesynchroniseerde reeks verbindingen met een zoekindex om de grondgegevens te verkrijgen, gevolgd door een verbinding met een LLM om een antwoord te formuleren op de vraag van de gebruiker. Dezelfde queryreeks wordt door beide clients gebruikt.
U stelt twee clients in, dus u hebt eindpunten en machtigingen voor beide resources nodig. In deze zelfstudie wordt ervan uitgegaan dat u roltoewijzingen instelt voor geautoriseerde verbindingen, maar u moet de eindpunten opgeven in uw voorbeeldnotitieblok:
# 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"
Voorbeeldscript voor vragen en query's
Hier volgt het Python-script waarmee de clients worden geïnstitueert, de prompt wordt gedefinieerd en de query wordt ingesteld. U kunt dit script uitvoeren in het notebook om een antwoord te genereren op basis van de implementatie van uw chatmodel.
Wijzig voor de Azure Government-cloud het API-eindpunt van de tokenprovider in "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)
Resultaten controleren
In dit antwoord is het antwoord gebaseerd op vijf invoer (top=5
) die bestaat uit segmenten die worden bepaald door de zoekmachine om het meest relevant te zijn. Instructies in de prompt laten de LLM alleen de informatie in de sources
of opgemaakte zoekresultaten gebruiken.
De resultaten van de eerste query "What's the NASA earth book about?"
moeten er ongeveer uitzien als in het volgende voorbeeld.
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
Verwacht wordt dat LLM's verschillende antwoorden retourneren, zelfs als de prompt en query's ongewijzigd zijn. Uw resultaat kan er heel anders uitzien dan in het voorbeeld. Zie Meer informatie over het gebruik van reproduceerbare uitvoer.
Notitie
Tijdens het testen van deze zelfstudie hebben we verschillende reacties gezien, wat relevanter dan andere. Een paar keer veroorzaakt het herhalen van dezelfde aanvraag een verslechtering van het antwoord, waarschijnlijk vanwege verwarring in de chatgeschiedenis, mogelijk met het model dat de herhaalde aanvragen registreert als ontevreden met het gegenereerde antwoord. Het beheren van de chatgeschiedenis valt buiten het bereik van deze zelfstudie, maar ook in uw toepassingscode moet dit gedrag beperken of zelfs elimineren.
Een filter toevoegen
Zoals u weet, hebt u een locations
veld gemaakt met behulp van toegepaste AI, gevuld met plaatsen die worden herkend door de vaardigheid Entiteitsherkenning. De velddefinitie voor locaties bevat het filterable
kenmerk. Laten we de vorige aanvraag herhalen, maar deze keer een filter toevoegen dat op de term ijs in het veld Locaties selecteert.
Een filter introduceert insluitings- of uitsluitingscriteria. De zoekmachine voert nog steeds een vectorzoekopdracht uit"What's the NASA earth book about?"
, maar het is nu exclusief overeenkomsten die geen ijs bevatten. Zie de basisprincipes van tekstfilters, De verzamelingsfilters begrijpen en filters toevoegen aan een vectorquery voor meer informatie over filteren op tekenreeksverzamelingen en vectorquery's.
Vervang de search_results definitie door het volgende voorbeeld met een filter:
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])
De resultaten van de gefilterde query moeten er nu uitzien zoals in het volgende antwoord. Let op de nadruk op ijsbedekking.
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.
De invoer wijzigen
Het verhogen of verlagen van het aantal invoer in de LLM kan een groot effect hebben op het antwoord. Probeer dezelfde query opnieuw uit te voeren nadat u deze hebt ingesteld top=8
. Wanneer u de invoer verhoogt, retourneert het model telkens verschillende resultaten, zelfs als de query niet verandert.
Hier volgt een voorbeeld van wat het model retourneert nadat de invoer is verhoogd naar 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.
Omdat het model gebonden is aan de grondgegevens, wordt het antwoord uitgebreider naarmate u de invoer groter maakt. U kunt relevantieafstemming gebruiken om mogelijk meer gerichte antwoorden te genereren.
De prompt wijzigen
U kunt ook de prompt wijzigen om de indeling van de uitvoer, toon te bepalen en of u wilt dat het model het antwoord aanvult met zijn eigen trainingsgegevens door de prompt te wijzigen.
Hier volgt een ander voorbeeld van LLM-uitvoer als we de prompt voor het identificeren van locaties voor wetenschappelijk onderzoek opnieuw richten.
# 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}
"""
Uitvoer van het wijzigen van alleen de prompt, anders het behouden van alle aspecten van de vorige query, kan er als volgt uitzien.
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
Als u doorgaat met de zelfstudie, moet u de prompt herstellen naar de vorige waarde (You are an AI assistant that helps users learn from the information found in the source material
).
Het wijzigen van parameters en prompts is van invloed op het antwoord van de LLM. Houd rekening met de volgende tips terwijl u zelf verkent:
Als u de waarde verhoogt, kan het
top
beschikbare quotum voor het model worden uitgeput. Als er geen quotum is, wordt er een foutbericht geretourneerd of retourneert het model mogelijk 'Ik weet het niet'.Het verhogen van de
top
waarde verbetert niet noodzakelijkerwijs het resultaat. Bij het testen met top merken we soms dat de antwoorden niet aanzienlijk beter zijn.Wat kan er helpen? Normaal gesproken is het antwoord relevantieafstemming. Het verbeteren van de relevantie van de zoekresultaten van Azure AI Search is meestal de meest effectieve benadering voor het maximaliseren van het hulpprogramma van uw LLM.
In de volgende reeks zelfstudies wordt de focus verplaatst naar het maximaliseren van relevantie en het optimaliseren van queryprestaties voor snelheid en concisie. We gaan terug naar de schemadefinitie en querylogica om relevantiefuncties te implementeren, maar de rest van de pijplijn en modellen blijven intact.