인공지능/nlp

[LLM] langchain을 활용한 챗봇 구현 (1): langsmith, ChatOpenAI, LLMChain, PromptTemplate

jmHan 2024. 8. 12. 20:39
반응형

 

LangChain이란?

LLM 기반의 애플리케이션을 구축하기 위한 오픈소스 프레임워크

LangChain을 활용할 경우 재훈련이나 fine tuning 없이 분야별 LLM 애플리케이션을 개발할 수 있음

 

LangChain 활용 사례

검색, 프롬프트, 임베딩, 유사도 검색, 랭킹 

환경 세팅

라이브러리 설치 및 환경변수 설정

LANGCHAIN_API_KEY 입력 > API Keys > Create API Key 생성 후 복사 

https://smith.langchain.com/o/4700d6ec-c086-52ed-b6d2-266b15769dc4/settings

 

LangSmith

 

smith.langchain.com

 

# OpenAI 활용을 위한 langchain 라이브러리 설치 
!pip install -q langchain langchain_community langchain-openai

#OpenAI API Key 등록
import getpass
import os

# 네모칸 뜨면 OpenAPI API key 입력 
os.environ["OPENAI_API_KEY"] = getpass.getpass()

# LangSmith 등록
os.environ['LANGCHAIN_TRACING_V2'] = 'true'
os.environ['LANGCHAIN_ENDPOINT'] = 'https://api.smith.langchain.com'
#SDJ Key
os.environ['LANGCHAIN_API_KEY'] = '본인 LANGCHAIN API 키 입력'
os.environ['LANGCHAIN_PROJECT'] = 'OpenAI_LLM'
print('LangSmith Monitoring stared... ')

# colab 즉 클라우드 환경에서 streamlit 실행 쉽지 않음 > 실행을 위한 라이브러리 
!pip install streamlit -q
!pip install pyngrok

 

 

모델 로드 및 질의 응답 

ChatOpenAI: OpenAI 사의 채팅 전용 Large Language Model 

from langchain_openai import ChatOpenAI

# 객체 생성
# 4o에 비해 4o-mini는 답이 심플함
# temperature이 높아질수록 창의적인 대답 
model = ChatOpenAI(
    temperature=0.1,  # 창의성 (0.0 ~ 2.0)
    max_tokens=2048, # 최대 토큰 수
    model_name="gpt-4o"  # 모델명
)

# 질의내용
question = "오늘 저녁 요리 추천해줄래요?"

# 질의 응답 
# print(f"[답변]: {model.invoke(question)}\n")

response = model.invoke(question)
print(response)

- temperature: 0.0에서 2.0까지 조정 가능. 0일수록 정밀하고 2일수록 창의적인 답변

- max_tokens: 답변의 최대 토큰수 

- model_name: 모델명 

 

model_name에 적용 가능한 모델 list

gpt-3.5-turbo
gpt-3.5-turbo-0301
gpt-3.5-turbo-0613
gpt-3.5-turbo-16k
gpt-3.5-turbo-16k-0613
gpt-3.5-turbo-instruct
gpt-3.5-turbo-instruct-0914
gpt-4
gpt-4-0314
gpt-4-0613

 

response.__dict__

completion_token: output 토큰
prompt_token: system+질문
total_token: prompt 토큰+ completion 토큰

 

프롬프트 템플릿

PromptTemplate

사용자가 입력한 값으로 프롬프트 문자열을 완성하는 템플릿 

f-string으로 질의응답 방식을 쉽게 구현함 

from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser

#LLM 모델 정의 
llm = ChatOpenAI()

# template 정의
# {country}는 변수로, 나중에 변수를 통해 값이 들어갈 자리임
template = "{country}의 수도는 어디인가요?"

# from_template 메소드를 통해 PromptTemplate 객체 생성
prompt = PromptTemplate.from_template(template)
prompt

-template: 사용할 템플릿 문자열 

-input_variables: 중괄호 안에 들어갈 변수명을 리스트로 정의 

 

# chain 생성
chain = prompt | llm
chain.invoke({"country": "북한"}).content

 

from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

# 질문 템플릿 형식 정의
template = '{country}의 수도는 뭐야?'

# 템플릿 완성
prompt = PromptTemplate(template=template, input_variables=['country'])

# 모델과 프롬프트 템플릿이 연결된 체인(Chain)객체 생성
llm_chain = LLMChain(prompt=prompt, llm=llm)
answer = llm_chain.invoke({"country": "일본"})
answer

 

 

 

 

 

 

참고 자료

https://teddylee777.github.io/langchain/langchain-tutorial-01/

 

랭체인(langchain)의 OpenAI GPT 모델(ChatOpenAI) 사용법 (1)

랭체인(langchain)의 OpenAI GPT 모델(ChatOpenAI) 사용법을 함께 알아보겠습니다.

teddylee777.github.io

 

반응형