[reinvent 2024] 도구 사용 및 최전선의 에이전트: LLM 작업을 위한 고급 기술

Summary

LLM은 학습된 내용 외에 무언가 추가로 데이터를 활용할 수는 없습니다. LLM은 이러한 단점을 극복하기 위해 Tool과 Agnets를 사용하여 API 및 실시간 시스템에 접근할 수 있고 이를 통해 추가적인 데이터를 활용한 답변을 할 수 있습니다. 고급 프롬프트 엔지니어링과 시스템 설계를 통해 Amazon Bedrock의 Anthropic Claude 모델을 사용하여 Tool 및 Agents를 활용하는 방법을 확인해봅니다.


리인벤트 2024 테크 블로그의 더 많은 글이 보고 싶다면?

Tech Blog

AWS re:Invent 2024 Tech Blog written by MegazoneCloud

Overview

  • Title: Tool use & agents at the frontier: Advanced techniques for LLM actions
  • Date: 2024년 12월 4일(수)
  • Venue: Wynn | Convention Promenade | Latour 2
  • Speaker:
  • John Baker(Principal Engineer, Amazon Web Services (AWS))
  • Nicholas Marwell(Member of Technical Staff, Anthropic)
  • Industry: Cross-Industry Solutions

들어가며

지난 한 해 동안 LLM은 믿을 수 없을 만큼 빠른 속도로 발전해 왔습니다. 이제는 그러한 모델을 사용한 자동화의 가능성이 실현되고 있습니다. 이번 세션에서는 Tool과 Agents를 프롬프트 엔지니어링과 연계하는 LLM 활용 기술에 대해 알아보겠습니다.

LLM의 발전과 문제해결 능력

초기 LLM은 단순히 텍스트로 묻고, 텍스트로 답하는 것 뿐이었습니다. 텍스트로 질문을 던지면, 이미 학습된 내용 중 해당 텍스트에 맞는 내용을 답변하는 방식이었습니다. 이처럼 LLM은 이미 학습된 내용 이외의 내용이나 새롭게 생긴 정보에 대해선 알 방법이 없었습니다. 이후 RAG의 발전으로 학습되지 않은 정보에 대한 답변 역시 가능해졌습니다만 이 역시 어느정도 정리된 Documents가 있어야 가능했습니다. 하지만 이제는 달라졌습니다. Agents나 Tool을 사용해서 진정한 실시간 정보를 사용한 답변이 가능해졌습니다.

LLM의 한계는 명확했습니다. 단순한 산수 문제에 대해서도 두자릿수 산수는 완벽했지만 세자리, 네자리 등 자릿수에 따라 정확도가 천차만별이었습니다. 그 원인은 바로 학습 데이터 자체에 두 자릿수 데이터가 대부분이었기 때문입니다. 이를 통해 LLM은 아주 단순한 문제에 대해서도 학습한 내용이 없다면 답변 정확도가 떨어질 수 있음을 확인했습니다 (2022 MRKL Paper). 그래서 우리는 Tool 이라는 개념을 도입하여 높은 정확도를 달성하고자 합니다.

Balloon Effect(풍선효과)

앞서 우리는 Tool을 통해 학습하지 않은 데이터 및 실시간 데이터에 대한 응답을 할 수 있도록 개선하였습니다. 그럼 이제 모든게 완벽할까요? 그렇지 않습니다. 하나의 문제를 해결 했더니 또 다른 문제가 여기저기서 생겼습니다. 마치 한쪽을 누르면 반대쪽이 부풀어 오르는 풍선 처럼.

첫 번째 문제는 Hallucination입니다. 예를 들어, “당신은 계산기가 있습니다. 수학 질문을 하면 계산기를 사용하고, 계산기를 사용할 때 ‘계산, 식, 숫자, 숫자’ 형태로 응답하세요” 라고 한다면 LLM은 계산기 Tool을 사용하여 정답을 출력하는 것이 아닌, 새로운 출력 형태를 가진 ‘계산기 같은 것’ 을 만들어 답변을 출력합니다.

두 번째 문제는 Prompt Injection 입니다. 모든 정보를 하나의 프롬프트에 담기에 사용자가 Tool에 대해 질문을 한다면 노출되지 않아야 할 정보까지 답변에 포함될 수 있습니다.

세 번째 문제는 과도한 입출력입니다. 여러 정보를 프롬프트에 담다보니 입력 토큰의 양이 많아지고, 그로 인해 지연시간이 길어졌으며 응답이 일관되지 않아 답변 파싱을 위해 특정 구문이 필요하여 출력토큰까지 많아졌습니다.

Function Call

Tool Use가 Tool을 사용하는 방식에 대한 내용이라면 Function Call은 Tool Use를 어떻게 구현할 것인가? 에 대한 내용입니다. 기본적인 작동 방식은 다음과 같습니다.

  1. Tool만을 위한 특별한 문구를 시스템 및 사용자 질문과 별개의 부분으로 추가합니다.
  2. 모델은 Tool이 제공되면 사용할 수 있도록 학습되어있어야 합니다.
  3. Stop reason은 파싱이 쉬워야합니다.

Function Call은 다음 순서로 작동합니다.

기본적으로 프롬프트 내에 Function Call을 위한 Syntax를 추가하고, 사용 가능한 function을 명시합니다.

사용자 메시지를 포함하여 Model Invoke를 하면,

모델은 Function Call 구문으로 답변합니다.

모델의 응답 텍스트를 통해 응답 구문이 Function Call 관련인지 체크합니다.

응답 구문이 Function Call 관련이면 특정 API를 Call 합니다.

API를 통해 데이터를 수집하고 다시 한번 모델에게 정보를 전달합니다.

최종적으로, 모델은 실시간 정보가 포함된 응답을 출력합니다.

물론, Tool Use (Function Call)와 agents는 동시에 활용 가능합니다.

결론

일반적으로 생성형 AI에 활용하는 RAG 기법은 선제적으로 문서가 정리되어 특정 DB에 저장되어야 했습니다. 하지만 이번 세션에서 확인한 Agent 및 Tool을 활용한 방법은 별도의 작업 없이  실시간 데이터를 활용할 수 없는 LLM에 실시간 데이터를 제공하여 복잡한 문제에 대해 고도화된 응답을 할 수 있도록 함에 있어 RAG 기법보다 즉각적인 활용 및 수정이 가능할 것으로 생각됩니다. Tool과 Agents를 적용하는 과정에서 코드실행 과정 및 기타 컨텍스트가 추가됨에 따라 기존에 없던 환각현상, Prompt Injection 등 새로운 문제가 발생할 수 있습니다만, 이러한 여러 문제점들이 발생한다고 하더라도 Tool과 Agents는 앞으로 LLM의 성능 향상 및 워크로드 효율화에 중요한 역할을 할 것으로 기대됩니다.

글 │메가존클라우드, AI & Data Analytics Center (ADC), Data Engineering 2 Team, 정지원 매니저
게시물 주소가 복사되었습니다.