MIT 연구자들, 소프트웨어 개발에서 대규모 언어 모델 통합을 간소화하기 위한 도메인 특화 언어 AskIt 제안

MIT Researchers Propose AskIt: A Domain-Specific Language for Streamlining Large Language Model Integration in Software Development

최근의 연구는 대규모 언어 모델(Large Language Models, LLMs)의 놀라운 능력을 강조하고 있으며, 이 모델들이 커질수록 그 능력은 더욱 향상됩니다. 이러한 LLMs은 다양한 응용 분야에서 필수적인 역할을 하고 있습니다. 가상 어시스턴트의 작동, 다국어 커뮤니케이션의 용이성, 자동 콘텐츠 생성, 의료 진단 및 감정 분석에서의 자연어 이해 향상 등에 사용되고 있습니다.

LLMs은 또한 코드 생성, 창의적 글쓰기, 학술 연구에서 중요한 역할을 하며, 콘텐츠 추천 시스템, 법률 연구, 재무 분석, 콘텐츠 검토 등에도 적용되고 있습니다. 이러한 모델들은 ‘발생 능력(emergent abilities)’이라는 독특한 현상을 보이며, 텍스트 요약에서 코드 생성까지 다양한 작업에 능숙함을 보입니다. 발생 능력이라는 개념은 흥미롭게도, 이러한 언어 모델들이 계속 발전하면서 더 복잡한 능력을 개발할 수도 있다는 가능성을 제시합니다.

그러나 LLMs를 소프트웨어 개발에 통합하는 것은 복잡한 과정입니다. 다양한 응용 프로그램에 원활하게 통합하기 위해 필요한 복잡한 의사 결정 과정 때문에 넓은 범위의 기술이 필요합니다. 또한, 이러한 모델을 최적으로 활용하기 위한 강력한 프롬프트(prompt)를 전문적으로 생성하는 것에 대한 불확실성도 여전히 큽니다.

이 문제를 해결하기 위해, MIT CSAIL의 연구자들은 ‘AskIt: 대규모 언어 모델을 위한 통합 프로그래밍 인터페이스(AskIt: Unified Programming Interface for Programming with Large Language Models)’라는 새로운 Paper을 발표했습니다. 연구자들에 따르면, 이 방법은 개발에 있어서 소프트웨어 개발 전문가들이 필요로 하는 오버헤드와 작업을 크게 줄여줍니다. AskIt은 다양한 작업을 수행할 수 있으며, 대규모 언어 모델을 위해 설계된 도메인 특화 언어입니다.

AskIt은 통합 과정을 단순화하기 위해 사용되며, 특정한 접근 방식을 사용합니다. 이를 통해 타입 가이드를 통한 출력 제어, 템플릿 기반 함수 선언, 그리고 일관된 인터페이스를 제공함으로써, 대규모 언어 모델 기반의 코드 생성과 애플리케이션 통합 사이의 구분을 줄입니다.

“그들은 타입 가이드를 통한 출력 제어를 사용하여 이전에 응답 추출에 필요했던 복잡한 프롬프트 엔지니어링을 제거했습니다. 이로 인해 자연어 프롬프트 내에서 데이터 형식을 정의하는 것이 불필요해졌습니다. 이 시스템은 개발자가 특정 활동에 적합한 프롬프트와 템플릿 기반 함수 정의를 사용하여 LLM을 활용하는 함수를 생성할 수 있게 합니다. 이러한 템플릿은 설명된 함수의 매개변수와 완벽하게 일치하는 입력 매개변수를 받습니다. 코드 생성에서는 LLM을 코드 생성에 활용하는 것과 애플리케이션에 통합하는 것 사이에 구분이 없어, 두 경우 사이를 간단하게 전환할 수 있으며 프롬프트 템플릿을 변경할 필요가 없습니다.”

AskIt은 대규모 언어 모델(Large Language Models, LLMs)을 소프트웨어 애플리케이션에 쉽게 통합할 수 있도록 설계되었다고 볼 수 있습니다. 복잡한 프롬프트 엔지니어링의 필요성을 없애면서, AskIt은 개발자들이 프롬프트 디자인과 응답 추출의 복잡성을 걱정하지 않고 특정 작업에 LLM을 쉽게 활용할 수 있게 만듭니다.

