Retrieval e ranking

Questa pagina spiega il ricoordinamento e mostra come utilizzare l'API per ricoordinare le risposte recuperate.

Il ricoordinamento post-retrieval è una tecnica che migliora la pertinenza dei risultati di recupero. Il motore RAG di Vertex AI offre ricorsioni facoltative che migliorano la pertinenza dei risultati recuperati durante le query. I reranker valutano la pertinenza dei chunk di una query e riordinano i risultati di conseguenza. Il nuovo ordine porta a risposte più adatte alla query o può essere incluso nei prompt per l'inferenza del modello per generare risposte più pertinenti e accurate.

Reranker disponibili

Questa sezione illustra i tipi di ricollocatori.

LLM reranker

Il reranker LLM è il reranker che utilizza un LLM per valutare la pertinenza dei blocchi per una query e riordinare i risultati di conseguenza, generando risposte più adatte o prompt migliorati per l'inferenza del modello.

Vertex AI rank service reranker

Il riordinamento del servizio di ranking si basa sull'API rank che prende un elenco di documenti e li riordina in base alla pertinenza per una query. Rispetto agli embedding, che esaminano solo la somiglianza semantica di un documento e di una query, questo può darti punteggi precisi sulla qualità della risposta di un documento a una determinata query.

Considerazioni per la scelta di un riassegnatore

Quando scegli un riassegnatore, tieni presente quanto segue:

  • I reranker del servizio LLM e Rank utilizzano il riordinamento per migliorare la pertinenza dei contesti recuperati, il che consente al modello di fornire risposte migliori.
  • I reranker introducono una latenza che aumenta con il numero di contesti elaborati.
  • Il costo di un riassegnatore LLM dipende dal numero di token elaborati, ma il costo per l'utilizzo del riassegnatore del servizio Rank è fisso per query.

Come utilizzare i ricorsioni

Questa sezione presenta i prerequisiti e gli esempi di codice per l'utilizzo dei ricorsioni.

Prerequisiti per l'utilizzo del ricordino LLM

Il ricoordinamento LLM supporta solo i modelli Gemini, che sono accessibili quando è attivata l'API RAG. Per visualizzare l'elenco dei modelli supportati, consulta Modelli Gemini.

Recuperare i contesti pertinenti utilizzando l'API RAG

Questo esempio di codice mostra come recuperare i contesti pertinenti utilizzando l'API RAG.

REST

