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)