
ãæ€èšŒãGemini 3.5 Flashã2.5ããäœãå€ãã£ãïŒAPIãªã¯ãšã¹ãã®ã³ãŒãã解説ã
ãGemini 3.5 Flashã
ãªãªãŒã¹ãããŸããããæ°ããLLMã¯ããã«è©ŠããŠã¿ãããªãã
仿¥ã¯ããå°ãæéãããã...ãã£ã³ã¹ãããâª
ãšããããã§ããã£ããGemini 3.5 Flash APIã䜿ã£ãŠã¿ãããšã«ã
ãããŸãé¢åãªããšã¯ããâŠ
ãµã¯ããšãããGoogle Apps ScriptïŒGASïŒã§ãããã
ãœãŒã¹ã³ãŒããåèå
¬éãããããã
ãŸãã以äžã®ãµã€ãããã§ãã¯ã
ãæèããã»ã¹ïŒThinkingïŒãã®ã³ã³ãããŒã«åšãã®ä»æ§ãå°ãå€ãã£ããšããããšããªã
2.5 Flashã®ã³ãŒãããã®ãŸãŸäœ¿ãåãããšãããšãããïŒããšãªãéšåãã§ãŠããã®ããã
ç°¡åãªæãã§æçž®ã§ãã...âŠåµã£ãŠã¿ããµã³ãã«ã³ãŒããå
¬éãããããããã®æç¹ã§çè§£ãã倿Žç¹ã®ãã€ã³ããæžããŠã¿ãŸãã
ããã§ããïœãGAS䜿ãã®ãšã³ãžãã¢ããã®ãåèã«ã§ããªãã°å¹žãã§ãã
æå€§ã®å€æŽç¹ïŒthinkingBudget ãã thinkingLevel ãž
å ¬åŒããã¥ã¡ã³ããèªã¿è§£ããšã倧ããªå€æŽã¯ãªã¯ãšã¹ããã€ããŒãå ã® generationConfig ã®ä»æ§å€æŽã§ãã3.5 Flashã§ã¯ããããŸã§ã®å®çªãã©ã¡ãŒã¿ãããã€ãéæšå¥šã«ãªã£ãŠããŸããtemperatureãtop_pãtop_k ããããªãã£ãŠã
ãããŠãthinkingBudget ã thinkingConfig.thinkingLevel ã«ã
ãããŸã§ã¯æèã®ããŒã¯ã³éãæ°å€ã§æå®ãããããªãã¥ã¢ã³ã¹ïŒä»æ§ïŒã§ãããã3.5 Flashã¯ããçŽæçãªã4段éã®æèã¬ãã«ïŒThinking LevelïŒããæå®ãã圢ã«å·æ°ããããšããããšã§ããããã£ãšã
å ·äœçã«ã¯ããã€ããŒãã®çµã¿ç«ãŠæ¹ã以äžã®ããã«å€ãããŸãã
const payload = {
contents: [
{
parts: [
{ text: prompt }
]
}
],
generationConfig: {
// temperatureãtop_pã¯åé€
// 代ããã«4段éã® thinkingLevel ãæå®ãã仿§ã«
thinkingConfig: {
thinkingLevel: "MEDIUM" // MINIMAL, LOW, MEDIUM, HIGH ããéžæ
}
}
};thinkingLevelã®éžæè¢ã¯ä»¥äžã®4ã€ãã¿ã¹ã¯ã®éãã«å¿ããŠã³ã³ãããŒã«ã
MINIMAL : é床éèŠãã·ã³ãã«ãªã¿ã¹ã¯åã
LOW : äœã¬ã€ãã³ã·ã®ã³ãŒãã»ãšãŒãžã§ã³ãã¿ã¹ã¯åã
MEDIUM : ããã©ã«ããã»ãšãã©ã®ã¿ã¹ã¯ã§æé©ãªå質
HIGH : è€éãªæšè«ãæ°åŠãé£ããã³ãŒãã£ã³ã°åã
ã¬ã¹ãã³ã¹ã®ãæèããã»ã¹ããã©ãåãåããïŒ
Geminiãåçãå°ãåºããŸã§ã®ãæèã®éçšãããã¬ã¹ãã³ã¹ã® parts ã®äžã«å ¥ã£ãŠæ»ã£ãŠããŸãã ãããGASåŽã§ç¶ºéºã«ãã³ããªã³ã°ããŠãããã®ãã3.5 Flashãä¹ãããªãã³ããããããªãã
æ€èšŒçšã«æžãããã¬ã¹ãã³ã¹è§£æã®èã«ãªãã³ãŒããããã¯ããã¡ãã
const json = JSON.parse(responseText);
let finalAnswer = '';
if (json.candidates && json.candidates[0] && json.candidates[0].content && json.candidates[0].content.parts) {
const parts = json.candidates[0].content.parts;
parts.forEach((part) => {
// â
ããããã€ã³ãïŒæèããã»ã¹ã®åŠç
if (part.thought === true) {
Logger.log(`--- æèããã»ã¹ ---`);
Logger.log(part.text); // AIãèããŠããéäžã®ããã¹ã
} else {
// æçµçãªåçããã¹ã
finalAnswer += part.text;
}
});
}
part.thought === true ãšãããã©ã°ãç«ã£ãŠããèŠçŽ ããAIã®ãèããŠããæäžã®ãã°ãã ããã®ãããã§ããããã°æãè€éãªããžãã¯ãçµãŸããéã«ãAIãã©ãããéçã§ãã®çµè«ã«è³ã£ãããã Logger.log ã§è¿œããããããããã«ãªãã¯ããããã¯éçºè
ã«ãšã£ãŠãããããããšã ãšæãã
仿¥ã®ãŸãšãïŒ2.5 Flashãã3.5 Flashãžçœ®æãããšã
æ¢åã®2.5 FlashãœãŒã¹ã3.5 Flashã«ãªãã¬ã€ã¹ããéã®å ·äœçãªèŠä»¶ã¯ãäž»ã«ã以äžã®2ã€ã§ãããã
ãã€ããŒãã®æžãæãïŒthinkingBudget ãã thinkingLevel ãžïŒ generationConfig ã®äžèº«ãä¿®æ£ããã¿ã¹ã¯ã®éãã«åãã㊠"MINIMAL", "LOW", "MEDIUM", "HIGH" ã®4段éããæèã¬ãã«ãéžæã»æå®ãã圢ã«å€æŽããã
ã¬ã¹ãã³ã¹è§£æã®ä¿®æ£ïŒpart.thought === true ã®ãã³ããªã³ã°ïŒ
ããã¯ãã£ãŠãããã»ããããã±ãŒã¹ãããããã
æ»ã£ãŠãã parts é åãã«ãŒãã§åãéãpart.thought === true ã®ãã©ã°ãå€å®ãããæèãã°ããšãæçµåçããåãé¢ããŠåŠçããããžãã¯ã远å ãããïŒçã®æèããã»ã¹ãããã§ã³ã³ãããŒã«ã§ãããšæãïŒããã³ããïŒãæèã®åŒ·å¶ãããããŠã·ã³ãã«ã«
ããäžã€ãå ¬åŒããã¥ã¡ã³ãã«ã¯ãã®èšèŒããã£ãã
AIã«è€éãªããžãã¯ãè§£ãããããã«ãã¹ããããã€ã¹ãããã§èããŠããšãããããChain-of-ThoughtïŒCoTïŒã®ããã³ãããšã³ãžãã¢ãªã³ã°ãå¿ æ»ã«æžããŠããŸãããã©ã3.5 Flashã§ã¯ãããã³ãããæ¥µéãŸã§ã·ã³ãã«ã«ããŠå€§äžå€«ã ãšãããã³ãããç°¡æœã«ããthinkingLevel ã "MEDIUM" ã "HIGH" ã§è©ŠããŠã¿ãªïŒã£ãŠãã
ãããããã°ã©ãããä»åäœæãããµã³ãã«ãœãŒã¹å
šäœã
æ€èšŒçšã«ããã³ãããšthinkingLevelãããããããã«ãªã£ãŠããŸãã
function runGemini35Sample() {
//ãèªèº«ã®Gemini APIããŒãèšå®ããŠãã ãã
const apiKey = 'YOUR_GEMINI_API_KEY';
//ããã³ããããèªç±ã«ãæèããã»ã¹ã亀ããŠ...ã©ããã
const prompt = "1ãã100ãŸã§ã®çŽ æ°ãåèšããã¢ã«ãŽãªãºã ããæèããã»ã¹ã亀ããŠè§£èª¬ããŠãã ããã";
// thinkingLevel ã®èšå®
// 以äžã®4ã€ããéžæããŸãïŒå€§æåã»å°æåããããåäœããŸãïŒ
// "MINIMAL" : é床éèŠãã·ã³ãã«ãªã¿ã¹ã¯åã
// "LOW" : äœã¬ã€ãã³ã·ã®ã³ãŒãã»ãšãŒãžã§ã³ãã¿ã¹ã¯åã
// "MEDIUM" : ããã©ã«ããã»ãšãã©ã®ã¿ã¹ã¯ã§æé©ãªå質ãæäŸ
// "HIGH" : è€éãªæšè«ãæ°åŠãé£ããã³ãŒãã£ã³ã°åã
const thinkingLevel = "MEDIUM";
const result = callGemini35Api(prompt, thinkingLevel, apiKey);
if (result) {
Logger.log("--- æçµåç ---");
Logger.log(result);
} else {
Logger.log("åçã®ååŸã«å€±æããŸããã");
}
}
/**
* Gemini 3.5 APIãåŒã³åºã颿°
* @param {string} prompt éä¿¡ããããã³ãã
* @param {string} thinkingLevel æèã¬ãã« ("MINIMAL", "LOW", "MEDIUM", "HIGH")
* @param {string} apiKey APIããŒ
* @returns {string|null} ååŸããåçããã¹ã
*/
function callGemini35Api(prompt, thinkingLevel, apiKey) {
const model = 'gemini-3.5-flash';
const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`;
const payload = {
contents: [
{
parts: [
{ text: prompt }
]
}
],
generationConfig: {
// thinkingBudget ã«ä»£ãããthinkingLevel ãæå®
thinking_config: {
thinking_level: thinkingLevel.toUpperCase() // 倧æåã«å€æããŠèšå®
}
}
};
const options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
try {
const response = UrlFetchApp.fetch(url, options);
const responseCode = response.getResponseCode();
const responseText = response.getContentText();
if (responseCode !== 200) {
Logger.log(`ãšã©ãŒãçºçããŸãããã¹ããŒã¿ã¹ã³ãŒã: ${responseCode}`);
Logger.log(`ãšã©ãŒè©³çް: ${responseText}`);
return null;
}
const json = JSON.parse(responseText);
let finalAnswer = '';
if (json.candidates && json.candidates[0] && json.candidates[0].content && json.candidates[0].content.parts) {
const parts = json.candidates[0].content.parts;
parts.forEach((part, index) => {
// æèããã»ã¹ã®åŠç
if (part.thought === true) {
Logger.log(`--- æèããã»ã¹ (${index + 1}) ---`);
Logger.log(part.text);
} else if (part.text) {
// éåžžã®åçããã¹ãã®æ ŒçŽ
finalAnswer += part.text;
}
});
}
return finalAnswer;
} catch (e) {
Logger.log(`éä¿¡äžã«ãšã©ãŒãçºçããŸãã: ${e.toString()}`);
return null;
}
}æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããâª
see you. â¿