Caching

שיטה: cacheContents.create

יצירת משאב CachedContent.

נקודת קצה

לשלוח https://generativelanguage.googleapis.com/v1beta/cachedContents

גוף הבקשה

גוף הבקשה מכיל מופע של CachedContent.

דוגמה לבקשה

בסיסית

Python

document = genai.upload_file(path=media / "a11.txt")
model_name = "gemini-1.5-flash-001"
cache = genai.caching.CachedContent.create(
    model=model_name,
    system_instruction="You are an expert analyzing transcripts.",
    contents=[document],
)
print(cache)

model = genai.GenerativeModel.from_cached_content(cache)
response = model.generate_content("Please summarize this transcript")
print(response.text)

Node.js

// Make sure to include these imports:
// import { GoogleAICacheManager, GoogleAIFileManager } from "@google/generative-ai/server";
// import { GoogleGenerativeAI } from "@google/generative-ai";
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);
const fileManager = new GoogleAIFileManager(process.env.API_KEY);

const uploadResult = await fileManager.uploadFile(`${mediaPath}/a11.txt`, {
  mimeType: "text/plain",
});

const cacheResult = await cacheManager.create({
  model: "models/gemini-1.5-flash-001",
  contents: [
    {
      role: "user",
      parts: [
        {
          fileData: {
            fileUri: uploadResult.file.uri,
            mimeType: uploadResult.file.mimeType,
          },
        },
      ],
    },
  ],
});

console.log(cacheResult);

const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModelFromCachedContent(cacheResult);
const result = await model.generateContent(
  "Please summarize this transcript.",
);
console.log(result.response.text());

מהשם

Python

document = genai.upload_file(path=media / "a11.txt")
model_name = "gemini-1.5-flash-001"
cache = genai.caching.CachedContent.create(
    model=model_name,
    system_instruction="You are an expert analyzing transcripts.",
    contents=[document],
)
cache_name = cache.name  # Save the name for later

# Later
cache = genai.caching.CachedContent.get(cache_name)
apollo_model = genai.GenerativeModel.from_cached_content(cache)
response = apollo_model.generate_content("Find a lighthearted moment from this transcript")
print(response.text)

Node.js

// Make sure to include these imports:
// import { GoogleAICacheManager, GoogleAIFileManager } from "@google/generative-ai/server";
// import { GoogleGenerativeAI } from "@google/generative-ai";
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);
const fileManager = new GoogleAIFileManager(process.env.API_KEY);

const uploadResult = await fileManager.uploadFile(`${mediaPath}/a11.txt`, {
  mimeType: "text/plain",
});

const cacheResult = await cacheManager.create({
  model: "models/gemini-1.5-flash-001",
  contents: [
    {
      role: "user",
      parts: [
        {
          fileData: {
            fileUri: uploadResult.file.uri,
            mimeType: uploadResult.file.mimeType,
          },
        },
      ],
    },
  ],
});
const cacheName = cacheResult.name; // Save the name for later.

// Later
const getCacheResult = await cacheManager.get(cacheName);
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModelFromCachedContent(getCacheResult);
model.generateContent("Please summarize this transcript.");

מהצ'אט

Python

model_name = "gemini-1.5-flash-001"
system_instruction = "You are an expert analyzing transcripts."

model = genai.GenerativeModel(model_name=model_name, system_instruction=system_instruction)
chat = model.start_chat()
document = genai.upload_file(path=media / "a11.txt")
response = chat.send_message(["Hi, could you summarize this transcript?", document])
print("\n\nmodel:  ", response.text)
response = chat.send_message(
    ["Okay, could you tell me more about the trans-lunar injection"]
)
print("\n\nmodel:  ", response.text)

# To cache the conversation so far, pass the chat history as the list of "contents".
cache = genai.caching.CachedContent.create(
    model=model_name,
    system_instruction=system_instruction,
    contents=chat.history,
)
model = genai.GenerativeModel.from_cached_content(cached_content=cache)

