LangChain 챗봇3장 · LangChain 기본 구조와 LCEL7 / 21← 이전목차다음 →MetaContents

3장. LangChain 기본 구조와 LCEL

모델 부품 ChatOpenAI 의 설정

식당에 요리사를 새로 들일 때는 몇 가지를 정해 둡니다. 어느 요리사를 쓸지, 레시피대로만 할지 솜씨를 부려도 될지, 한 접시에 얼마나 담을지, 주문 하나에 얼마나 기다려 줄지입니다. ChatOpenAI 를 만들 때 넣는 인자가 바로 이 약속입니다.

model, temperature, max_tokens, timeout 네 설정을 나란히 놓은 비교 그림

네 상자가 자주 쓰는 네 설정입니다. 왼쪽부터 어느 모델을 쓸지, 얼마나 모험할지(온도), 답을 얼마나 길게 쓸 수 있는지, 답을 얼마나 기다릴지입니다. 여기서 요리사 고르기가 model, 솜씨 부리기가 temperature, 한 접시의 양이 max_tokens, 기다려 주는 시간이 timeout 입니다. 비유와 다른 점은, 요리사는 양을 넘기면 접시를 바꾸지만 모델은 max_tokens 에 닿으면 문장 중간이라도 답을 끊는다는 것입니다.

자주 쓰는 설정

인자뜻이 교안에서주의할 것
model쓸 모델의 이름MODEL(기본 gpt-4.1-mini)교수자가 정한 모델이 있으면 .env 의 OPENAI_MODEL 로 바꾼다
temperature온도. 0 이면 한결같이, 높으면 다양하게안내 0, 소개글 0.7~1GPT-5 계열처럼 기본값(1)만 받는 모델도 있다
max_tokens답의 최대 토큰 수200 안팎설치된 판에서는 max_completion_tokens 라는 이름으로도 받는다
timeout답을 기다리는 최대 초30넘으면 오류가 난다. 너무 짧으면 긴 답이 끊긴다
max_retries실패했을 때 다시 시도하는 횟수2retry 는 "다시 해 보기"라는 뜻

max_tokens 와 timeout 은 이 교안의 langchain-openai 1.7.3 에서 ChatOpenAI 의 칸 이름을 확인한 것입니다. 이 판에서 max_tokens 는 OpenAI 의 max_completion_tokens 와 같은 칸이고, timeout 은 request_timeout 과 같은 칸입니다. 판이 바뀌면 이름이 달라질 수 있으니 설명서를 확인합니다.

짧은 예시

모델을 만들기만 하고 부르지는 않습니다. 만드는 일에는 인터넷도 요금도 들지 않습니다. 키가 없는 PC 에서도 돌도록, 키가 없으면 자리표시 글을 넣어 만듭니다.

Python
import os

from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model=os.getenv("OPENAI_MODEL", "gpt-4.1-mini"),   # 쓸 모델. .env 로 바꿀 수 있다
    temperature=0,                                     # 온도 0: 한결같은 답
    max_tokens=200,                                    # 답은 200 토큰까지
    timeout=30,                                        # 30초 넘게 걸리면 멈춘다
    max_retries=2,                                     # 실패하면 두 번까지 다시 보낸다
    api_key=os.getenv("OPENAI_API_KEY", "발급받은_인증키"),  # 키는 환경 변수에서 읽는다. 없으면 자리표시
)
print("모델:", model.model_name)
print("온도:", model.temperature, "/ 최대 토큰:", model.max_tokens)
print("기다리는 시간:", model.request_timeout, "초 / 다시 시도:", model.max_retries, "번")
출력
모델: gpt-4.1-mini
온도: 0.0 / 최대 토큰: 200
기다리는 시간: 30.0 초 / 다시 시도: 2 번

넣은 timeout=30 은 request_timeout 이라는 이름으로 30.0 초가 들어갔습니다. 이 모델을 체인에 끼우는 일은 실습 3에서 합니다. 실습에서는 2장처럼 .env 에서 키를 읽으므로 api_key 인자를 적지 않습니다.

코드가 의미하는 것

이 코드는 새 요리사를 들이며 근무 약속을 적어 두는 일을 흉내 낸 것입니다. 요리사를 고르고, 솜씨를 얼마나 부릴지, 한 접시의 양, 기다려 줄 시간, 다시 해 볼 횟수를 정한 뒤 적힌 약속을 읽어 봅니다.

코드하는 일챗봇에서 뜻하는 것
os.getenv("OPENAI_MODEL", "gpt-4.1-mini")환경 변수에서 모델 이름을 읽고, 없으면 기본값을 쓴다코드를 고치지 않고 .env 만 바꿔 다른 모델로 갈아 끼울 수 있습니다
temperature=0온도를 0 으로 정한다규정 안내처럼 늘 같은 답이 필요한 챗봇에 맞는 설정입니다
max_tokens=200, timeout=30답의 길이 상한과 기다리는 시간을 정한다답이 너무 길어지거나 화면이 오래 멈추는 것을 막는 안전장치입니다
max_retries=2실패하면 두 번까지 다시 보낸다잠깐의 네트워크 문제로 챗봇이 바로 오류를 내지 않게 합니다
api_key=os.getenv("OPENAI_API_KEY", "발급받은_인증키")키를 환경 변수에서 읽고, 없으면 자리표시를 넣는다키를 코드에 적지 않습니다. 만들기만 하므로 자리표시로도 오류가 나지 않습니다

결과에서 읽을 것은 두 가지입니다.

  • 넣은 값이 그대로 들어갔습니다. 모델 gpt-4.1-mini, 최대 토큰 200, 다시 시도 2 번이 찍혔습니다. 온도는 0 을 넣었지만 실수 0.0 으로 바뀌어 들어갔습니다.
  • 같은 설정이 다른 이름으로 찍힙니다. timeout=30 으로 넣은 값이 request_timeout 으로 30.0 초가 됐습니다. 설정을 확인할 때는 이 칸 이름으로 읽습니다.

주의할 점

  • 설정은 모델을 만들 때 정해집니다. 같은 체인에서 온도만 다르게 쓰고 싶으면 온도가 다른 모델을 하나 더 만들어 끼웁니다. 프로젝트에서 이렇게 견줍니다.
  • max_tokens 를 너무 작게 잡으면 답이 문장 중간에 끊깁니다. 한국어는 토큰을 많이 쓰므로(1장 실습 3에서 토큰 하나에 한국어 1.76글자) 넉넉히 잡습니다.
← 이전 절3장 · ChatPromptTemplate다음 절 →3장 · OutputParser 와 StrOutputParser