Правим код написанный ИИ . (Промты, тренинг, оптимизация)

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

Правим код написанный ИИ . (Промты, тренинг, оптимизация)

Сообщение Alex2013 » 27.01.2025 21:05:35

Функция "универсальной загрузки JPG с кэшированием" (без использования TImage )
(Я в курсе что задача из серии "не бей лежачего" но для начала тестирования возможностей LLM-кодинга она вполне пойдет,
ну и возможно потом будет где-то даже немного полезна ... )

Промт.
Write a function for lazarus (fpc,LCL) to load and scale JPG to TBitmap (from internet and from file with caching to file) which can be used without problems for multithreaded loading. (answer in Russian, with description and comments in Russian )
То бишь:
Напиши функцию для lazarus (fpc,LCL) загрузки и масштабирования JPG в TBitmap(из интернета и из файла с кэшированием в файл ) которую можно без проблем использовать при многопоточной загрузке
(отвечай на русском языке, с описанием и комментариями на русском языке )

LLM grok-2
Было ...
Код: Выделить всё
uses
  Classes, SysUtils, Graphics, FPImage, FPReadJPEG, FPWriteJPEG, LazFileUtils,
  fphttpclient, LCLIntf;
...
function LoadAndScaleImage(const URLOrFilePath: string; const TargetWidth, TargetHeight: Integer): TBitmap;
var
  Bitmap: TBitmap;
  JPEGImage: TFPCustomImage;
  JPEGReader: TFPCustomImageReader;
  JPEGWriter: TFPCustomImageWriter;
  HTTPClient: TFPHttpClient;
  CachePath: string;
  CacheFilename: string;
  MemoryStream: TMemoryStream;
begin
  Result := nil;
  Bitmap := TBitmap.Create;
  try
    // Кэширование: проверяем, есть ли файл в кэше
    CachePath := GetAppConfigDir(False);
    ForceDirectories(CachePath);
    CacheFilename := CachePath + ExtractFileName(URLOrFilePath);

    if FileExists(CacheFilename) then
    begin
      // Загрузка из кэша
      Bitmap.LoadFromFile(CacheFilename);
    end
    else
    begin
      // Загрузка из интернета или файла
      if Pos('http', LowerCase(URLOrFilePath)) = 1 then
      begin
        HTTPClient := TFPHttpClient.Create(nil);
        try
          MemoryStream := TMemoryStream.Create;
          try
            HTTPClient.Get(URLOrFilePath, MemoryStream);
            MemoryStream.Position := 0;
            Bitmap.LoadFromStream(MemoryStream);
          finally
            MemoryStream.Free;
          end;
        finally
          HTTPClient.Free;
        end;
      end
      else
      begin
        Bitmap.LoadFromFile(URLOrFilePath);
      end;

      // Сохраняем в кэш
      Bitmap.SaveToFile(CacheFilename);
    end;

    // Масштабирование изображения
    JPEGImage := TFPMemoryImage.Create;
    try
      JPEGReader := TFPReaderJPEG.Create;
      try
        JPEGImage.LoadFromBitmap(Bitmap.Handle, Bitmap.MaskHandle);
      finally
        JPEGReader.Free;
      end;

      Bitmap.SetSize(TargetWidth, TargetHeight);
      Bitmap.Canvas.StretchDraw(Bitmap.Canvas.ClipRect, JPEGImage);

    finally
      JPEGImage.Free;
    end;

    Result := Bitmap;
  except
    on E: Exception do
    begin
      FreeAndNil(Bitmap);
      raise Exception.CreateFmt('Ошибка при загрузке и масштабировании изображения: %s', [E.Message]);
    end;
  end;
end;


