Tokëzimi me Google Search

Grounding with Google Search lidh modelin Gemini me përmbajtjen e internetit në kohë reale dhe funksionon me të gjitha gjuhët e disponueshme . Kjo i lejon Binjakëve të japin përgjigje më të sakta dhe të citojnë burime të verifikueshme përtej kufirit të njohurive të tij.

Tokëzimi ju ndihmon të ndërtoni aplikacione që mund të:

  • Rritja e saktësisë faktike: Zvogëloni halucinacionet e modelit duke i bazuar përgjigjet në informacionin e botës reale.
  • Aksesoni informacionin në kohë reale: Përgjigjuni pyetjeve në lidhje me ngjarjet dhe temat e fundit.
  • Jepni citate: Ndërtoni besimin e përdoruesit duke treguar burimet për pretendimet e modelit.

Python

from google import genai
from google.genai import types

# Configure the client
client = genai.Client()

# Define the grounding tool
grounding_tool = types.Tool(
    google_search=types.GoogleSearch()
)

# Configure generation settings
config = types.GenerateContentConfig(
    tools=[grounding_tool]
)

# Make the request
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Who won the euro 2024?",
    config=config,
)

# Print the grounded response
print(response.text)

JavaScript

import { GoogleGenAI } from "@google/genai";

// Configure the client
const ai = new GoogleGenAI({});

// Define the grounding tool
const groundingTool = {
  googleSearch: {},
};

// Configure generation settings
const config = {
  tools: [groundingTool],
};

// Make the request
const response = await ai.models.generateContent({
  model: "gemini-2.5-flash",
  contents: "Who won the euro 2024?",
  config,
});

// Print the grounded response
console.log(response.text);

PUSHIMI

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{
    "contents": [
      {
        "parts": [
          {"text": "Who won the euro 2024?"}
        ]
      }
    ],
    "tools": [
      {
        "google_search": {}
      }
    ]
  }'

Mund të mësoni më shumë duke provuar fletoren e veglave të kërkimit .

Si funksionon tokëzimi me Google Search

Kur aktivizoni mjetin google_search , modeli trajton të gjithë rrjedhën e punës së kërkimit, përpunimit dhe citimit të informacionit automatikisht.

tokëzim-vështrim i përgjithshëm

  1. Kërkesa e përdoruesit: Aplikacioni juaj dërgon kërkesën e një përdoruesi te Gemini API me mjetin google_search të aktivizuar.
  2. Analiza e menjëhershme: Modeli analizon kërkesën dhe përcakton nëse një Kërkim Google mund ta përmirësojë përgjigjen.
  3. Kërkimi në Google: Nëse nevojitet, modeli gjeneron automatikisht një ose shumë pyetje kërkimi dhe i ekzekuton ato.
  4. Përpunimi i rezultateve të kërkimit: Modeli përpunon rezultatet e kërkimit, sintetizon informacionin dhe formulon një përgjigje.
  5. Përgjigja e bazuar: API kthen një përgjigje përfundimtare, miqësore për përdoruesit, e cila është e bazuar në rezultatet e kërkimit. Kjo përgjigje përfshin përgjigjen e tekstit të modelit dhe groundingMetadata me pyetjet e kërkimit, rezultatet në ueb dhe citimet.

Kuptimi i përgjigjes bazë

Kur një përgjigje është e bazuar me sukses, përgjigja përfshin një fushë groundingMetadata . Këto të dhëna të strukturuara janë thelbësore për verifikimin e pretendimeve dhe ndërtimin e një përvoje të pasur citimi në aplikacionin tuaj.

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "Spain won Euro 2024, defeating England 2-1 in the final. This victory marks Spain's record fourth European Championship title."
          }
        ],
        "role": "model"
      },
      "groundingMetadata": {
        "webSearchQueries": [
          "UEFA Euro 2024 winner",
          "who won euro 2024"
        ],
        "searchEntryPoint": {
          "renderedContent": "<!-- HTML and CSS for the search widget -->"
        },
        "groundingChunks": [
          {"web": {"uri": "https://vertexaisearch.cloud.google.com.....", "title": "aljazeera.com"}},
          {"web": {"uri": "https://vertexaisearch.cloud.google.com.....", "title": "uefa.com"}}
        ],
        "groundingSupports": [
          {
            "segment": {"startIndex": 0, "endIndex": 85, "text": "Spain won Euro 2024, defeatin..."},
            "groundingChunkIndices": [0]
          },
          {
            "segment": {"startIndex": 86, "endIndex": 210, "text": "This victory marks Spain's..."},
            "groundingChunkIndices": [0, 1]
          }
        ]
      }
    }
  ]
}

