Descripción general
Este proyecto demuestra cómo construir un servicio meteorológico mejorado con IA utilizando Genkit, TypeScript, OpenWeatherAPI y modelos de GitHub. La aplicación muestra patrones modernos de Node.js y técnicas de integración de IA.
Requisitos previos
Antes de comenzar, asegúrate de tener lo siguiente:
- Node.js instalado en tu máquina
- Cuenta de GitHub y token de acceso para las API de GitHub
- Una clave de OpenWeatherAPI para obtener datos meteorológicos
- Genkit CLI instalado en tu máquina
Profundización técnica
Configuración de IA
La configuración central de IA se inicializa con Genkit e integración del plugin de GitHub. En este caso, vamos a utilizar el modelo OpenAI GPT-3:
const ai = genkit({
plugins: [
github({ githubToken: process.env.GITHUB_TOKEN }),
],
model: openAIO3Mini,
});
Implementación de la herramienta meteorológica
La aplicación define una herramienta meteorológica personalizada utilizando validación de esquema Zod:
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`;
}
);
Definición del flujo de IA
El servicio expone un flujo de IA que procesa solicitudes de clima:
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;
}
);
Configuración del servidor Express
La aplicación utiliza el plugin Genkit Express para crear un servidor API:
const app = express({
flows: [helloFlow],
});
Código completo
El código completo para el servicio meteorológico es el siguiente:
/* 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]
});
Configuración y desarrollo
1. Instala las dependencias:
npm install
2. Configura las variables de entorno:
GITHUB_TOKEN=your_token
OPENWEATHER_API_KEY=your_key
3. Inicia el servidor de desarrollo:
npm run genkit:start
4. Para ejecutar el proyecto en modo de depuración y establecer puntos de interrupción, puedes ejecutar:
npm run genkit:start:debug
Luego, inicia el depurador en tu IDE. Consulta el archivo .vscode/launch.json
para la configuración.
5. Si deseas construir el proyecto, puedes ejecutar:
npm run build
6. Ejecuta el proyecto en modo producción:
npm run start:production
Dependencias
Dependencias Principales
genkit
: ^1.0.5@genkit-ai/express
: ^1.0.5openweather-api-node
: ^3.1.5genkitx-github
: ^1.13.1dotenv
: ^16.4.7
Dependencias de Desarrollo
tsx
: ^4.19.2typescript
: ^5.7.2
Configuración del Proyecto
- Usa Módulos ES (
"type": "module"
) - TypeScript con resolución de módulo
NodeNext
- Directorio de salida: lib
- Soporte completo de TypeScript con definiciones de tipo
Licencia
Apache 2.0
Recursos
Conclusión
Este proyecto demuestra cómo construir un servicio meteorológico utilizando Genkit en Node.js con integración de IA. La aplicación muestra patrones modernos de Node.js y técnicas de integración de IA.
Puedes encontrar el código completo de este ejemplo en el repositorio de GitHub.
¡Feliz codificación!
Source:
https://dzone.com/articles/building-weather-service-genkit-ai