Стало ... (Первая пробная но условно-рабочая версия )
Код: Выделить всё
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs,
   FPImage, FPCanvas, FPImgCanv, FPWriteBMP, LazFileUtils,
  fphttpclient, LCLIntf, ExtCtrls, StdCtrls;

    function LoadAndScaleImage(const URLOrFilePath: string; const TargetWidth, TargetHeight: Integer): TBitmap;
  var
    Bitmap,B: TBitmap;
    JPEGImage: TFPCustomImage;
    HTTPClient: TFPHttpClient;
    CachePath: string;
    CacheFilename: string;
   MST, MemoryStream: TMemoryStream;
       FCanvas : TFPcustomCAnvas ;
   writer : TFPCustomImageWriter;

  begin
    Result := nil;
    Bitmap := TBitmap.Create;
    try
      // Кэширование: проверяем, есть ли файл в кэше
      CachePath := ExtractFilePath( ExpandFileName(ParamStr(0)));
      CacheFilename := CachePath + ExtractFileName(URLOrFilePath);
      JPEGImage := TFPMemoryImage.create(0,0);

      if FileExists(CacheFilename) then
      begin
        // Загрузка из кэша
        // Bitmap
         JPEGImage.LoadFromFile(CacheFilename);
      end
      else
      begin
        // Загрузка из интернета или файла
        if Pos('http', LowerCase(URLOrFilePath)) = 1 then
        begin
          HTTPClient := TFPHttpClient.Create(nil);
          try
            MemoryStream := TMemoryStream.Create;
            try
              HTTPClient.Get(URLOrFilePath, MemoryStream);
              MemoryStream.Position := 0;
              //Bitmap.
             JPEGImage. LoadFromStream(MemoryStream);
            finally
              MemoryStream.Free;
            end;
          finally
            HTTPClient.Free;
          end;
        end
        else
        begin
         // Bitmap
           JPEGImage.LoadFromFile(URLOrFilePath);
        end;
        // Сохраняем в кэш
       JPEGImage.SaveToFile(CacheFilename);
      end;


  Bitmap.SetSize(TargetWidth, TargetHeight);
  B := Bitmap;
  //Конверсия  в TBitmap
      FCanvas := TFPImageCanvas.Create (JPEGImage);
        Writer := TFPWriterBMP.Create;
        MST:=TMemoryStream.Create;
        Writer.ImageWrite(Mst,JPEGImage);
        Writer.Free;
        MST.Seek(0,soBeginning);
        b.LoadFromStream(MST);
        Mst.Free;
  //=========================
        Bitmap.Canvas.StretchDraw(Rect(0,0,TargetWidth, TargetHeight),B);
        FCanvas .Free;

      finally
        JPEGImage.Free;
      end;

      Result := Bitmap;
  end;

Вопросы :
1 Можно ли "Конверсию в TBitmap" сделать как-то менее громоздко ?
2 Зачем нужен JPEGReader если TFPMemoryImage все читает без него ?
Последний раз редактировалось Alex2013 27.01.2025 21:35:32, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 3100
Зарегистрирован: 03.04.2013 11:59:44

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение RRYTY » 27.01.2025 21:33:52

Alex2013 писал(а):Вопросы :
1 Можно ли "Конверсию в TBitmap" сделать как-то менее громоздко ?
2 Зачем нужен JPEGReader если TFPMemoryImage все читает без него ?


Автор на вопросы отвечать не хочет? Пользуется своим правом (неоспоримым и неизбежным, кстати!) робота. }:-D
RRYTY
постоялец
 
Сообщения: 221
Зарегистрирован: 25.12.2021 10:00:32

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение Alex2013 » 27.01.2025 21:49:48

