본문 바로가기

IT/개발

(3) Langchain을 이용하여 system role을 주고 chat 모델을 구동해보자

반응형

ChatGPT를 사용해 보신 분들은 아시겠지만 Prompt를 제어하여 좀더 정확하게 모델의 응답을 조정할 수 있습니다. 

 

소위 "너는 시인이라고 생각하고 다음 문장에 대해서 시를 써줘..." 같은 접근을 이용하는 방법이죠.

 

물론 문자열을 입력할때 한번에 AI 모델의 역할을 지정하고 응답까지 한꺼번에 넣을 수도 있습니다만 여기서는 LangChain에서 chat 모델을 사용할 때 systemMessage를 이용해서 먼저 role을 정의해 주고 질문에 대답하도록 간단히 구현하는 예제를 만들어 보겠습니다. 

 

여기서도 ChatGPT를 사용하시려면 우선 다음 사이트에서 OpenAI API Key를 먼저 발급 받으셔야 합니다.

https://platform.openai.com/account/api-keys

 

OpenAI Platform

Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform.

platform.openai.com

 

 

 

1. LangChain의 Chat Models 

Langchain에서 사용가능한 다양한 chat 모델은 다음을 참고하시면 됩니다.

 

https://python.langchain.com/docs/integrations/chat/

 

Chat models | 🦜️🔗 Langchain

📄️ AzureML Chat Online Endpoint AzureML is a platform used to build, train, and deploy machine learning models. Users can explore the types of models to deploy in the Model Catalog, which provides Azure Foundation Models and OpenAI Models. Azure Found

python.langchain.com

 

2. Langchain을 이용한 chat App 구현 (system role)

 

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

#다양한 Chat 모델들 참고

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

#system role과 user input으로 만 chat을 구현해본다.
from langchain.schema.messages import (    
    HumanMessage,
    SystemMessage
)

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

 

여기서는 message schema를 사용합니다. 스키마는 langchain의 입출력에 관련된 구조들이라고 볼수 있으면 다양한 스키마를 지원하고 있습니다. 

 

여기서는 그중 Messages chema 중 SystemMessage, HumanMessage를 사용해보도록 하겠습니다. 

 

SystemMessage에 AI의 역할을 정의하고 HumanMessage를 이용해서 질문을 입력하면 됩니다 .

role을 주지않아도 동작은 하지만 AI의 응답을 원하는 형태로 유도하기 위해서 role을 지정하는 것이 좋습니다. 

 

#system_role = SystemMessage(content="")  # system role을 주지 않더라도 문제는 없으나 chat으로 동작시킬때 적절히 지정해주는 것이 좋다.
system_role = SystemMessage(content="너는 자동차를 판매하는 판매 영업사원이야")
user_input = HumanMessage(content='2010년대에 출시된 자동차를 설명하고 나한테 적절한 것을 추천해줘, 나는 크고 연비가 좋은 차가 좋아')

AI_response = chatAI([system_role, user_input])
print(AI_response.content)

 

여기서는 role이 없는 경우와 자동차 영업사원이라는 role을 준 경우의 응답을 확인해 보겠습니다.

 

'''  role을 주지 않은 경우


2010년대에 출시된 자동차는 기술적인 발전과 친환경성을 강조한 차종들이 많이 등장했습니다. 아래에 몇 가지 대표적인 차종을 설명하고, 나에게 적절한 추천을 해드리겠습니다.
1. Tesla Model S: 테슬라 모델 S는 2012년에 출시된 전기 자동차로, 뛰어난 주행 거리와 성능을 제공합니다. 시승감과 가속력이 탁월하며, 대용량 배터리로 장거리 주행이 가능합니다. 전기차의 장점인 친환경적이면서도 저비용인 운전을 즐기고 싶다면 이 차를 추천합니다.
2. Toyota Prius: 토요타 프리우스는 하이브리드 자동차로 2010년대에도 많은 인기를 끌었습니다. 경제성과 시내 주행에 최적화되어 있으며, 토요타의 신뢰성과 내구성도 뛰어나다고 할 수 있습니다. 친환경적인 운전을 선호하고 예산이 제한되어 있다면 이 차를 추천합니다.
3. BMW 3시리즈: BMW 3시리즈는 2010년대에도 지속적으로 인기를 유지한 프리미엄 세단입니다. 스포츠적인 스타일과 우수한 주행 성능을 제공하며, 품질과 안전성면에서도 높은 평가를 받았습니다. 스타일과 성능을 중시하는 운전자라면 이 차를 추천합니다.
4. Honda Civic: 혼다 시빅은 2010년대에도 인기를 유지한 소형 세단으로, 경제성과 내구성이 높아 많은 사람들에게 사랑받았습니다. 고강도 재질을 사용하여 안전성을 높였으며, 풍부한 내부 공간과 편안한 승차감을 제공합니다. 경제성과 공간 활용을 중요시하는 운전자라면 이 차를 추천합니다.
나에게 적절한 추천은 개인의 운전 스타일, 선호도, 예산 등에 따라 달라질 수 있습니다. 당신이 친환경적인 운전과 저렴한 비용을 중시한다면 테슬라 모델 S나 토요타 프리우스를 추천합니다. 스타일과 성능을  중요시한다면 BMW 3시리즈를 고려해볼 수 있고, 경제성과 내구성을 중시한다면 혼다 시빅을 추천합니다.
'''
 
 

 


''' role을 주고 문의를 좀더 구체화한 경우


2010년대에는 다양한 자동차 모델이 출시되었지만, 크고 연비가 좋은 몇 가지 모델을 추천해드릴게요. 아래의 자동차 중에서 선택하시면 됩니다.
1. 토요타 카마리 (Toyota Camry): 토요타 카마리는 넓은 실내 공간과 탁월한 연비를 자랑하는 대형 세단입니다. 안정적인 주행성과 풍부한 편의 기능을 제공하여 편안하고 안전한 운행을 즐길 수 있습니다.    
2. 현대 아슬란 (Hyundai Azera): 현대 아슬란은 고급스러운 디자인과 훌륭한 연비를 겸비한 대형 세단입니다. 넓은 실내 공간과 풍부한 기능이 포함되어 있어 편안한 운전 경험을 제공합니다.
3. 캐딜락 CTS (Cadillac CTS): 캐딜락 CTS는 럭셔리한 외관과 강력한 성능을 갖춘 대형 세단입니다. 넓은 실내 공간과 최신 기술에 대한 풍부한 옵션을 제공하여 편안하고 고급스러운 운전을 즐길 수 있습니다.
4. BMW 5시리즈 (BMW 5 Series): BMW 5시리즈는 세련된 디자인과 스포츠 카처럼 뛰어난 주행 성능을 가진 대형 세단입니다. 넓은 실내 공간과 강력한 엔진을 갖추고 있어 흥미로운 운전 경험을 제공합니다.      
크고 연비가 좋은 차를 원하신다면 현대 아슬란이나 토요타 카마리가 적절한 선택일 수 있습니다. 그러나 더 고급스러운 차를 원하신다면 캐딜락 CTS나 BMW 5시리즈를 고려해보세요. 주행 성능과 편의 기능에 대 한 선호도가 높다면 BMW 5시리즈가 더 나은 선택이 될 것입니다. 하지만 예산 및 개인적인 취향에 따라 다른 모델을 선택할 수도 있으니, 차량을 실제로 타보고 취향에 맞는 모델을 선택하는 것이 좋습니다.  


2010년대에 출시된 자동차 중에서 크고 연비가 좋은 차를 추천해드릴게요. 그 중에서도 토요타 캠리와 혼다 어코드가 좋은 선택지일 것 같아요.
1. 토요타 캠리: 토요타 캠리는 넓은 실내 공간과 편안한 탑승감을 제공하는 대형 세단입니다. 2012년부터는 하이브리드 모델도 출시되어 연비도 우수하며, 경제적이고 신뢰성 있는 차량으로 알려져 있어요.    
2. 혼다 어코드: 혼다 어코드는 넓은 실내 공간과 편안한 탑승감을 제공하는 중형 세단입니다. 2013년부터는 하이브리드 모델도 출시되어 연비가 더욱 향상되었어요. 또한, 혼다의 신뢰성과 내구성도 높아 많은  사람들에게 인기가 있습니다.
이 두 모델은 크기가 크고 연비가 좋은 차량으로 알려져 있으며, 안전성과 내구성도 뛰어나요. 어떤 모델을 선택하시든 만족하실 것 같습니다. 그러나 차량 구매는 개인의 우선순위와 예산에 따라 다를 수 있으니, 시승을 통해 직접 확인하시고 선택하시는 것이 좋을 것 같아요.
'''

 

차이가 느껴지시나요? 시인이나 카피라이터로 지정하면 또다른 결과를 내겠죠?

 

반응형

 

참고적으로 다음은 langchain의 chat모델과 스키마의 예를 나열한 것입니다. 

 


'''
다양한 chat_models 참고

__all__ = [
    "ChatOpenAI",
    "AzureChatOpenAI",
    "FakeListChatModel",
    "PromptLayerChatOpenAI",
    "ChatAnthropic",
    "ChatGooglePalm",
    "ChatVertexAI",
    "JinaChat",
    "HumanInputChatModel",
]
'''

'''
  다양한 스키마 종류 참고
 
__all__ = [
    "BaseMemory",
    "BaseChatMessageHistory",
    "AgentFinish",
    "AgentAction",
    "Document",
    "BaseDocumentTransformer",
    "BaseMessage",
    "ChatMessage",
    "FunctionMessage",
    "HumanMessage",
    "AIMessage",
    "SystemMessage",
    "messages_from_dict",
    "messages_to_dict",
    "_message_to_dict",
    "_message_from_dict",
    "get_buffer_string",
    "RunInfo",
    "LLMResult",
    "ChatResult",
    "ChatGeneration",
    "Generation",
    "PromptValue",
    "BaseRetriever",
    "RUN_KEY",
    "Memory",
    "OutputParserException",
    "NoOpOutputParser",
    "BaseOutputParser",
    "BaseLLMOutputParser",
    "BasePromptTemplate",
    "BaseLanguageModel",
    "format_document",
]
'''
반응형