Chains

Chain은 챗봇 또는 언어모델의 대화를 구축하고 유기하는 기본 개념입니다. 입력체인과 출력체인으로 이루어져 있으며, 사용자의 입력과 언어모델, 모델의 응답을 하나의 연결고리로 묶어 대화 내용을 저장하고 관리하는데 사용됩니다.

Chain의 작동 방식은 다음과 같습니다.

  1. 대화 기록: 사용자가 챗봇이나 언어모델과 대화할 때 맥락을 유지하기 위해 사용자와 모델의 각 메세지는 시간순으로 저장됩니다.

  2. 입력 및 출력: 각각의 체인은 사용가의 입력을 담당하는 "입력 체인"과 모델의 응답을 담당하는 "출력 체인"으로 이루어져 있습니다. 이를 통해 모델은 대화에서 이전 메세지를 다시 참조할 수 있습니다.

  3. 문맥 이해: 체인이 이전 대화 기록을 보존함으로써 모델은 문맥을 이해하고, 이전 메세지를 참조하여 일관되고 문맥상 관련 있는 응답을 제공할 수 있습니다.

  4. 최대 길이: 메모리 사용량 및 계산 리소스를 관리하기 위한 최대 길이가 있습니다. 체인이 너무 길어지면 새 메세지를 위한 공간을 확보하기 위해 오래된 메세지가 제거되거나 잘릴 수 있습니다. 다만, 과거의 대화 내용 중에 중요한 정보가 삭제되면 맥락이 손실될 수 있습니다.

  5. 대화 지속: 실시간 챗봇 또는 언어모델 상호작용에서 입력 체인은 사용자의 새 메세지로 지속적으로 업데이트 되고, 출력 체인은 모델의 응답으로 업데이트 됩니다. 이를 통해 모델은 진행중인 대화를 추적하고 적절하게 대응할 수 있습니다.

kubChain에서는 아래와 같은 Chains를 제공합니다.

  • GET API Chain

  • OpenAPI Chain

  • POST API Chain

  • Conversation Chain

  • Conversational Retrieval QA Chain

  • LLM Chain

  • Multi Prompt Chain

  • Multi Retrieval QA Chain

  • Retrieval QA Chain

  • Sql Database Chain

  • VectorDB QA Chain

LLM Chain

LLM Chain은 가장 기본이 되는 Chain으로 언어모델과 prompt의 연결만으로 간단하게 사용할 수 있습니다.

Language Model을 연결할 때 일반 OpenAI모델을 사용한다면 Prompt Template를, ChatOpenAI모델을 사용한다면 Chat Prompt Template를 연결해야합니다.

Prompt Template의 System Message 부분을 통해 언어모델이 답변해야하는 상황을 설정할 수 있습니다.

LLM Chain Example

예를들어 아재개그를 생성하는 챗봇을 만드는 상황이라면, Prompt Template 없이 사용자가 매번 아재개그를 만들어달라고 요청할 수 있습니다. 하지만 이러한 경우에는 사용자의 피로도가 상승하게 됩니다. 언어모델에 동일한 질문을 반복해서 하는 경우 Prompt Template의 System Message에 반복되는 질문을 입력하여 사용자가 모든 문장을 계속해서 입력하지 않게 할 수 있습니다.

"Create a funny dad joke about cats"

"Create a funny dad joke about dogs"

"Create a funny dad joke about birds"

"Create a funny dad joke about fish"

... 이런식으로 사용자가 반복된 문장을 입력하는 경우, System Message를 아래와 같이 설정합니다.

Create a funny dad joke about {subject}

이제 사용자는 챗봇에 전체문장을 입력하지 않고 cats, dogs만 입력해도 원하는 답변을 얻을 수 있습니다.

좀 더 많은 설정을 하는 경우라면 Format Prompt Values를 통해 key-value형태로 Template 내용을 관리할 수 있습니다.

Conversation Chain

LLM Chain이 단순이 언어모델과 사용자를 연결해주는 Chain이었다면, Conversation Chain은 언어모델이 사용자와의 대화 내용을 기억하면서 질의응답과 대화를 이어나갈 수 있게 하는 Chain입니다. 대화내용을 기억해야하기 때문에 Memory를 사용합니다.

LangChain에서 기본적으로 제공하는 Buffer Memory를 연결하여 대화내용을 기억할 수 있도록 합니다. Buffer Memory 이외에도 다양한 Memory 노드들이 있으니 더 자세한 내용은 Memory 탭을 참고하시기 바랍니다.

Conversational Retrieval QA Chain

Conversational Retrieval QA Chain은 검색 구성 요소를 사용하여 대화형 질의응답을 수행하기 위한 Chain입니다. 사용자의 질문에 대답하기 위하여 Vector Store에 저장된 데이터를 검색하고, 자연어로 대답합니다.

Vector Store에 저장할 데이터로는 .txt, .pdf, .docs 등 자연어 데이터는 모두 연결이 가능하지만 파일 형식에 맞는 Document Loader를 사용해야 합니다. 더 자세한 내용은 Document Loader 탭과 Vector Store 탭을 참고하시기 바랍니다.

Conversational Retrieval QA Chain Example

아래와 같은 정보를 가진 text 파일을 업로드합니다.

Project name: Cat project
the person in Charge: hiden
project date: 2012

Project name: Cat project
the person in Charge: kale
project date: 2014

Project name: Bird project
the person in Charge: Braden
project date: 2020

Project name: Apple project
the person in Charge: Lobert
project date: 2023

Text Splitter노드를 Text File 노드에 연결해 자연어들을 Chunk 단위로 나누어줍니다.

OpenAI Embeddings를 통해 자연어를 컴퓨터가 이해할 수 있는 Vector로 변환합니다.

변환된 데이터를 In-Memory Vector Store에 저장합니다.

Conversational Retrival QA Chain에 Language Model과 Vector Store를 연결합니다.

"what is the project name Lobert in charge?"

"i want to know about Cat project history"

위와같이 데이터와 연관있는 질문을 하는 경우, 언어모델은 Chain을 통해 Vector Store에 저장된 데이터를 검색하여 답변을 수행합니다.

Last updated