# Continue the chat where you left off.
chat = model.start_chat()
response = chat.send_message(
    "I didn't understand that last part, could you explain it in simpler language?"
)
print("\n\nmodel:  ", response.text)

Node.js

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
// import { GoogleAICacheManager, GoogleAIFileManager } from "@google/generative-ai/server";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);
const fileManager = new GoogleAIFileManager(process.env.API_KEY);

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash-001" });
const chat = model.startChat();

const uploadResult = await fileManager.uploadFile(`${mediaPath}/a11.txt`, {
  mimeType: "text/plain",
});

let result = await chat.sendMessage([
  "Hi, could you summarize this transcript?",
  {
    fileData: {
      fileUri: uploadResult.file.uri,
      mimeType: uploadResult.file.mimeType,
    },
  },
]);
console.log(`\n\nmodel: ${result.response.text()}`);
result = await chat.sendMessage(
  "Okay, could you tell me more about the trans-lunar injection",
);
console.log(`\n\nmodel: ${result.response.text()}`);

const cacheResult = await cacheManager.create({
  model: "models/gemini-1.5-flash-001",
  contents: await chat.getHistory(),
});

const newModel = genAI.getGenerativeModelFromCachedContent(cacheResult);

const newChat = newModel.startChat();
result = await newChat.sendMessage(
  "I didn't understand that last part, could you explain it in simpler language?",
);
console.log(`\n\nmodel: ${result.response.text()}`);

גוף התשובה

אם הפעולה בוצעה ללא שגיאות, גוף התגובה יכלול מופע חדש של CachedContent.

שיטה: cacheContents.list

בתיבת הדו-שיח הזו מפורטים CachedContents.

נקודת קצה

הורדה https://generativelanguage.googleapis.com/v1beta/cachedContents

פרמטרים של שאילתה

pageSize integer

זה שינוי אופציונלי. המספר המקסימלי של תוכן שנשמר במטמון שצריך להחזיר. ייתכן שהשירות יחזיר פחות מהערך הזה. אם לא צויין ערך, יוחזרו חלק מהפריטים שמוגדרים כברירת מחדל (מתחת למקסימום). הערך המקסימלי הוא 1,000; ערכים מעל 1000 יקובצו ל-1000.

pageToken string

זה שינוי אופציונלי. אסימון דף, שהתקבל מקריאה קודמת ב-cachedContents.list. צריך לספק אותה כדי לאחזר את הדף הבא.

במהלך החלוקה לדפים, כל שאר הפרמטרים שסופקו ל-cachedContents.list חייבים להתאים לקריאה שסיפקה את אסימון הדף.

גוף הבקשה

גוף הבקשה חייב להיות ריק.

גוף התשובה

תשובה עם רשימה של CachedContents.

אם הפעולה בוצעה ללא שגיאות, גוף התגובה יכיל נתונים במבנה הבא:

שדות
cachedContents[] object (CachedContent)

רשימת תכנים שנשמרו במטמון.

nextPageToken string

אסימון, שניתן לשלוח בתור pageToken כדי לאחזר את הדף הבא. אם השדה הזה יושמט, אין דפים נוספים.

ייצוג JSON
{
  "cachedContents": [
    {
      object (CachedContent)
    }
  ],
  "nextPageToken": string
}

שיטה: cacheContents.get

קריאת המשאב CachedContent.

נקודת קצה

הורדה https://generativelanguage.googleapis.com/v1beta/{name=cachedContents/*}

פרמטרים של נתיב

name string

חובה. שם המשאב שמתייחס לרשומה במטמון התוכן. פורמט: cachedContents/{id} הוא מופיע בצורה cachedContents/{cachedcontent}.

גוף הבקשה

גוף הבקשה חייב להיות ריק.

דוגמה לבקשה

Python

document = genai.upload_file(path=media / "a11.txt")
model_name = "gemini-1.5-flash-001"
cache = genai.caching.CachedContent.create(
    model=model_name,
    system_instruction="You are an expert analyzing transcripts.",
    contents=[document],
)
print(genai.caching.CachedContent.get(name=cache.name))

