Data & Research

[LLM & RAG] Langchain 기초 - LLM

물박사의 저장공간 2025. 4. 3. 21:04

LLM 모델은 물론 저희가 직접 training시키거나 기저부터 만드는 것은 아닙니다만 어느정도의 조정의 여지는 있습니다. 

 

  • temperature : 생성된 텍스트의 창의성을 조절하는 값 (0~2, 기본값: 1). 낮을수록 더 확정적인 답변을 생성하고, 높을수록 다양하고 창의적인 응답을 생성.
  • max_tokens : 모델이 한 번의 응답에서 생성할 수 있는 최대 토큰 수. 너무 짧으면 불완전한 답변이 나올 수 있음.
  • top_p : Nucleus Sampling 기법으로, 확률값이 높은 토큰의 누적 확률이 top_p 이하가 되도록 샘플링. 낮출수록 보수적인 응답 생성.
  • frequency_penalty : 특정 단어가 반복되는 것을 방지하는 값 (-2.0 ~ 2.0). 값이 클수록 반복된 단어 사용을 줄임.
  • stop : 모델이 텍스트 생성을 중지해야 하는 특정 문자열 리스트. 예: ["\n\n"] (두 줄 개행이 나오면 중지).
from langchain_openai import ChatOpenAI

# LLM 모델 생성 (GPT-4 기준)
llm = ChatOpenAI(
    model="gpt-4",
    temperature=0.7,       # 창의성 조절 (0~2)
    max_tokens=200,        # 최대 토큰 수
    top_p=0.9,             # Top-P (0~1)
    frequency_penalty=0.5, # 반복 단어 방지
    stop=["\n\n"]          # 특정 문자열이 나오면 응답 중단
)

# 모델 실행 예제
response = llm.invoke("Tell me a fact about quantum mechanics.")
print(response)

 

이러한 parameter 값을 bind와 config를 이용해서 수정해 줄 수도 있습니다. bind는 parameter값을 고정(여러 번 실행해도 설정값이 적용)하고 싶을 때 사용하면 되고, 일시적으로 값을 주고 싶으면 config를 쓰면 됩니다.

 

from langchain_openai import ChatOpenAI

# 기본 LLM 객체 생성
llm = ChatOpenAI(model="gpt-4", temperature=0.7, max_tokens=200)

# 특정 파라미터를 고정한 새로운 LLM 객체 생성
llm_with_stop = llm.bind(stop=["\n\n"])  # 두 줄 개행 시 응답 중지

response = llm_with_stop.invoke("Tell me a fun fact about space.")
print(response)

 

# 체인을 실행할 때 temperature를 동적으로 설정
response = llm.invoke("Tell me a joke.", config={"temperature": 1.5})
print(response)