Хм! Что странного в вопросе оптимизации и попытке научиться использованию LLM в программировании ?
А "спросить у LLM " в данном случае пустая трата времени . Это не вопрос ответ на который можно найти в учебнике .
( Кстати народ на форуме уже обсуждал похожий вопрос http://www.freepascal.ru/forum/viewtopic.php?f=5&t=9796 )
Зы Зы
Основная проблема LLM в том что им нужно уметь задавать непросто "правильные вопросы , а "вопросы на которые у LLM есть ответы", иначе будет море на вид вроде бы как "правдоподобных галлюцинаций" .
Последний раз редактировалось Alex2013 28.01.2025 14:53:08, всего редактировалось 2 раз(а).
Alex2013
долгожитель
 
Сообщения: 3100
Зарегистрирован: 03.04.2013 11:59:44

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение RRYTY » 27.01.2025 22:00:23

Alex2013 писал(а):А "спросить у LLM " в данном случае пустая трата времени. Это не вопрос ответ на который можно найти в учебнике.


Зачем LLM? Для задач, которые невозможно без LLM, либо с LLM решить проще. Вы таких задач не ставите. Почему?
О, кстати. Мы же уже на "ты". Ты еще не можешь задачу для LLM придумать.
RRYTY
постоялец
 
Сообщения: 221
Зарегистрирован: 25.12.2021 10:00:32

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение Alex2013 » 27.01.2025 22:59:08

RRYTY писал(а):Ты еще не можешь задачу для LLM придумать

1 Ну этому тоже научится нужно .
2 Как известно правильный вопрос половина решения.
Мы же уже на "ты".

Да без проблем ... (тут на форуме "на Ты" вполне нормально , но без лишнего тыканья )
Зачем LLM?
(да это немного в сторону от сути вопроса но так (ИМХО) будет понятнее )
1 LLM отвечает всегда ( не умелому пользователю (вроде меня) в ответах будет много бреда но иногда и бред "наводит на полезные мысли" ).
2 ИМХО Потенциально LLM будет использоваться примерно как визуальное программирование. ( Как только появился TurboVision и народ начал писать разные самодельные "дизайнеры форм" многие тоже не очень понимали "зачем оно нужно " Да и сейчас вполне можно обойтись без "формошлепства" но никто в здравом уме не будет требовать "избавить все IDE от этой ерси " ).

3 "Зачем LLM для задач, без LLM решить проще?" Ну во первых я реально видел потенциал LLM и понял что изучение их возможностей может себя "окупить с процентами" но с чего-то нужно начать и я подумал, что начинать нужно с того что можно решить самостоятельно и "сравнить результат трудов" .

4 Где задачи которые "невозможно решить без LLM"? Во первых пока таких в принципе немного . Во вторых такие задачи разумеется есть но ставятся они не каждый день и ответы там занимают не одну станицу, а главное проверять их отдельная и совсем не простая задача . ( и как раз для таких задач промт-инжиниринг и вообще особенности "охоты на LLM" нужно прокачивать до довольно высокого уровня ( иначе бреда получается прямо таки немерянные количества ), а я еще "в начале пути" и честно говоря не уверен, что у меня получится забраться достаточно далеко, но "попытка не пытка " )
Последний раз редактировалось Alex2013 28.01.2025 13:48:06, всего редактировалось 2 раз(а).
Alex2013
долгожитель
 
Сообщения: 3100
Зарегистрирован: 03.04.2013 11:59:44

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение RRYTY » 27.01.2025 23:07:10

Alex2013 писал(а):не уверен что у меня получится забраться достаточно далеко но "попытка не пытка "


Навскидку: любая задача, связанная с моделированием реальных физических процессов, в основе решения которых лежит теория вероятности. Обычно, такие задачи можно решить обычным дифференциальным уравнением, либо их системой. Но вот учет именно случайностей уже граничит с BigData. И проверить легко, и реально смоделировать можно, и промты идеально точно научишься писать.

Добавлено спустя 1 минуту 58 секунд:
Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация)
Alex2013 писал(а):Да без проблем ... (тут на форуме "на Ты" вполне нормально , но без лишнего тыканья )


Без лишнего тыканья - это исключая переход на личности.
RRYTY
постоялец
 
Сообщения: 221
Зарегистрирован: 25.12.2021 10:00:32

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение Alex2013 » 27.01.2025 23:16:01

RRYTY писал(а):Навскидку: любая задача, связанная с моделированием реальных физических процессов, в основе решения которой теория вероятности.

Хм в этом направлении я пока не думал , про "моделирование реальных физических процессов" не представляю чем там LLM поможет кроме анализа результатов . А вот статистика и теория вероятности это уже более преспективно . :idea:
Ладно бывай здоровым ! :idea:
Alex2013
долгожитель
 
Сообщения: 3100
Зарегистрирован: 03.04.2013 11:59:44

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение RRYTY » 27.01.2025 23:24:08

Все реальные процессы, все известные взаимодействия, - от системы рычагов, заходя в оптику, электронику и т.п., до квантовой механики, пока описываются величинами, в реальности кратными постоянной Планка и, обобщенно рассуждая, вписываются в принцип неопределенности Гейзенберга.
Так что везде можно пристегнуть теорию вероятности. К примеру, есть такие измерения, когда определяющую роль играет не измеряемая величина, а погрешность ее измерения.

Добавлено спустя 6 минут 36 секунд:
Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация)
Alex2013 писал(а):не представляю чем там LLM поможет кроме анализа результатов


Опять же навскидку: возможные изменения светового потока светодиода в среде с определенной концентрацией отражающих/поглащающих/излучающих/искажающих частиц в заданном диапазоне размеров этих частиц - при состоянии среды статичном или динамичном.
RRYTY
постоялец
 