Sostituisci le seguenti variabili utilizzate nell'esempio di codice:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud .
  • LOCATION: la regione in cui elaborare la richiesta.
  • RAG_CORPUS_RESOURCE: il nome della risorsa del corpus RAG. Formato: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}.
  • TEXT: il testo della query per ottenere contesti pertinenti.
  • MODEL_NAME: il nome del modello utilizzato per il ricoinvolgimento.
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION:retrieveContexts" \
  -d '{
    "vertex_rag_store": {
      "rag_resources": {
          "rag_corpus": """RAG_CORPUS_RESOURCE"
        }
    },
    "query": {
      "text": "TEXT",
      "rag_retrieval_config": {
        "top_k": 10,
        "ranking": {
          "llm_ranker": {
            "model_name": "MODEL_NAME"
          }
        }
      }
    }
  }'

Python

Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python.

Sostituisci le seguenti variabili utilizzate nell'esempio di codice:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud .
  • LOCATION: la regione in cui elaborare la richiesta.
  • RAG_CORPUS_RESOURCE: il nome della risorsa del corpus RAG. Formato: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}.
  • TEXT: il testo della query per ottenere contesti pertinenti.
  • MODEL_NAME: il nome del modello utilizzato per il ricoinvolgimento.
from vertexai import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
CORPUS_NAME = "projects/[PROJECT_ID]/locations/LOCATION/ragCorpora/[RAG_CORPUS_ID]"
MODEL_NAME= "MODEL_NAME"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="LOCATION")

rag_retrieval_config = rag.RagRetrievalConfig(
    top_k=10,
    ranking=rag.Ranking(
        llm_ranker=rag.LlmRanker(
            model_name=MODEL_NAME
        )
    )
)

response = rag.retrieval_query(
    rag_resources=[
        rag.RagResource(
            rag_corpus=CORPUS_NAME,
        )
    ],
    text="TEXT",
    rag_retrieval_config=rag_retrieval_config,
)
print(response)
# Example response:
# contexts {
#   contexts {
#     source_uri: "gs://your-bucket-name/file.txt"
#     text: "....
#   ....

Generare contenuti utilizzando l'API RAG

REST

Per generare contenuti utilizzando i modelli Gemini, effettua una chiamata all'API GenerateContent Vertex AI.

Sostituisci le seguenti variabili utilizzate nel codice di esempio:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud .
  • LOCATION: la regione in cui elaborare la richiesta.
  • MODEL_ID: modello LLM per la generazione di contenuti. Ad esempio, gemini-1.5-flash-002.
  • GENERATION_METHOD: metodo LLM per la generazione di contenuti. Le opzioni sono generateContent e streamGenerateContent.
  • INPUT_PROMPT: il testo inviato all'LLM per la generazione di contenuti.
  • RAG_CORPUS_RESOURCE: il nome della risorsa del corpus RAG.
    Formato: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}.
  • SIMILARITY_TOP_K: facoltativo. Il numero di contesti principali da recuperare.
  • MODEL_NAME: il nome del modello utilizzato per il ricoinvolgimento.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATION_METHOD" \
-d '{
  "contents": {
    "role": "user",
    "parts": {
      "text": "INPUT_PROMPT"
    }
  },
  "tools": {
    "retrieval": {
      "disable_attribution": false,
      "vertex_rag_store": {
        "rag_resources": {
            "rag_corpus": "RAG_CORPUS_RESOURCE"
          },
        "rag_retrieval_config": {
          "top_k": 10,
          "ranking": {
            "llm_ranker": {
              "model_name": "MODEL_NAME"
            }
          }
        }
      }
    }
  }
}'

Python

Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python.

Sostituisci le seguenti variabili utilizzate nel codice di esempio:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud .
  • LOCATION: la regione in cui elaborare la richiesta.
  • MODEL_ID: modello LLM per la generazione di contenuti. Ad esempio, gemini-1.5-flash-002.
  • GENERATION_METHOD: metodo LLM per la generazione di contenuti. Le opzioni sono generateContent e streamGenerateContent.
  • INPUT_PROMPT: il testo inviato all'LLM per la generazione di contenuti.
  • RAG_CORPUS_RESOURCE: il nome della risorsa del corpus RAG.
    Formato: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}.
  • SIMILARITY_TOP_K: facoltativo. Il numero di contesti principali da recuperare.
  • MODEL_NAME: il nome del modello utilizzato per il ricoinvolgimento.
from vertexai import rag
from vertexai.generative_models import GenerativeModel, Tool
import vertexai

PROJECT_ID = "PROJECT_ID"
CORPUS_NAME = "projects/{PROJECT_ID}/locations/LOCATION/ragCorpora/RAG_CORPUS_RESOURCE"
MODEL_NAME= "MODEL_NAME"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="LOCATION")

config = rag.RagRetrievalConfig(
    top_k=10,
    ranking=rag.Ranking(
        llm_ranker=rag.LlmRanker(
            model_name=MODEL_NAME
        )
    )
)

rag_retrieval_tool = Tool.from_retrieval(
    retrieval=rag.Retrieval(
        source=rag.VertexRagStore(
            rag_resources=[
                rag.RagResource(
                    rag_corpus=CORPUS_NAME,
                )
            ],
            rag_retrieval_config=config
        ),
    )
)

rag_model = GenerativeModel(
    model_name=MODEL_NAME, tools=[rag_retrieval_tool]
)
response = rag_model.generate_content("Why is the sky blue?")
print(response.text)
# Example response:
#   The sky appears blue due to a phenomenon called Rayleigh scattering.
#   Sunlight, which contains all colors of the rainbow, is scattered
#   by the tiny particles in the Earth's atmosphere....
#   ...

Prerequisiti del ricoordinamento del servizio di ranking Vertex

Per utilizzare il riordinamento del servizio di ranking di Vertex AI, è necessario attivare l'API Discovery Engine. Tutti i modelli supportati sono disponibili nel documento

Recuperare i contesti pertinenti utilizzando l'API RAG

Dopo aver creato il corpus RAG, i contesti pertinenti possono essere recuperati dal motore RAG di Vertex AI tramite l'API RetrieveContexts.

Questi esempi di codice mostrano come utilizzare l'API per recuperare i contesti dal motore RAG di Vertex AI.

REST

Sostituisci le seguenti variabili utilizzate nel codice di esempio:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud .
  • LOCATION: la regione in cui elaborare la richiesta.
  • RAG_CORPUS_RESOURCE: il nome della risorsa del corpus RAG. Formato: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}.
  • TEXT: il testo della query per ottenere contesti pertinenti.
  • MODEL_NAME: il nome del modello utilizzato per il ricoinvolgimento.
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION:retrieveContexts" \
  -d '{
    "vertex_rag_store": {
      "rag_resources": {
          "rag_corpus": "RAG_CORPUS_RESOURCE"
        }
    },
    "query": {
      "text": "TEXT",
      "rag_retrieval_config": {
        "top_k": 5,
        "ranking": {
          "rank_service": {
            "model_name": "MODEL_NAME"
          }
        }
      }
    }
  }'

Python

Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python.

Sostituisci le seguenti variabili utilizzate nel codice di esempio:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud .
  • LOCATION: la regione in cui elaborare la richiesta.
  • RAG_CORPUS_RESOURCE: il nome della risorsa del corpus RAG.
    Formato: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}.
  • TEXT: il testo della query per ottenere contesti pertinenti.
  • MODEL_NAME: il nome del modello utilizzato per il ricoinvolgimento.
from vertexai import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
CORPUS_NAME = "projects/[PROJECT_ID]/locations/LOCATION/ragCorpora/RAG_CORPUS_RESOURCE"
MODEL_NAME= "MODEL_NAME"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="LOCATION")

rag_retrieval_config = rag.RagRetrievalConfig(
    top_k=10,
    ranking=rag.Ranking(
        rank_service=rag.RankService(
            model_name=MODEL_NAME
        )
    )
)
response = rag.retrieval_query(
    rag_resources=[
        rag.RagResource(
            rag_corpus=CORPUS_NAME,
        )
    ],
    text="TEXT",
    rag_retrieval_config=rag_retrieval_config,
)
print(response)
# Example response:
# contexts {
#   contexts {
#     source_uri: "gs://your-bucket-name/file.txt"
#     text: "....
#   ....

Generare contenuti utilizzando l'API RAG

REST

Per generare contenuti utilizzando i modelli Gemini, effettua una chiamata all'API GenerateContent Vertex AI. Se specifichi RAG_CORPUS_RESOURCE nella richiesta, il modello recupera automaticamente i dati dal motore RAG di Vertex AI.

Sostituisci le seguenti variabili utilizzate nel codice di esempio:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud .
  • LOCATION: la regione in cui elaborare la richiesta.
  • MODEL_ID: modello LLM per la generazione di contenuti. Ad esempio, gemini-1.5-flash-002.
  • GENERATION_METHOD: metodo LLM per la generazione di contenuti. Le opzioni includono generateContent e streamGenerateContent.
  • INPUT_PROMPT: il testo inviato all'LLM per la generazione di contenuti.
  • RAG_CORPUS_RESOURCE: il nome della risorsa del corpus RAG.
    Formato: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}.
  • SIMILARITY_TOP_K: facoltativo. Il numero di contesti principali da recuperare.
  • MODEL_NAME: il nome del modello utilizzato per il ricoinvolgimento.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATION_METHOD" \
-d '{
  "contents": {
    "role": "user",
    "parts": {
      "text": "INPUT_PROMPT"
    }
  },
  "tools": {
    "retrieval": {
      "disable_attribution": false,
      "vertex_rag_store": {
        "rag_resources": {
            "rag_corpus": "RAG_CORPUS_RESOURCE"
          },
        "rag_retrieval_config": {
          "top_k": 10,
          "ranking": {
            "rank_service": {
              "model_name": "MODEL_NAME"
            }
          }
        }
      }
    }
  }
}'

Python

Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python.

Sostituisci le seguenti variabili utilizzate nel codice di esempio:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud .
  • LOCATION: la regione in cui elaborare la richiesta.
  • MODEL_ID: modello LLM per la generazione di contenuti. Ad esempio, gemini-1.5-flash-002.
  • GENERATION_METHOD: metodo LLM per la generazione di contenuti. Le opzioni includono generateContent e streamGenerateContent.
  • INPUT_PROMPT: il testo inviato all'LLM per la generazione di contenuti.
  • RAG_CORPUS_RESOURCE: il nome della risorsa del corpus RAG.
    Formato: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}.
  • SIMILARITY_TOP_K: facoltativo. Il numero di contesti principali da recuperare.
  • MODEL_NAME: il nome del modello utilizzato per il ricoinvolgimento.
from vertexai import rag
from vertexai.generative_models import GenerativeModel, Tool
import vertexai

PROJECT_ID = "PROJECT_ID"
CORPUS_NAME = "projects/{PROJECT_ID}/locations/LOCATION/ragCorpora/RAG_CORPUS_RESOURCE"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="LOCATION")

config = rag.RagRetrievalConfig(
    top_k=10,
    ranking=rag.Ranking(
        rank_service=rag.RankService(
            model_name=MODEL_NAME
        )
    )
)

rag_retrieval_tool = Tool.from_retrieval(
    retrieval=rag.Retrieval(
        source=rag.VertexRagStore(
            rag_resources=[
                rag.RagResource(
                    rag_corpus=CORPUS_NAME,
                )
            ],
            rag_retrieval_config=config
        ),
    )
)

rag_model = GenerativeModel(
    model_name="MODEL_NAME", tools=[rag_retrieval_tool]
)
response = rag_model.generate_content("INPUT_PROMPT")
print(response.text)
# Example response:
#   The sky appears blue due to a phenomenon called Rayleigh scattering.
#   Sunlight, which contains all colors of the rainbow, is scattered
#   by the tiny particles in the Earth's atmosphere....
#   ...

Passaggi successivi