RAG/Langchain - (1) ChatOpenAI, invoke, stream, batch

윤소영·2024년 7월 27일
0

Langchain

목록 보기
2/2

ChatOpenAI

랭체인에서 ChatOpenAI를 이용하면 OpenAI에서 제공하는 채팅 전용 LLM(Large Language Model)을 사용할 수 있다.

  • temperature : 0~2 사이의 값 / 높은 값일수록 출력의 무작위성 높아짐 & 낮은 값일수록 출력 결정론적이게 됨
  • max_tokens : 출력될 문장의 최대 토큰 개수
  • model_name : 적용할 모델 ex. 'gpt-4', 'gpt-3.5-turbo', 'gpt-4-turbo'
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
	temperature=0,
    max_tokens=256,
    model_name='gpt-4'
)

query = "대한민국의 가을은 몇 월부터 몇 월까지야?"

response = llm.invoke(query) # reponse = content + response_metadata

print(f"답변 내용 : {response.content}") # llm 답변이 출력됨 
print(f"메타 데이터 : {response.response_metadata}") # model_name, token_usage 등이 출력됨 
  • 답변을 실시간으로 받고 싶다면 invoke() 대신 stream()을 사용하면 됨 - streaming option
from langchain_openai import ChatOpenAI
from langchain_teddynote.messages import stream_response

llm = ChatOpenAI(
	temperature=0,
    max_tokens=256,
    model_name='gpt-4'
)

query = "대한민국의 대표 음식 5가지를 알려줘"
response = llm.stream(query)
for token in response:
	print(token.content, end="", flush=True)
    
query = "호주의 대표 도시 3개를 고르고 각 도시에 대한 간단한 소개를 해줘."
response = llm.stream(query)
stream_response(response)

invoke, stream, batch 함수

사용자 정의 체인을 쉽게 만들도록 대부분의 컴포넌트에 Runnable 프로토콜을 구현해 놓았으며, 이 중 invoke, stream, batch는 다음과 같은 역할을 수행하는 표준 인터페이스이다.

  • invoke : 입력에 대한 체인 호출(응답)
  • stream : 응답 청크 스트리밍(실시간 출력)
  • batch : 입력 여러 개(배치)에 대한 체인 호출(배치 처리하는 응답)
from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser

llm = ChatOpenAI(
	temperature=0.2,
    model_name="gpt-4-turbo"
)
prompt = PromptTemplate.from_template("{location}에 대해 소개하는 글을 2문장으로 작성해줘.")
chain = prompt | llm | StrOutputParser() # create chain

# invoke
chain.invoke({"location": "서울"})

# stream
for token in chain.stream({"location": "서울"}):
	print(token, end="", flush=True)

# batch 
chain.batch([{"location" : "서울"}, {"location" : "캘리포니아"}])
profile
Major in IT Engineering(2021.03~)

0개의 댓글