Сообщения: 221
Зарегистрирован: 25.12.2021 10:00:32

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение Alex2013 » 28.01.2025 14:39:02

1. Всё это интересно, но я не физик и даже "простую" высшую математику капитально подзабыл.

2. Это форум, посвященный программированию, и понятное дело, обсуждают тут в основном всё, что связано с программированием.

3. Разумеется, есть достаточно много задач для программирования, связанных с теорией вероятности, но о прикладном применении такой теоретической базы нужно капитально подумать ( Например еще в начале нулевых я пытался использовать нейросеть для проверки достоверности данных измерений и прогнозирования (В основе лежала не интерполяция или экстраполяция, а распознавание образов в сочетании с анализом многолетней базы спутниковых снимков) недостающих значений при ограниченном объёме исходных данных и низкой частоте измерений для контроля и оптимизации работы мелиоративных систем).

4 В процессе самостоятельного изучения возможности использования (LLM) я стремлюсь к тому, чтобы сразу получать результаты, которые можно было бы проверить и, по возможности, применить в своих текущих проектах. (Например, я снова столкнулся с проблемой надёжной многопоточной загрузки данных с диска и из интернета.)
Alex2013
долгожитель
 
Сообщения: 3100
Зарегистрирован: 03.04.2013 11:59:44

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение RRYTY » 28.01.2025 21:09:47

Моделирование физических процессов актуально на пять нулей (ежемесячно) для программиста и на семь-восемь нулей (ежегодно) для организации. Не намек, фактическая информация, считай - инсайд. :-D
Правда, начало года, договоры уже заключены.
RRYTY
постоялец
 
Сообщения: 221
Зарегистрирован: 25.12.2021 10:00:32

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение Seenkao » 29.01.2025 07:46:02

ZenGL демка 2. Можешь использовать многопоточный код где угодно. Только смысла в многопоточной загрузке нет, есть смысл работы в многопотоке. А загрузку данных ты не ускоришь (если не грузишь с разных источников).

В некоторых ситуациях "ИИ" лучше вообще не пользоваться. Он может нагенерировать хрени и потом чёрт ногу сломает.

Alex2013 писал(а):Как известно правильный вопрос половина решения.

Для правильности постановки надо ещё добавлять: "нельзя использовать придуманную информацию, надо использовать актуальную информацию".

Кстати, при такой постановке, мне однажды чат выдал конкретный байт из нужных данных. Просто выдал номер байта и ни какой лишней информации.
Seenkao
энтузиаст
 
Сообщения: 547
Зарегистрирован: 01.04.2020 03:37:12

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение Alex2013 » 29.01.2025 20:24:02

Seenkao писал(а):ZenGL демка 2. Можешь использовать многопоточный код где угодно. Только смысла в многопоточной загрузке нет, есть смысл работы в многопотоке.

Спасибо, посмотрю .
Seenkao писал(а):А загрузку данных ты не ускоришь (если не грузишь с разных источников).

Это проверенно, ускорение есть и оно заметное причем настолько что даже время засекать не нужно .
Вот ролик записал (в ролике показаны два варианта загрузки (Load) "простой" и "оптимизированный" (Load 2) у второго разница между "простым" и "многопоточным" режимом вообще вымораживает ) :idea:

:arrow: https://youtu.be/eKuCxfQSTzo
(Программулина тестовая и дерганая но тема разницы ОП/МП раскрыта довольно полно )

Проблема там не в обеспечении повышения скорости загрузки, а в достижении достаточной стабильности и защите от зависаний .
Кстати выигрыш в скорости есть не только при загрузке данных из интернета но и при чтении данных с локального диска.
https://youtu.be/oOSXJWMk5s0

Добавлено спустя 23 минуты 19 секунд:
Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация)
Seenkao писал(а):В некоторых ситуациях "ИИ" лучше вообще не пользоваться. Он может нагенерировать хрени и потом чёрт ногу сломает.

Все верно но как я писал даже если ИИ выдает "бред сивой кобылы" что-то полезное там можно найти и проект сдвинется с мертвой точки. ( или просто поймешь что нужно наконец переписать проблемный кусок кода "по учебнику", а не пытаться "срезать угол вместе с крышей " :wink: )
Alex2013
долгожитель
 
