프로덕트

아직 프로덕트가 없습니다.

아티클

전체 보기
서혁준

서혁준

MS가 불완전한 기술을 제품으로 만드는 방법

ChatGPT의 등장을 전후하여 MS는 수많은 LLM 기반 코파일럿 서비스를 발표했다.

Introducing Microsoft 365 Copilot | Microsoft 365 Blog
  • Github Copilot

  • Office Copilot

    • Outlook

    • Teams

    • Powerpoint

    • Excel

  • Bing Chat

  • Microsoft Designer

물론 OpenAI와 직접적인 투자 관계에 있는 만큼 좀 더 LLM이 가져올 변화에 빠르게 대처할 수 있었겠지만, 그럼에도 불구하고 대기업에서 이렇게 빠른 속도로 많은 서비스를 만들어냈다는 점은 경이로웠다.

당시에 프라이머의 GenAI 해커톤에 내볼 아이디어를 친구들과 고민하고 있었는데, 이메일 관리 코파일럿 서비스를 만들어보자라고 한 지 3일도 안되어서 MS와 구글에서 해당 서비스를 포함해 수많은 생성형 AI 서비스를 쏟아내는 것을 보고 충격과 감탄에 휩싸여 있었다.

지난번 글에 달렸던 댓글 중 하나인데, 이 댓글의 내용처럼 LLM 기술은 완전하지 않다. 제 아무리 GPT-4라 하더라도 파악해야 하는 맥락이 애매하거나, 바뀌는 경우 만족스러운 답변을 내놓지 않는 경우가 많다.

예를 들어 ChatGPT에게 농담을 시키다가 갑자기 진지한 대화를 하자고 하면 잘 하지 못하고, 새로운 채팅을 시작하는 편이 나을 수 있는 것처럼 말이다.

LLM 기술의 TRL (Techonolgy Readiness Level, 기술 준비도)는 다른 기술에 비해서 낮은 편이다. 이러한 기술의 불완전함을 MS에서는 어떻게 극복하여 제품으로 만들어낼 수 있었을까?

AI 코파일럿 서비스를 어떻게 만들어야 할까?

지난 5월, MS의 CTO 케빈 스캇은 이렇게 많은 서비스를 짧은 시간에 만들어낼 수 있었던 이유는 “잠시 멈춰서서 여러 Copilot 서비스들의 공통적인 점과 이를 위한 기술 스택을 정의할 시간을 가졌기 때문이다” 라고 말했다.

So the only reason that we have been able to do this sort of blitz of Copilot announcements, and delivering these products to users so quickly, is because we stopped and took the time and energy to go build a Copilot technology stack that would allow us to move quickly with safety.

고민의 시간을 가지고 나서 MS에서 내놓은 AI Copilot 서비스의 구조는 다음과 같다.

기존 서비스 구조와 같이 프론트엔드 + 미들 레이어(AI 오케스트레이션) + 백엔드(모델 레이어) 로 구성되어 있는 것을 볼 수 있는데, 여기서 가장 주목할 만한 부분은 AI 오케스트레이션 레이어이다.

AI 오케스트레이션 레이어는 코파일럿의 비즈니스 로직을 담당하는 레이어로, 어떤 모델이나 플러그인들을 어떤 순서로 호출할지 등을 결정하고 담당한다.

이를 위한 프레임워크로 MS에서는 Semantic Kernel을 오픈소스로 공개했으며, 이 외에도 Langchain 등이 있다.

LLM을 위한 아키텍쳐가 완벽하게 자리잡지 않은 만큼 둘 다 활발하게 개발되고 있는데, 이 둘이 공통적으로 취하는 전략은 “여러 단계의 프롬프트를 연속적으로 Chaining” 하는 것이다.

이를 좀 더 쉽게 말하자면, 작업을 시킬 때 한번에 모든 작업을 시키는 것이 아니라
작업을 여러개의 명확한 작은 작업으로 나눠서 그 결과를 연속적으로 연결시킨다는 뜻이다.

이에 대한 예시로 팟캐스트 대본을 가지고 SNS 홍보자료를 만드는 코파일럿 서비스를 생각해 보자.

  • 주어지는 입력 : 팟캐스트 대본

  • 원하는 결과 : 링크드인에 팟캐스트를 홍보하기 위한 이미지 + SNS 글

이 서비스에서는 홍보용 자료를 한번의 프롬프트를 이용하여 생성하는 것이 아니라 아래와 같이 작은 여러개의 단계로 나눠서 각각을 다른 모델 / API 를 활용하여 처리한다.

  1. Whisper 모델로 녹음 → 대본으로 변환

  2. Dolly 2.0 모델을 이용하여 게스트 이름 추출

  3. Bing Search API 를 이용하여 게스트에 관련한 정보 추출

  4. GPT-4를 이용하여 홍보용 아티클 생성

  5. DALL-E 2를 이용하여 이미지 생성

이렇게 작은 Step으로 나눌 경우 LLM에게 주어지는 태스크가 좀 더 명확해지기 때문에 좀 더 좋은 결과를 생성할 수 있다는 장점이 있다.