Node.js

// Make sure to include these imports:
// import { GoogleAICacheManager, GoogleAIFileManager } from "@google/generative-ai/server";
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);
const fileManager = new GoogleAIFileManager(process.env.API_KEY);

const uploadResult = await fileManager.uploadFile(`${mediaPath}/a11.txt`, {
  mimeType: "text/plain",
});

const cacheResult = await cacheManager.create({
  model: "models/gemini-1.5-flash-001",
  contents: [
    {
      role: "user",
      parts: [
        {
          fileData: {
            fileUri: uploadResult.file.uri,
            mimeType: uploadResult.file.mimeType,
          },
        },
      ],
    },
  ],
});
const cacheGetResult = await cacheManager.get(cacheResult.name);
console.log(cacheGetResult);

גוף התשובה

אם הפעולה בוצעה ללא שגיאות, גוף התגובה יכלול מופע של CachedContent.

שיטה: cacheContents.patch

מעדכן משאב CachedContent (אפשר לעדכן רק את תאריך התפוגה).

נקודת קצה

תיקון https://generativelanguage.googleapis.com/v1beta/{cachedContent.name=cachedContents/*}

PATCH https://generativelanguage.googleapis.com/v1beta/{cachedContent.name=cachedContents/*}

פרמטרים של נתיב

cachedContent.name string

זה שינוי אופציונלי. מזהה. שם המשאב שמתייחס לתוכן שנשמר במטמון. פורמט: cachedContents/{id} הוא מופיע בצורה cachedContents/{cachedcontent}.

פרמטרים של שאילתה

updateMask string (FieldMask format)

רשימת השדות לעדכון.

זוהי רשימה מופרדת בפסיקים של שמות שדות מלאים. דוגמה: "user.displayName,photo"

גוף הבקשה

גוף הבקשה מכיל מופע של CachedContent.

דוגמה לבקשה

Python

import datetime

document = genai.upload_file(path=media / "a11.txt")
model_name = "gemini-1.5-flash-001"
cache = genai.caching.CachedContent.create(
    model=model_name,
    system_instruction="You are an expert analyzing transcripts.",
    contents=[document],
)

# You can update the ttl
cache.update(ttl=datetime.timedelta(hours=2))
print(f"After update:\n {cache}")

# Or you can update the expire_time
cache.update(expire_time=datetime.datetime.now() + datetime.timedelta(minutes=15))

Node.js

// Make sure to include these imports:
// import { GoogleAICacheManager, GoogleAIFileManager } from "@google/generative-ai/server";
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);
const fileManager = new GoogleAIFileManager(process.env.API_KEY);

const uploadResult = await fileManager.uploadFile(`${mediaPath}/a11.txt`, {
  mimeType: "text/plain",
});

const cacheResult = await cacheManager.create({
  model: "models/gemini-1.5-flash-001",
  contents: [
    {
      role: "user",
      parts: [
        {
          fileData: {
            fileUri: uploadResult.file.uri,
            mimeType: uploadResult.file.mimeType,
          },
        },
      ],
    },
  ],
});
console.log("initial cache data:", cacheResult);
const cacheUpdateResult = await cacheManager.update(cacheResult.name, {
  cachedContent: {
    // 2 hours
    ttlSeconds: 60 * 60 * 2,
  },
});
console.log("updated cache data:", cacheUpdateResult);

גוף התשובה

אם הפעולה בוצעה ללא שגיאות, גוף התגובה יכלול מופע של CachedContent.

שיטה: cacheContents.delete

מחיקת המשאב CachedContent.

נקודת קצה

מחיקה https://generativelanguage.googleapis.com/v1beta/{name=cachedContents/*}

פרמטרים של נתיב

name string

חובה. שם המשאב המפנה לפורמט הרשומה של מטמון התוכן: cachedContents/{id} הוא בפורמט cachedContents/{cachedcontent}.

גוף הבקשה

