언어 모델을 호출할 때 입력되는 텍스트를 '프롬프트'라고 한다.
https://honge1122.tistory.com/106
[LangChain] Chat 모델 API 호출하기
우선 랭체인 말고 파이썬 소스코드를 통해 API 호출을 해보려고 했는데, openai.error.RateLimitError 에러가 떴다. 1. ⚠️RateLimitError?OpenAI API를 사용할 때 발생하는 오류로, 현재 할당량을 초과했음
honge1122.tistory.com
예전에 언어 모델 호출 실습으로 썼던 코드를 다시 가져와보겠다.
User라는 role로 gpt-3.5-turbo 모델을 호출해서 텍스트에 대한 결과를 요청하고 있다.
간단한 애플리케이션이면 위처럼 사용해도 큰 문제는 없지만 실제로 언어 모델을 활용한 애플리케이션을 개발할 때는 문제가 되는 경우가 많다고 한다.
언어 모델에서 얻을 수 있는 결과는 입력되는 프롬프트의 작성 방식에 따라 달라진다.
예를 들어, 해당 코드의 content에 대한 결과가 'yyyy/mm/dd'식으로 출력될지 'yyyy년 mm월 dd일'로 출력될지는 예측할 수 없다. 원하는 방식을 설정해주어야 한다(출력되는 결과를 고정한다).
혹은, 더 긴 답변을 원한다면 모델을 바꿔야 한다.
언어 모델은 많고, 각 모델별 결과 비교를 원할 수도 있다. 위처럼 사용하게 되면 거의 모든 소스코드를 다시 짜야한다.
Model I/O는 랭체인의 가장 기본 모듈
Model I/O 모듈 단독 사용도 가능하지만 실제 애플리케이션을 개발할 때 이거 하나로만 모든 걸 개발하는 건 현실적으로 어렵다. 예를 들어, Model I/O의 하위 모듈인 Prompts 모듈은 프롬프트 최적화를 위해 쓰이며, 이 외에도 Chains 모듈에도 쓰인다. 언어 모델은 거의 모든 모듈에서 사용된다는 의미다.
Model I/O 구성 서브 모듈 3가지
1. Language models
2. Prompts
3. Output parsers
하나씩 코드를 통해 이해해 보겠다.
Language Model 사용하기
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
chat = ChatOpenAI (
model = "gpt-3.5-turbo"
)
result = chat (
[
HumanMessage(content="안녕하세요!")
]
)
print(result.content)
모듈을 가져오고 호출할 모델을 지정하여 클라이언트를 만들어 chat에 저장했다.
ChatOpenAI는 Chat 모델 호출 시 사용한다.
HumanMessage는 사람의 메시지가 있다는 걸 의미한다.
PromptTemplate 사용하기
from langchain import PromptTemplate
prompt = PromptTemplate (
template = "{idol}는 어느 엔터테인먼트 소속 아이돌인가요?",
input_variables = [
"idol"
]
)
print(prompt.format(idol="엔시티 위시"))
print(prompt.format(idol="아이유"))
Promptlemplate 사용 단계
1. Promptlemplate 준비
2. 준비한 Promptlemplate 사용
코드에선 Promptlemplate을 초기화하고 {idol}라는 변수를 포함한 프롬프트를 prompt에 저장했다.
이제 결합해서 사용해 보자
Language Model과 PromptTemplate 결합해서 사용해 보기
from langchain import PromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
chat = ChatOpenAI ( # 클라이언트 생성(언어모델 지정 및 호출)
model = "gpt-3.5-turbo"
)
prompt = PromptTemplate ( # PromptTemplate 생성
template = "{idol}는 어느 엔터테인먼트 소속 아이돌인가요?", # 프롬프트 작성
input_variables = [
"idol"
]
)
result = chat ( # 실행
[
HumanMessage(content = prompt.format(idol="엔시티 위시"))
]
)
print(result.content)
gpt 모델을 ChatOpenAI로 초기화, PromptTemplate 초기화해서 {idol}에 '엔시티 위시'를 입력하여 포맷을 통해 프롬프트를 생성한다.
위 터미널 캡쳐본은 PromptTemplate를 사용해 변수와 프롬프트를 조합하여 실행한 결과다.
이처럼 랭체인에서는 여러 개의 모듈을 조합하여 애플리케이션을 만들 수 있다.
추가로, PromptTemplate 초기화 방법도 종류가 있다.
1. 클래스 초기화
언어 모델과 프롬프트템플릿 결합 실습 코드에서 사용했던 위 코드와 같이, 클래스를 초기화하는 방법이 있다.
prompt = PromptTemplate ( # PromptTemplate 생성
template = "{idol}는 어느 엔터테인먼트 소속 아이돌인가요?", # 프롬프트 작성
input_variables = [
"idol"
]
)
2. 템플릿에서 직접 초기화
prompt = PromptTemplate.from_template("{idol}는 어느 엔터테인먼트 소속 아이돌인가요?")
프롬프트에 들어갈 변수를 지정하지 않고 템플릿에서 직접 초기화할 수도 있다.
3. JSON 파일에 저장한 프롬프트 읽어오기
우선 JSON 파일부터 만들자.
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template("{idol}는 어느 엔터테인먼트 소속 아이돌인가요?",
input_variables = ["idol"])
prompt_json = prompt.save("prompt.json")
이 JSON을 통해 PromptTemplate를 만들 수 있다.
from langchain.prompts import load_prompt
loaded_prompt = load_prompt("prompt.json") #JSON에서 PromptTemplate 로드하기
print(loaded_prompt.format(idol="NCT WISH")) #PromptTemplate로 문장 생성
이처럼 PromptTemplate를 JSON 파일로 저장하면 다양하게 활용할 수 있다.
실습을 한 번밖에 안 해봤지만 기능에 따른 프롬포트를 저장해 놓은 뒤 필요에 따라 꺼내 쓸 수 있다.
Output parsers를 통한 결과 구조화하기
from langchain.chat_models import ChatOpenAI
from langchain.output_parsers import \
CommaSeparatedListOutputParser
from langchain.schema import HumanMessage
output_parser = CommaSeparatedListOutputParser()
chat = ChatOpenAI(model="gpt-3.5-turbo")
result = chat ( # 실행
[
HumanMessage(content = "sm엔터테인먼트 소속 보이그룹 3개를 알려주세요"),
HumanMessage(content = output_parser.get_format_instructions())
# output_parser.get_format_instructions()로 chat에 지시사항 추가
]
)
output = output_parser.parse(result.content)
for o in output :
print("보이그룹 => " + o)
CommaSeparatedListOutputParser는 응답 결과를 목록 형식으로 출력해 준다.
CommaSeparatedListOutputParser는 NCT, EXO, WayV <- 와 같이 쉼표(,)로 구분된 값의 목록을 반환하는데
output_parser.parse를 통해 그 결괏값이 배열 ["NCT", "EXO", "WayV"]로 반환된 것이다.
이처럼 랭체인의 Output parsers를 활용하여 원하는 데이터 구조에 맞게 자유롭게 파싱 할 수 있다.
'LLM' 카테고리의 다른 글
[📘도서리뷰]: Azure OpenAI로 ChatGPT와 LLM 시스템 쉽고 빠르게 구축하기 (0) | 2025.03.28 |
---|---|
Prometheus (0) | 2025.03.04 |
[OpenAI] Complete 모델 API 호출하기 (0) | 2025.02.05 |
[LangChain] Chat 모델 API 호출하기 (1) | 2025.01.15 |
[LangChain] LangChain 환경 세팅 (0) | 2025.01.07 |