Kurz: Maximalizace relevance (RAG ve službě Azure AI Search)
V tomto kurzu se dozvíte, jak zlepšit relevanci výsledků hledání používaných v řešeních RAG. Ladění relevance může být důležitým faktorem při poskytování řešení RAG, které splňuje očekávání uživatelů. Ve službě Azure AI Search zahrnuje ladění relevance sémantické hodnocení L2 a bodovací profily.
Pokud chcete tyto funkce implementovat, znovu se k schématu indexu přidáte konfigurace pro sémantické profily řazení a bodování. Potom znovu spustíte dotazy pomocí nových konstruktorů.
V tomto kurzu upravíte existující index vyhledávání a dotazy tak, aby používaly:
- Sémantické řazení L2
- Profil bodování pro zvýšení úrovně dokumentu
Tento kurz aktualizuje index vyhledávání vytvořený kanálem indexování. Aktualizace nemají vliv na existující obsah, takže není nutné znovu sestavit a indexer znovu spustit nemusíte.
Poznámka:
Ve verzi Preview je více funkcí relevance, včetně vážení vektorových dotazů a nastavení minimálních prahových hodnot, ale v tomto kurzu je vynecháme, protože jsou ve verzi Preview.
Požadavky
Visual Studio Code s rozšířením Pythonu a balíčkem Jupyter
Azure AI Search, úroveň Basic nebo vyšší pro spravované identity a sémantické řazení ve stejné oblasti jako Azure OpenAI a Azure AI Services.
Azure OpenAI s nasazením text-embedding-002 a gpt-35-turbo ve stejné oblasti jako Azure AI Search.
Stažení ukázky
Ukázkový poznámkový blok obsahuje aktualizovaný index a požadavek na dotaz.
Spuštění základního dotazu pro porovnání
Začněme novým dotazem: "Existují nějaké mraky specifické pro oceány a velké vodní plochy?".
Pokud chcete porovnat výsledky po přidání funkcí relevance, spusťte dotaz proti existujícímu schématu indexu před přidáním sémantického řazení nebo profil bodování.
V případě cloudu Azure Government upravte koncový bod rozhraní API poskytovatele tokenu na "https://cognitiveservices.azure.us/.default"
.
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
)
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}
"""
# Focused query on cloud formations and bodies of water
query="Are there any cloud formations specific to oceans and large bodies of water?"
vector_query = VectorizableTextQuery(text=query, k_nearest_neighbors=50, fields="text_vector")
search_results = search_client.search(
search_text=query,
vector_queries= [vector_query],
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])
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)
Výstup z tohoto požadavku může vypadat jako v následujícím příkladu.
Yes, there are cloud formations specific to oceans and large bodies of water.
A notable example is "cloud streets," which are parallel rows of clouds that form over
the Bering Strait in the Arctic Ocean. These cloud streets occur when wind blows from
a cold surface like sea ice over warmer, moister air near the open ocean, leading to
the formation of spinning air cylinders. Clouds form along the upward cycle of these cylinders,
while skies remain clear along the downward cycle (Source: page-21.pdf).
Aktualizace indexu pro sémantické profily řazení a bodování
V předchozím kurzu jste navrhli schéma indexu pro úlohy RAG. Záměrně jsme z tohoto schématu vynechali vylepšení relevance, abyste se mohli zaměřit na základy. Odložení relevance samostatného cvičení vám poskytne porovnání kvality výsledků hledání před a po provedení aktualizací.
Aktualizujte příkazy importu tak, aby zahrnovaly třídy pro sémantické řazení a bodovací profily.
from azure.identity import DefaultAzureCredential from azure.identity import get_bearer_token_provider from azure.search.documents.indexes import SearchIndexClient from azure.search.documents.indexes.models import ( SearchField, SearchFieldDataType, VectorSearch, HnswAlgorithmConfiguration, VectorSearchProfile, AzureOpenAIVectorizer, AzureOpenAIVectorizerParameters, SearchIndex, SemanticConfiguration, SemanticPrioritizedFields, SemanticField, SemanticSearch, ScoringProfile, TagScoringFunction, TagScoringParameters )
Do indexu vyhledávání přidejte následující sémantickou konfiguraci. Tento příklad najdete v kroku schématu aktualizace v poznámkovém bloku.
# New semantic configuration semantic_config = SemanticConfiguration( name="my-semantic-config", prioritized_fields=SemanticPrioritizedFields( title_field=SemanticField(field_name="title"), keywords_fields=[SemanticField(field_name="locations")], content_fields=[SemanticField(field_name="chunk")] ) ) # Create the semantic settings with the configuration semantic_search = SemanticSearch(configurations=[semantic_config])
Sémantická konfigurace má název a seznam polí s prioritou, které pomáhají optimalizovat vstupy do sémantického rankeru. Další informace naleznete v tématu Konfigurace sémantického řazení.
Dále přidejte definici hodnoticího profilu. Stejně jako u sémantické konfigurace je možné profil bodování kdykoli přidat do schématu indexu. Tento příklad je také v kroku schématu aktualizace v poznámkovém bloku za sémantickou konfigurací.
# New scoring profile scoring_profiles = [ ScoringProfile( name="my-scoring-profile", functions=[ TagScoringFunction( field_name="locations", boost=5.0, parameters=TagScoringParameters( tags_parameter="tags", ), ) ] ) ]
Tento profil používá funkci značky, která zvyšuje skóre dokumentů, ve kterých byla nalezena shoda v poli umístění. Vzpomeňte si, že index vyhledávání obsahuje vektorové pole a více polí nevectoru pro název, bloky dat a umístění. Pole Umístění je kolekce řetězců a kolekce řetězců je možné zvýšit pomocí funkce značek v bodovacím profilu. Další informace najdete v tématu Přidání hodnoticího profilu a vylepšení relevance hledání pomocí zvýšení úrovně dokumentu (blogový příspěvek).
Aktualizujte definici indexu ve vyhledávací službě.
# Update the search index with the semantic configuration index = SearchIndex(name=index_name, fields=fields, vector_search=vector_search, semantic_search=semantic_search, scoring_profiles=scoring_profiles) result = index_client.create_or_update_index(index) print(f"{result.name} updated")
Aktualizace dotazů pro sémantické profily řazení a bodování
V předchozím kurzu jste spustili dotazy , které se spouští na vyhledávacím webu, předali odpověď a další informace LLM pro dokončení chatu.
Tento příklad upraví požadavek dotazu tak, aby zahrnoval sémantickou konfiguraci a bodovací profil.
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
)
# Prompt is unchanged in this update
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.
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}
"""
# Queries are unchanged in this update
query="Are there any cloud formations specific to oceans and large bodies of water?"
vector_query = VectorizableTextQuery(text=query, k_nearest_neighbors=50, fields="text_vector")
# Add query_type semantic and semantic_configuration_name
# Add scoring_profile and scoring_parameters
search_results = search_client.search(
query_type="semantic",
semantic_configuration_name="my-semantic-config",
scoring_profile="my-scoring-profile",
scoring_parameters=["tags-ocean, 'sea surface', seas, surface"],
search_text=query,
vector_queries= [vector_query],
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])
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)
Výstup z sémanticky seřazeného a posíleného dotazu může vypadat jako v následujícím příkladu.
Yes, there are specific cloud formations influenced by oceans and large bodies of water:
- **Stratus Clouds Over Icebergs**: Low stratus clouds can frame holes over icebergs,
such as Iceberg A-56 in the South Atlantic Ocean, likely due to thermal instability caused
by the iceberg (source: page-39.pdf).
- **Undular Bores**: These are wave structures in the atmosphere created by the collision
of cool, dry air from a continent with warm, moist air over the ocean, as seen off the
coast of Mauritania (source: page-23.pdf).
- **Ship Tracks**: These are narrow clouds formed by water vapor condensing around tiny
particles from ship exhaust. They are observed over the oceans, such as in the Pacific Ocean
off the coast of California (source: page-31.pdf).
These specific formations are influenced by unique interactions between atmospheric conditions
and the presence of large water bodies or objects within them.
Přidání sémantických profilů hodnocení a bodování pozitivně ovlivňuje odpověď z LLM zvýšením výsledků, které splňují kritéria hodnocení a jsou sémanticky relevantní.
Teď, když lépe rozumíte návrhu indexů a dotazů, pojďme se pustit do optimalizace rychlosti a zřetězení. Znovu se podíváme na definici schématu pro implementaci kvantizace a snížení úložiště, ale zbytek kanálu a modelů zůstane nedotčený.