גוף הבקשה חייב להיות ריק.

דוגמה לבקשה

Python

document = genai.upload_file(path=media / "a11.txt")
model_name = "gemini-1.5-flash-001"
cache = genai.caching.CachedContent.create(
    model=model_name,
    system_instruction="You are an expert analyzing transcripts.",
    contents=[document],
)
cache.delete()

Node.js

// Make sure to include these imports:
// import { GoogleAICacheManager, GoogleAIFileManager } from "@google/generative-ai/server";
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);
const fileManager = new GoogleAIFileManager(process.env.API_KEY);

const uploadResult = await fileManager.uploadFile(`${mediaPath}/a11.txt`, {
  mimeType: "text/plain",
});

const cacheResult = await cacheManager.create({
  model: "models/gemini-1.5-flash-001",
  contents: [
    {
      role: "user",
      parts: [
        {
          fileData: {
            fileUri: uploadResult.file.uri,
            mimeType: uploadResult.file.mimeType,
          },
        },
      ],
    },
  ],
});
await cacheManager.delete(cacheResult.name);

גוף התשובה

אם הביצוע יהיה תקין, גוף התגובה יהיה ריק.

משאב REST: cacheContents

משאב: CachedContent

תוכן שעבר עיבוד מראש וניתן להשתמש בו בבקשות נוספות ל-GenerativeService.

אפשר להשתמש בתוכן שנשמר במטמון רק במודל שבשבילו הוא נוצר.

ייצוג JSON
{
  "contents": [
    {
      object (Content)
    }
  ],
  "tools": [
    {
      object (Tool)
    }
  ],
  "createTime": string,
  "updateTime": string,
  "usageMetadata": {
    object (UsageMetadata)
  },

  // Union field expiration can be only one of the following:
  "expireTime": string,
  "ttl": string
  // End of list of possible types for union field expiration.
  "name": string,
  "displayName": string,
  "model": string,
  "systemInstruction": {
    object (Content)
  },
  "toolConfig": {
    object (ToolConfig)
  }
}
שדות
contents[] object (Content)

זה שינוי אופציונלי. קלט בלבד. בלתי ניתן לשינוי. התוכן לשמירה במטמון.

tools[] object (Tool)

זה שינוי אופציונלי. קלט בלבד. בלתי ניתן לשינוי. רשימה של Tools שהמודל יכול להשתמש בהם כדי ליצור את התשובה הבאה

createTime string (Timestamp format)

פלט בלבד. מועד היצירה של רשומת המטמון.

חותמת זמן ב-RFC3339 UTC 'Zulu' בפורמט של רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: "2014-10-02T15:01:23Z" ו-"2014-10-02T15:01:23.045123456Z".

updateTime string (Timestamp format)

פלט בלבד. המועד שבו עודכנה לאחרונה רשומת המטמון לפי שעון UTC.

חותמת זמן ב-RFC3339 UTC 'Zulu' בפורמט של רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: "2014-10-02T15:01:23Z" ו-"2014-10-02T15:01:23.045123456Z".

usageMetadata object (UsageMetadata)

פלט בלבד. מטא-נתונים לגבי השימוש בתוכן שנשמר במטמון.

שדה איחוד expiration. מציינת מתי יפוג תוקף המשאב. expiration יכול להיות רק אחת מהאפשרויות הבאות:
expireTime string (Timestamp format)

חותמת הזמן לפי שעון UTC שמציינת שהתוקף של המשאב הזה פג. הערך הזה זמין תמיד בפלט, ללא קשר למה שנשלח כקלט.

חותמת זמן ב-RFC3339 UTC 'Zulu' בפורמט של רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: "2014-10-02T15:01:23Z" ו-"2014-10-02T15:01:23.045123456Z".

ttl string (Duration format)

קלט בלבד. TTL חדש למשאב הזה, קלט בלבד.

משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-'s'. לדוגמה: "3.5s".

name string

זה שינוי אופציונלי. מזהה. שם המשאב שמתייחס לתוכן שנשמר במטמון. פורמט: cachedContents/{id}

