안녕하세요. 7기 랭체인 스터디 파트너 곽은철입니다.
이번 스터디를 기획하고 주변에 알리면서 가장 많이 들은 질문이 Langchain이 뭔가요? 뭘 할수있나요? 였습니다.
그래서 Langchain이 무엇이고 무엇을 할수있는지 찾아보고 정리한 내용을 첫 발표 주제로 선정했습니다.
먼저 ChatGPT(default 모드)에게 물어보면 모른다고 답합니다.
Langchain공식 문서에는 다음과 같이 소개하고 있습니다.
LangChain is a framework for developing applications powered by language models. It enables applications that:
Are context-aware: connect a language model to sources of context (prompt instructions, few shot examples, content to ground its response in, etc.)
Reason: rely on a language model to reason (about how to answer based on provided context, what actions to take, etc.)
The main value props of LangChain are:
Components: abstractions for working with language models, along with a collection of implementations for each abstraction. Components are modular and easy-to-use, whether you are using the rest of the LangChain framework or not
Off-the-shelf chains: a structured assembly of components for accomplishing specific higher-level tasks
Off-the-shelf chains make it easy to get started. For complex applications, components make it easy to customize existing chains and build new ones.
한줄로 요약하면, Langchain은 LLM으로 구동되는 애플리케이션을 개발하기 위한 프레임 워크입니다.
복잡한 작업을 단일 LLM(Lang)으로 해결하기보다 이를 연결(chain)함으로서 복잡하고 어려운 작업을 할수있게 돕는 프레임 워크입니다.
그래서 langchain은 단독으로 사용하는 것이 아니라 사용자가 요구하는 방향에 따라 다양한 모델을 langchain으로 사용하게 됩니다.
따라서 langchain은 중개자라고 생각합니다.
그래서 Langchain으로 할수있는것이 무엇일까요?
정확하게는 langchain과 llm을 결합하여 사용하면 할수있는것이 무엇일까요?
기본적으로 langchain이 이야기하는 기능은 다음과 같습니다.
Model I/O(모델 I/O)
언어 모델의 사용을 쉽게하는 인터페이스를 제공합니다.
다양한 언어 모델의 사용을 통일된 방식으로 사용할수 있게 도와줍니다.
Retrieval(검색)
필요한 데이터를 검색,반환합니다.
Chains(체인)
다양한 llm과 기능들을 연결하여 더 복잡하고 복합적인 문제를 해결합니다.
Agents(에이전트)
체인이 주어진 상위 수준 지시어에 따라 사용할 도구를 선택하도록 합니다.
예를들어 코드를 직접 실행시키는 역할과, 결과를 보도 수정하는 디버깅 역할을 만들어 둘을 연결하면 프로그램이 완성될때까지 질문과 답변을 주고받게 할수있습니다. 혹은 입력받은 내용을 인터넷에 검색하기위해 검색을 담당하는 API를 호출할수도 있습니다.
Memory(메모리)
체인과 체인 사이의 상태(과정,결과같은)를 유지합니다. 이 과정에서 생성되는 상태를 저장해두면 이후 원하는 상태에서 서비스를 시작할수있게 됩니다. 대화형 챗봇이라면 이전 대화를 기억하는 챗봇을 만들수있습니다.
Callbacks(콜백)
모든 체인의 중간 단계를 기록하고 중계합니다.
주로 다음과 같은 용도로 많이 사용됩니다.
대화, 문서, 데이터를 기반으로한 챗봇
이전 대화내용을 기억하는 챗봇을 만드는것은 생각보다 어렵습니다. 처음 한두번의 대화내용은 입력과 출력을 모두 다음 프롬프트에 추가하면 되지만, 몇번의 반복만으로도 엄청난 양의 대화내용이 쌓이고 이는 필연적으로 제한토큰을 넘어서는 결과로 이어집니다. 이를 해결하기위해 처음 입력한 대화내용부터 차례차례 삭제하는 과정을 거치면 결국 앞서 대화한 내용은 잊게 됩니다. 하지만 대화내용을 주기적으로 llm을 이용해 백터db에 저장함으로서 이 문제를 일정부분 극복할수 있고, 나아가 미리 데이터를 저장해둠으로서 사용자가 원하는 데이터와 상호작용하게도 할수있습니다.
인터넷 검색, 내부 데이터 탐색등을 기반으로한 챗봇
GPT의 경우 21년 이후의 데이터가 없다보니 새로운 내용은 결국 검색을 해야합니다. 하지만 검색을 지원하는 api혹은 기능과 연결하여 사용하면 이 문제를 일정부분 해결할수있습니다. 마찬가지로 내부 문서나 혹은 자료를 찾고 가져와 정리하는 일도 langchain과 llm을 사용하면 해결할수있습니다.
내부 기능(함수 혹은 프로그램)을 호출하고 입력, 출력 결과를 바탕으로 반복 작업을 하는 봇
Langchain Docs에서는 이 기능에 대해서는 주의를 남기고 있습니다. 함수나 프로그램을 스스로 호출하는 봇을 만들고 이 결과를 바탕으로 다음 행동을 하는 봇을 구현하는것은 가능하지만 이 과정에서 시스템의 안전은 보장할수 없다고 합니다.
하지만 이런 기능을 활용하면 ChatGPT의 ADA와 같은 기능도 구현이 가능합니다.
따로따로 설명드렸지만 사실 이 모든 기능은 llm과 langchain을 연결함으로 가능한 경우의 수 중 하나입니다.
짧은 하나의 포스트로는 langchain을 이해하기에는 다소 무리가 있지만 langchain이 무엇인지 간략하게 알아보는데에는 충분하다고 생각합니다.
처음부터 ai모델을 학습시키고 개발할수있도록 배울수 있다면 가장 좋겠지만, 현실적으로 이는 너무 난의도가 높고 시도하기 어렵다고 생각합니다.
그래서 현실적인 수준에서 생성형ai를 개인의 프로젝트에 적용하는 전략은
처음에는 ChatGPT, 빙챗, 바드와 같은 완전히 완성된 제품을 사용하는 것이고, 그 다음이 API를 활용해 개인의 프로젝트에 적용하는 것이라고 생각합니다. 그이후에 API사용만으로 한계를 느끼거나 불편함을 느끼는 시점에 Langchain과 같은 생성형ai 프레임 워크를 선택하시면 됩니다.
기발하고 창의적인 방식으로 여러 모델과 기능을 연결하여 자신만의 독특한 애플리케이션을 완성하시길 기원합니다!