Agent
Chain은 이미 정해진 처리 과정에 따라 작업을 수행하지만, agent는 llm의 응답에 따라 작업을 선택적으로 수행합니다.
AgentExecutor
는 agent의 실행 계획을 실행합니다.
ZeroShotAgent
는 주어진 tool들과 질문을 바탕으로 실행 계획을 세우는 프롬프트를 작성하고 LLM에 요청합니다.
LLM은 주어진 프롬프트에 따라, 질문에 대한 답을 얻어내기 위해 필요한 tool을 선택하고 tool에 전달할 적절한 입력값도 생성합니다.
이 과정을 반복해서 질문에 대한 최종 답을 얻어냅니다.
보여준 예시에서는 Olivia Wilde의 남자친구가 누구이고, 그의 나이에 0.23 제곱을 하라
(Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?)라는 질문을 전달합니다.
또한, 해당 문제를 풀 때 사용할 수 있는 tool을 전달하는데, 각 툴은 식별자와 설명 정보를 가집니다.
ZeroShotAgent
는 이 툴둘의 식별정보와 설명을 포함하고 이 툴들을 사용해서 주어진 문제를 풀 수 있는 Action
과 해당 action의 입력 값을 최종 답이 나올 때 까지 LLM에 프롬프트를 전달합니다.
다소 도전적인 요청 같았는데도, OpenAI는 적절하게 구글 검색 툴을 선택해서 Olivia Wilde boyfriend
라는 검색어를 전달합니다.
AgentExecutor
는 LLM이 선택한 tool과 그 입력 값을 바탕으로 GoogleCustomSearch
를 선택하여 검색 요청을 하고 그 결과를 받습니다.
검색 결과는 ZeroShotAgent
에서 다룬 프롬프트 패턴에 맞추어 다시 OpenAI LLM에 전달하여 다음 action을 선택하도록 프롬프트를 전달합니다.
최종적으로는 Calculator
에 연산에 필요한 입력 36 ^ 0.23
을 전달합니다. 즉 LLM은 구글 검색 결과를 기반으로 Olivia Wilde의 남자친구의 나이가 36임을 알아내고 0.23
승수의 답을 얻어낼 수 있는 계산식을 만들어 냅니다.
마치며
langchain js의 예제를 분석하면서 model, prompt, indexing, memory, chain, agent 등의 개념을 살펴 보았습니다. 전반적으로 문제 해결의 정답을 찾는다기 보다는 LLM 활용을 위한 에코시스템을 적절히 추상화하고 확장 가능하도록 설계한 것으로 보입니다. 아직 다듬어지지 않은 개념과 시도로 인해 코드가 다소 복잡하고 때론 모호하게 느껴질 때도 있었고 그만큼 고민과 삽질(?)의 흔적이 보였습니다.
결과적으로는 langchain의 역할은 크게 2가지 인 것 같습니다.
프롬프트 엔지니러링 툴
지금까지 살펴 보았듯이, langchain 추상화는 prompt 템플릿을 만들고 그 응답을 적절히 파싱하는데 기반하고 있습니다.
복잡도가 높은 작업들은 특정 prompt 템플릿을 기반으로 질문하고, 다시 prompt 템플릿에 그 질문에 대한 답을 붙여 질문하고를 반복하는 것을 알 수 있습니다. chain은 이러한 작업들의 추상화 개념이고 LLM만으로 처리할 수 없는 다양한 작업을 tool을 통해 추상화 하여 agent로 이를 처리하도록 설계하였습니다.
Vector DB 연동
Foundation 모델로서 LLM은 기존 상태 의존 없이 질의를 할 수 있습니다. 하지만 개개인의 실생활에 밀접한 문제해결을 위해서는 개인화한 데이터와 컨텍스트를 유지하고 질의할 필요가 있습니다. Foundation 모델은 일종의 CPU로서 사용하고 각 사용자에 특화된 데이터를 저장하는 indexing 추상화 레벨을 제공합니다.
indexing은 각 LLM에서 가지고 있는 embedding 구현에 따라 일반적인 거리 연산이 가능한 vector 값으로 저장하는 추상화 레벨입니다.
langchain은 다양한 vector store 구현체와 연동할 수 있는 인터페이스를 제공합니다.
맺음말
SF 영화 처럼 실생활에서 정답을 말해주고 추천해주는 foundation model은 당장은 힘들지도 모릅니다.
반면 여러 분야에 특화된 인공지능을 개발하기 위해서는 전문인력과 자원이 필요했습니다. 현 수준의 foundation model은 특화된 데이터와 아이디어를 가지고 국부적인 문제를 해결할 수 있는 AI를 손쉽게 구현할 수 있습니다. 다시말해 질문의 답을 어떻게 찾을 것인가가 아닌 질문 그 자체의 아이디어만 가지고 문제해결이 가능한 방법이 생긴 것 입니다.
langchain은 이러한 미션을 해결해 줄 수 있는 오픈소스 에코시스템을 제시하고 있습니다. 그리고 스타트업에서 부터 엔터프라이즈까지 다양한 분야의 데이터와 문제해결을 위해 LLM을 활용하고자 한다면 단연 langchain이 첫번째 검토 대상이 될 것입니다.
최근 OpenAPI 4의 API 사용이 GA 단계로 접어들었다고 합니다. 앞으로도 이 분야에서 재미있고 설례는 소식을 기대해 봅니다.