Visão Geral
Este projeto demonstra como construir um serviço de clima aprimorado por IA usando Genkit, TypeScript, OpenWeatherAPI e modelos do GitHub. A aplicação apresenta padrões modernos do Node.js e técnicas de integração de IA.
Pré-requisitos
Antes de começar, certifique-se de ter o seguinte:
- Node.js instalado em sua máquina
- Conta do GitHub e token de acesso para as APIs do GitHub
- Uma chave da OpenWeatherAPI para buscar dados de clima
- Genkit CLI instalado em sua máquina
Aprofundamento Técnico
Configuração de IA
A configuração central de IA é inicializada com a integração do Genkit e do plugin do GitHub. Neste caso, vamos usar o modelo OpenAI GPT-3:
const ai = genkit({
plugins: [
github({ githubToken: process.env.GITHUB_TOKEN }),
],
model: openAIO3Mini,
});
Implementação da Ferramenta de Clima
A aplicação define uma ferramenta de clima personalizada usando validação 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`;
}
);
Definição do Fluxo de IA
O serviço expõe um fluxo de IA que processa solicitações 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;
}
);
Configuração do Servidor Express
A aplicação usa o plugin Genkit Express para criar um servidor API:
const app = express({
flows: [helloFlow],
});
Código Completo
O código completo para o serviço de clima é o seguinte:
/* 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]
});
Configuração e Desenvolvimento
1. Instale as dependências:
npm install
2. Configure as variáveis de ambiente:
GITHUB_TOKEN=your_token
OPENWEATHER_API_KEY=your_key
3. Inicie o servidor de desenvolvimento:
npm run genkit:start
4. Para executar o projeto no modo de depuração e definir pontos de interrupção, você pode executar:
npm run genkit:start:debug
Em seguida, inicie o depurador em seu IDE. Consulte o arquivo .vscode/launch.json
para a configuração.
5. Se deseja construir o projeto, você pode executar:
npm run build
6. Execute o projeto no modo de produção:
npm run start:production
Dependências
Dependências Principais
genkit
: ^1.0.5@genkit-ai/express
: ^1.0.5openweather-api-node
: ^3.1.5genkitx-github
: ^1.13.1dotenv
: ^16.4.7
Dependências de Desenvolvimento
tsx
: ^4.19.2typescript
: ^5.7.2
Configuração do Projeto
- Usa Módulos ES (
"type": "module"
) - TypeScript com resolução de módulo
NodeNext
- Diretório de saída: lib
- Suporte completo ao TypeScript com definições de tipo
Licença
Apache 2.0
Recursos
Conclusão
Este projeto demonstra como construir um serviço de clima usando Genkit em Node.js com integração de IA. A aplicação apresenta padrões modernos de Node.js e técnicas de integração de IA.
Você pode encontrar o código completo deste exemplo no repositório do GitHub.
Feliz codificação!
Source:
https://dzone.com/articles/building-weather-service-genkit-ai