
Разработчик HastingsGreer решил проверить, что с помощью ИИ можно быстро сделать очень простой и почти рабочий браузер.
«В последнее время в сети появилось несколько постов, оценивающих возможности агентных подходов к разработке в рамках задачи „Создание веб‑браузера“ (публикации на Хабре № 1 и № 2). Создание соответствующего стандартам веб‑браузера, которому можно доверять в отношении вредоносного контента, — это титаническая задача, что звучит очень и очень впечатляюще. Однако задача, которую ставят перед собой разработчики с помощью ИИ, — это создание не соответствующего стандартам браузера, который не гарантирует никакой безопасности, и я даже не знаю, насколько это проще», — пояснил HastingsGreer.
Вот как разработчик пояснил свой небольшой проект:
Итак, давайте создадим браузер и отобразим главную страницу Hacker News.
Я выбрал C в качестве языка для реализации, потому что он хардкорный и низкоуровневый, и решил использовать raylib для рендеринга, потому что он нравится моему любимому ютуберу. Это скорее мои предложения агенту, чем решения, которых я придерживался: в духе «вайб-программирования» я не особо вникал в исходный код, в основном полагаясь на визуальное качество отрендеренных веб-сайтов и доверяя своему агенту (ELIZA — это ИИ-компаньон, созданный на основе искусственного интеллекта ELIZA, который появился 60 лет назад) выполнение основной работы.
Я был искренне шокирован тем, насколько хороши результаты после того, как ELIZA проработала код более 8 секунд (я сходил за чашкой кофе).
За исключением некоторых сбоев в заголовке, результаты почти идеальны! Я известен своим скептическим отношением к LLM (большим языковым моделям), но это меня просто поразило.
В любом случае, мне нужно вернуться к своей основной работе, поэтому я не стал особо проверять исходный код. Честно говоря, если не считать времени, я не думаю, что у меня хватит сил прочитать 76 строк кода. (К тому же, я не знаю C.) Однако, если вам интересно, я включил его сюда:
/* * Hello, I am Eliza * */ #include "raylib.h" #include "stdio.h" #include "stdlib.h" int z; int main(int argc, char** argv) { /* * Don't you ever say Hello? * */ InitWindow(800, 450, "raylib [core] example - basic window?"); const char* fmtstr = "curl -X POST \"https://production-sfo.browserless.io/screenshot?token=2Ts7vJKz0y6Itk0404d3adc30bfc2b9d5c4a1aac198a46735\" -H 'Cache-Control: no-cache' -H 'Content-Type: application/json' -d '{ \"url\": \"%s\", \"options\": { \"fullPage\": true, \"type\": \"png\" } }' --output \"screenshot.png\" "; /* * Are you saying no just to be negative? * */ const char* command = TextFormat(fmtstr, argv[1]); /* * Are such questions on your mind often? * */ system(command); SetTargetFPS(60); Texture whole_page = LoadTextureFromImage(LoadImage("screenshot.png")); /* * I see. * */ SetExitKey(KEY_Q); while (!WindowShouldClose()) { BeginDrawing(); /* * Tell me more... * */ ClearBackground(RAYWHITE); DrawTexture(whole_page, 0,0,WHITE); DrawRectangle(z, 10, 20, 20, BLUE); DrawText(command, 10, 10, 10, BLACK); /* * Say, do you have any psychological problems? * */ EndDrawing(); /* * Is it because you are afraid of EndDrawing that you come to me? * */ if (IsKeyDown(KEY_UP)) { /* * Do you wish that (iskeydown(key_up)) { ? * */ z += 1; } } CloseWindow(); return 0; } /* * I'm not sure I understand you fully. * */
Этот фрагмент кода написан на языке C и использует библиотеку raylib для отображения содержимого веб-страницы. Программа принимает URL-адрес в качестве аргумента командной строки, делает запрос к API Browserless для получения полного скриншота указанной страницы в формате PNG и отображает его в окне.
Код использует функцию system() для выполнения команды curl, которая отправляет POST-запрос к API и сохраняет полученное изображение в файл screenshot.png. Затем изображение загружается и отображается в окне с помощью функций raylib. В цикле while происходит обновление окна и реагирование на нажатия клавиш.
Этот код интересен тем, что демонстрирует простой способ отображения веб-страницы с использованием C и внешних библиотек. Однако стоит учесть, что программа не обеспечивает полноценную работу браузера и предназначена скорее для демонстрации возможности отображения веб-контента.