Сообщения: 3100
Зарегистрирован: 03.04.2013 11:59:44

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение Alexander » 30.01.2025 09:24:36

> 2 Зачем нужен JPEGReader если TFPMemoryImage все читает без него ?

Можно попробовать сказать ИИ, чтобы он использовал TFPMemoryImage, а не JPEGReader. Просто написать ему: используй TFPMemoryImage вместо JPEGReader.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 802
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение Alex2013 » 30.01.2025 14:29:17

Alexander писал(а):Можно попробовать сказать ИИ, чтобы он использовал TFPMemoryImage, а не JPEGReader. Просто написать ему: используй TFPMemoryImage вместо JPEGReader.

Возможно это поможет но в запросе не было ничего конкретного ( нужно было вообще понять что ИИ насочинял я о этих классах вообще первый раз услышал ) и кроме того повтор промта скорее всего выдал бы совсем другой код а просить о уточнении "в догонку" можно только непосредственно после получения ответа.
Кстати "неправленный код " выданный ИИ отличный пример четкой разницы между голой теорией и реальной практикой
узнать что строка ..

Код: Выделить всё
Bitmap.Canvas.StretchDraw(Bitmap.Canvas.ClipRect, JPEGImage);


...не работает "от слова совсем" можно только попытавшись её скомпилировать
Более того в комплекте с TFPMemoryImage идет свой Canvas ( TFPcustomCAnvas ) и если использовать его то код успешно компилируется но выдает ошибку при запуске .

Но дальше все еще интереснее...
"Тлетворное влияние линукс"
Код: Выделить всё
    CachePath := GetAppConfigDir(False);
    ForceDirectories(CachePath);
    CacheFilename := CachePath + ExtractFileName(URLOrFilePath);

(Создает каталог кеша в дебрях системных директорий в принципе для программы с инсталлятором может быть полезно... но для обычной утилиты малость перебор )

Загрузка и кэширование сделаны стандартно,
но вот дальше идет что-то странное ...
Код: Выделить всё
    JPEGImage := TFPMemoryImage.Create;
    try
      JPEGReader := TFPReaderJPEG.Create;
      try
        JPEGImage.LoadFromBitmap(Bitmap.Handle, Bitmap.MaskHandle);
      finally
        JPEGReader.Free;
      end;
...

Метод JPEGImage.LoadFromBitmap вообще не существует в природе (есть в TLazIntfImage но каким боком это относится TFPMemoryImage непонятно ) а что делает JPEGReader понять в принципе невозможно .

Но в тоже время код вполне не сложно правится и кроме громоздкой конверсии результат правки получается вполне приемлемый .
Зы
По конверсии есть идея что можно как-то направить Writer.ImageWrite прямо в TBitmap RawImage.Data (правда не совсем ясно что делать с шапкой формата BMP )
Последний раз редактировалось Alex2013 30.01.2025 15:28:48, всего редактировалось 6 раз(а).
Alex2013
долгожитель
 
Сообщения: 3100
Зарегистрирован: 03.04.2013 11:59:44

Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация

Сообщение Seenkao » 30.01.2025 14:31:19

Alex2013 писал(а):Это проверенно, ускорение есть и оно заметное причем настолько что даже время засекать не нужно .

это не ускорение. Это загрузка последовательная загрузка данных и пока одно загрузилось, другое (которое загружено) уже распаковывается и выводится.

Ускорение именно в загрузке ты сможешь увидеть только когда загрузка идёт с разных источников, я не про интернет. Грузишь ты данные с одного HDD или с двух тут может быть разница. Но если ты всё делаешь с одного HDD, то тут разница только в правильности реализации.
Надо загрузить данные и сразу отправлять их обрабатываться. Пока обрабатываются пришедшие данные, надо сразу грузить следующие, чтоб не ждать окончания обработки. В этом случае многопоточность немного выигрывает перед однопотоком, потому что позволяет так делать.

Добавлено спустя 58 секунд:
Re: Правим код написанный ИИ . (Промты, тренинг, оптимизация)
Если говорить про интернет, то там примерно так же всё происходит, только узкое горлышко - это пропускная способность твоего интернета.
Seenkao
энтузиаст
 
Сообщения: 547
Зарегистрирован: 01.04.2020 03:37:12

След.

Вернуться в Разное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru