Langchain에 Open AI API를 연결하여 간단한 질의 응답 시스템을 만들어 보자
1. LLMChain 호출을 통한 구현
간단한 예제를 코드로 작성하면 다음과 같다.
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
#OpenAI 기본 llm -> gpt-3.5-turbo
chat_model = ChatOpenAI(openai_api_key="YOUR_API_KEY_HERE")
#prompt 작성
##template에 넣고 싶은 input variables은 list 형태로 입력
### PromptTemplate Class를 통해 prompt 정의 -> input을 프롬프트 형식에 따라 변수로 정의해 자유롭게 사용 가능하다.
prompt = PromptTemplate(input_variables=['product','numbers'],
template="""What is a good name for a company that makes {product}?
Tell me {numbers} names.""")
#chat model과 prompt를 chain으로 연결해 실행 가능한 형태로 변경
chain = LLMChain(llm=chat_model, prompt=prompt)
#chain 실행
##input variables dict 형태로 입력
result = chain.run({'product': "socks", 'numbers': 5})
print("Here are some names for a company:\n", result, sep='')
출력 결과
gpt-3.5-turbo가 생성한 결과가 내가 설정한 prompt에 따라 잘 나오는 것을 확인할 수 있다.
하지만 이러한 호출 - 생성 방식은 동기적이기 때문에 호출 시간이 상대적으로 오래 걸린다.
또한, 용도에 따라서 다른 Class 호출이 필요하다는 불편함이 존재한다.(입력 많이 하기 귀찮음)
그래서 UNIX Pipe의 형태로 호출하는 방식도 있다.
2. LCEL을 이용한 호출
간단한 예제를 코드로 작성하면 다음과 같다.
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema.output_parser import StrOutputParser
#ChatPromptTemplate Class 통해 Chat model에 적합한 prompt 정의
prompt = ChatPromptTemplate.from_template("""What is a good name for a company that makes {product}?
Tell me {numbers} names.""")
model = ChatOpenAI(openai_api_key="YOUR_API_KEY_HERE")
#StrOutputParser Class 통해 output을 string 형태로 출력
output_parser = StrOutputParser()
'''
#LCEL을 이용한 chain 연결
user의 input이 위에서 정의한 prompt template에 전달
-> prompt template output이 model에 전달
-> model output이 output parser에 전달
'''
chain = prompt | model | output_parser
#chain 실행
result = chain.invoke({'product': "laptop", 'numbers': 5})
print("Here are some names for a company:\n", result, sep='')
출력 결과
결론
LangChain과 OpenAI API를 통한 답변 생성 방식에 대하여 알아보았다.
LCEL을 이용했을 때, LLMChain 등 내장 함수 Call 방식보다 좀 더 효율적으로 코드를 작성, 관리할 수 있었다.