displayName string

זה שינוי אופציונלי. בלתי ניתן לשינוי. שם תצוגה בעל משמעות שנוצר על ידי המשתמש בשביל התוכן שנשמר במטמון. 128 תווי Unicode לכל היותר.

model string

חובה. בלתי ניתן לשינוי. השם של Model לשימוש בפורמט התוכן שנשמר במטמון: models/{model}

systemInstruction object (Content)

זה שינוי אופציונלי. קלט בלבד. בלתי ניתן לשינוי. הוראה למערכת למפתחים. כרגע רק טקסט.

toolConfig object (ToolConfig)

זה שינוי אופציונלי. קלט בלבד. בלתי ניתן לשינוי. הגדרות הכלי. התצורה הזו משותפת לכל הכלים.

תוכן

סוג הנתונים המובנה הבסיסי שמכיל תוכן מרובה חלקים של הודעה.

Content כולל שדה role שמציין את המפיק של Content ושדה parts שמכיל נתונים מרובי-חלקים שמכילים את התוכן של הפניית ההודעה.

ייצוג JSON
{
  "parts": [
    {
      object (Part)
    }
  ],
  "role": string
}
שדות
parts[] object (Part)

הוזמנו Parts שמכילים הודעה אחת. לחלקים עשויים להיות סוגי MIME שונים.

role string

זה שינוי אופציונלי. המפיק של התוכן. חייב להיות אחד משני הערכים הבאים: user או 'model'.

כדאי להגדיר את האפשרות הזו לשיחות מרובות תורות, אחרת אפשר להשאיר את השדה ריק או לא מוגדר.

חלק

סוג נתונים שמכיל מדיה שהיא חלק מהודעת Content מרובת חלקים.

Part מורכב מנתונים שמשויכים להם סוג נתונים. Part יכול להכיל רק אחד מהסוגים הנתמכים בPart.data.

Part חייב להיות מסוג IANA MIME קבוע שמזהה את הסוג וסוג המשנה של המדיה אם השדה inlineData מלא בבייטים גולמיים.

ייצוג JSON
{

  // Union field data can be only one of the following:
  "text": string,
  "inlineData": {
    object (Blob)
  },
  "functionCall": {
    object (FunctionCall)
  },
  "functionResponse": {
    object (FunctionResponse)
  },
  "fileData": {
    object (FileData)
  },
  "executableCode": {
    object (ExecutableCode)
  },
  "codeExecutionResult": {
    object (CodeExecutionResult)
  }
  // End of list of possible types for union field data.
}
שדות

שדה איחוד data.

data יכול להיות רק אחת מהאפשרויות הבאות:

text string

טקסט בתוך השורה.

inlineData object (Blob)

בייטים של מדיה מוטבעים.

functionCall object (FunctionCall)

הערך החזוי של FunctionCall שהוחזר מהמודל מכיל מחרוזת שמייצגת את FunctionDeclaration.name עם הארגומנטים והערכים שלהם.

functionResponse object (FunctionResponse)

הפלט של התוצאה של FunctionCall שמכילה מחרוזת שמייצגת את FunctionDeclaration.name ואובייקט JSON מובנה שמכיל פלט כלשהו מהפונקציה משמש בתור הקשר למודל.

fileData object (FileData)

נתונים המבוססים על URI.

executableCode object (ExecutableCode)

את הקוד שנוצר על ידי המודל שמיועד להפעלה.

codeExecutionResult object (CodeExecutionResult)

התוצאה של הרצת הפקודה ExecutableCode.

כתם

בייטים של מדיה גולמית.

אין לשלוח טקסט כבייטים גולמיים, יש להשתמש ב-'text' השדה הזה.

ייצוג JSON
{
  "mimeType": string,
  "data": string
}
שדות
mimeType string

סוג MIME של תקן IANA של נתוני המקור. דוגמאות: - image/png - image/jpeg אם תספק סוג MIME שאינו נתמך, תוחזר שגיאה. הרשימה המלאה של סוגי הקבצים הנתמכים זמינה בפורמטים נתמכים של קבצים.