주요 포인트는 다음과 같습니다:

  1. 타입 가이드를 통한 출력 제어: 타입을 통해 출력을 제어함으로써, AskIt은 자연어 프롬프트 내에서 데이터 형식을 명시할 필요성을 없애고, 원하는 정보를 더 쉽게 추출할 수 있게 합니다.
  2. 템플릿 기반 함수 정의: 개발자들은 특정 활동에 적합한 프롬프트를 사용하여 LLM을 활용하는 함수를 생성할 수 있습니다. 이러한 함수는 함수 설명에서 지정한 매개변수와 완벽하게 일치하는 입력 매개변수를 받을 수 있어, 시스템이 매우 유연하게 작동합니다.
  3. 빈틈없는 코드 생성과 통합: AskIt은 코드 생성을 위해 LLM을 활용하는 것과 애플리케이션에 통합하는 것 사이의 구분을 없애줍니다. 이는 개발자들이 두 가지 사용 사례 사이를 전환할 때 프롬프트 템플릿을 변경할 필요가 없게 만들어, 시간과 노력을 절약할 수 있게 합니다.

이러한 기능들을 감안할 때, AskIt은 소프트웨어 개발 과정에서 LLM을 통합하는 장벽을 크게 낮출 수 있는 도구로 보입니다. 그러나 실시간 애플리케이션을 처리할 수 있는지 여부는 여전히 지연 시간, 확장성, 리소스 관리 등과 같은 다른 요인들에 달려있을 것입니다. 전반적으로, 이 시스템의 설계는 다양한 애플리케이션에서 LLM을 간편하게 활용할 수 있게 하는데 매우 유망해 보입니다.

또한, 프로그래밍 인터페이스는 프로그래밍 언어 수준에서 적용될 few-shot 학습을 위한 함수를 정의하기 위해 입력 및 출력 예시를 받아들입니다.

이 인터페이스는 두 개의 주요 API, 즉 “ask”와 “define”을 사용합니다. 개발자들은 이 타입 시스템을 이용해 합성 프롬프트와 함께 작업의 원하는 출력 타입을 지정할 수 있습니다.

연구자들은 AskIt의 성능과 정확도를 평가했습니다. 그들은 50개의 작업에서 주어진 작업에 대해 간결한 프롬프트를 생성하여 벤치마크와 비교하여 프롬프트 길이가 16.14% 줄어들었다고 발견했습니다. 또한, 상당한 속도 향상도 달성했습니다. 이러한 개선을 통해 AskIt는 소프트웨어 개발에서 LLM의 활용을 높여, 더 효율적이고 다양한 방법으로 늘어나는 능력을 효과적으로 활용할 수 있게 합니다. 팀은 TypeScript와 Python에서 AskIt을 벤치마크했고, 다양한 작업에 사용하여 코드를 생성하는 데 필요한 시간이 크게 줄어들었다는 것을 발견했습니다, 이로써 그 효과성과 운영 효율성을 입증했습니다.

Check out the Paper. The implementations of AskIt in TypeScript and Python are available here and here, respectively. 

AskIt: Unified Programming Interface for Programming with Large Language Models

이 초록은 대규모 언어 모델(Large Language Models, LLMs)을 소프트웨어 개발에 통합하는 데 관련된 도전과 해결책을 개요하고 있습니다. 여기서는 LLMs의 통합을 간소화하기 위해 설계된 도메인 특화 언어(Domain-Specific Language, DSL)인 AskIt을 소개합니다.

주요 내용

  1. LLMs의 신흥 능력: LLMs은 텍스트 요약부터 코드 생성까지 다양한 능력을 보입니다. 이들은 소프트웨어 개발에 새로운 가능성을 제공하지만, 통합 과정 역시 도전을 제시합니다.
  2. 통합의 도전점: 개발자들은 LLMs를 어떻게 최적으로 활용할지에 대해 고민합니다—이들을 직접 어플리케이션에 내장할 것인지, 아니면 코드 생성을 위해 사용할 것인지. 또한, 자연어 출력에서 데이터를 추출하기 위한 효과적인 프롬프트 디자인도 큰 문제입니다.
  3. AskIt의 해결책: AskIt은 이러한 도전을 간소화하려고 합니다. 타입을 가이드로 한 출력 제어와 템플릿 기반 함수 정의를 제공합니다. 또한, LLMs를 코드 생성에 사용하는 것과 어플리케이션에 직접 내장하는 것 사이의 경계를 흐리게 하는 통합 인터페이스를 제공합니다.
  4. 예시에 의한 프로그래밍 (Programming by Example, PBE): AskIt은 프로그래밍 언어 수준에서 ‘few-shot 학습’을 사용하여 LLMs의 더 유연하고 강력한 활용을 가능하게 합니다.
  5. 평가 결과: AskIt은 50개의 작업에서 평가되었고, 기준과 비교해서 프롬프트 길이를 16.14% 줄였다는 결과를 보였습니다. 또한, LLMs를 어플리케이션에서 직접 사용하는 것에서 함수 생성으로의 전환을 상당히 가속화했습니다. 이는 GSM8K 벤치마크 실험에서 확인되었습니다.
  6. 오픈 소스: AskIt의 TypeScript와 Python 구현은 GitHub에서 공개적으로 이용 가능합니다.

