La génération augmentée par récupération (RAG) est une technique utilisée pour récupérer et fournir des informations pertinentes aux LLM afin de générer des réponses vérifiables. Ces informations peuvent inclure des informations récentes, un thème et un contexte, ou une vérité terrain.
Cette page explique comment utiliser le moteur RAG Vertex AI avec l'API Gemini Live, qui vous permet de spécifier et de récupérer des informations à partir du corpus RAG.
Prérequis
Avant de pouvoir utiliser le moteur RAG de Vertex AI avec l'API Live multimodale, vous devez remplir les conditions préalables suivantes :
Activez l'API RAG dans Vertex AI.
Pour importer des fichiers dans le corpus RAG, consultez l'exemple d'API d'importation de fichiers RAG.
Configurer
Vous pouvez utiliser le moteur RAG Vertex AI avec l'API Live en spécifiant le moteur RAG Vertex AI comme outil. L'exemple de code suivant montre comment spécifier le moteur RAG de Vertex AI en tant qu'outil :
Remplacez les variables suivantes :
- YOUR_PROJECT_ID : ID de votre projet Google Cloud .
- YOUR_CORPUS_ID : ID de votre corpus.
- YOUR_LOCATION : région dans laquelle traiter la requête.
PROJECT_ID = "YOUR_PROJECT_ID"
RAG_CORPUS_ID = "YOUR_CORPUS_ID"
LOCATION = "YOUR_LOCATION"
TOOLS = {
"retrieval": {
"vertex_rag_store": {
"rag_resources": {
"rag_corpus": "projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora/${RAG_CORPUS_ID}"
}
}
}
Utiliser Websocket
pour communiquer en temps réel
Pour activer la communication en temps réel entre un client et un serveur, vous devez utiliser un Websocket
. Ces exemples de code montrent comment utiliser un Websocket
à l'aide de l'API Python et du SDK Python.
API Python
CONFIG = {"response_modalities": ["TEXT"], "speech_config": { "language_code": "en-US" }}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {bearer_token[0]}",
}
HOST= "${LOCATION}-aiplatform.googleapis.com"
SERVICE_URL = f"wss://{HOST}/ws/google.cloud.aiplatform.v1beta1.LlmBidiService/BidiGenerateContent"
MODEL="gemini-2.0-flash-exp"
# Connect to the server
async with connect(SERVICE_URL, additional_headers=headers) as ws:
# Setup the session
await ws.send(
json.dumps(
{
"setup": {
"model": MODEL,
"generation_config": CONFIG,
# Setup RAG as a retrieval tool
"tools": TOOLS,
}
}
)
)
# Receive setup response
raw_response = await ws.recv(decode=False)
setup_response = json.loads(raw_response.decode("ascii"))
# Send text message
text_input = "What are popular LLMs?"
display(Markdown(f"**Input:** {text_input}"))
msg = {
"client_content": {
"turns": [{"role": "user", "parts": [{"text": text_input}]}],
"turn_complete": True,
}
}
await ws.send(json.dumps(msg))
responses = []
# Receive chunks of server response
async for raw_response in ws:
response = json.loads(raw_response.decode())
server_content = response.pop("serverContent", None)
if server_content is None:
break
model_turn = server_content.pop("modelTurn", None)
if model_turn is not None:
parts = model_turn.pop("parts", None)
if parts is not None:
display(Markdown(f"**parts >** {parts}"))
responses.append(parts[0]["text"])
# End of turn
turn_complete = server_content.pop("turnComplete", None)
if turn_complete:
grounding_metadata = server_content.pop("groundingMetadata", None)
if grounding_metadata is not None:
grounding_chunks = grounding_metadata.pop("groundingChunks", None)
if grounding_chunks is not None:
for chunk in grounding_chunks:
display(Markdown(f"**grounding_chunk >** {chunk}"))
break
# Print the server response
display(Markdown(f"**Response >** {''.join(responses)}"))
SDK Python
Pour savoir comment installer le SDK d'IA générative, consultez Installer une bibliothèque :
from google import genai
from google.genai import types
from google.genai.types import (Content, LiveConnectConfig, HttpOptions, Modality, Part,)
from IPython import display
MODEL="gemini-2.0-flash-exp"
client = genai.Client(
vertexai=True,
project=PROJECT_ID,
location=LOCATION
)
async with client.aio.live.connect(
model=MODEL,
config=LiveConnectConfig(response_modalities=[Modality.TEXT],
tools=TOOLS),
) as session:
text_input = "\'What are core LLM techniques?\'"
print("> ", text_input, "\n")
await session.send_client_content(
turns=Content(role="user", parts=[Part(text=text_input)])
)
async for message in session.receive()
if message.text:
display.display(display.Markdown(message.text))
continue
Utiliser le moteur RAG Vertex AI comme magasin de contexte
Vous pouvez utiliser le moteur RAG Vertex AI comme magasin de contexte pour l'API Gemini Live afin de stocker le contexte de session, de former et de récupérer les contextes passés liés à votre conversation, et d'enrichir le contexte actuel pour la génération de modèles. Vous pouvez également profiter de cette fonctionnalité pour partager des contextes entre vos différentes sessions Live API.
Le moteur RAG Vertex AI permet de stocker et d'indexer les formes de données suivantes à partir des contextes de session :
- Texte
- Discours audio
Créer un corpus de type MemoryCorpus
Pour stocker et indexer les textes de conversation à partir du contexte de session, vous devez créer un corpus RAG de type MemoryCorpus
. Vous devez également spécifier un analyseur LLM dans la configuration de votre corpus de mémoire, qui est utilisé pour analyser les contextes de session stockés à partir de l'API Live afin de créer de la mémoire pour l'indexation.
Cet exemple de code montre comment créer un corpus. Toutefois, commencez par remplacer les variables par des valeurs.
# Currently supports Google first-party embedding models
EMBEDDING_MODEL = YOUR_EMBEDDING_MODEL # Such as "publishers/google/models/text-embedding-005"
MEMORY_CORPUS_DISPLAY_NAME = YOUR_MEMORY_CORPUS_DISPLAY_NAME
LLM_PARSER_MODEL_NAME = YOUR_LLM_PARSER_MODEL_NAME # Such as "projects/{project_id}/locations/{location}/publishers/google/models/gemini-2.5-pro-preview-05-06"
memory_corpus = rag.create_corpus(
display_name=MEMORY_CORPUS_DISPLAY_NAME,
corpus_type_config=rag.RagCorpusTypeConfig(
corpus_type_config=rag.MemoryCorpus(
llm_parser=rag.LlmParserConfig(
model_name=LLM_PARSER_MODEL_NAME,
)
)
),
backend_config=rag.RagVectorDbConfig(
rag_embedding_model_config=rag.RagEmbeddingModelConfig(
vertex_prediction_endpoint=rag.VertexPredictionEndpoint(
publisher_model=EMBEDDING_MODEL
)
)
),
)
Spécifier votre corpus de mémoire pour stocker les contextes
Lorsque vous utilisez votre corpus de mémoire avec l'API Live, vous devez spécifier le corpus de mémoire comme outil de récupération, puis définir store_context
sur true
pour permettre à l'API Live de stocker les contextes de session.
Cet exemple de code montre comment spécifier votre corpus de mémoire pour stocker les contextes. Toutefois, commencez par remplacer les variables par des valeurs.
from google import genai
from google.genai import types
from google.genai.types import (Content, LiveConnectConfig, HttpOptions, Modality, Part)
from IPython import display
PROJECT_ID=YOUR_PROJECT_ID
LOCATION=YOUR_LOCATION
TEXT_INPUT=YOUR_TEXT_INPUT
MODEL_NAME=YOUR_MODEL_NAME # Such as "gemini-2.0-flash-exp"
client = genai.Client(
vertexai=True,
project=PROJECT_ID,
location=LOCATION,
)
memory_store=types.VertexRagStore(
rag_resources=[
types.VertexRagStoreRagResource(
rag_corpus=memory_corpus.name
)
],
store_context=True
)
async with client.aio.live.connect(
model=MODEL_NAME,
config=LiveConnectConfig(response_modalities=[Modality.TEXT],
tools=[types.Tool(
retrieval=types.Retrieval(
vertex_rag_store=memory_store))]),
) as session:
text_input=TEXT_INPUT
await session.send_client_content(
turns=Content(role="user", parts=[Part(text=text_input)])
)
async for message in session.receive():
if message.text:
display.display(display.Markdown(message.text))
continue
Étapes suivantes
- Pour en savoir plus sur le moteur RAG de Vertex AI, consultez la présentation du moteur RAG de Vertex AI.
- Pour en savoir plus sur l'API RAG, consultez API du moteur RAG de Vertex AI.
- Pour gérer vos corpus RAG, consultez Gestion des corpus.
- Pour gérer vos fichiers RAG, consultez Gestion des fichiers.
- Pour savoir comment utiliser le SDK Vertex AI pour exécuter des tâches du moteur RAG de Vertex AI, consultez le démarrage rapide RAG pour Python.