data string (bytes format)

בייטים גולמיים לפורמטים של מדיה.

מחרוזת בקידוד base64.

FunctionCall

הערך החזוי של FunctionCall שהוחזר מהמודל מכיל מחרוזת שמייצגת את FunctionDeclaration.name עם הארגומנטים והערכים שלהם.

ייצוג JSON
{
  "name": string,
  "args": {
    object
  }
}
שדות
name string

חובה. שם הפונקציה שרוצים להפעיל. חייב להיות a-z, A-Z, 0-9 או לכלול קווים תחתונים ומקפים ובאורך מקסימלי של 63.

args object (Struct format)

זה שינוי אופציונלי. הפרמטרים והערכים של הפונקציה בפורמט של אובייקט JSON.

FunctionResponse

הפלט של התוצאה מ-FunctionCall שמכילה מחרוזת שמייצגת את FunctionDeclaration.name ואובייקט JSON מובנה שמכיל פלט כלשהו מהפונקציה משמש בתור הקשר למודל. הערך הזה צריך להכיל את התוצאה של FunctionCall שנוצרה על סמך חיזוי של המודל.

ייצוג JSON
{
  "name": string,
  "response": {
    object
  }
}
שדות
name string

חובה. שם הפונקציה שרוצים להפעיל. חייב להיות a-z, A-Z, 0-9 או לכלול קווים תחתונים ומקפים ובאורך מקסימלי של 63.

response object (Struct format)

חובה. תגובת הפונקציה בפורמט של אובייקט JSON.

FileData

נתונים המבוססים על URI.

ייצוג JSON
{
  "mimeType": string,
  "fileUri": string
}
שדות
mimeType string

זה שינוי אופציונלי. סוג MIME של תקן IANA של נתוני המקור.

fileUri string

חובה. URI.

ExecutableCode

את הקוד שנוצר על ידי המודל שאמור להתבצע, והתוצאה מוחזרת למודל.

נוצר רק כשמשתמשים בכלי CodeExecution שבו הקוד יופעל באופן אוטומטי, וגם ייווצר CodeExecutionResult תואם.

ייצוג JSON
{
  "language": enum (Language),
  "code": string
}
שדות
language enum (Language)

חובה. שפת התכנות של code.

code string

חובה. הקוד להרצה.

שפה

שפות התכנות הנתמכות עבור הקוד שנוצר.

טיפוסים בני מנייה (enum)
LANGUAGE_UNSPECIFIED לא נבחרה שפה. אין להשתמש בערך הזה.
PYTHON Python בגרסה 3.10 ומעלה, עם numpy ו-simpy זמינות.

CodeExecutionResult

התוצאה של הרצת הפקודה ExecutableCode.

נוצר רק כשמשתמשים ב-CodeExecution, ותמיד מופיע אחרי part שמכיל את ExecutableCode.

ייצוג JSON
{
  "outcome": enum (Outcome),
  "output": string
}
שדות
outcome enum (Outcome)

חובה. תוצאת ביצוע הקוד.

output string

זה שינוי אופציונלי. מכיל stdout כשביצוע הקוד מוצלח, stderr או תיאור אחר אחרת.

תוצאה

חישוב התוצאות האפשריות של ביצוע הקוד.

טיפוסים בני מנייה (enum)
OUTCOME_UNSPECIFIED הסטטוס לא צוין. אין להשתמש בערך הזה.
OUTCOME_OK הפעלת הקוד הושלמה בהצלחה.
OUTCOME_FAILED הפעלת הקוד הסתיימה אבל היא נכשלה. stderr צריך לכלול את הסיבה.
OUTCOME_DEADLINE_EXCEEDED ביצוע הקוד פעל יותר מדי זמן ובוטל. יכול להיות שיהיה פלט חלקי, וייתכן שלא.

כלי

פרטי הכלי שהמודל יכול להשתמש בהם כדי ליצור תשובה.