또한 매 작업에 높은 성능의 GPT-4 를 사용하는 것이 아니라, 더 빠르고 비용이 더 낮은 모델들을 사용할 수 있다는 점에서 좀 더 경제적이고 빠른 어플리케이션을 만들 수 있다.

Langchain과 Semantic Kernel 모두 “복잡한 작업을 연속적인 여러개의 작업으로 나누는” 것을 프레임워크의 기본 뼈대로 채택하고 있는데, 이를 Chaining 이라고 부른다.

Passing data with $input in Semantic Kernel

순차적인 작업을 통해 “농담 → 시 → 음식 메뉴” 를 만들어내는 예시

하지만 단순히 여러 모델을 Chaining 하는 것만으로는 우리가 기대하는 LLM의 잠재력을 온전히 끌어냈다고 볼 수 없다.

AI Orchestration framework에서는 올해 초 개발 유튜브를 뜨겁게 달궜던 AutoGPT와 유사하게, 유저가 미리 정해놓은 Chain대로 작업을 수행하는 하는 것 뿐만 아니라 “주어진 Task에 대한 설명을 보고 LLM이 직접 해당 작업을 수행할 세부 단계를 계획” 하는 것 또한 가능하다.

이 기능을 Semantic Kernel에서는 Planner, Langchain에서는 Agent라고 지칭하고 있는데,
아래와 같은 프롬프트를 이용하여 주어진 작업에 대한 수행 계획을 생성한다.

Create an XML plan step by step, to satisfy the goal given.
To create a plan, follow these steps:
0. The plan should be as short as possible.
1. From a <goal> create a <plan> as a series of <functions>.
2. Before using any function in a plan, check that it is present in the most recent [AVAILABLE FUNCTIONS] list. If it is not, do not use it. Do not assume that any function that was previously defined or used in another plan or in [EXAMPLES] is automatically available or compatible with the current plan.
3. Only use functions that are required for the given goal.
4. A function has a single 'input' and a single 'output' which are both strings and not objects.
5. The 'output' from each function is automatically passed as 'input' to the subsequent <function>.
6. 'input' does not need to be specified if it consumes the 'output' of the previous function.
7. To save an 'output' from a <function>, to pass into a future <function>, use <function.{FunctionName} ... setContextVariable: "<UNIQUE_VARIABLE_KEY>"/>
8. To save an 'output' from a <function>, to return as part of a plan result, use <function.{FunctionName} ... appendToResult: "RESULT__<UNIQUE_RESULT_KEY>"/>
9. Append an "END" XML comment at the end of the plan.

이외에도 LLM의 메모리 역할을 할 수 있는 Vector Database 연동 기능 등을 제공한다. (이 부분에 대해서는 추후 소개하도록 하겠다.)

두 프레임워크 중 Langchain이 압도적으로 많은 관심을 받고 있지만, Semantic Kernel 또한 MS의 지원을 받으면서 좋은 기능들을 많이 선보이고 있으므로 관심이 있다면 공식문서를 꼭 읽어보길 바란다. (개인적으로 공식문서는 Semantic Kernel이 더 좋은 것 같다.)

어떻게 불완전한 기술을 이용할 것인가?

그래서 제목에서 했던 질문인, “MS는 어떻게 불완전한 기술을 이용해 좋은 제품을 만드는가?” 에 대한 답은 무엇이었을까?

  1. 복잡한 Task를 작은 단계로 나누기

  2. 불확실한 결과가 예상되는 작업에 대해서 에러 핸들링을 더 신경쓰기

  3. 코파일럿 서비스를 위한 UX가 무엇인지 더 고민하기

  4. 서비스 간 공통적인 부분이 무엇인지 결정하고 모듈화하기

  5. …

무언가 Fancy한 정답을 기대했다면 실망했을 것이다. 하지만 결국 좋은 제품을 만들어내는 것은 불확정성을 줄이고, 우직하게 해야 할 일들을 해내는 데에 있다고 생각한다.

빌 게이츠가 2022년 8월, GPT-4의 첫 시연을 본 이후 OpenAI와 MS의 관계자들에게 한 말과 함께 이번 글을 마친다.

We should be more ambitious taking advantage of this breakthrough, even with the imperfections that we’re going to reduce over time.
- Bill Gates -


앞으로도 LLM 등의 기술에 대해서 글을 써볼 생각입니다!

substack을 통해서 이메일로도 받아보실 수 있으니, 괜찮으셨다면 구독해 주시면 감사하겠습니다 :)

6
1
서혁준

서혁준

도구를 든 AI == ?

OpenAI에서 최근 ChatGPT API에서 사용할 수 있는 “Function Calling” 이라는 기능을 공개했다.

업데이트의 주요 내용은 ChatGPT API를 사용할 때 “functions” 라는 파라미터로 GPT가 사용할 수 있는 기능들의 목록을 제공하면 GPT의 자의적인 판단 하에 해당 기능을 사용하는 것이다.

예를 들어 “웹 검색하기 : 검색하고자 하는 키워드를 제공하면 검색결과를 반환한다” 라는 정보를 GPT에 제공하고, “현재 한국의 대통령이 누구지?” 라는 질문을 한다면

