랭체인 프롬프트, 모델, 출력파서, 랭체인 허브

2026. 4. 2. 00:54·독서&지식

한빛미디어의 'AI에이전트 마스터 클래스' 내용의 일부를 정리했습니다.

 

1. 프롬프트

프롬프트를 랭체인 문법에 맞춰 작성하는 방법

1. PromptTemplate.from_template()

langchain_core 패키지의 prompts 모듈로부터 Prompt Template 객체를 가져오는 법

from langchain_core.prompts import PromptTemplate

prompt = PromptTemplate.from_template("{topic}에 대해 {level} 수준으로 설명해 주세요.")
print(prompt)
"""
input_variables=['level', 'topic'] input_types={} partial_variables={} template='{topic}에 대해 {level} 수준으로 설명해 주세요.'
"""

 

 

2. PromptTemplate

from_template 메서드 없이 promptTemplate를 직접 사용하는 방법

-  input variables: template에 작성한 입력 변수({topic}, {level})를 리스트ust 형태로 작성
-  partial_variables: 특정 변수의 값을 미리 지정할 때 사용

 

from langchain_core.prompts import PromptTemplate

prompt = PromptTemplate(
	template= "{topic}에 대해 {level} 수준으로 설명해 주세요", 
    input_variables=["topic", "level"], 
    partial_variables={
    "topic": "양자역학" 
    }
)
"""
input_variables=['level'] input_types={} partial_variables={'topic': '양자역학'} template='{topic}에 대해 {level} 수준으로 설명해 주세요.'
"""

 

3. ChatPromptTemplate

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate([ 
	("system", "당신은 강아지 안구 건강 관련 조언을 해주는 AI 첫봇입니다."), 
    ("human", "안녕하세요! 저희 집 강아지가 눈을 자주 굵어요"),
    ("ai", "그렇군요. 사용자님의 강아지는 몇 살인가요?"),
    ("human", "(user_input]"),
])

chain = prompt | model | output_parser 
chain.invoke({"user input" : "3살이에요"}) 
"""
답변 예시: 
3살 강지가 눈을 자주 굵는다면 눈 건강에 문제가 있을 수 있습니다. 명 가지 가능한 이 유가 있을 수 있지만, 가장 흔한 이유는 다음과 같습니다: .(후략)
"""

ChatpromptTemplate에 리스트로 시스템 메시지(개발자가 사전에 정의한 LLM의 역할)와 사용자와 AI가 나눈 대화를 사용자 메시지(human message) 와 AI 메시지(AI message)로 미리 작성하여 대회 의 맥락을 주입합니다. 또한, 사용자가 입력할 질문을 전달받을 입력 변수({user_input})도 추가합니다. 이후, invoke 메서드를 호출하면 이전 대화 맥락을 참고하여 답변을 생성할 수 있습니 다. 사용법이 다소 복잡해 보일 수 있으나, LIM 모델에게 장기간 대화 맥락을 전달할 수 있는 강력한 기능을 제공합니다.

 

2. 모델

from langchain_openai import ChatOpenAI 
# from langchain_anthropic import ChatAnthropic

model = ChatOpenAI(model-"gpt-5.4-nano")
# model = ChatAnthropic(model="claude-haiku-4-5")

model= ChatOpenAI(
    model-"gpt-5.4-nano",
    temperature=0.8,
    max_tokens=2048,
    max_retries=2
)

•  model: 오픈AI에서 제공하는 여러 LLM 모델 중 특정 모델을 지정합니다. 
• temperature: 생성되는 텍스트의 다양성을 조절하는 매개변수입니다. 낮은 값(예: 0.2)은 더 결정적이고 일관된 출력을 생성하는 반면. 높은 값(예: 0.8)은 더 창의적이고 다양성이 높은 출력을 생성합니다. 
◦ max_tokens: 모델이 생성할 수 있는 최대 토큰 수를 지정합니다.
• max_retries: 모델 호출이| 실패할 경우 재시도 횟수를 지정합니다.

 

3. 출력 파서

랭체인은 Str, JSON, CSV 등 다양한 데이터 포멧 파서를 지원합니다.

StrOutputParser를 제외한 다은 파서들을 사용할 때는, 프롬프트에 모델이 해당 포멧에 맞게 답변을 생성하도록 지침을 명시해야 합니다. 이 지침은 get_format_instructions 메소드를 통해 얻을 수 있으며, 이를 프롬프트의 partial_variables에 담아 전달합니다.

output_parser = StrOutputParser()

from Langchain_core.output_parsers import JsonOutputParser

outout_parser = JsonOutputParser()
format_instructions = output_parser.get_format_instructions()

print (format_instructions)

