Retrieval-augmented generation (RAG) adalah teknik yang digunakan untuk mengambil dan memberikan informasi yang relevan kepada LLM untuk menghasilkan respons yang dapat diverifikasi. Informasi ini dapat mencakup informasi terbaru, topik dan konteks, atau kebenaran nyata.
Halaman ini menunjukkan cara menggunakan RAG Engine dengan Gemini Live API, yang memungkinkan Anda menentukan dan mengambil informasi dari korpus RAG.
Prasyarat
Prasyarat berikut harus diselesaikan sebelum Anda dapat menggunakan RAG Engine dengan Gemini Live API:
Mengaktifkan RAG API di Agent Platform.
Untuk mengupload file ke Korpus RAG, lihat API contoh mengimpor file RAG.
Siapkan
Anda dapat menggunakan RAG Engine dengan Live API dengan menentukan RAG Engine sebagai alat. Contoh kode berikut menunjukkan cara menentukan RAG Engine sebagai alat:
Ganti variabel berikut:
- YOUR_PROJECT_ID: ID Google Cloud project Anda.
- YOUR_CORPUS_ID: ID korpus Anda.
- YOUR_LOCATION: Region untuk memproses permintaan.
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}"
}
}
}
}
Menggunakan Websocket untuk komunikasi real-time
Untuk mengaktifkan komunikasi real-time antara klien dan server, Anda harus menggunakan
Websocket. Contoh kode ini menunjukkan cara menggunakan Websocket menggunakan Python API dan Python SDK.
Python API
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 = "YOUR_MODEL_NAME"
# 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)}"))
Python SDK
Untuk mempelajari cara menginstal SDK AI generatif, lihat Menginstal library:
from google import genai
from google.genai import types
from google.genai.types import (Content, LiveConnectConfig, HttpOptions, Modality, Part,)
from IPython import display
MODEL = "YOUR_MODEL_NAME"
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
Menggunakan RAG Engine sebagai penyimpanan konteks
Anda dapat menggunakan RAG Engine sebagai penyimpanan konteks untuk Gemini Live API guna menyimpan konteks sesi untuk membentuk dan mengambil konteks sebelumnya yang terkait dengan percakapan Anda dan memperkaya konteks saat ini untuk pembuatan model. Anda juga dapat memanfaatkan fitur ini untuk membagikan konteks di berbagai sesi Live API Anda.
RAG Engine mendukung penyimpanan dan pengindeksan bentuk data berikut dari konteks sesi:
- Teks
- Ucapan audio
Membuat korpus jenis MemoryCorpus
Untuk menyimpan dan mengindeks teks percakapan dari konteks sesi, Anda harus membuat
korpus RAG jenis MemoryCorpus. Anda juga harus menentukan parser LLM dalam
konfigurasi korpus memori yang digunakan untuk mengurai konteks sesi yang disimpan
dari Live API guna membangun memori untuk pengindeksan.
Contoh kode ini menunjukkan cara membuat korpus. Namun, ganti terlebih dahulu variabel dengan nilai.
# 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-3.8-flash"
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
)
)
),
)
Tentukan korpus memori Anda untuk menyimpan konteks
Saat menggunakan korpus memori dengan Live API, Anda harus menentukan korpus memori sebagai alat pengambilan, lalu menetapkan store_context ke true untuk mengizinkan Live API menyimpan konteks sesi.
Contoh kode ini menunjukkan cara menentukan korpus memori untuk menyimpan konteks. Namun, ganti variabel dengan nilai terlebih dahulu.
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
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
Langkah berikutnya
Untuk mempelajari lebih lanjut RAG Engine di Gemini Enterprise Agent Platform, lihat Ringkasan RAG Engine.
Untuk mempelajari lebih lanjut RAG API, lihat RAG Engine API.
Untuk mengelola korpus RAG, lihat Pengelolaan korpus.
Untuk mengelola file RAG, lihat Pengelolaan file.
Untuk mempelajari cara menggunakan Vertex AI SDK untuk menjalankan tugas RAG Engine di Gemini Enterprise Agent Platform, lihat Mulai cepat RAG untuk Python.