Разработчик 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 и внешних библиотек. Однако стоит учесть, что программа не обеспечивает полноценную работу браузера и предназначена скорее для демонстрации возможности отображения веб-контента.