본문 바로가기

IT/개발

(5) Langchain에서 PromptTemplet을 사용하여 번역기, 요약기를 만들어보자

반응형

여기서는  PromptTemplete을 이용하는 응용 중 입출력을 미리 정의한 방식대로 동작 시키는 방법을 확인하기 위해서 입력된 문자열을 번역해보고 이를 요약해보는 코드를 간단히 만들어보겠습1니다. 

 

아래 글과 연결된 내용입니다. 

 

https://yongeekd01.tistory.com/95

 

(4) Langchain에서 PromptTemplet을 사용하여 chat 모델을 구동해보자

LangChain에서 PromptTemplete을 사용하는 것은 system role을 주는 방법과 비슷합니다. 다만 사용자의 질문을 입력 변수처럼 정의하여 내부적으로 묶어서 처리할 수 있습니다. App을 사용하기 위한 chat 질

yongeekd01.tistory.com

 

 

1. 한글 입력을 영어로 바꿔주는 번역기를 만들어보기 

 

import os
import apikeys #user defind, apikeys 숨기기

#채팅모델 지정
from langchain.chat_models import ChatOpenAI

#https://platform.openai.com/account/api-keys 에서 발급받는다. 유료

OPENAI_API_KEY = apikeys.OPENAI_API_KEY  

#환경 변수에 넣어준다
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY

chatAI = ChatOpenAI(model_name='gpt-3.5-turbo', temperature=0)  

#PromptTemplate 선택
#사용자 입력과 시스템 프롬프트에 변수를 정의하고 사용
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate
)

 

입력, 출력을 변수화 해서 프롬프트로 정의하고 템플릿을 구성한다. 

 


#LLM이 대답할 내용을 구체적으로 먼저 정의 해둔다.

#1. 번역기를 만든다고 가정한다
system_prompt = SystemMessagePromptTemplate.from_template("{input}이 입력되면 {output}으로 의미가 바뀌지 않게 변역해줘")
human_prompt = HumanMessagePromptTemplate.from_template("{text}")
myPrompt = ChatPromptTemplate.from_messages([system_prompt, human_prompt])

 

LLM모델과 정의한 프롬프트를 체인으로 연결한다

 

#사용할 체인들 중 LLMChain을 지정
from langchain.chains import LLMChain

#LLM모델과 정의한 프롬프트를 체인으로 연결한다
myChain = LLMChain(llm=chatAI, prompt=myPrompt)

#사용자의 입력을 받아 프롬프트에 정의한 변수로 입력한다
AI_response= myChain.run(input="Korean", output="English",
                         text="""한 날, 평범한 대학생인 지민은 자동차 전시회에 참석하게 되었다.
                         그곳에서 그는 눈을 의아하게 뜨고 말았다. 그의 눈 앞에 펼쳐진 것은 미래의 자동차였다.
                         그 자동차는 인공지능과 연결되어 있었고, 스스로 주행할 수 있었다. 지민은 놀라움에 휩싸였고,
                         그 자동차를 타고 싶다는 강한 욕망이 생겼다.""")

print(AI_response)

 

제대로 번역 되어 나오는지 응답을 확인해보자

'''
One day, Jimin, an ordinary college student, attended a car exhibition. There, he opened his eyes in wonder. What unfolded before his eyes was the car of the future. The car was connected to artificial intelligence and could drive itself. Jimin was amazed and a strong desire to ride that car arose within him.
'''

 

반응형

 

2. 내용을 줄여주는 요약기를 만들어보기 

사용하는 방식은 위와 동일하고 프롬프트의 내용만 변경해주고 기능을 구현해 보겠습니다. 

 

#2. 요약기를 만든다고 가정한다
#param만 맞춰주면 input, output 사용안해도 상관 없다.
system_prompt2 = SystemMessagePromptTemplate.from_template("{input}이 입력되면 {output}으로 의미가 바뀌지 않게 한줄로 짧게 요약해줘")
#system_prompt2 = SystemMessagePromptTemplate.from_template("의미가 바뀌지 않게 한줄로 짧게 요약해줘")
human_prompt2 = HumanMessagePromptTemplate.from_template("{text}")
myPrompt2 = ChatPromptTemplate.from_messages([system_prompt2, human_prompt2])

myChain2 = LLMChain(llm=chatAI, prompt=myPrompt2)

#사용자의 입력을 받아 프롬프트에 정의한 변수로 입력한다
#AI_response= myChain2.run(input="Korean", output="English",
AI_response= myChain2.run(input="Korean", output="Korean",
#AI_response= myChain2.run(input="", output="",
                         text="""한 날, 평범한 대학생인 지민은 자동차 전시회에 참석하게 되었다.
                         그곳에서 그는 눈을 의아하게 뜨고 말았다. 그의 눈 앞에 펼쳐진 것은 미래의 자동차였다.
                         그 자동차는 인공지능과 연결되어 있었고, 스스로 주행할 수 있었다. 지민은 놀라움에 휩싸였고,
                         그 자동차를 타고 싶다는 강한 욕망이 생겼다.""")


print("\n"+AI_response)

 

'''
Korean => Korean
미래의 자동차에 놀라고 타고 싶어하는 대학생 지민

Korean => English
Jim, a typical college student, attended a car exhibition one day. There, he opened his eyes in wonder. What unfolded before him was the car of the future. This car was connected to artificial intelligence and could drive itself. Jim was amazed and developed a strong desire to ride in that car.
'''

 

참고. 

'''
다양한 chat prompt template

from langchain.prompts.chat import (
    AIMessagePromptTemplate,
    BaseChatPromptTemplate,
    ChatMessagePromptTemplate,
    ChatPromptTemplate,
    HumanMessagePromptTemplate,
    MessagesPlaceholder,
    SystemMessagePromptTemplate,
)
'''
반응형