prompt = PromptTemplate(
	template=template,
    partial_variables={
    	"format": format_instructions #"JSON 형태로 답변하시오"
        },
 )
 
 
from langchain_core.output_parsers import CommaSeparatedListOutputParser
#파서 초기화 
output_parser =  CommaSeparatedListOutputParser()

format_instructions = output_parser.get_format_instructions()
print(format_instructions)

template = """
당신은 K-POP 정보를 제공하는 AI입니다. 그룹의 멤버 이름을 말해주세요.
K-POP Group: {name}

FORMAT :
{format}
"""

prompt = PrompTemplate(
	template=template, 
    partial_variables = {
    "format" :  format_instructions
    },
 )
 
 model = ChatopenAI(model_name-"gpt-5.4-nano")
 
 chain = prompt| model|output-parser 
 result = chain. invoke({"name" : "블랙핑크"})
 
prompt = PromptTemplate(
	template=template,
	partial_variables ={
	"format": """
	Return a JSON object like this:
	{
	"answer" : "질문에 대한 답변을 작성합니다"
	"source" : "답변 생성에 활용한 출처를 작성합니다."
    }
   """
  },
)
chain = prompt|model|output_parser

result = chain.invoke({"name" : "블랙핑크"})

print('출력 결과 : ', result)

하지만 이조차도 완전히 안전한 해결 방법은 아닙니다. 반복적으로 코드를 실행하면 키는 포함하지만 구조는 일관되지 않는 한계가 있습니다. 이때. 모델의 답변을 제어하기 위해 pydantic 모듈을 활용할 수 있습니다. 

 

4. 랭체인 허브

langchain에서 hub 모듈을 import한 뒤. hub.pull 미서드에 해당 프콤프트 이름(hard kothari/prompt-maker )을 입력합니다.

invoke 메서드 호출 시 해당 프롬 프트가 필요로 하는 2개의 입력 변수({task}, {lazy_prompt})를 전달하면 개선된 프롬프트가 만들어집니다.

# Create a LANGSNITH_API_KEY in Settings > API Keys 

from langsmith import Client 
client = Client(api_key=LANGSMITH_API_KEY) 
prompt = client.pull_prompt("hardkothari/prompt-maker", include_model=True) 
prompt # 객체 확인

chain = prompt | ChatOpenAI() | StrOutputParser()
task ="""
반드시 한글로 작성되어야 합니다. 
사용자의 질문을 읽고, 핵심 키워드를 파악해 전문 지식이 있는 사람의 질문으로 변경해 주세요. 
더 체계적이고, 단계적인 질문이 될 수 있도록 변경하세요. 
사용자의 질문에서 벗어나서는 안됩니다.
"""
lazy_prompt = "강아지 눈이 좀 이상해요"
improved_prompt = chain.invoke({"task" : task, "lazy_prompt" : lazy_prompt})
print(imcroved_prompt) # 개선된 프롬프트 확인

'독서&지식' 카테고리의 다른 글

목숨 걸고 온톨로지 전문가 되기 1탄(지식그래프)_1  (0) 2026.05.11
랭체인 에이전트 및 도구, Pydantic 스키마로 구조화된 입력받기, ReAct  (0) 2026.04.03
국회 예산안 및 결산안 심사 과정  (0) 2026.03.31
법률 관련 사이트 및 API 정보  (0) 2026.01.28
법률안 서비스 관련 배경 지식(법률 제정 및 개정 지식)  (1) 2026.01.26
'독서&지식' 카테고리의 다른 글
  • 목숨 걸고 온톨로지 전문가 되기 1탄(지식그래프)_1
  • 랭체인 에이전트 및 도구, Pydantic 스키마로 구조화된 입력받기, ReAct
  • 국회 예산안 및 결산안 심사 과정
  • 법률 관련 사이트 및 API 정보
AI강선생
AI강선생
AI강선생의 블로그 입니다.
  • AI강선생
    나의 배움과 성장의 궤적
    AI강선생
  • 전체
    오늘
    어제
    • 분류 전체보기 (66) N
      • 강의&프로젝트 (48)
      • 독서&지식 (9) N
      • 생각과다짐 (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    에이전트
    혼공바이브코딩
    Claude
    랭그래프
    PostgreSQL
    FastAPI
    온톨로지
    Rag
    claude code
    rustfs
    AI에이전트
    이지스퍼블리싱
    랭체인
    유리링
    llmagent
    AI agent
    국회
    오레일리
    java
    인프런
    클로드코드
    길벗
    챌린지
    docker
    cursor
    한빛미디어
    지식그래프
    spring
    멀티에이전트
    게임기획
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
AI강선생
랭체인 프롬프트, 모델, 출력파서, 랭체인 허브
상단으로

티스토리툴바