2022년 12월 12일 월요일

ChatGPT-3 인공지능 기반 자동 프로그래밍 사용기, 장점과 단점

최근, 핫한 ChatGPT-3 를 이용한 인공지능 기반 자동 코딩 사용기, 그리고 GPT 장점과 단점을 정리해 공유한다.

일부 언론에서는 ChatGPT를 이용해, 인공지능이 자동으로 소프트웨어 개발을 할 수 있는 것처럼 이야기하는 데(기사 참고 - 오픈AI가 선보인 '챗GPT'에 IT업계 '들썩'..."대화 넘어 코딩·원고 작성까지) 사실은 현실과는 거리가 있다.

ChatGPT 테스트
실제 몇 가지 테스트를 해보면, 잘 알려진 특정 분야(코드 개발 패턴이 정형화되어 있는 알고리즘. 후술)에 한에 쓸만한 코드를 만들어 낸다. 

ChatGPT를 이용해, BIM(Building Information Modeling)에서 주로 많이 사용되는 IfcOpenShell 을 이용해 특정 속성을 검색하는 코드를 생성해 보겠다. 

ChatGPT 사용 순서는 다음과 같다. 
1. https://chat.openai.com/chat 에 로그인, 접속한다.
2. 다음 문장을 프롬프트에 입력한다.
load BIM.ifc using IfcOpenShell and return the element which project name is 'DDP' in python
3. ChatGPT가 학습된 소스코드를 바탕으로 유사한 패턴의 코드가 다음과 같이 생성한다. 
import ifcopenshell

# open the IFC file
ifc_file = ifcopenshell.open("BIM.ifc")

# access the building elements in the IFC file
building_elements = ifc_file.by_type("IfcBuildingElement")

# iterate over the building elements
for element in building_elements:
    # access the properties of each element
    properties = element.IsDefinedBy
    for property in properties:
        # check if the property name is "Project" and the property value is "DDP"
        if property.Name == "Project" and property.Value == "DDP":
            # return the element if the condition is met
            print(element)
            break

4. 이 코드를 직접 입력해 실행해본다. 결과는 다음과 같다. 실제로는 사용되는 API등 이 정확하지 않아, 제대로 실행되지 않는 것을 확인할 수 있다. 
ChatGPT 코드 실행

생성된 코드를 보면, for, if 문과 같이 제어문장 패턴들은 코드가 잘 생성되는 것을 알 수 있다. 몇몇 알려진 API(예. open() 함수)등도 잘 사용한다. 다만, property API는 학습 데이터가 별로 없었는지 제대로 코딩되지 않았다. 보다시피 방어적 프로그래밍은 되어 있지 않다. 유지보수성, 재활용성을 고려한 모듈화 등은 고려되지 않는 듯 보인다. 전체적으로 좀 냉정하게 보면, stack overflow 검색 구글링 시간을 줄여준 느낌이다.


GPT 장점과 단점
당연히 ChatGPT를 이용한다고, 소프트웨어가 저절로 개발되지 않는다. 다음과 같은 경우, ChatGPT는 개발에 어느정도 도움이 될 수 있다.

G1. 결과를 보면 알겠지만, for, if 와 같은 시퀀스 처리 패턴 구조는 잘 만들어 낸다. 그러므로, 특정 알고리즘(sort, search 등)과 관련된 구조는 재활용할 수 있다. 

G2. 코딩을 전혀 모르는 경우, 대략 전체적인 워크플로우를 특정 언어로 코딩해 낸다. 이는 개발 시 다양한 전문가가 모여 서비스 기능을 디자인할 때 유용할 수 있다. 예를 들어, 개발자와 디자이너가 커뮤니케이션할 때 사용할 수 있다. 

G3. 개발자가 라이브러리 기본 사용법을 잘 모르는 경우, 기본 뼈대 코드를 얻을 수 있다. Stack overflow 사이트 무한 검색 구글링 시간을 줄일 수 있다. 빠르게 그럴듯한 결과를 찾아서 정리해 준다.

G4. 개발자가 잘 알려진 라이브러리에 대해 GPT를 사용하는 경우, 예제 정도 수준의 코드를 얻을 수 있다(학습 데이터가 많은 경우).

다만, ChatGPT만으로는 다음과 같은 한계가 있다.

W1. 생성된 코드가 실행 오류가 없는 소프트웨어를 개발할 만큼 완벽하지 않다. 이전 실행 결과와 같이, 잘 알려져 있지 않은 라이브러리 사용 코드나 API 를 이해하고 있는 경우, 이는 사람이 API문서를 찾아서 적절히 코딩해야 한다. 당연하지만, ChatGPT 학습된 데이터가 부족한 데, 이런 작업을 알아서 해주지 않는다. 그렇다고, 이를 가능하게 하고자, 학습 데이터를 준비하는 것은 코딩보다 더 많은 일이 될 수 있다(가성비 문제).

W2. 데이터가 부족하면, ChatGPT는 잘못된 정보를 조합해(확률적으로 그럴듯한) 결과를 제공한다. 앞서 보았던 코딩 사례가 그렇다. ChatGPT는 주어진 데이터들의 순서열에 대한 관계를 학습한다. 그러므로, 주어진 데이터 패턴에 비슷한 결과를 짜집기해서 출력한다. 데이터가 부족한 도메인에 대한 질의는 상식적으로 말도 안되는 그럴듯한 결과를 생성한다. 사실 확인에 필요한 출처가 없다는 것도 문제가 있다. 기본 상식이 없으므로, 피드백 결과를 조작할 수도 있다.
예. 고려 시대에 성군인 의자왕에 대해 알려주세요
챗GPT. 고려시대의 의자왕(義慈王, 1216년 ~ 1259년)은 제25대 고려의 군주였습니다.

W3. 도메인 맥락을 이해하지 못한다. 소프트웨어 시스템 아키텍처 설계 관점에서 코드를 생성하지는 않는다. 이는 도메인 요구사항과 지식을 반영해 디자인되는 것이므로, 이를 코드화하는 것은 쉽지 않다. 단지, ChatGPT는 한 모듈의 코드 패턴을 생성해 낼 수 있다. 결국 아키텍처 설계자, 개발자, 도메인 전문가가 함께 붙어 작업해야 하는 부분이다.

W4. 다양한 이기종 시스템으로 부터 데이터 통합, 연계, 테스트하는 것은 현장 상황에 따라 다르므로, 이를 GPT가 대치할 수 없다. 

W5. 어차피, 개발자가 개발을 해야 한다. 앞의 W1, W2, W3, W4로 인해, 어차피 개발자가 코드를 작성해야 하고, 사용자와 요구사항 커뮤니케이션과 서비스 배포까지 고려하면, 이런 부분이 사실상 개발의 80~90% 이상을 차지한다. 

ChatGPT로 자동 작성된 코드도, 결국, 사람이 그 코드들을 이해해야, 테스트하고 품질을 검수할 수 있다(ChatGPT가 제공한 코드를 사용하다가 사고나면, GPT가 손해를 책임지는 것은 아니다). 

그래서, ChatGPT는 이전에 통합 개발환경에서 지원하던 개발보조도구의 편리한 인공지능 버전 검색 엔진 정도로 활용가능한 것이다. 당연히, 개발 과정을 대체할 수는 없을 것이다. 마찬가지 이유로, 컨텐츠를 직접 만드는 작가, 모델러, 크리에이터의 일을 대체하는 일은 없을 것이다.  다만, 컨텐츠 원본을 만드는 사람들을 제외하고, 기존 데이터를 변환(예. 번역, 상담원)하거나 짜집기(예. 문헌 조사, 동향 보고서)하는 곳들은 자동화되어 점차 가치를 얻기 어렵게 될 가능성이 높다. 

ChatGPT란 학습된 데이터를 잘조합하는 조수 역할에 적합하다. 편향된 학습데이터로는 그럴듯한 결과를 조합하는 오답의 확률이 꽤 높을 수 있다. 그러므로, 학습과정과 판단은 사람이 개입해야 한다. 챗GPT를 잘 이용하면, 챗봇의 경우와 같이 작업 생산성을 높일 수 있다(포토샵처럼 도구화될 것임). 

모든 문제를 풀어내는 인공지능 절대 솔류션은 없음

ChatGPT 조수를 잘 활용하고 싶다면, 다음 링크를 참고하라.

참고: Revit 다이나모 기반 파이썬 생성 결과
앞의 예시와 마찬가지로, 학습데이터가 부족하면, 제대로 된 결과가 생성되지 않는다. 
입력 프롭프트는 
“generate python script to make room which has 4 walls including window and door using Dynamo in Revit 2022”
였으며, 다이나모에서 실행한 결과는 다음과 같이 에러가 발생한다. 이 역시, 학습 데이터가 부족하면 제대로 된 결과를 얻지 못함을 알 수 있다. 
Dynamo Error

RevitPythonShell Error





댓글 없음:

댓글 쓰기