Tool הוא קטע קוד שמאפשר למערכת לקיים אינטראקציה עם מערכות חיצוניות כדי לבצע פעולה או קבוצת פעולות, מחוץ לידע ולהיקף של המודל.

ייצוג JSON
{
  "functionDeclarations": [
    {
      object (FunctionDeclaration)
    }
  ],
  "codeExecution": {
    object (CodeExecution)
  }
}
שדות
functionDeclarations[] object (FunctionDeclaration)

זה שינוי אופציונלי. רשימה של FunctionDeclarations הזמינים למודל שיכול לשמש להפעלת פונקציות.

המודל או המערכת לא מריצים את הפונקציה. במקום זאת, אפשר להחזיר את הפונקציה המוגדרת כ-[FunctionCall][content.part.function_call] עם ארגומנטים בצד הלקוח להפעלה. המודל יכול להחליט להפעיל קבוצת משנה של הפונקציות האלה על ידי אכלוס הפונקציה [FunctionCall][content.part.function_call] בתשובה. הפנייה הבאה בשיחה עשויה להכיל [FunctionResponse][content.part.function_response] עם ה-'function' [content.role] של יצירת ההקשר בתורו של המודל הבא.

codeExecution object (CodeExecution)

זה שינוי אופציונלי. מאפשר למודל להפעיל קוד כחלק מהיצירה.

FunctionDeclaration

ייצוג מובנה של הצהרת פונקציה, כפי שמוגדר במפרט OpenAPI 3.03. בהצהרה הזו כלולים השם והפרמטרים של הפונקציה. הצהרת הפונקציה הזו היא ייצוג של בלוק קוד שיכול לשמש את המודל כ-Tool ולהריץ אותו על ידי הלקוח.

ייצוג JSON
{
  "name": string,
  "description": string,
  "parameters": {
    object (Schema)
  }
}
שדות
name string

חובה. שם הפונקציה. חייב להיות a-z, A-Z, 0-9 או לכלול קווים תחתונים ומקפים ובאורך מקסימלי של 63.

description string

חובה. תיאור קצר של הפונקציה.

parameters object (Schema)

זה שינוי אופציונלי. מתאר את הפרמטרים של הפונקציה. מראה את מפתח מחרוזת אובייקט הפרמטר Open API 3.03: שם הפרמטר. שמות הפרמטרים הם תלויי אותיות רישיות. ערך סכימה: הסכימה שמגדירה את הסוג של הפרמטר.

סכימה

האובייקט Schema מאפשר הגדרה של סוגי נתוני קלט ופלט. הסוגים האלה יכולים להיות אובייקטים, אבל גם פרימיטיביים ומערכים. מייצג קבוצת משנה נבחרת של אובייקט סכימה של OpenAPI 3.0.

ייצוג JSON
{
  "type": enum (Type),
  "format": string,
  "description": string,
  "nullable": boolean,
  "enum": [
    string
  ],
  "properties": {
    string: {
      object (Schema)
    },
    ...
  },
  "required": [
    string
  ],
  "items": {
    object (Schema)
  }
}
שדות
type enum (Type)

חובה. סוג הנתונים.

format string

זה שינוי אופציונלי. הפורמט של הנתונים הוא משמש רק לסוגי נתונים פרימיטיביים. פורמטים נתמכים: עבור סוג NUMBER: מספר ממשי (float), כפול עבור סוג INTEGER: int32, int64 עבור סוג {6} : enum

description string

זה שינוי אופציונלי. תיאור קצר של הפרמטר. המידע הזה יכול לכלול דוגמאות לשימוש. הפורמט של תיאור הפרמטר יכול להיות Markdown.

nullable boolean

זה שינוי אופציונלי. שדה זה מציין אם הערך יכול להיות null.

enum[] string

