Vue.js предоставляет гибкий и реактивный подход к построению пользовательских интерфейсов, что делает его удобной платформой для интеграции моделей искусственного интеллекта и машинного обучения. Важно понимать, что AI/ML-компоненты во фронтенде чаще всего выполняют следующие функции: обработка данных на клиенте, взаимодействие с API моделей или визуализация результатов прогнозов.
Для начала требуется создать стандартный Vue-проект с использованием Vue CLI или Vite. Vite рекомендуется для проектов с интенсивной работой с асинхронными запросами и динамическими модулями.
npm create vite@latest my-vue-ai-app --template vue
cd my-vue-ai-app
npm install
Для работы с ML-моделями можно использовать библиотеки, совместимые с браузером:
@tensorflow/tfjs — для работы с TensorFlow.js.ml5 — упрощённый интерфейс к TensorFlow для
фронтенда.onnxruntime-web — для запуска моделей ONNX прямо в
браузере.Установка TensorFlow.js:
npm install @tensorflow/tfjs
Разделение функционала важно для масштабируемости:
Пример структуры проекта:
src/
├─ components/
│ ├─ PredictionForm.vue
│ ├─ PredictionResult.vue
├─ services/
│ └─ mlService.js
├─ store/
│ └─ aiStore.js
└─ App.vue
Vue предоставляет реактивные свойства через ref и
reactive, что особенно важно при работе с ML, где
предсказания занимают время.
import { ref } from 'vue';
import * as tf from '@tensorflow/tfjs';
export default {
setup() {
const model = ref(null);
const prediction = ref(null);
const loading = ref(false);
const loadModel = async () => {
loading.value = true;
model.value = await tf.loadLayersModel('/models/my-model/model.json');
loading.value = false;
};
const predict = async (inputData) => {
if (!model.value) return;
const tensor = tf.tensor(inputData);
prediction.value = model.value.predict(tensor).dataSync();
};
return { model, prediction, loading, loadModel, predict };
}
}
Ключевые моменты:
ref создаёт реактивное значение, автоматически
обновляющее интерфейс при изменении.Иногда модели слишком тяжёлые для браузера или требуется доступ к более мощным вычислительным ресурсам. В этом случае Vue-компоненты взаимодействуют с серверными AI-сервисами через HTTP или WebSocket.
import axios from 'axios';
import { ref } from 'vue';
export default {
setup() {
const prediction = ref(null);
const loading = ref(false);
const fetchPrediction = async (inputData) => {
loading.value = true;
try {
const response = await axios.post('https://api.example.com/predict', { input: inputData });
prediction.value = response.data.prediction;
} finally {
loading.value = false;
}
};
return { prediction, loading, fetchPrediction };
}
}
Рекомендации:
Vue идеально интегрируется с библиотеками визуализации, такими как Chart.js, D3.js или Plotly.js, для отображения прогнозов и аналитики.
import { onMounted, ref } from 'vue';
import { Chart } from 'chart.js';
export default {
setup() {
const chartRef = ref(null);
onMounted(() => {
new Chart(chartRef.value, {
type: 'line',
data: {
labels: ['Янв', 'Фев', 'Мар'],
datasets: [{ label: 'Прогноз', data: [10, 20, 15] }]
}
});
});
return { chartRef };
}
}
Советы по интеграции:
Пример использования Web Worker для TensorFlow.js:
// worker.js
import * as tf from '@tensorflow/tfjs';
onmess age = async (e) => {
const model = await tf.loadLayersModel('/models/my-model/model.json');
const prediction = model.predict(tf.tensor(e.data)).dataSync();
postMessage(prediction);
};
В компоненте:
const worker = new Worker(new URL('./worker.js', import.meta.url), { type: 'module' });
worker.onmess age = (e) => prediction.value = e.data;
worker.postMessage(inputData);
Pinia упрощает хранение реактивного состояния моделей и результатов:
import { defineStore } from 'pinia';
import * as tf from '@tensorflow/tfjs';
export const useAIStore = defineStore('ai', {
state: () => ({
model: null,
prediction: null,
loading: false
}),
actions: {
async loadModel(url) {
this.loading = true;
this.model = await tf.loadLayersModel(url);
this.loading = false;
},
async predict(inputData) {
if (!this.model) return;
const tensor = tf.tensor(inputData);
this.prediction = this.model.predict(tensor).dataSync();
}
}
});
Использование в компоненте позволяет легко делиться состоянием между различными частями приложения без лишнего дублирования кода.
AI/ML-интеграция во Vue.js строится вокруг трёх ключевых принципов: реактивного состояния, асинхронной обработки и модульной структуры компонентов. Разделение UI, сервисов и состояния обеспечивает поддержку масштабируемых приложений, способных работать с локальными и облачными моделями искусственного интеллекта.