AGI의 가능성

AGI의 가능성
Photo by Andrea De Santis / Unsplash

LangChain 으로 다양한 실험들을 해보면서 AGI의 가능성에 대해 좀 더 진지하게 생각해볼 수 있었다.

LangChain이란 LLM에게 사용가능한 도구를 쥐어줌으로써 훨씬 다양한 것들을 할 수 있게 하는 것이다. 유저가 물어본 것을 구글에서 찾아본다든가, 이미지를 생성 및 인식한다든가, 코드를 짠다든가 다양한 행동들을 직접 할 수 있게 된다. 기존의 ChatGPT가 내놓던 허구의 대답, 돌려보지 않은 허구의 코드 등의 문제를 해결할 수 있게 되는 것이다.

2일 전에 나온 OpenAI의 Plugin도 정확히 같은 맥락이다. (https://openai.com/blog/chatgpt-plugins) 새로운 도구들을 통해 기존의 LLM이 할 수 없던 것을 가능하게 한다. LangChain을 썼는지는 모르지만 Microsoft에서 LangChain을 활용하여 Visual ChatGPT를 내놓은 것을 보면 유사한 방법을 사용했을 것이라 짐작된다.

신기한 것 중 하나는 도구에 대한 설명을 자연어로 적어두면 LLM이 적절한 시점에 적절한 방법으로 도구를 호출한다는 것이다. 지금까지 사람들이 LLM을 보면서 이것은 지능이 아니다, 할 수 있는 것이 제한적이다, 단순한 text completition이다 등 여러 의견들을 내놓았지만 슬슬 지능이 아니라고 하기에는 너무 똑똑하다.

다양한 도구와 함께 LLM은 사람이 할 수 있는 것들을 하나하나 정복하기 시작했다.

LLM이 할 수 있는 것

이론상 사람이 CLI를 통해 할 수 있는 모든 것을 LLM이 대체할 수 있다. CLI를 통해 할 수 있는 것이라 하면 코드 작성 및 터미널에서 커맨드 실행이 가능하므로 결국 코딩을 통해 할 수 있는 모든 것이라고 봐도 무방할 것이다.

우리가 CLI를 통해 할 수 있는 것들의 형태는 Read와 Write이다. 커맨드를 입력하는 것, 커맨드 실행 결과를 확인하는 것.

GUI를 통해 할 수 있는 것들은 아직 대체하기 어려워보인다.

 1. HTML 코드를 전부 읽고 이해하기엔 코드량이 너무 많기도 하고 사람이 이해하는 방식과 너무 달라 부자연스럽다.

 2. 그냥 이미지 형태로 보고 정확하게 이해하기엔 아직 그 정도의 정확도가 되지 못한다.

 3. GUI에서 클릭이나 텍스트 입력하기가 어렵다.

이제 CLI로 어떤 것들을 할 수 있을지 좀 더 구체적으로 생각해보자.

웹서비스 개발을 한다고 생각해보자.

  1. 웹서비스 목적을 이루기 위한 API 명세를 작성한다.
  2. 백엔드, 프론트엔드 프레임워크를 정한다.
  3. 환경 설정한다.
  4. 구글에 찾아보면서 개발한다.
  5. 개발 이후에 돌려보고 테스트한다.
  6. 개발이 완료되면 배포한다.

보통 이런 과정을 통해 개발이 진행된다. 하나하나 자세히 들여다보면 CLI로 불가능한 것이 없다. CLI로 바로 구글링하는 것은 불가능하지만 구글링하는 코드를 짜는 것은 어렵지 않다. 배포의 경우에는 AWS 인프라를 CLI로 띄우거나 풀루미 같은 IaC를 쓸 수 있을 것이다.

LLM의 Coding

코드를 짜야할 땐 어떻게 할까? 단순한 텍스트 수정은 직접 할 수 있다. 우리가 해야할 것은 사람이 코드를 짤 때처럼 우리가 받아들이는 정보, 우리가 입력하는 정보, 실제로 돌려보고 테스트 결과에 대한 정보 등등을 LLM에게도 똑같이 제공하는 것이다.

GPT4에게 코딩 문제를 줬을 때 결과를 보면 이미 인간보다 훨씬 코딩을 잘한다. 다만 사람들이 아직 못한다고 느끼는 부분이 분명 존재하긴 한다. 예를 들어 백준 다이아 급의 문제, 아니면 파일 단위의 코드 작성, 테스트를 안해보고 돌아가지 않는 코드 작성 등등이 존재한다.

하지만 이것이 공평한 비교일까?

백준 다이아 문제를 보고 바로 코딩해서 풀 수 있는 사람이 얼마나 될까. 문제를 분석하고 핵심을 깨닫고 문제를 분할하고 하나씩 정복하는 과정을 사람이 거칠 때, 1시간씩 넘게 붙잡고 있을 때 우리는 LLM에게 단 10초 만에 모든 결과를 가져오라고 한다.

파일 단위의 코드 작성, 물론 지금 LLM은 불가능하다. 모든 코드를 컨텍스트 안에 다 넣을 수도 없다. 하지만 사람은 모든 코드를 컨텍스트 안에 넣고 다닐 수 있는가? 생각하더라도 큰 그림에서 추상적인 핵심만을 저장할 것이다. 우리가 LLM에게 이런 방법을 알려줬는가? 공평하지 않다고 생각한다.

마지막으로 테스트를 안 해보고 돌아가지 않는 코드를 작성하는 것은 당연히 어쩔 수 없다. 테스트할 시간도 안 주고, 테스트할 수 있는 방법도 안 주는데 당연히 에러가 있지 않을까. 컴퓨터 없이 혼자 손코딩해서 바로 돌아갈 코드 짤 수 있는 사람도 없다.

인간과 공평한 비교가 가능하도록 상황을 만든다면 나는 이미 현재의 LLM이 사람의 코딩 실력을 아득히 뛰어넘었다고 생각한다.

LLM Wrapper

LLM 자체를 업그레이드하는 것은 빅테크들을 믿는다.

나는 이 LLM에게 더 많은 도구들을 쥐어줌으로써 지금까지 절대 불가능했던 AGI에 조금씩 도전해보고 싶다. 스스로 레포 단위에서 코딩이 가능할 때, 그렇게 코딩한 소프트웨어를 저장해두고 추후에 필요할 때 사용해서 더 어려운 소프트웨어 개발이나, 사람의 요청에 바로 대답할 수 있는 그런 지능을 만들어보고 싶다.

아래에서 우리 EVAL의 발전 과정을 지켜봐주시면 너무 감사합니다.

GitHub - corca-ai/EVAL: [Corca / DEV] EVAL(Elastic Versatile Agent with Langchain) will execute all your requests. Just like an eval method!
[Corca / DEV] EVAL(Elastic Versatile Agent with Langchain) will execute all your requests. Just like an eval method! - GitHub - corca-ai/EVAL: [Corca / DEV] EVAL(Elastic Versatile Agent with Langch…