JavaScript: агент ИИ и function calling
ИИ сам функцию не запускает. Он говорит functionCall, ты запускаешь и возвращаешь functionResponse.
Все уроки · Уроки JavaScript: учимся с нуля
Чат и агент
Чат пишет только текст. Базу и твою функцию он не запускает. Агент действует, но функцию сам не вызывает. В списке tools стоят имя, description и параметры. ИИ читает вопрос и возвращает functionCall: имя и args. Ты запускаешь эту функцию и отправляешь результат обратно через functionResponse. Итоговое предложение ИИ пишет из него. Если description пустой, выбирается не та функция. Тип большими буквами: STRING, NUMBER, OBJECT.
functionCall и возврат
Первый запрос уходит с инструментами. Если есть parts[0].functionCall, текста нет, есть команда. Функцию запускаешь ты. Во втором запросе три части: вопрос, functionCall модели и functionResponse. Если только сделать console.log и не отправить результат назад, пользователь не увидит чистую фразу. На вопрос вроде «привет» functionCall нет, сразу приходит text.
const apiKey = process.env.GEMINI_API_KEY;
const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${apiKey}`;
function havaMelumatiniVer(seher) {
if (seher === "Baku") return "Bakıda 24 dərəcə, günəşlidir.";
return "Bu şəhər üçün məlumat yoxdur.";
}
const aletler = [{
functionDeclarations: [{
name: "havaMelumatiniVer",
description: "Verilmiş şəhər üçün hava mətnini qaytarır.",
parameters: {
type: "OBJECT",
properties: { seher: { type: "STRING", description: "Şəhər, məsələn Baku" } },
required: ["seher"]
}
}]
}];
async function agentSorgusuGonder(istifadeciSuali) {
const ilkBody = {
contents: [{ role: "user", parts: [{ text: istifadeciSuali }] }],
tools: aletler
};
const cavab = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(ilkBody)
});
const melumat = await cavab.json();
const hisse = melumat.candidates[0].content.parts[0];
if (!hisse.functionCall) {
console.log(hisse.text);
return;
}
const ad = hisse.functionCall.name;
const netice = havaMelumatiniVer(hisse.functionCall.args.seher);
const ikinciBody = {
contents: [
{ role: "user", parts: [{ text: istifadeciSuali }] },
{ role: "model", parts: [{ functionCall: hisse.functionCall }] },
{ role: "user", parts: [{ functionResponse: { name: ad, response: { netice } } }] }
],
tools: aletler
};
const cavab2 = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(ikinciBody)
});
const melumat2 = await cavab2.json();
console.log(melumat2.candidates[0].content.parts[0].text);
}Вопросы
ИИ сам запускает функцию? Нет. Он только говорит имя и параметр. Запускает твой код.
Зачем description? ИИ понимает, когда выбрать функцию, из этого текста. Если он пустой или мутный, вызовется не та.
Если написать STRING маленькими буквами? Gemini вернёт ошибку. Типы OBJECT, STRING и NUMBER пишутся большими.
Почему результат не доходит до пользователя? Во втором запросе нет functionResponse. console.log мало.