API Gemini kthen informacionin e mëposhtëm me groundingMetadata :

  • webSearchQueries : Një grup i pyetjeve të kërkimit të përdorura. Kjo është e dobishme për korrigjimin dhe kuptimin e procesit të arsyetimit të modelit.
  • searchEntryPoint : Përmban HTML dhe CSS për të dhënë sugjerimet e kërkuara të kërkimit. Kërkesat e plota të përdorimit janë të detajuara në Kushtet e Shërbimit .
  • groundingChunks : Grup objektesh që përmbajnë burimet e ueb-it ( uri dhe title ).
  • groundingSupports : Grup copash për të lidhur text e përgjigjes së modelit me burimet në groundingChunks . Çdo pjesë lidh një segment teksti (të përcaktuar nga startIndex dhe endIndex ) me një ose më shumë groundingChunkIndices . Ky është çelësi për ndërtimin e citimeve në linjë.

Tokëzimi me Google Search mund të përdoret gjithashtu në kombinim me mjetin e kontekstit të URL-së për të bazuar përgjigjet si në të dhënat publike të uebit ashtu edhe në URL-të specifike që ofroni.

Atribuimi i burimeve me citime në linjë

API kthen të dhëna të strukturuara të citimeve, duke ju dhënë kontroll të plotë mbi mënyrën se si i shfaqni burimet në ndërfaqen tuaj të përdoruesit. Ju mund të përdorni fushat groundingSupports dhe groundingChunks për të lidhur deklaratat e modelit drejtpërdrejt me burimet e tyre. Këtu është një model i zakonshëm për përpunimin e meta të dhënave për të krijuar një përgjigje me citate inline, të klikueshme.

Python

def add_citations(response):
    text = response.text
    supports = response.candidates[0].grounding_metadata.grounding_supports
    chunks = response.candidates[0].grounding_metadata.grounding_chunks

    # Sort supports by end_index in descending order to avoid shifting issues when inserting.
    sorted_supports = sorted(supports, key=lambda s: s.segment.end_index, reverse=True)

    for support in sorted_supports:
        end_index = support.segment.end_index
        if support.grounding_chunk_indices:
            # Create citation string like [1](link1)[2](link2)
            citation_links = []
            for i in support.grounding_chunk_indices:
                if i < len(chunks):
                    uri = chunks[i].web.uri
                    citation_links.append(f"[{i + 1}]({uri})")

            citation_string = ", ".join(citation_links)
            text = text[:end_index] + citation_string + text[end_index:]

    return text

# Assuming response with grounding metadata
text_with_citations = add_citations(response)
print(text_with_citations)

JavaScript

function addCitations(response) {
    let text = response.text;
    const supports = response.candidates[0]?.groundingMetadata?.groundingSupports;
    const chunks = response.candidates[0]?.groundingMetadata?.groundingChunks;

    // Sort supports by end_index in descending order to avoid shifting issues when inserting.
    const sortedSupports = [...supports].sort(
        (a, b) => (b.segment?.endIndex ?? 0) - (a.segment?.endIndex ?? 0),
    );

    for (const support of sortedSupports) {
        const endIndex = support.segment?.endIndex;
        if (endIndex === undefined || !support.groundingChunkIndices?.length) {
        continue;
        }

        const citationLinks = support.groundingChunkIndices
        .map(i => {
            const uri = chunks[i]?.web?.uri;
            if (uri) {
            return `[${i + 1}](${uri})`;
            }
            return null;
        })
        .filter(Boolean);

        if (citationLinks.length > 0) {
        const citationString = citationLinks.join(", ");
        text = text.slice(0, endIndex) + citationString + text.slice(endIndex);
        }
    }

    return text;
}

const textWithCitations = addCitations(response);
console.log(textWithCitations);

