LangChain이란?
컴퓨터가 사람처럼 말하고 이해할 수 있도록 돕는 특별한 프로그램으로 우리가 컴퓨터에게 어떤 일을 시킬 때, 그 일을 더 잘 이해하고 수행할 수 있도록 도와준다. 예를 들어, 컴퓨터에게 "이 문장을 영어에서 한국어로 번역해줘"라고 말하면, LangChain은 그 요청을 잘 처리할 수 있게 해준다.
LangChain은 대규모 언어 모델(LLM)이라는 것을 사용하며, LLM은 아주 많은 양의 텍스트 데이터를 학습해서 사람처럼 자연스럽게 말을 생성할 수 있는 컴퓨터 프로그램이다.
예를 들어, ChatGPT 같은 프로그램이 LLM의 일종이다.
LangChain의 주요 기능
- 프롬프트 템플릿 사용하기
- 프롬프트 템플릿은 컴퓨터에게 어떤 역할을 수행할지 지시하는 방법
- 컴퓨터가 번역가처럼 행동하도록 하려면, 번역할 문장을 주고 "이걸 다른 언어로 바꿔줘"라는 지시를 내리면 컴퓨터는 주어진 문장을 다른 언어로 번역
- 체인 구성하기
- 체인은 여러 작업을 순서대로 연결하여 수행하는 것을 의미
- 복잡한 프로세스를 여러 단계로 나누고, 각 단계를 자동으로 처리
- 정보 수집: 웹에서 정보 수집
- 정보 분석: 가져온 정보를 분석하고 요약
- 결과 제공: 분석 결과를 사용자에게 전달
- 체인 구조는 반복적인 작업이나 복잡한 문제 해결에 매우 유용, 마치 요리 레시피를 따라 여러 단계를 거쳐 요리를 완성하는 것과 비슷
- 메모리 기능
- LangChain에는 메모리 기능이 있어서, 이전에 했던 대화나 작업의 내용을 기억
- 컴퓨터는 대화의 맥락을 이해하고, 더 자연스럽고 일관성 있는 대화를 유지
- 메모리 기능은 컴퓨터가 사람처럼 기억력
LangChain의 장점
- 개발 용이성: 복잡한 LLM 기반 애플리케이션 개발 과정을 단순화
- 다양한 언어 모델 지원: OpenAI의 GPT와 같은 다양한 언어 모델과 연동하여 사용
- 확장 가능성: 여러 모듈로 구성되어 있어, 필요에 따라 기능을 추가하거나 조합하여 사용
LangChain의 단점
- 복잡성과 문서화 부족: LangChain은 복잡한 추상화 구조로 인해 사용자가 이해하고 수정하기 어려우며, 문서화가 불충분하여 중요한 세부 사항이 부족
- 신뢰성과 통합 문제: 쉽게 깨지거나 신뢰할 수 없는 경우가 발생할 수 있으며, 기존 도구와의 통합이 어렵다
- 제한된 가치와 대안 존재: 충분한 가치를 제공하지 않는다고 느낄 수 있으며, Semantic Kernel 등 더 나은 대안들이 존재
LangChain의 응용 분야
- 고객 서비스: 자동 응답 시스템을 구축하여 고객 문의에 신속하게 대응
- 콘텐츠 생성: 글쓰기 도우미나 번역기 등 콘텐츠 생성 작업을 자동화
- 데이터 분석: 대량의 데이터를 분석하고 요약하여 인사이트를 제공하는 데 사용
LangChain의 예제
- 파이썬 예제
pip install openai langchain
import os
from langchain import OpenAI, LLMChain
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from langchain.vectorstores.chroma import Chroma
from langchain.embeddings.openai import OpenAIEmbeddings
os.environ["OPENAI_API_KEY"] = "your_openai_api_key"
# OpenAI 모델 초기화
llm = OpenAI(model_name="gpt-3.5-turbo")
# 벡터 데이터베이스 및 임베딩 설정
embeddings = OpenAIEmbeddings()
vectorstore = Chroma(embedding_function=embeddings)
# 대화 기록 메모리 설정
memory = ConversationBufferMemory()
# 대화형 질의응답 체인 생성
qa_chain = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=vectorstore.as_retriever(),
get_chat_history=memory,
memory=True,
return_generated_question=False,
verbose=True
)
# 질의응답 실행 예시
chat_history = []
def ask_question(question):
response = qa_chain.invoke({"input": question, "chat_history": chat_history})
chat_history.append({"type": "human", "content": question})
chat_history.append({"type": "ai", "content": response})
return response
# 예시 질문 및 응답
print(ask_question("What is the capital of France?"))
print(ask_question("And what about Germany?"))
- 장고 예제
pip install django djangorestframework langchain openai
django-admin startproject myproject
cd myproject
django-admin startapp myapp
# myapp/models.py
from django.db import models
class Question(models.Model):
text = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.text
# myapp/serializers.py
from rest_framework import serializers
from .models import Question
class QuestionSerializer(serializers.ModelSerializer):
class Meta:
model = Question
fields = ['id', 'text', 'created_at']
# myapp/views.py
from rest_framework import viewsets, status
from rest_framework.response import Response
from .models import Question
from .serializers import QuestionSerializer
from langchain import OpenAI, LLMChain
class QuestionViewSet(viewsets.ModelViewSet):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
# OpenAI 모델 초기화 및 LangChain 사용
llm = OpenAI(model_name="gpt-3.5-turbo")
chain = LLMChain(llm=llm, prompt=f"Answer the following question: {serializer.validated_data['text']}")
# LangChain을 통한 응답 생성
response = chain.run()
# 질문 저장 및 응답 반환
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response({'question': serializer.data, 'answer': response}, status=status.HTTP_201_CREATED, headers=headers)
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from myapp.views import QuestionViewSet
router = DefaultRouter()
router.register(r'questions', QuestionViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include(router.urls)),
]
'기타' 카테고리의 다른 글
공공 API 연동 하기 (1) | 2024.09.30 |
---|---|
[AI 7기] 장고 기초 이해도 테스트 문제 - 오답노트 (0) | 2024.09.02 |
git branch 생성 방법 및 상태 (0) | 2024.08.27 |
전문반 숙제) 논문을 읽고 난 후 (0) | 2024.08.26 |
Git Pull requests 하기 위하여 (0) | 2024.08.23 |