LangChain 튜토리얼 가이드
1. LangChain 소개
LangChain은 언어 모델(LLM)을 활용한 애플리케이션 개발을 위한 프레임워크다. 다양한 LLM을 쉽게 통합하고, 체인과 에이전트를 구성하여 복잡한 작업을 수행할 수 있도록 도와준다.
2. 기본 구성 요소
2.1 LLM/Chat Models
Groq 사용
from langchain_groq import ChatGroq
# Groq LLM 초기화
chat_model = ChatGroq(
temperature=0.1,
model_name="model_name",
api_key="your_api_key"
)
OpenAI 사용
from langchain_openai import ChatOpenAI
# OpenAI LLM 초기화
chat_model = ChatOpenAI(
temperature=0.7,
model_name="gpt-4", # 또는 "gpt-3.5-turbo"
api_key="your_openai_api_key"
)
Ollama 사용
from langchain_community.llms import Ollama
# Ollama LLM 초기화
llm = Ollama(
model="llama2", # 또는 "mistral", "codellama" 등
temperature=0.5,
base_url="http://localhost:11434" # Ollama 서버 URL
)
# 또는 Ollama Chat 모델 사용
from langchain_community.chat_models import ChatOllama
chat_model = ChatOllama(
model="llama2",
temperature=0.5
)
2.2 프롬프트 템플릿
from langchain.prompts import PromptTemplate
# 프롬프트 템플릿 생성
prompt = PromptTemplate(
template="Context: {context}\nQuestion: {question}\nChoices: {choices}\nAnswer: {answer}",
input_variables=["context", "question", "choices", "answer"]
)
2.3 출력 파서
from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field
# Pydantic 모델 정의
class AnswerResponse(BaseModel):
answer: int = Field(description="답변 번호 (1-5)", ge=1, le=5)
# 파서 초기화
parser = PydanticOutputParser(pydantic_object=AnswerResponse)
3. 주요 기능 및 사용 예시
3.1 체인 구성
LangChain은 여러 컴포넌트를 체인으로 연결하여 복잡한 작업을 수행할 수 있다.
# 프롬프트 템플릿과 출력 파서 연결
prompt = PromptTemplate(
template=template_text + "\n{format_instructions}",
input_variables=["context", "question", "choices"],
partial_variables={"format_instructions": parser.get_format_instructions()}
)
3.2 비동기 처리
from concurrent.futures import ThreadPoolExecutor, as_completed
def process_batch(batch_data, model):
with ThreadPoolExecutor() as executor:
futures = []
for item in batch_data:
future = executor.submit(process_single_item, item, model)
futures.append(future)
results = []
for future in as_completed(futures):
results.append(future.result())
return results
4. 실제 구현 예시
4.1 질문 생성 시스템
def generate_answer(context: str, question: str, choices: List[str]):
"""
주어진 문맥과 질문에 대한 답변을 생성한다.
Args:
context: 문제의 문맥
question: 질문 내용
choices: 선택지 목록
Returns:
AnswerResponse: 1-5 사이의 답변 번호
"""
try:
# 프롬프트 준비
messages = [
{"role": "system", "content": "문제를 해결하고 정답 번호를 선택하는 assistant다."},
{"role": "user", "content": f"Context: {context}\nQuestion: {question}\nChoices: {choices}"}
]
# LLM에 요청
response = chat_model.invoke(messages)
# 응답 파싱
return parser.parse(response.content)
except Exception as e:
print(f"Error generating answer: {e}")
return None
4.2 데이터 검증 시스템
class QuestionFormatValidator(BaseModel):
id: str = Field(description="질문 ID")
context: str = Field(description="문제 문맥")
question: str = Field(description="질문 내용")
choices: List[str] = Field(description="선택지 목록")
answer: str = Field(description="정답")
is_error: int = Field(description="오류 여부 (1: 오류, 0: 정상)")
error_type: str = Field(description="오류 유형 설명")
댓글남기기