Përgjigja e re me citate inline do të duket kështu:

Spain won Euro 2024, defeating England 2-1 in the final.[1](https:/...), [2](https:/...), [4](https:/...), [5](https:/...) This victory marks Spain's record-breaking fourth European Championship title.[5]((https:/...), [2](https:/...), [3](https:/...), [4](https:/...)

Çmimet

Kur përdorni Grounding me Google Search, projekti juaj faturohet për kërkesë API që përfshin veglën google_search . Nëse modeli vendos të ekzekutojë pyetje të shumta kërkimi për t'iu përgjigjur një kërkese të vetme (për shembull, kërkimi për "UEFA Euro 2024 winner" dhe "Spain vs England Euro 2024 final score" brenda të njëjtës thirrje API), kjo llogaritet si një përdorim i vetëm i faturueshëm i mjetit për atë kërkesë.

Për informacion të detajuar mbi çmimin, shihni faqen e çmimeve të API-së Gemini .

Modelet e mbështetura

Modelet eksperimentale dhe ato paraprake nuk janë të përfshira. Mund të gjeni aftësitë e tyre në faqen e përmbledhjes së modelit .

Model Tokëzimi me Google Search
Gemini 2.5 Pro ✔️
Binjakët 2.5 Flash ✔️
Binjakët 2.0 Flash ✔️
Gemini 1.5 Pro ✔️
Binjakët 1.5 Flash ✔️

Tokëzimi me modelet Gemini 1.5 (Trashëgimia)

Ndërsa mjeti google_search rekomandohet për Gemini 2.0 e më vonë, Gemini 1.5 mbështet një mjet të vjetër të quajtur google_search_retrieval . Ky mjet ofron një modalitet dynamic që lejon modelin të vendosë nëse do të kryejë një kërkim bazuar në besimin e tij se kërkesa kërkon informacion të ri. Nëse besimi i modelit është mbi një dynamic_threshold që keni vendosur (një vlerë midis 0.0 dhe 1.0), ai do të kryejë një kërkim.

Python

# Note: This is a legacy approach for Gemini 1.5 models.
# The 'google_search' tool is recommended for all new development.
import os
from google import genai
from google.genai import types

client = genai.Client()

retrieval_tool = types.Tool(
    google_search_retrieval=types.GoogleSearchRetrieval(
        dynamic_retrieval_config=types.DynamicRetrievalConfig(
            mode=types.DynamicRetrievalConfigMode.MODE_DYNAMIC,
            dynamic_threshold=0.7 # Only search if confidence > 70%
        )
    )
)

config = types.GenerateContentConfig(
    tools=[retrieval_tool]
)

response = client.models.generate_content(
    model='gemini-1.5-flash',
    contents="Who won the euro 2024?",
    config=config,
)
print(response.text)
if not response.candidates[0].grounding_metadata:
  print("\nModel answered from its own knowledge.")

JavaScript

// Note: This is a legacy approach for Gemini 1.5 models.
// The 'googleSearch' tool is recommended for all new development.
import { GoogleGenAI, DynamicRetrievalConfigMode } from "@google/genai";

const ai = new GoogleGenAI({});

const retrievalTool = {
  googleSearchRetrieval: {
    dynamicRetrievalConfig: {
      mode: DynamicRetrievalConfigMode.MODE_DYNAMIC,
      dynamicThreshold: 0.7, // Only search if confidence > 70%
    },
  },
};

const config = {
  tools: [retrievalTool],
};

const response = await ai.models.generateContent({
  model: "gemini-1.5-flash",
  contents: "Who won the euro 2024?",
  config,
});

console.log(response.text);
if (!response.candidates?.[0]?.groundingMetadata) {
  console.log("\nModel answered from its own knowledge.");
}

PUSHIMI

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \

  -H "Content-Type: application/json" \
  -X POST \
  -d '{
    "contents": [
      {"parts": [{"text": "Who won the euro 2024?"}]}
    ],
    "tools": [{
      "google_search_retrieval": {
        "dynamic_retrieval_config": {
          "mode": "MODE_DYNAMIC",
          "dynamic_threshold": 0.7
        }
      }
    }]
  }'

Çfarë është më pas