Menggunakan Mesin RAG di Platform Agen Gemini Enterprise di Gemini Live API

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:

  1. Mengaktifkan RAG API di Agent Platform.

  2. Buat contoh Korpus RAG.

  3. 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