LangChain 모듈
import pandas as pd
import numpy as np
import os
import openai
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage, Document
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
1. 'ChatOpenAI'
OpenAI의 채팅 모델과 상호작용하기 위한 클래스입니다. 이 클래스는 주로 GPT-3와 같은 모델을 통해 대화형 애플리케이션을 구축할 때 사용됩니다. like 챗봇
from langchain.chat_models import ChatOpenAI
chat_model = ChatOpenAI(api_key='your-api-key')
response = chat_model.generate('Hello, how are you?')
print(response)
2. 'HumanMessage, SystemMessage'
HumanMessage : 사용자가 보낸 메시지를 나타냅니다.
SystemMessage : 시스템이나 AI가 보낸 메시지를 나타냅니다.
from langchain.schema import HumanMessage, SystemMessage
user_message = HumanMessage(content='What is the weather like today?')
system_message = SystemMessage(content='The weather today is sunny with a high of 75 degrees.')
3. 'Document'
LangChain의 `Document` 클래스는 텍스트 문서를 다루기 위한 기본 데이터 구조입니다. 이 클래스는 주로 문서 검색, 문서 기반 질의 응답 시스템에서 사용됩니다.
주요 속성
- `content`: 문서의 텍스트 내용을 저장하는 문자열입니다.
- `metadata`: 문서와 관련된 추가 정보를 저장하는 딕셔너리입니다. 예를 들어, 문서의 제목, 작성자, 생성일 등의 메타데이터를 포함할 수 있습니다.
주요 메서드
`Document` 클래스는 문서의 내용을 관리하고, 문서와 관련된 메타데이터를 처리하는 데 필요한 다양한 메서드를 제공합니다. 기본적으로 이 클래스는 간단한 데이터 구조로, 문서의 내용을 저장하고 필요에 따라 메타데이터를 추가할 수 있습니다.
from langchain.schema import Document
# 문서 생성
doc_content = "This is a sample document content."
doc_metadata = {
"title": "Sample Document",
"author": "John Doe",
"date": "2024-06-11"
}
document = Document(content=doc_content, metadata=doc_metadata)
# 문서 내용 확인
print("Content:", document.content)
# 메타데이터 확인
print("Metadata:", document.metadata)
4. OpenAIEmbeddings
텍스트 데이터를 벡터로 변환하기 위한 클래스입니다. 이러한 벡터는 검색 및 유사성 비교 작업에서 사용됩니다.
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(api_key='your-api-key')
vector = embeddings.embed_text('This is a sample text.')
print(vector)
5. Chroma
Chroma는 벡터 저장소로서 데이터를 저장하기 위해 SQLite 데이터베이스를 사용합니다. 기본적으로 Chroma는 벡터 데이터를 영구적으로 저장하고 검색하기 위해 로컬 파일 시스템에 SQLite 데이터베이스를 생성합니다. 이를 통해 벡터와 관련된 메타데이터를 효율적으로 관리하고, 빠른 검색을 가능하게 합니다.
- 영구 저장: persist_directory 매개변수를 설정하지 않으면, Chroma는 메모리 내에 데이터를 저장하여 영구적으로 보관되지 않습니다. 영구 저장이 필요하다면, 반드시 persist_directory를 지정해야 합니다.
- 데이터베이스 백업: 중요한 데이터를 저장하는 경우, 주기적으로 데이터베이스를 백업하는 것이 좋습니다.
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")
database = Chroma(persist_directory="./db", # 경로 지정(현 위치에서 db 폴더 생성)
embedding_function = embeddings # 임베딩 벡터로 만들 모델 지정
)
6. RetrievalQA
RetrievalQA 모듈은 검색 기반 질의 응답 시스템을 구축하기 위한 클래스입니다. 이 클래스는 문서에서 관련 정보를 검색하고, 이를 기반으로 응답을 생성합니다.
from langchain.chains import RetrievalQA
retrieval_qa = RetrievalQA(vector_store=database, embeddings=embeddings, api_key='your-api-key')
response = retrieval_qa.query('What is the content of the sample document?')
print(response)
다음번에는 간단한 예시를 통해서, RAG 모델을 준비하는 코드로 돌아오겠습니당~