이러한 발전을 통해, AskIt은 소프트웨어 개발에서 LLMs의 사용을 더 효율적이고 다양하게 만들려고 하며, 그들의 신흥 능력을 효과적으로 활용하려고 합니다.

AskIt (pyaskit)

이 소개 섹션은 AskIt이 무엇인지와 어떻게 대규모 언어 모델(Large Language Models, LLMs)의 다양한 응용에서 사용을 단순화할 수 있는지에 대해 개요를 제공합니다.

AskIt이란 무엇인가요?

  • AskIt은 GPT-4와 같은 LLMs를 더 쉽게 사용할 수 있도록 특별히 설계된 라이브러리나 도메인 특화 언어(DSL)입니다.
  • 일반적으로 복잡한 프롬프트 엔지니어링 과정을 단순화합니다.
  • LLMs로부터의 응답을 파싱할 필요가 없어져 프로그래밍 작업 흐름을 더욱 원활하게 만듭니다.

능력

  • AskIt을 사용하면 번역, 다시 쓰기, 감정 분석과 같은 자연어 처리 작업부터 수학 문제 해결, 심지어 코드 생성까지 다양한 작업에 LLMs를 배포할 수 있습니다.

백엔드와 구현

  • AskIt은 OpenAI API를 통해 LLMs와 관련된 백엔드 기능을 처리합니다.
  • 원래는 Python을 위해 설계되었지만 TypeScript에서도 “ts-askit”이라는 버전으로 구현되어 있습니다.

요약하자면, AskIt은 LLMs의 능력을 활용하는 종합적인 해결책을 목표로 하며, 프로그래밍 언어와 작업에 걸쳐 통합의 용이성과 다양성을 제공합니다.

주요 기능

타입 가이드된 출력 제어(Type-Guided Output Control):

지정된 타입에 따른 응답을 받을 수 있습니다.

  • 프롬프트에서 출력 형식을 지정할 필요가 없습니다.
  • 원하는 출력을 추출하기 위해 응답을 파싱할 필요가 없습니다.

이러한 기능들은 대규모 언어 모델과의 상호작용을 더욱 간편하게 만들어줍니다. 특정 타입의 응답이 필요할 경우에 별도로 출력 형식을 지정하거나, 응답을 분석할 필요가 없게 되므로, 개발자는 더 직관적이고 효과적인 방식으로 모델을 활용할 수 있게 됩니다.

템플릿 기반 함수 정의(Template-Based Function Definition)

  • 프롬프트 템플릿을 사용하여 함수를 정의할 수 있습니다.

이 기능은 프롬프트 엔지니어링의 복잡성을 크게 줄여주며, 개발자가 특정 작업을 수행하기 위해 언어 모델을 더 쉽게 활용할 수 있도록 합니다. 템플릿을 통해 입력 파라미터가 함수의 파라미터와 완벽하게 일치하도록 설정할 수 있기 때문에, 코드 생성과 애플리케이션 통합 사이에 차이를 두지 않아도 됩니다. 이렇게 하면 프롬프트 템플릿을 변경할 필요 없이 두 작업 간의 전환을 간단하게 할 수 있습니다.

코드 생성(Code Generation)

  • 통합 인터페이스를 통해 함수를 생성할 수 있습니다.

이 기능은 언어 모델을 사용하여 자동으로 코드를 생성할 때 매우 유용합니다. 통합 인터페이스를 통해, 언어 모델을 직접적으로 애플리케이션에 통합하는 것과 코드를 생성하는 것 사이에 구분을 두지 않아도 됩니다. 이렇게 하면 개발 프로세스가 더욱 간소화되며, 특히 다양한 작업에 대한 코드를 빠르고 효율적으로 생성할 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다