Basic Modules
Last updated
Last updated
LLMs
Chat Models
Text Embedding Models
Prompt Templates
Example Selectors
Output Parsers: Completion for output as csv, json, xml etc.
vector store
knowledge graph
RAG
Generic Chains
Utility Chains
Action Agents
Receives user input
Decides which tool, if any, to sue and the tool input
Calls the tool and records the output(observation)
Decides the next step using the history of tools, tool inputs, and observation
Repeats 3-4 until it determines it can respond directly to the user
Conversation Buffer Memory
Conversation Buffer Window Memory
Entity Memory
Conversation Knowledge Graph Memory
Conversation Summary Memory
Conversation Summary Buffer Memory
Conversation Token Buffer Memory
Vector Store-Backed Memory
대규모 언어 모델(LLM): LLM 모델은 텍스트 문자열을 입력으로 받아 텍스트 문자열을 출력으로 반환
채팅 모델(Chat Models): 채팅 모델은 일반적으로 언어 모델에 의해 지원되지만 API가 더 구조화. 특히 채팅 모델은 채팅 메시지 목록을 입력으로 받아 채팅 메시지를 반환
텍스트 임베딩 모델(Text Embedding Models): 텍스트 임베딩 모델은 텍스트를 입력으로 받아 실수(float) 목록을 반환
프롬프트(Prompts)를 통해 모델을 프로그래밍하는 새로운 방식으로 "프롬프트(Prompts)"는 모델에 대한 입력을 의미
이 입력은 하드 코딩되는 경우는 거의 없지만 여러 컴포넌트로 구성
프롬프트 템플릿(PromptTemplate)은 이 입력의 구성으로 LangChain은 프롬프트를 쉽게 구성하고 작업할 수 있도록 여러 클래스와 함수를 제공
프롬프트 값(PromptValue): 각 모델에 맞는 정확한 입력 타입(텍스트 또는 채팅 메시지)으로 변환할 수 있는 메서드를 제공하는 클래스
프롬프트 템플릿(Prompt Templates): 프롬프트 값(PromptValue)을 생성하는 클래스입니다. 입력 변수를 받아 PromptValue 구성하고 반환하는 메서드를 제공
예시 선택기((Example Selectors): 사용자 입력을 받은 다음 사용할 예시 목록을 반환하는 클래스로 프롬프트에 예시를 포함하는 것이 유용
출력 파서(Output Parsers): 언어 모델 응답을 구조화하는 데 도움이 되는 클래스로 언어 모델(및 채팅 모델)은 텍스트를 출력함. 단순한 텍스트보다 더 구조화된 정보를 얻고 싶을 때가 많습니다. 이때 출력 파서(Output Parsers)가 필요 출력 파서는 (1) 모델에 출력 형식을 지정하고, (2) 원하는 형식으로 출력을 파싱하는 것을 담당(필요한 경우 재시도 포함).
get_format_instructions() -> str
: 언어 모델의 출력 형식을 지정하는 방법에 대한 지침이 포함된 문자열을 반환하는 메서드
parse(str) -> Any
: 문자열(언어 모델의 응답)을 받아 어떤 구조화된 데이터로 파싱하는 메서드
parse_with_prompt(str) -> Any
: 문자열(언어 모델의 응답)과 프롬프트(해당 응답을 생성한 프롬프트)를 받아 어떤 구조화된 데이터로 파싱하는 메서드. 프롬프트는 주로 출력 파서가 어떤 식으로든 출력을 다시 시도하거나 수정하려고 할 때 제공되며, 이를 위해 프롬프트 정보가 요구
체인은 목적을 달성하기 위해 특정한 방식으로 결합된 일련의 모듈형 컴포넌트(또는 다른 체인)로 돌아가는 매우 일반적인 개념 Chain: 여러 개별 컴포넌트를 포괄하는 종단 간 래퍼(end-to-end wrapper)
LLMChain: 가장 일반적인 유형의 체인입니다.
PromptTemplate, 모델(LLM 또는 ChatModel), 옵셔널 출력 파서로 구성됩니다.
이 체인은 여러 입력 변수를 받아 PromptTemplate을 사용하여 프롬프트로 포맷을 지정합니다. 그런 다음 이를 모델에 전달합니다.
마지막으로 출력 파서(제공된 경우)를 사용하여 LLM의 출력을 최종 포맷으로 파싱합니다.
프롬프트 선택기(Prompt Selector): 전달된 모델에 따라 기본 프롬프트를 선택하는 역할을 담당합니다.
Index-related chains: 이 체인의 목적은 인덱스에 저장된 자신의 데이터를 LLM과 결합하는 것입니다. 가장 좋은 예시는 자신의 문서에서 질문에 대한 답변을 찾는 것입니다.
스터핑(Stuffing): 스터핑은 모든 관련 데이터를 프롬프트에 콘텍스트로 채워 언어 모델에 전달합니다. 스터핑은 StuffDocumentsChain
으로 구현됩니다.
장점: LLM을 한 번만 호출합니다. 텍스트를 생성할 때 LLM은 모든 데이터에 한 번에 액세스 할 수 있습니다.
단점: 대부분의 LLM에는 입력 가능한 최대 컨텍스트 길이가 정해져 있습니다. 따라서 큰 문서(또는 많은 문서)를 프롬프트에 포함시킬 경우, 컨텍스트 길이가 제한을 넘어버리므로 작동하지 않을 수 있습니다.
맵 리듀스(Map Reduce): 맵 리듀스는 각 데이터 청크에 대해 초기 프롬프트를 실행하는 것입니다(요약 작업의 경우 해당 청크에 대한 요약일 수 있고, 질문 답변 작업의 경우 해당 청크에 기반한 답변일 수 있습니다). 그런 다음 다른 프롬프트가 실행되어 모든 초기 출력을 결합합니다. 맴 리듀스는 MapReduceDocumentsChain
으로 구현됩니다.
장점: StuffDocumentsChain
보다 더 큰 문서(및 더 많은 문서)로 확장할 수 있습니다. 개별 문서에 대한 LLM 호출은 독립적이므로 병렬화할 수 있습니다.
단점: StuffDocumentsChain
보다 훨씬 더 많은 LLM 호출이 필요합니다. 마지막 결합 호출 중에는 일부 정보가 손실됩니다.
리파인(Refine): 리파인은 첫 번째 데이터 청크에서 초기 프롬프트를 실행하여 일부 출력을 생성합니다. 나머지 문서의 경우에는, 해당 출력이 다음 문서와 함께 전달되어 새 문서를 기반으로 출력을 구체화하도록 LLM에 요청합니다.
장점: 더 관련성 높은 컨텍스트를 가져올 수 있으며, MapReduceDocumentsChain
보다 손실이 적을 수 있습니다.
단점: StuffDocumentsChain
보다 LLM에 대한 호출이 더 많이 필요합니다. 또한 호출은 독립적이지 않으므로 MapReduceDocumentsChain
처럼 병렬로 실행할 수 없습니다. 또한 문서 순서에 대한 잠재적인 종속성이 있습니다.
맵-리랭크(Map-Rerank): 맵-리랭크은 각 데이터 청크에 대해 초기 프롬프트를 실행하여 작업을 완료하려고 시도할 뿐만 아니라, 답변이 얼마나 확실한지에 대한 점수를 부여합니다. 그런 다음 이 점수에 따라 응답의 순위가 매겨지고 가장 높은 점수를 반환합니다.
장점: MapReduceDocumentsChain
장점과 비슷합니다. 하지만MapReduceDocumentsChain
에 비해 호출이 더 적습니다.
단점: 문서 간의 정보를 결합할 수 없습니다. 즉, 하나의 문서에 하나의 간단한 답변이 있을 것으로 예상할 때 가장 유용합니다.
일부 애플리케이션은 LLM/기타 도구에 대한 미리 정해진 체인을 호출하는 것뿐만 아니라, 사용자의 입력에 따라 달라지는 알려지지 않은 체인이 필요할 수 있습니다. 에이전트는 도구를 사용하여 이러한 유형의 체인에 액세스할 수 있습니다. 에이전트는 사용자 입력에 따라 이러한 도구 중 어떤 도구를 호출할지 결정할 수 있습니다.
도구(Tools): 언어 모델이 다른 리소스와 상호 작용하는 방법입니다.
언어 모델과 쉽게 상호 작용할 수 있도록 하는 특정 기능에 대한 추상화 함수입니다.
구체적으로 도구의 인터페이스는 단일 텍스트 입력과 단일 텍스트 출력을 가지고 있습니다.
툴킷(Toolkits): 특정 문제를 해결하거나 특정 작업을 수행할 때 필요한 도구 세트입니다.
에이전트(Agents): 의사 결정을 내리는 데 사용되는 언어 모델입니다.
에이전트는 모델을 감싸는 래퍼(wrapper)로, 사용자 입력을 받아 수행할 "액션(action)"과 그에 해당하는 "입력 액션(action input)"에 해당하는 응답을 반환합니다.
에이전트 실행자(Agent Executor): 도구와 함께 에이전트를 실행하기 위한 로직입니다.
에이전트 실행자는 에이전트와 도구 세트입니다.
에이전트 실행기는 (1) 에이전트를 호출하고, (2) "액션"과 "액션 입력"을 다시 받아서, (3) 해당 입력으로 액션이 참조하는 도구를 호출하고, (4) 도구의 출력을 가져온 다음 모든 정보를 다시 에이전트로 전달하여 (5) 다음 액션을 가져오는 일을 담당합니다.
메모리는 대화 과정에서 데이터를 저장하고 검색하는 개념입니다. 두 가지 메서드를 제공합니다.
입력에 따라 관련 데이터를 가져옵니다.
입력 및 출력을 기반으로 그에 따라 상태를 업데이트합니다.
메모리에는 단기 메모리(Short term memory)와 장기 메모리(Long term memory)의 두 가지 타입이 있습니다.
단기 메모리(Short term memory): 단일 대화의 맥락에서 데이터를 전달하는 방법을 말합니다(일반적으로 이전 채팅메시지(ChatMessage) 또는 그 요약).
장기 메모리(Long term memory): 서로의 대화에서 정보를 가져오고 업데이트하는 방법을 다룹니다.