GPT가 이 정보를 대답하는데에 있어 스스로 웹 검색이 필요하다 판단하고 “웹_검색(검색어 : ‘현재 한국의 대통령은?’)” 처럼 직접 검색 도구를 사용하는 식이다.

그래서 이게 왜 중요한데?

한때 유행했었던 “세종대왕 맥북 던짐 사건에 대해 알려줘” 밈을 기억하는가?

이처럼 ChatGPT가 답을 지어내는 걸 “Hallucination” 이라고 하는데, AI가 정해진 지식의 범위 안에서 주어진 질문에 대해 최대한 “그럴듯한” 답을 만들어 내기 때문에 발생한다.

ChatGPT를 이용해서 실제 서비스를 만드는 입장에서는 굉장히 곤란한 문제인데, 민감한 정보나 문제될만한 내용들을 지어내는 것을 통제할 수 없다라고 한다면 신뢰성있는 서비스를 구축할 수 없기 때문이다.

GPT와 같은 LLM(Large Language Model)이 겪는 Hallucination 문제를 해결하기 위해 제시되고 있는 방법 중 하나가 Augmented LM, 즉 “도구를 든 AI” 이다.

ALM : Augmented Language Model

ALM은 GPT와 같은 언어모델이 사용할 수 있는 외부 도구를 제공함으로서 더 좋은 답변을 생성하도록 하는 방식이다.

Meta AI (구 Facebook AI) 에서는 2023년 2월에 Toolformer 라는 논문을 공개했는데, 해당 논문에서 모델은 계산기, 검색 엔진, 달력 등의 사용법을 스스로 학습하여 자신의 성능을 높이는 데에 사용할 수 있었다.

실제로 연구진은 GPT-3(1750억 파라미터)보다 훨씬 작은 GPT-J(65억 파라미터) 모델을 가지고 도구 사용을 학습시켰을 때, GPT-3 보다 더 나은 성능을 보였다고 말한다.

이처럼 ChatGPT의 Function Calling은 이처럼 우리가 GPT에게 그가 좀 더 많은 일을 할 때 사용할 수 있는 “도구” 를 쥐여주는 기능이라고 할 수 있는 것이다.

ALM을 어떻게 활용할 수 있을까?

도구를 든 AI를 우리가 어떻게 활용할 수 있을까?

a16z 블로그에서 소개한 "Using Generative AI to Unlock Probabilistic Products" 라는 글의 내용에서 방법을 찾아보자.

해당 글에서는 제품을 먼저 3단계로 나누라고 조언한다.

  • LLM의 확률적인 특성(매번 답이 약간 달라지는 특성) 이 도움이 되는 기능
  • 어느정도 확률적이어도 상관없는 기능
  • 항상 동일한 결과를 도출해야 하는 기능 = GPT와 같은 LLM이 잘 못하는 일들

그리고 이 중 확률적인 결과를 사용해도 괜찮은 기능에 대해서 LLM을 활용하라고 조언한다.

ALM의 발전은 여기서 좀 더 나아가 LLM이 잘 못하는 일들에 대해서 API 로 제공해주기만 한다면 LLM의 자체 판단으로 적절한 도구를 선택하여 결과를 제공하는 것에 대한 가능성을 열어준다.

한계점은 없을까?

여기까지만 본다면 전지전능한 AI가 도구까지 갖췄으니 이제 인간세계의 멸망밖에 남지 않았나? 할 수 도 있겠지만 아직까지 한계점도 명확하다.

AI 를 서비스화하는 입장에서는 이러한 한계점들을 서비스적으로 어떻게 풀어나갈지가 숙제가 될 것이다.

이러한 한계점에도 불구하고, 도구를 자체적으로 판단하여 사용할 수 있는 AI의 등장은 앞으로의 미래에 큰 영향을 미칠 것이라 확신한다.

도구의 사용이 인류 진화를 가능케 한 원동력이라는 주장에 힘을 실어준 루시의 사진과 함께 이름의 유래가 된 비틀즈의 노래를 마지막으로 글을 마친다.

url thumbnail

Lucy In The Sky With Diamonds (Remastered 2009)

Provided to YouTube by Universal Music GroupLucy In The Sky With Diamonds (Remastered 2009) · The BeatlesSgt. Pepper's Lonely Hearts Club Band℗ 2009 Calderst...

https://youtu.be/naoknj1ebqI


---

앞으로도 LLM 등의 기술에 대해서 글을 써볼 생각입니다!

substack을 통해서 이메일로도 받아보실 수 있으니, 괜찮으셨다면 구독한번 해주시면 감사하겠습니다 :)

url thumbnail

Red Giant | Antares | Substack

LLM, AI 관련 다양한 기술(논문, 프레임워크, API) 에 대한 소개 및 리뷰를 보내드립니다. Click to read Red Giant, by Antares, a Substack publication. Launched 3 days ago.

https://devantareskor.substack.com/?r=2j0m2z&utm_campaign=pub&utm_medium=web




9
5

포스트

아직 포스트가 없습니다.