- 이 세 가지 요소는 언어 모델 기반의 응용 프로그램을 만들 때 핵심적인 역할을 하며, 입력(프롬프트), 처리(언어 모델), 출력(출력 파서)의 과정을 통해 원하는 결과를 얻을 수 있도록 도와줍니다.
Prompts (프롬프트):
프롬프트는 언어 모델에게 작업을 요청할 때 제공하는 입력입니다. 사용자가 원하는 응답을 얻기 위해 모델에 주는 질문이나 지시문이라고 생각하면 됩니다. 프롬프트의 형식이나 내용을 어떻게 구성하느냐에 따라 모델의 출력이 크게 달라지기 때문에, 프롬프트 설계는 매우 중요한 과정입니다.
예: "서울의 현재 날씨는 무엇인가요?"와 같은 문장이 프롬프트입니다.
Language models (언어 모델):
언어 모델은 입력된 프롬프트를 기반으로 텍스트를 생성하는 AI 시스템입니다. GPT와 같은 대형 언어 모델은 방대한 양의 데이터로 학습하여 다양한 언어적 작업을 수행할 수 있습니다. 사용자의 질문에 답변하거나, 텍스트를 요약하거나, 번역하는 등 다양한 기능을 제공합니다.
예: GPT-4와 같은 모델이 이 언어 모델의 예시입니다.
Output parsers (출력 파서):
출력 파서는 언어 모델이 생성한 출력을 해석하거나 필요한 형식으로 변환하는 도구입니다. 언어 모델이 생성한 결과를 구조화된 데이터 형식(예: JSON)으로 변환하거나 특정 패턴을 따르도록 출력 데이터를 처리합니다. 이를 통해 모델의 출력을 더 쉽게 활용할 수 있습니다.
예: 언어 모델이 생성한 텍스트에서 특정 값을 추출해 숫자나 날짜 형식으로 변환하는 작업을 수행하는 것이 출력 파서의 역할입니다.
2. Retrieval
- 사전 학습된 데이터 이외의 사용자별 데이터를 쉽게 다룰 수 있도록 하는 기능
- Retrieval(정보 검색)은 언어 모델이 외부 데이터를 검색하여 필요한 정보를 찾아내는 과정에서 중요한 개념
- 데이터 수집, 전처리, 검색 등 일련의 흐름을 쉽게 구현할 수 있는 5가지 기능 제공
- 이 과정은 대량의 데이터를 효과적으로 검색하고, 의미적으로 유사한 정보를 찾아내는 데 중요한 역할을 합니다. 이를 통해 대규모 데이터 속에서 원하는 정보를 빠르고 정확하게 얻을 수 있습니다.
Document loaders (문서 로더):
문서 로더는 외부 소스에서 데이터를 불러오는 역할을 합니다. 예를 들어, PDF 파일, 데이터베이스, 웹 페이지, 또는 텍스트 파일 등의 다양한 형식의 문서를 로드하여 언어 모델이나 검색 시스템이 사용할 수 있도록 준비합니다.
예: PDF에서 텍스트를 추출하여 분석에 사용하거나, 데이터베이스에서 필요한 데이터를 가져오는 과정입니다.
Document transformers (문서 변환기):
문서 변환기는 로드된 문서를 적절한 형식으로 변환하는 도구입니다. 예를 들어, 긴 문서를 여러 부분으로 나누거나, 텍스트를 요약하여 언어 모델이 더 쉽게 처리할 수 있도록 변환합니다. 문서를 분석하기 위한 전처리 단계라고 할 수 있습니다.
예: 긴 문서를 챕터별로 나누거나 요약하는 기능이 포함될 수 있습니다.
Text embedding models (텍스트 임베딩 모델):
텍스트 임베딩 모델은 문서나 텍스트 데이터를 벡터(숫자 배열)로 변환하는 모델입니다. 벡터는 고차원 공간에서 표현되며, 유사한 의미를 가진 텍스트는 벡터 공간에서 서로 가까운 위치에 놓이게 됩니다. 이를 통해 문서 간의 유사도를 비교하거나 검색 시스템에서 빠르게 관련 정보를 찾는 데 사용됩니다.
예: "고양이"와 "동물"이라는 단어는 벡터 공간에서 가까운 위치에 있게 되며, 이와 같은 관계를 이용해 의미적으로 유사한 정보를 찾습니다.
Vector stores (벡터 스토어):
벡터 스토어는 임베딩된 벡터를 저장하고, 벡터 간의 유사도를 계산하여 유사한 문서를 빠르게 검색할 수 있도록 하는 데이터 저장소입니다. 벡터 스토어는 주로 텍스트, 이미지, 문서 등의 데이터를 벡터로 변환하여 저장한 후, 사용자의 질의와 유사한 벡터를 찾아주는 역할을 합니다.
예: 사용자가 특정 질문을 했을 때, 가장 관련 있는 문서의 벡터를 찾아주는 데이터베이스입니다.
Retrievers (리트리버):
리트리버는 벡터 스토어에서 사용자의 질문이나 요청과 관련된 문서 또는 데이터를 검색하는 역할을 합니다. 사용자가 제공한 질의문을 벡터로 변환하고, 벡터 스토어에 저장된 데이터 중에서 가장 유사한 벡터를 찾아내어 관련 문서를 반환하는 검색 기능을 수행합니다.
예: 사용자가 "최근 기후 변화에 관한 연구"라는 질의를 입력하면, 관련된 연구 문서를 검색하여 반환합니다.
3. Chains (체인)
체인은 여러 작업(또는 단계)을 순차적으로 연결하여 처리하는 것을 말합니다. 한 작업의 결과가 다음 작업의 입력이 되는 방식입니다. LangChain에서는 이러한 체인을 쉽게 설정할 수 있도록 해주며, 각 단계마다 텍스트 생성, 변환, 검색 등의 다양한 기능을 수행할 수 있습니다.
예: 먼저 문서를 요약한 후, 요약된 내용을 질문에 따라 분석하는 프로세스를 체인으로 구성할 수 있습니다. 이때, 프롬프트 설계와 언어 모델의 출력이 단계별로 연결됩니다.
4. Agents (에이전트)
에이전트는 특정 작업을 수행하기 위해 다양한 도구나 API와 상호작용할 수 있는 역할을 담당합니다. 에이전트는 주어진 프롬프트에 따라 자동으로 적절한 도구를 선택하여 작업을 수행하고, 그 결과를 모델에 전달합니다. 예를 들어, 에이전트는 데이터베이스에서 데이터를 검색하거나 외부 API와 통신하여 필요한 정보를 얻을 수 있습니다.
사용자 입력에 따라 LLM과 다른 도구들을 동적으로 연결할 수 있는 유연성을 제공하는 인터페이스.
예: 사용자의 질문에 따라 웹에서 최신 정보를 검색하거나, 계산기를 호출하여 계산을 수행한 후 결과를 반환할 수 있습니다.
5. Memory (메모리)
메모리는 대화형 애플리케이션에서 이전 대화의 컨텍스트를 저장하고, 그 정보를 바탕으로 이후의 대화를 자연스럽게 이어갈 수 있도록 돕는 기능입니다. 메모리는 특히 대화가 길어질수록 중요한데, 사용자의 이전 질문과 답변을 기억하여 더 일관성 있고 맥락에 맞는 응답을 생성할 수 있습니다.
랭체인의 각 기능의 상태를 기억하는 기능
예: 사용자가 이전에 "어제 날씨는 어땠나요?"라고 물었다면, 다음에 "그럼 오늘은?"이라고 묻더라도 모델이 "오늘의 날씨"라는 문맥을 이해할 수 있게 도와줍니다.
6. Callbacks (콜백)
콜백은 체인 또는 에이전트의 실행 과정에서 특정 이벤트가 발생할 때 이를 감지하여 지정된 작업을 수행하는 기능입니다. 콜백을 통해 실행 도중에 로그를 기록하거나, 중간 결과를 확인하고, 필요할 때 조치를 취할 수 있습니다. 이를 통해 복잡한 작업 흐름에서 발생하는 다양한 이벤트를 모니터링하고 디버깅할 수 있습니다.
LLM 애플리케이션의 다양한 타이밍에 특정 처리를 할 수 있는 후크를 제공하는 기능(후크 : 프로그래밍에서 특정 이벤트나 상태가 발생했을 때 자동으로 호출되는 함수나 메소드)
예: 체인 실행 중 특정 단계에서 결과를 기록하거나, 에이전트가 잘못된 작업을 수행할 경우 이를 감지해 중단할 수 있습니다.