Для начала, в общем виде, обсудим ситуацию: человек и языковая модель думают по разному. Не уверен, можно ли вообще применять данный глагол ко второму объекту.
Интуитивная схема начального этапа
Представим следующую ситуацию. ChatGPT известно о библиотеке, он представляет, что такое физика, но он абсолютно ничего не знает о том, что нужно человеку. С другой стороны, есть человек, у которого есть задача, он знаком с физикой, но в целом не знаком с библиотекой
Это значит, что, интуитивно на уровне гипотезы, существуют различные пути взаимодействия:
У нас есть три области информации, которые необходимо совместить, чтобы добиться практических результатов.
Несмотря на то, что цель у нас одна – добиться решения нашей проблемы средствами библиотеки Bullet, в процессе ее достижения необходимо будет решить несколько подзадач:
Сформируем запрос:
Используй репозиторий "https://github.com/bulletphysics/bullet3" Мы должны создать демонстрацию, наподобие HelloWorld. Мы должны использовать методы из папки исходных файлов. Здесь присутствует падающий объект, статичный объект и несколько страдающих объектов. Когда падающий объект сталкивается со статичным объектом, тогда на страдающие объекты применяется сила, зависящая от импульса столкновения, даже если страдающий и падающий объект не сталкиваются напрямую. Как я могу это сделать?
Запрос к ChatGPT
ChatGPT указал реализацию
Рассмотрим отдельно, как перемещается информация.
Итоговый код выглядит следующим образом:
for (int i = 0; i < numManifolds; i++)
{
auto man = manifolds;
int num_contacts = man->getNumContacts();
for (int j = 0; j < num_contacts; j++)
{
btManifoldPoint mpt = man->getContactPoint(j);
}}
В целях тестирования визуализируем точки столкновения с помощью UE. Как только возникает контакт, то создаём сферы видимого размера. По крайней мере, это в теории. На практике же означает, что мы будем исследовать массив btPersistentManifold.
Красные точки соответствуют массиву из объектов btPersistentManifold
Ссылка на видео с таймингом: Can ChatGPT help developer to create for using C++ libraries?
Сгенерированное совместно с ChatGPT решение выводит слишком много точек. В тоже время сомнительно, что сам движок обрабатывает вообще все точки в процессе своей работы.
Если принять за правду гипотезу, что физическая библиотека Bullet оптимизирует вычисления, то можно попробовать разобрать на составляющие внутренние процессы и забрать отфильтрованные значения.
Нам известна функция stepSimulation из предыдущих ответов ChatGPT. Мы можем предположить, что в процессе своей работы, вышеупомянутая функция будет фильтровать данные:
Переформулируем запрос:
Ты можешь написать и описать полный и отсортированный в порядке исполнения список функций, которые последовательно вызываются во время исполнения метода stepSimulation класса btDiscreteDynamicsWorld в репозитории https://github.com/bulletphysics/bullet3 и заданного файла по пути examples/HelloWorld/HelloWorld.cpp. Ты должен следовать следующей инструкции. Ты стартуешь с первой строчки stepSimulation, читай строчки пока не достигнешь функции, тогда добавь к списку методов, далее запомни эту позицию и прыгай в эту функцию и читай строчки в этой функции и добавь найденные функции в список. Не прыгай больше чем два раза. Если достигнешь конца метода, то возвращайся к запомненной позиции и продолжай чтение. Если достигнешь конца stepSimulation, остави это.
Скриншот запроса
Честно говоря, только сейчас понимаешь насколько это «поток чистых разума», после прочтения того, что пришло в воспаленную голову в момент общения.
Однако ChatGPT справился. Эксперимента ради, я отправил в запрос этот текст в нескольких «свежих» чатах. В самом худшем варианте, я на третьей «регенерации» запроса получал ответ схожий с предыдущей статьей.
Напомню, что там я получал список функций библиотеки Bullet в ответ на мой запрос. И есть определенная вероятность, что этот список связан с работой stepSimulation. В списке нашлась функция calculateSimulationIslands, описание которой содержит слово «group». Оно похоже на то, что мы ищем.
Строчка из ответа ChatGPT
Появился новый термин «Острова Симуляции». Череда простых вопросов, которые в общих чертах запрашивают информацию о связанных объектах с этим термином, приводит к следующему методу.
Ответ от ChatGPT
Функция buildAndProcessIsland напрямую указывает, что она создает острова симуляции и перебирает их, вызывая специальную callback функцию. Вроде бы все, что нам нужно, это забрать данные, когда он приходят в callback.
Однако, здесь у меня началось полнейшее непонимание с ChatGPT. Я запрашивал у него наследуемые классы от этого IslandCallback, в том числе связанные с HelloWorld, но он продолжал отвечать, что существует btDiscreteDynamicWorld::IslandCallback, который на самом деле не существует. А InplaceSolverIslandCallback, который в два счета находится простым поиском по ключевому слову, находить отказывался.
На какой-то момент я сдался и просто загрузил то, что использовал в начале, теперь уже в InplaceSolverIslandCallback.
Результат работы вставленной функции
Ссылка на видео с таймингом: Can ChatGPT help developer to create for using C++ libraries?
Таким сложным путем можно прийти к чему-то похожему, что я пытаюсь реализовать. Ведь зная точки столкновения можно реализовать исходный посыл, осталось только реализовать массивы страдающих кубов и определить падающий куб, далее найти импульс удара и рассчитать расстояние.
Так ChatGPT предлагает определять относятся точки к падающему телу или нет:
ChatGPT
btCollisionObject * obj0 = manifold->getBody0();
Так применять силу:
ChatGPT
body->applyForce(force, btVector3(0,0,0));
Так брать импульс:
ChatGPT
float impulse = point->m_appliedImpulse;
Если собрать все, что было, в одну кучу, то получим некоторое решение нашей задачи.
Иллюстрация решения
Ссылка на видео с таймингом: Can ChatGPT help developer to create for using C++ libraries?
Заключение
В этой статье рассмотрено практическое применение использования ChatGPT в решении задач.
Из неочевидных проблем, озвученных в статье, можно отметить следующее:
Интуитивная схема начального этапа
Представим следующую ситуацию. ChatGPT известно о библиотеке, он представляет, что такое физика, но он абсолютно ничего не знает о том, что нужно человеку. С другой стороны, есть человек, у которого есть задача, он знаком с физикой, но в целом не знаком с библиотекой
Это значит, что, интуитивно на уровне гипотезы, существуют различные пути взаимодействия:
- Конкретизировать инструкции, чтобы направить творческие возможности ChatGPT и оптимизировать его инструменты по работе с данными;
- Рассказать подробно о себе ChatGPT, чтобы у него сложилось понимание о собеседнике;
- Предложить ChatGPT ролевую модель, чтобы ограничить его реакции.
У нас есть три области информации, которые необходимо совместить, чтобы добиться практических результатов.
Несмотря на то, что цель у нас одна – добиться решения нашей проблемы средствами библиотеки Bullet, в процессе ее достижения необходимо будет решить несколько подзадач:
- Использовать понятия, связанные с физикой;
- Увеличить понимание задач для ChatGPT;
- Увеличить понимание библиотеки для человека.
Сформируем запрос:
Используй репозиторий "https://github.com/bulletphysics/bullet3" Мы должны создать демонстрацию, наподобие HelloWorld. Мы должны использовать методы из папки исходных файлов. Здесь присутствует падающий объект, статичный объект и несколько страдающих объектов. Когда падающий объект сталкивается со статичным объектом, тогда на страдающие объекты применяется сила, зависящая от импульса столкновения, даже если страдающий и падающий объект не сталкиваются напрямую. Как я могу это сделать?
Запрос к ChatGPT
ChatGPT ответил в несколько этапов, периодически заикась, но, в результате предложил следующее.Здесь и далее прошу прощения за «мыло», так как исходные диалоги потерялись осталось только видео
ChatGPT указал реализацию
Рассмотрим отдельно, как перемещается информация.
| ChatGPT | Человек |
Bullet | Ее необходимо использовать, в качестве примера реализации брать файл HelloWorld | Для решения задачи необходимо использовать btPersistentManifold, btRigitBody. Необходимо размещать после(?) stepSimulation |
Физика | Речь идет о твердых телах | Столкновения могут быть между твердыми телами |
Задача | Необходимо создать рабочий пример с инструкциями | Задача напрямую связана точками столкновения |
for (int i = 0; i < numManifolds; i++)
{
auto man = manifolds;
int num_contacts = man->getNumContacts();
for (int j = 0; j < num_contacts; j++)
{
btManifoldPoint mpt = man->getContactPoint(j);
}}
В целях тестирования визуализируем точки столкновения с помощью UE. Как только возникает контакт, то создаём сферы видимого размера. По крайней мере, это в теории. На практике же означает, что мы будем исследовать массив btPersistentManifold.
Красные точки соответствуют массиву из объектов btPersistentManifold
Ссылка на видео с таймингом: Can ChatGPT help developer to create for using C++ libraries?
Сгенерированное совместно с ChatGPT решение выводит слишком много точек. В тоже время сомнительно, что сам движок обрабатывает вообще все точки в процессе своей работы.
Во время написания статьи обратил внимание, что не все точки подкрашены красным. Верхние точки синих кубов не отмечены. К сожалению, это в дальнейшем не будет использоваться. Негативное последствие спешки, так как не очень-то хотелось уделять большое количество времени тестам.
| ChatGPT | Человек |
Bullet | Столкновения между статическими объектами тоже считаются | В btPersistentManifold слишком много точек |
Физика | | |
Задача | | Необходимо фильтровать данные |
Если принять за правду гипотезу, что физическая библиотека Bullet оптимизирует вычисления, то можно попробовать разобрать на составляющие внутренние процессы и забрать отфильтрованные значения.
Нам известна функция stepSimulation из предыдущих ответов ChatGPT. Мы можем предположить, что в процессе своей работы, вышеупомянутая функция будет фильтровать данные:
- Исключать;
- Объединять;
- Группировать;
- Разгруппировать
Переформулируем запрос:
Ты можешь написать и описать полный и отсортированный в порядке исполнения список функций, которые последовательно вызываются во время исполнения метода stepSimulation класса btDiscreteDynamicsWorld в репозитории https://github.com/bulletphysics/bullet3 и заданного файла по пути examples/HelloWorld/HelloWorld.cpp. Ты должен следовать следующей инструкции. Ты стартуешь с первой строчки stepSimulation, читай строчки пока не достигнешь функции, тогда добавь к списку методов, далее запомни эту позицию и прыгай в эту функцию и читай строчки в этой функции и добавь найденные функции в список. Не прыгай больше чем два раза. Если достигнешь конца метода, то возвращайся к запомненной позиции и продолжай чтение. Если достигнешь конца stepSimulation, остави это.
Скриншот запроса
Честно говоря, только сейчас понимаешь насколько это «поток чистых разума», после прочтения того, что пришло в воспаленную голову в момент общения.
Однако ChatGPT справился. Эксперимента ради, я отправил в запрос этот текст в нескольких «свежих» чатах. В самом худшем варианте, я на третьей «регенерации» запроса получал ответ схожий с предыдущей статьей.
Напомню, что там я получал список функций библиотеки Bullet в ответ на мой запрос. И есть определенная вероятность, что этот список связан с работой stepSimulation. В списке нашлась функция calculateSimulationIslands, описание которой содержит слово «group». Оно похоже на то, что мы ищем.
Строчка из ответа ChatGPT
Появился новый термин «Острова Симуляции». Череда простых вопросов, которые в общих чертах запрашивают информацию о связанных объектах с этим термином, приводит к следующему методу.
Ответ от ChatGPT
Функция buildAndProcessIsland напрямую указывает, что она создает острова симуляции и перебирает их, вызывая специальную callback функцию. Вроде бы все, что нам нужно, это забрать данные, когда он приходят в callback.
Однако, здесь у меня началось полнейшее непонимание с ChatGPT. Я запрашивал у него наследуемые классы от этого IslandCallback, в том числе связанные с HelloWorld, но он продолжал отвечать, что существует btDiscreteDynamicWorld::IslandCallback, который на самом деле не существует. А InplaceSolverIslandCallback, который в два счета находится простым поиском по ключевому слову, находить отказывался.
На какой-то момент я сдался и просто загрузил то, что использовал в начале, теперь уже в InplaceSolverIslandCallback.
Результат работы вставленной функции
Ссылка на видео с таймингом: Can ChatGPT help developer to create for using C++ libraries?
Таким сложным путем можно прийти к чему-то похожему, что я пытаюсь реализовать. Ведь зная точки столкновения можно реализовать исходный посыл, осталось только реализовать массивы страдающих кубов и определить падающий куб, далее найти импульс удара и рассчитать расстояние.
Так ChatGPT предлагает определять относятся точки к падающему телу или нет:
ChatGPT
btCollisionObject * obj0 = manifold->getBody0();
Так применять силу:
ChatGPT
body->applyForce(force, btVector3(0,0,0));
Так брать импульс:
ChatGPT
float impulse = point->m_appliedImpulse;
Если собрать все, что было, в одну кучу, то получим некоторое решение нашей задачи.
Иллюстрация решения
Ссылка на видео с таймингом: Can ChatGPT help developer to create for using C++ libraries?
Заключение
В этой статье рассмотрено практическое применение использования ChatGPT в решении задач.
Из неочевидных проблем, озвученных в статье, можно отметить следующее:
- Так и не смог с помощью чата «найти» InplaceSolverIslandCallback. Стоимость этой проблемы очень низка, так как решается простым поиском.
- Так и не смог заставить чат «предложить» функцию activate, а без нее страдающие объекты не двинулись бы с места. Стоимость этой проблемы невероятно высока, так как даже документация напрямую нигде не указывает об этом. Внутренняя логика такова, что только сталкивающие объекты обрабатываются алгоритмами. В нашем случае, сила как бы берется из «ниоткуда», поэтому алгоритм просто проигнорирует наше добавление силы. Здесь наверно требуется какой-то особый подход.
- Не заметил, что не все точки были «подкрашены» на первом этапе. Тоже о стоимости нельзя ничего сказать, так как попросту упустил это из виду. Возможно, я смог бы найти иное решение проблемы.
Скоростной серфинг по библиотеке с помощью ChatGPT
В прошлой статье в теории были рассмотрены некоторые аспекты использования ChatGPT в узконаправленной области изучения библиотеки Bullet Physics library. Теперь попробую привести практический пример....
habr.com