Überblick
Dieses Projekt zeigt, wie man einen KI-gestützten Wetterservice mit Genkit, TypeScript, OpenWeatherAPI und GitHub-Modellen erstellt. Die Anwendung präsentiert moderne Node.js-Muster und KI-Integrations-Techniken.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie folgendes haben:
- Node.js auf Ihrem Rechner installiert
- GitHub-Konto und Zugriffstoken für die GitHub-APIs
- Einen OpenWeatherAPI-Schlüssel zum Abrufen von Wetterdaten
- Genkit CLI auf Ihrem Rechner installiert
Technische Tiefe
KI-Konfiguration
Das Kern-KI-Setup wird mit Genkit und der GitHub-Plugin-Integration initialisiert. In diesem Fall werden wir das OpenAI GPT-3-Modell verwenden:
const ai = genkit({
plugins: [
github({ githubToken: process.env.GITHUB_TOKEN }),
],
model: openAIO3Mini,
});
Implementierung des Wettertools
Die Anwendung definiert ein benutzerdefiniertes Wettertool mit Zod-Schema-Validierung:
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`;
}
);
KI-Flussdefinition
Der Service stellt einen KI-Fluss bereit, der Wetteranfragen verarbeitet:
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-Server-Konfiguration
Die Anwendung verwendet das Genkit Express-Plugin, um einen API-Server zu erstellen:
const app = express({
flows: [helloFlow],
});
Vollständiger Code
Der vollständige Code für den Wetterservice lautet wie folgt:
/* 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]
});
Setup und Entwicklung
1. Abhängigkeiten installieren:
npm install
2. Umgebungsvariablen konfigurieren:
GITHUB_TOKEN=your_token
OPENWEATHER_API_KEY=your_key
3. Starten des Entwicklungsservers:
npm run genkit:start
4. Um das Projekt im Debug-Modus auszuführen und Breakpoints zu setzen, können Sie Folgendes ausführen:
npm run genkit:start:debug
Dann starten Sie den Debugger in Ihrer IDE. Sehen Sie die Datei .vscode/launch.json
für die Konfiguration.
5. Wenn Sie das Projekt erstellen möchten, können Sie Folgendes ausführen:
npm run build
6. Führen Sie das Projekt im Produktionsmodus aus:
npm run start:production
Abhängigkeiten
Kernabhängigkeiten
genkit
: ^1.0.5@genkit-ai/express
: ^1.0.5openweather-api-node
: ^3.1.5genkitx-github
: ^1.13.1dotenv
: ^16.4.7
Entwicklungsabhängigkeiten
tsx
: ^4.19.2typescript
: ^5.7.2
Projektkonfiguration
- Verwendet ES-Module (
"type": "module"
) - TypeScript mit Modulauflösung von
NodeNext
- Ausgabeverzeichnis: lib
- Vollständige TypeScript-Unterstützung mit Typdefinitionen
Lizenz
Apache 2.0
Ressourcen
Abschluss
Dieses Projekt zeigt, wie man einen Wetterdienst mit Genkit in Node.js und KI-Integration erstellt. Die Anwendung präsentiert moderne Node.js-Muster und KI-Integrations-Techniken.
Sie können den vollständigen Code dieses Beispiels im GitHub-Repository finden.
Viel Spaß beim Coden!
Source:
https://dzone.com/articles/building-weather-service-genkit-ai