본문 바로가기
데이터&AI/langchain

[langchain공부] langchain 핵심 - 1 (체인 만들기)

by 일등박사 2024. 2. 3.

langchain의 핵심~!!!!

이름 그대로 chain을 만들어봅시다!!

 

그런데!!! 왜 체인이 필요할까요!!??

GPT를 활용, 연결되고 연결되는 결과물을 얻기 위해서입니다!!

 

예를들어!!

여러분은 한 연극의 제목에 대한 비평문이 필요한 상태입니다!

그렇가면, GPT를 활용하여

1. 제목기반의 시놉시스 작성

2. 시놉시스 기반의 비평문 작성

의 절차를 걸쳐야 겠지요!?

 

위 과정을  langchain 을 활용한다면 깔끔하고 이쁘게 만들수 있습니다!!

연극의 시놉시스의 비평문이 필요한 상태입니다!

 

함께 시작해보아요!!


우선 언제나 그렇듯 키와 패키지를 임포트해줍니다

from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.schema import StrOutputParser

openai_api_key = '{나의 api 키}'
model =  "gpt-3.5-turbo-16k"

 

 

이제!! GPT1 / GPT2 의 프롬포트를 만들어줍니다!

 

GPT1은 극작가로서 제목을 기반으로 시놉시스를 작성하고

GPT2는 비평가로서 시놉시스를 기반으로 리뷰를 작성합니다!!

synopsis_prompt = PromptTemplate.from_template(
    "너는 극작가야.너는 주어진 연극의 이름에 따라 알맞은 시놉시스를 쓰는것이야!\n\n 제목: {title}\n 내용 : 위 극의 시놉시스를 작성해:"
)

review_prompt = PromptTemplate.from_template(
    "너는 연극 잡지의 비평가야. 주어진 극의 시놉시스에 리뷰를 써야해 \n\n시놉시스:\n{synopsis}\n 평론가로서 평가해줘"
)

 

다음으로, 체인의 구조를 만듭니다!!

이 부분이 핵심이지요!!

chain = (
    {"synopsis": synopsis_prompt | llm | StrOutputParser()}
    | review_prompt    | llm    | StrOutputParser()
)
chain

 

해석해보면, 시높시스 프롬포트를 기반으로 'synopsis' 라는 결론이 도출되고

이 결론을 review_prompt에 다시 들어가게 되는 체인입니다!!

 

생성된 체인 객채를 보면 아래와 같습니다!!

input_variable과 prompt 템플릿, ai 모델에 대하여 정의되어있어요!

 

이제 해당 체인을 실제로 가동해 볼까요!?

저는 근정전에서의 비극 이라는 제목으로 실행해보았습니다!!

res_critic = chain.invoke({"title": "근정전에서의 비극"})
print(res_critic)

 

짜잔!!

그러자 아래와 이미지와 같이

langchain이 가동되고 최종적인 비평문이 프린트 됩니다!!!

 

 

 

그런데, 어떤 시놉시스로 쓴것인지 못본다는 아쉬움이 있지요!?

그래서 이번엔 시놉시스도 함께 보는 방식으로 가동해보겠습니다!

 

바로 RunnablePassthrough 를 사용하여 chain의 구조를 살짝 바꾸어 주는것 입니다

from langchain.schema.runnable import RunnablePassthrough

synopsis_chain = synopsis_prompt | llm | StrOutputParser()
review_chain = review_prompt | llm | StrOutputParser()
chain = {"synopsis": synopsis_chain} | RunnablePassthrough.assign(review=review_chain)

res_critic2 = chain.invoke({"title": "근정전에서의 비극"})
res_critic2

 

이에 대한 결과는!!!?

아래의 이미지와 같이 시놉시스와, 비평문을 함꼐 볼수 있습니다!!

 

 

요약해서 정리해보면!!

아래와 같이 chain 이 구성되어서 진행된 것이겠지요!?

 

앞으로 이 langchain에 대하여 계속 함꼐 알아봅시다!^^*

댓글