Всем привет, я Григорий Тумаков, CTO в Моризо Диджитал.
Недавно рассказал, как мы в компании «потрогали» нейросети для прикладных задач разработки. Но там никаких серьезных выводов сделать не удалось.
Поэтому решил на этом не останавливаться. Если есть инструменты — их надо протестировать на какой-то реальной задаче.
Далее в статье мой опыт сравнения для прикладной задачи трех AI-инструментов: Phind, ChatGPT, Machinet.
Идея и промпт
Создай страницу с использованием JS и html для получения погоды по названию города. На странице должна быть форма заполнения названия города, кнопка "Узнать погоду". Не забудь учесть проблемы с CORS.
Работать это должно таким образом:
Пользователь вводит название города.
По названию города нужно запросить долготу и широту по этому API
curl -X POST
-H "Content-Type: application/json"
-H "Accept: application/json"
-H "Authorization: Token {API_TOKEN}"
-H "X-Secret: {SECRET_TOKEN}"
-d '[ "{Название города}" ]'
https://cleaner.dadata.ru/api/v1/clean/address
Далее долготу и широту необходимо подставить в запрос - https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={API key}
Вывести результат обращения к API.
Для сравнения я загрузил промпт в каждую из трех нейросетей.
Рассказываю, что получилось.
ChatGPT
*Вот пример кода HTML и JavaScript, который реализует описанную вами функциональность:*
<!DOCTYPE html> |
*Пожалуйста, обратите внимание, что вы должны заменить `{API_TOKEN}`, `{SECRET_TOKEN}` и `{API_KEY}` на свои реальные значения. Кроме того, помните, что без использования сервера для обхода CORS вы можете столкнуться с проблемами безопасности при попытке выполнить этот код в браузере.*
Очевидно, что этот код не выведет нам результат, мы получим ошибку CORS.
![](https://habrastorage.org/getpro/habr/upload_files/869/08c/ee6/86908cee6c8afe59925aed251db00339.png)
Поэтому я попросил придумать решение этой проблемы.
![](https://habrastorage.org/getpro/habr/upload_files/661/33d/3a1/66133d3a1123e0fd9c0ed0f2ebb2997c.png)
Вот, что предложил ChatGPT
*Чтобы обойти ошибку CORS при обращении к API с клиентской стороны, можно воспользоваться серверной прокси. Например, можно создать простой сервер с использованием Node.js, который будет проксировать запросы к API `cleaner.dadata.ru` и передавать результат обратно на клиент.*
*Вот пример кода для сервера на Node.js:*
const express = require('express'); |
*Изменения в коде:*
1. *Добавлена библиотека `express` для создания сервера.*
2. *Добавлена библиотека `node-fetch` для выполнения HTTP запросов на сервере.*
3. *Добавлена библиотека `cors` для обработки CORS политики.*
4. *Создан маршрут `/getCoordinates`, который принимает POST запрос с именем города, отправляет запрос к API `cleaner.dadata.ru` через сервер, получает координаты города и отправляет их обратно клиенту.*
*На стороне клиента теперь нужно обратиться к серверу для получения координат города, затем использовать полученные координаты для запроса погоды к API `api.openweathermap.org`.*
<html lang="en"> |
*Теперь клиентский JavaScript делает запрос к серверу для получения координат города, затем использует эти координаты для запроса погоды к API `api.openweathermap.org`.*
К сожалению, снова получаю ошибку.
Error [ERR_REQUIRE_ESM]: require() of ES Module .../ai/chat-gpt/node_modules/node-fetch/src/index.js from .../ai/chat-gpt/server.js not supported. Instead change the require of index.js in .../ai/chat-gpt/server.js to a dynamic import() which is available in all CommonJS modules. at Object.<anonymous> (.../ai/chat-gpt/server.js:50:15) { code: 'ERR_REQUIRE_ESM' }
Прошу поправить и получаю новый блок кода, с указанием необходимости установки axios.
const express = require('express'); |
И наконец получаю нужный результат, приложение работает
![](https://habrastorage.org/getpro/habr/upload_files/05e/5ed/e75/05e5ede75f9f55af792f7497fdccd979.png)
Попрошу отформатировать полученный ответ от API.
*Выведи красиво ответ от API, чтобы было понятно какая сейчас погода, скорость ветра и так далее*
![](https://habrastorage.org/getpro/habr/upload_files/685/f30/356/685f30356276e679bd567d2e421b1c72.png)
![](https://habrastorage.org/getpro/habr/upload_files/df9/85a/6a6/df985a6a6190c534514695b4dab70c40.png)
Phind
Загружаю промпт и сразу вижу различия в результате. Phind предпочел разделить html и js код в разные файлы, что радует.
![](https://habrastorage.org/getpro/habr/upload_files/c59/635/269/c5963526936082f4baf8c6ae755565c0.png)
![](https://habrastorage.org/getpro/habr/upload_files/e73/81a/845/e7381a8456f20080a88953e898db2626.png)
К сожалению, не получаю работающую программу с первого запроса, поэтому прошу добавить веб-сервер для обхода проблемы с CORS. Вижу, что Phind дает более развернутые ответы и предлагает несколько вариантов.
![](https://habrastorage.org/getpro/habr/upload_files/a11/552/b60/a11552b601ea69e347d7dfe08d43307f.png)
![](https://habrastorage.org/getpro/habr/upload_files/e5e/417/d8c/e5e417d8c85f85977677a61e71adf01e.png)
Пробую сначала первый вариант. Спрашиваю, как его использовать, и получаю достаточно подробную инструкцию.
![](https://habrastorage.org/getpro/habr/upload_files/333/822/7ce/3338227ce1ce9b21b07e2f11233ce51f.png)
![](https://habrastorage.org/getpro/habr/upload_files/815/f6a/05c/815f6a05cad7caa86eea5ea03ecbdcfd.png)
После изменения кода пробую запустить сервер, но получаю уже знакомую ошибку.
```
Error [ERR_REQUIRE_ESM]: require() of ES Module .../ai/chat-gpt/node_modules/node-fetch/src/index.js from .../ai/chat-gpt/server.js not supported. Instead change the require of index.js in .../ai/chat-gpt/server.js to a dynamic import() which is available in all CommonJS modules. at Object.<anonymous> (.../ai/chat-gpt/server.js:50:15) { code: 'ERR_REQUIRE_ESM' }
```
Прошу исправить ошибку и получаю ответ, который значительно лучше по сравнению с ChatGPT, он подробный и в нем объясняется проблема.
![](https://habrastorage.org/getpro/habr/upload_files/dde/34b/349/dde34b349a8c351c8661d4c86f958041.png)
Пробую использовать предложенное решение — все работает.
![](https://habrastorage.org/getpro/habr/upload_files/d7d/55e/921/d7d55e921526b438c06d7ee7808c8291.png)
Прошу красиво вывести ответ от апи, чтобы было понятно, какая погода, ветер и т.д.
![](https://habrastorage.org/getpro/habr/upload_files/eb8/409/a02/eb8409a02cd3d43d32731069bfbaa120.png)
Правлю код и пробую получить данные.
![](https://habrastorage.org/getpro/habr/upload_files/a84/1b9/5d3/a841b95d3c53d854ef659daba4f81ad4.png)
Теперь тестирую второй предложенный вариант. Применяю изменения, запускаю.
Но выходит ошибка — прошу ее исправить.
![](https://habrastorage.org/getpro/habr/upload_files/184/02a/ec4/18402aec45ea720846f2465f8ad11d8a.png)
Снова получаю развернутый ответ с объяснением ошибки и несколькими решениями, но теперь уже знаю, что первое решение поможет, поэтому не продолжаю.
Machinet
Загружаю промпт, получаю ответ:
*Хорошо, я могу помочь вам создать страницу для получения погоды по названию города с использованием JavaScript и HTML. Для начала, вам понадобится создать HTML-разметку для страницы. Вот пример кода:*
<!DOCTYPE html> |
*В этом примере мы используем jQuery для упрощения работы с AJAX-запросами. При отправке формы, мы сначала отправляем запрос на получение долготы и широты города с помощью API от Dadata, а затем используем полученные координаты для запроса погоды с помощью API от OpenWeatherMap. Результат выводится в элементе с id "weatherResult".*
*Обратите внимание, что вам нужно будет заменить {API_TOKEN}, {SECRET_TOKEN} и {API key} на соответствующие значения, полученные при регистрации на соответствующих сервисах.*
Пробую запустить код и выполнить запрос. Снова получаю ошибку CORS, прошу исправить, используя тот же текст, что и в предыдущих нейросетях — и получаю интересный ответ.
![](https://habrastorage.org/getpro/habr/upload_files/0ff/f4f/f1f/0fff4ff1fde97fafd9aea78fbbff3023.png)
Выбираю второй подход.
![](https://habrastorage.org/getpro/habr/upload_files/9e6/163/3d2/9e61633d2a39ddd06f4486b671dcacfd.png)
Пробую запустить сервер и получаю ошибку.
app.use(corsAnywhere({ |
Прошу исправить.
![](https://habrastorage.org/getpro/habr/upload_files/455/872/73e/45587273ef4f458e66b91932ed71f6fb.png)
После исправлений сервер действительно запустился. Но при выполнении запроса получаю новую ошибку, снова прошу ее исправить.
![](https://habrastorage.org/getpro/habr/upload_files/349/4af/aad/3494afaad6095294f8fc451924c46c08.png)
Применяю изменения и пробую выполнить запрос еще раз, но снова получаю ошибку.
![](https://habrastorage.org/getpro/habr/upload_files/d35/f5c/658/d35f5c658e9364d327d25036778f873f.png)
Пробую дать больше информации об ошибке.
![](https://habrastorage.org/getpro/habr/upload_files/851/c50/598/851c505981ff015dfb423a3bf12a5639.png)
К сожалению, не получаю никакого решения, только рекомендации. Здесь нет смысла дальше продолжать.
Результаты
Хуже всех с поставленной задачей справилась Machinet, ей не удалось выдать работающего решения. Возможно, на более простых задачах она сможет помочь.
Если же выбирать из ChatGPT и Phind, то я бы предпочел Phind, поскольку она давала более развернутые ответы и предлагала больше вариантов решения задач.
Комментарии (2)
pkokoshnikov
15.04.2024 14:48+1Очень сложно добиться нужного результата. Да какой то результат будет, но почти наверняка не, то что вы хотели. Постоянно пробую разные чаты, есть подписка openai. Удачных кейсов по разработке у себя могу по пальцам пересчитать. Чаще быстрее самому написать
vikarti
Чисто ради примера :)
Kagi Search
fastgpt (kagi.com/fastgpt)
Assistant (Expert, Resarch mode)
Kagi Search - Research Assistant, Fast
Kagi Search, Code Assistant
FastGPT доступен всем пользователям Kagi Search,
Fast Mode Research Assistant'а - всем(но пока assistant в бете только для тех у кого топовый план), заявлено что он сейчас на Claude 3 Haiku
Expert mode - заявлено что на Claude 3 Sonnet и доступен только с топовым планом.
Одно из преимуществ - это вообще то поисковая система весьма интересная и со своими особенностями, ИИ-часть там опциональна но удобна. И зачем платить за подписку ChatGPT Plus если можно платить Kagi ? :) (ну кроме картинок) (зачем вообще платить за поиск - у них подробно расписано - https://help.kagi.com/kagi/why-kagi/why-pay-for-search.html )