Za艂贸偶my 偶e w naszej aplikacji chcemy mie膰 takie flow:
U偶ytkownik prosi o zmian臋 intensywno艣ci i temperatury barwowej 艣wiat艂a w j臋zyku naturalnym.
Mo偶na to stosunkowo prosto ogarn膮膰 za pomoc膮 dowolnego LLM obs艂uguj膮cego narz臋dzia. W swoim przyk艂adzie u偶y艂em Google GenAI oraz Next.
Tworzymy endpoint /ai, u偶ytkownik wysy艂a body w JSON jako text: "zmniejsz 艣wiat艂o".
Pobieramy tekst z JSONA, rzucamy b艂膮d je艣li go nie ma, inicjalizujemy model


Tutaj dzieje si臋 magia
const result = controlLight(brightness as number, color as string);
Tutaj dzieje si臋 magia馃獎, model przerobi艂 input u偶ytkownika na parametry do funkcji i nast臋pnie zosta艂a ona wywo艂ana. Mo偶na by teraz na przyk艂ad uderzy膰 do api smart-偶ar贸wki i zrobi膰 z ni膮 to co poleci艂 u偶ytkownik.
Wa偶ne jest ustawienie FunctionCallingConfigMode.ANY - wtedy LLM zawsze wywo艂uje funkcj臋 i nie wchodzi w dyskusje z u偶ytkownikiem. Domy艣lny tryb AUTO, pozwala narz臋dziu zdecydowa膰, czy ma wywo艂a膰 funkcj臋, czy zwr贸ci膰 u偶ytkownikowi odpowied藕 tekstow膮, co nie zawsze jest wskazane.
Ca艂y kodzik
import {
FunctionCallingConfigMode,
FunctionDeclaration,
GoogleGenAI,
} from "@google/genai";
import { NextResponse } from "next/server";
import { controlLight } from "./controlLight";
const apiKey = process.env.GEMINI_KEY;
const model = "gemini-2.5-flash";
const controlLightDeclaration: FunctionDeclaration = {
name: "controlLight",
parametersJsonSchema: {
type: "object",
properties: {
brightness: {
type: "number",
},
colorTemperature: {
type: "string",
},
},
required: ["brightness", "colorTemperature"],
},
};
export async function POST(req: Request) {
try {
const body = await req.json();
const userPrompt = body.text; // "Id臋 spa膰, zr贸b ciemno"
if (!userPrompt) {
return NextResponse.json(
{ error: "Brak tekstu polecenia" },
{ status: 400 },
);
}
const ai = new GoogleGenAI({ apiKey });
const response = await ai.models.generateContent({
model,
contents: userPrompt,
config: {
toolConfig: {
functionCallingConfig: {
mode: FunctionCallingConfigMode.ANY,
allowedFunctionNames: ["controlLight"],
},
},
tools: [{ functionDeclarations: [controlLightDeclaration] }],
},
});
const call = response.functionCalls?.[0];
const { args } = call || {};
const { brightness, color } = args || {};
const result = controlLight(brightness as number, color as string);
return NextResponse.json({ success: true, response });
} catch (error) {
return NextResponse.json(
{ error: "Failed to process AI request" },
{ status: 500 },
);
}
}
Lektura dodatkowa
https://learn.deeplearning.ai/courses/agentic-ai/lesson/79cpry/creating-a-tool - darmowy kurs od Andrew Ng, wystarczy si臋 zalogowa膰 przez konto Google.
Brak komentarzy:
Prze艣lij komentarz