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에 대하여 계속 함꼐 알아봅시다!^^*
'데이터&AI > langchain' 카테고리의 다른 글
[langchain공부] RetrievalQA. 긴 문서에서 원하는 답변 찾기1 (feat. RetrievalQA, 문서 검색, html) (1) | 2024.02.06 |
---|---|
[langchain공부] Vectorstores. 벡터 저장소 (feat. Chroma, FAISS) (1) | 2024.02.05 |
[langchain공부] DatetimeOutputParser (datetime으로 결과도출!!) (0) | 2024.02.03 |
[langchain공부] CommaSeparatedListOutputParser(, 결과도출!!) (0) | 2024.02.02 |
[langchain공부] ConversationBufferMemory (과거 프롬포트 내용 기억하기!!) (0) | 2024.02.02 |
댓글