L'API Gemini offre modelli di incorporamento per generare incorporamenti per testo, immagini, video e altri contenuti. Questi embedding risultanti possono essere utilizzati per attività come la ricerca semantica, la classificazione e il clustering, fornendo risultati più accurati e sensibili al contesto rispetto agli approcci basati su parole chiave.
L'ultimo modello, gemini-embedding-2, è il primo modello di embedding multimodale nell'API Gemini. Mappa testo, immagini,
video, audio e documenti in uno spazio di incorporamento unificato, consentendo la ricerca,
la classificazione e il clustering cross-modali in oltre 100 lingue. Per saperne di più, consulta la
sezione sugli incorporamenti multimodali. Per i casi d'uso
solo testo, gemini-embedding-001 rimane disponibile.
La creazione di sistemi di Retrieval Augmented Generation (RAG) è un caso d'uso comune per i prodotti AI. Gli incorporamenti svolgono un ruolo chiave nel migliorare significativamente gli output del modello con una maggiore accuratezza, coerenza e ricchezza contestuale. Se preferisci utilizzare una soluzione RAG gestita, abbiamo creato lo strumento Ricerca file che rende la RAG più facile da gestire e più conveniente.
Generazione degli incorporamenti in corso…
Utilizza il metodo embedContent per generare incorporamenti di testo:
Python
from google import genai
client = genai.Client()
result = client.models.embed_content(
model="gemini-embedding-2",
contents="What is the meaning of life?"
)
print(result.embeddings)
JavaScript
import { GoogleGenAI } from "@google/genai";
async function main() {
const ai = new GoogleGenAI({});
const response = await ai.models.embedContent({
model: 'gemini-embedding-2',
contents: 'What is the meaning of life?',
});
console.log(response.embeddings);
}
main();
Go
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
contents := []*genai.Content{
genai.NewContentFromText("What is the meaning of life?", genai.RoleUser),
}
result, err := client.Models.EmbedContent(ctx,
"gemini-embedding-2",
contents,
nil,
)
if err != nil {
log.Fatal(err)
}
embeddings, err := json.MarshalIndent(result.Embeddings, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(embeddings))
}
REST
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2:embedContent" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: ${GEMINI_API_KEY}" \
-d '{
"model": "models/gemini-embedding-2",
"content": {
"parts": [{
"text": "What is the meaning of life?"
}]
}
}'
Specifica il tipo di attività per migliorare il rendimento
Puoi utilizzare gli incorporamenti per un'ampia gamma di attività, dalla classificazione alla ricerca di documenti. Specificare il tipo di attività corretto consente di ottimizzare gli incorporamenti per le relazioni previste, massimizzando l'accuratezza e l'efficienza.
Tipi di attività con Embeddings 2
Per le attività solo di testo con gemini-embedding-2, ti consigliamo vivamente di
aggiungere le istruzioni dell'attività nel prompt. A questo scopo, formatta la query e il documento con il prefisso dell'attività corretto.
Le tabelle seguenti mostrano esempi di formattazione di query e documenti per casi d'uso simmetrici e asimmetrici utilizzando il modello gemini-embedding-2.
Casi d'uso per il recupero (formato asimmetrico)
Nei casi d'uso asimmetrici, aggiungi il prefisso dell'attività alla query e applica la struttura del documento per i contenuti che vuoi incorporare e recuperare.
| Caso d'uso | Struttura della query | Struttura del documento |
|---|---|---|
| Query di ricerca | task: search result | query: {content} |
title: {title} | text: {content}Se non è presente un titolo, utilizza title: none. |
| Question answering | task: question answering | query: {content} |
title: {title} | text: {content} |
| Fact checking | task: fact checking | query: {content} |
title: {title} | text: {content} |
| Recupero del codice | task: code retrieval | query: {content} |
title: {title} | text: {content} |
Esempio di utilizzo
Python
# Generate embedding for a task's query. Use your correct task here:
def prepare_query(query):
# return f"task: question answering | query: {query}"
# return f"task: fact checking | query: {query}"
# return f"task: code retrieval | query: {query}"
return f"task: search result | query: {query}"
# Generate embedding for document of an asymmetric retrieval task:
def prepare_document(content, title=None):
if title is None:
title = "none"
return f"title: {title} | text: {content}"
Casi d'uso con un solo input (formato simmetrico)
Nei casi d'uso simmetrici, per la stessa attività, utilizza la stessa formattazione per la query e il documento.
| Caso d'uso | Struttura dell'input |
|---|---|
| Classificazione | task: classification | query: {content} |
| Clustering | task: clustering | query: {content} |
| Similarità semantica | task: sentence similarity | query: {content}Non utilizzare questo campo per la ricerca o il recupero. È destinato alla similarità semantica del testo. |
Esempio di utilizzo
Python
# Generate embedding for query & document of your task.
def prepare_query_and_document(content):
# return f'task: clustering | query: {content}'
# return f'task: sentence similarity | query: {content}'
return f'task: classification | query: {content}'
È importante che l'attività venga utilizzata in modo coerente. Ad esempio, se i documenti sono
incorporati con f'task: classification | query: {content}', anche la query deve
essere incorporata seguendo il formato di questa attività.
Tipi di attività con incorporamenti 1
Per gemini-embedding-001, puoi specificare task_type nel metodo embedContent. Per un elenco completo dei tipi di attività supportati, consulta la tabella Tipi di attività supportati.
Il seguente esempio mostra come utilizzare SEMANTIC_SIMILARITY per verificare il grado di somiglianza del significato di stringhe di testo.
Python
from google import genai
from google.genai import types
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
client = genai.Client()
texts = [
"What is the meaning of life?",
"What is the purpose of existence?",
"How do I bake a cake?",
]
result = client.models.embed_content(
model="gemini-embedding-001",
contents=texts,
config=types.EmbedContentConfig(task_type="SEMANTIC_SIMILARITY")
)
# Create a 3x3 table to show the similarity matrix
df = pd.DataFrame(
cosine_similarity([e.values for e in result.embeddings]),
index=texts,
columns=texts,
)
print(df)
JavaScript
import { GoogleGenAI } from "@google/genai";
// npm i compute-cosine-similarity
import * as cosineSimilarity from "compute-cosine-similarity";
async function main() {
const ai = new GoogleGenAI({});
const texts = [
"What is the meaning of life?",
"What is the purpose of existence?",
"How do I bake a cake?",
];
const response = await ai.models.embedContent({
model: 'gemini-embedding-001',
contents: texts,
config: { taskType: 'SEMANTIC_SIMILARITY' },
});
const embeddings = response.embeddings.map(e => e.values);
for (let i = 0; i < texts.length; i++) {
for (let j = i + 1; j < texts.length; j++) {
const text1 = texts[i];
const text2 = texts[j];
const similarity = cosineSimilarity(embeddings[i], embeddings[j]);
console.log(`Similarity between '${text1}' and '${text2}': ${similarity.toFixed(4)}`);
}
}
}
main();
Go
package main
import (
"context"
"fmt"
"log"
"math"
"google.golang.org/genai"
)
// cosineSimilarity calculates the similarity between two vectors.
func cosineSimilarity(a, b []float32) (float64, error) {