Обзор
Этот проект демонстрирует, как создать сервис погоды с использованием искусственного интеллекта с помощью Genkit, TypeScript, OpenWeatherAPI и моделей GitHub. Приложение демонстрирует современные шаблоны Node.js и методики интеграции искусственного интеллекта.
Предварительные требования
Прежде чем начать, убедитесь, что у вас есть следующее:
- Установленный Node.js на вашем компьютере
- Учетная запись GitHub и токен доступа для API GitHub
- Ключ OpenWeatherAPI для получения данных о погоде
- Установленный CLI Genkit на вашем компьютере
Техническое погружение
Настройка ИИ
Основная настройка ИИ инициализируется с помощью интеграции плагина Genkit и GitHub. В этом случае мы собираемся использовать модель OpenAI GPT-3:
const ai = genkit({
plugins: [
github({ githubToken: process.env.GITHUB_TOKEN }),
],
model: openAIO3Mini,
});
Реализация инструмента погоды
Приложение определяет пользовательский инструмент погоды с использованием проверки схемы 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`;
}
);
Определение потока ИИ
Сервис предоставляет поток ИИ, обрабатывающий запросы о погоде:
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
Приложение использует плагин Genkit Express для создания сервера API:
const app = express({
flows: [helloFlow],
});
Полный код
Полный код для сервиса погоды выглядит следующим образом:
/* 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]
});
Установка и разработка
1. Установите зависимости:
npm install
2. Настройте переменные среды:
GITHUB_TOKEN=your_token
OPENWEATHER_API_KEY=your_key
3. Запустите сервер разработки:
npm run genkit:start
4. Чтобы запустить проект в режиме отладки и установить точки останова, вы можете выполнить:
npm run genkit:start:debug
Затем запустите отладчик в вашей среде разработки. Смотрите файл .vscode/launch.json
для конфигурации.
5. Если вы хотите построить проект, вы можете выполнить:
npm run build
6. Запустите проект в режиме продакшн:
npm run start:production
Зависимости
Основные зависимости
genkit
: ^1.0.5@genkit-ai/express
: ^1.0.5openweather-api-node
: ^3.1.5genkitx-github
: ^1.13.1dotenv
: ^16.4.7
Зависимости разработки
tsx
: ^4.19.2typescript
: ^5.7.2
Конфигурация проекта
- Использует ES модули (
"type": "module"
) - Типизация TypeScript с разрешением модуля
NodeNext
- Директория вывода: lib
- Полная поддержка TypeScript с определениями типов
Лицензия
Apache 2.0
Ресурсы
Заключение
Этот проект демонстрирует, как создать сервис погоды с использованием Genkit в Node.js с интеграцией искусственного интеллекта. Приложение показывает современные шаблоны Node.js и техники интеграции искусственного интеллекта.
Вы можете найти полный код этого примера в репозитории GitHub.
Приятного кодинга!
Source:
https://dzone.com/articles/building-weather-service-genkit-ai