Overzicht
Deze handleiding laat zien hoe je een op AI gebaseerde weerservice kunt bouwen met behulp van Genkit, TypeScript, OpenWeatherAPI en GitHub-modellen. De applicatie toont moderne Node.js-patronen en AI-integratietechnieken.
Vereisten
Voordat je begint, zorg ervoor dat je het volgende hebt:
- Node.js geïnstalleerd op je machine
- GitHub-account en toegangstoken voor GitHub-API’s
- Een OpenWeatherAPI-sleutel voor het ophalen van weergegevens
- Genkit CLI geïnstalleerd op je machine
Technische Diepgaande Duik
AI-configuratie
De kern van de AI-opstelling wordt geïnitialiseerd met Genkit en integratie van de GitHub-plugin. In dit geval gaan we gebruikmaken van het OpenAI GPT-3-model:
const ai = genkit({
plugins: [
github({ githubToken: process.env.GITHUB_TOKEN }),
],
model: openAIO3Mini,
});
Implementatie van Weergereedschap
De applicatie definieert een aangepast weergereedschap met behulp van Zod-schemavalidatie:
const getWeather = ai.defineTool(
{
name: 'getWeather',
description: 'Gets the current weather in a given location',
inputSchema: weatherToolInputSchema,
outputSchema: z.string(),
},
async (input) => {
const weather = new OpenWeatherAPI({
key: process.env.OPENWEATHER_API_KEY,
units: "metric"
})
const data = await weather.getCurrent({locationName: input.location});
return `The current weather in ${input.location} is: ${data.weather.temp.cur} Degrees in Celsius`;
}
);
AI-Flowdefinitie
De service biedt een AI-flow die weerverzoeken verwerkt:
const helloFlow = ai.defineFlow(
{
name: 'helloFlow',
inputSchema: z.object({ location: z.string() }),
outputSchema: z.string(),
},
async (input) => {
const response = await ai.generate({
tools: [getWeather],
prompt: `What's the weather in ${input.location}?`
});
return response.text;
}
);
Express Serverconfiguratie
De applicatie gebruikt de Genkit Express-plugin om een API-server te maken:
const app = express({
flows: [helloFlow],
});
Volledige Code
De volledige code voor de weerservice is als volgt:
/* eslint-disable @typescript-eslint/no-explicit-any */
import { genkit, z } from 'genkit';
import { startFlowServer } from '@genkit-ai/express';
import { openAIO3Mini, github } from 'genkitx-github';
import {OpenWeatherAPI } from 'openweather-api-node';
import dotenv from 'dotenv';
dotenv.config();
const ai = genkit({
plugins: [
github({ githubToken: process.env.GITHUB_TOKEN }),
],
model: openAIO3Mini,
});
const weatherToolInputSchema = z.object({
location: z.string().describe('The location to get the current weather for')
});
const getWeather = ai.defineTool(
{
name: 'getWeather',
description: 'Gets the current weather in a given location',
inputSchema: weatherToolInputSchema,
outputSchema: z.string(),
},
async (input) => {
const weather = new OpenWeatherAPI({
key: process.env.OPENWEATHER_API_KEY,
units: "metric"
})
const data = await weather.getCurrent({locationName: input.location});
return `The current weather in ${input.location} is: ${data.weather.temp.cur} Degrees in Celsius`;
}
);
const helloFlow = ai.defineFlow(
{
name: 'helloFlow',
inputSchema: z.object({ location: z.string() }),
outputSchema: z.string(),
},
async (input) => {
const response = await ai.generate({
tools: [getWeather],
prompt: `What's the weather in ${input.location}?`
});
return response.text;
}
);
startFlowServer({
flows: [helloFlow]
});
Opzet en Ontwikkeling
1. Installeer afhankelijkheden:
npm install
2. Configureer omgevingsvariabelen:
GITHUB_TOKEN=your_token
OPENWEATHER_API_KEY=your_key
3. Start de ontwikkelingsserver:
npm run genkit:start
4. Om het project in de debugmodus uit te voeren en breakpoints in te stellen, kunt u het volgende commando uitvoeren:
npm run genkit:start:debug
Vervolgens start u de debugger in uw IDE. Raadpleeg het bestand .vscode/launch.json
voor de configuratie.
5. Als u het project wilt bouwen, kunt u het volgende commando uitvoeren:
npm run build
6. Voer het project uit in productiemodus:
npm run start:production
Afhankelijkheden
Kernafhankelijkheden
genkit
: ^1.0.5@genkit-ai/express
: ^1.0.5openweather-api-node
: ^3.1.5genkitx-github
: ^1.13.1dotenv
: ^16.4.7
Ontwikkelingsafhankelijkheden
tsx
: ^4.19.2typescript
: ^5.7.2
Projectconfiguratie
- Gebruikt ES-modules (
"type": "module"
) - TypeScript met module-oplossing van
NodeNext
- Uitvoermap: lib
- Volledige TypeScript-ondersteuning met type-definities
Vergunning
Apache 2.0
Resources
Conclusie
Dit project laat zien hoe je een weerservice kunt bouwen met behulp van Genkit in Node.js met AI-integratie. De applicatie toont moderne Node.js patronen en AI-integratietechnieken.
Je kunt de volledige code van dit voorbeeld vinden in de GitHub-opslagplaats.
Veel programmeerplezier!
Source:
https://dzone.com/articles/building-weather-service-genkit-ai