זה שינוי אופציונלי. ערכים אפשריים של הרכיב מסוג Type.STRING עם פורמט enum. לדוגמה, אפשר להגדיר כיוון Enum כך : {type:STRING, format:enum, enum:["EAST", NORTH", "SOUTH", "WEST"]}

properties map (key: string, value: object (Schema))

זה שינוי אופציונלי. מאפיינים מסוג type.OBJECT.

אובייקט שמכיל רשימה של "key": value זוגות. לדוגמה: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

required[] string

זה שינוי אופציונלי. המאפיינים הנדרשים של Type.OBJECT.

items object (Schema)

זה שינוי אופציונלי. סכימה של הרכיבים של Type.ARRAY.

סוג

הסוג מכיל את רשימת סוגי הנתונים של OpenAPI כפי שהוגדרו על ידי https://spec.openapis.org/oas/v3.0.3#data-types

טיפוסים בני מנייה (enum)
TYPE_UNSPECIFIED לא צוין, אין להשתמש.
STRING סוג המחרוזת.
NUMBER סוג המספר.
INTEGER סוג מספר שלם.
BOOLEAN סוג בוליאני.
ARRAY סוג המערך.
OBJECT סוג האובייקט.

CodeExecution

אין שדות בסוג הזה.

כלי שמפעיל קוד שנוצר על ידי המודל, ומחזיר את התוצאה באופן אוטומטי למודל.

כדאי לעיין גם בעמודות ExecutableCode ו-CodeExecutionResult שנוצרות רק כשמשתמשים בכלי הזה.

ToolConfig

הגדרת הכלי שמכילה פרמטרים לציון השימוש של Tool בבקשה.

ייצוג JSON
{
  "functionCallingConfig": {
    object (FunctionCallingConfig)
  }
}
שדות
functionCallingConfig object (FunctionCallingConfig)

זה שינוי אופציונלי. הגדרות של קריאה לפונקציה.

FunctionCallingConfig

הגדרה להגדרה של אופן הקריאה לפונקציה.

ייצוג JSON
{
  "mode": enum (Mode),
  "allowedFunctionNames": [
    string
  ]
}
שדות
mode enum (Mode)

זה שינוי אופציונלי. מציינת את המצב שבו הקריאה לפונקציה צריכה לפעול. אם לא צוין ערך, ערך ברירת המחדל יוגדר כ-auto (אוטומטי).

allowedFunctionNames[] string

זה שינוי אופציונלי. קבוצה של שמות של פונקציות, שכשמציינים אותן, מגבילות את הפונקציות שהמודל יקרא להן.

יש להגדיר את האפשרות הזו רק כשהמצב הוא Any (Any). שמות הפונקציות צריכים להיות זהים ל-[FunctionDeclaration.name]. כשהמצב מוגדר ל-Any, המודל יחזה קריאה לפונקציה מתוך קבוצת שמות הפונקציות שסופקה.

מצב

המדיניות מגדירה את התנהגות הביצוע של קריאות לפונקציות על ידי הגדרת מצב הביצוע.

טיפוסים בני מנייה (enum)
MODE_UNSPECIFIED מצב הקריאה לפונקציה לא צוין. אין להשתמש בערך הזה.
AUTO התנהגות ברירת המחדל של המודל, המודל מחליט לחזות קריאה לפונקציה או תגובה משפה טבעית.
ANY המודל מוגבל תמיד לחיזוי של בקשה להפעלת פונקציה בלבד. אם 'allowedFunctionNames' מוגדרות, הקריאה לפונקציה החזויה תוגבל לכל אחד מ-'allowedFunctionNames', אחרת ההפעלה החזויה תהיה כל אחת מ'הצהרות הפונקציה' שסופקו.
NONE המודל לא יחזה אף קריאה לפונקציה. התנהגות המודל זהה להתנהגות במקרה שלא מעבירים הצהרות על פונקציות.

UsageMetadata

מטא-נתונים לגבי השימוש בתוכן שנשמר במטמון.

ייצוג JSON
{
  "totalTokenCount": integer
}
שדות
totalTokenCount integer

המספר הכולל של האסימונים שהתוכן ששמור במטמון צריך.