LangChain PromptTemplate 실전 사용법: Parameter화된 Prompt Template의 활용

  1. 개요 대형 모델을 활용한 개발에서 가장 기본적인 기능 중 하나는 Parameter화된 Prompt Template입니다. 이 문서에서는 LangChain과 Tongyi(통의 천문)을 사용해 간단한 아기 이름 생성 예제를 통해 다음을 학습합니다:
  • PromptTemplate란 무엇인가?
  • Parameter가 포함된 Prompt를 어떻게 정의하는가?
  • Parameter를 전달하는 두 가지 방법: format() 직접 호출과 Chain 구성体를 통해 간접 호출
  • Stream 방식과 일반 호출 방식의 차이

실제 코드만 분석하며 핵심 기능을 집중적으로 설명합니다.

  1. 환경준비 필요한 패키지를 설치합니다:
pip install langchain langchain-core langchain-community dashscope
  1. 전체 코드
import os
from langchain_core.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi

# 환경 변수에 API 키 설정
os.environ["DASHSCOPE_API_KEY"] = "sk-당신의_API_KEY"
llm = Tongyi(model="qwen-max")

# 방법 1: Template를 직접 사용
prompt = PromptTemplate.from_template(
    "이름을 지어줄래요? 성은 {family_name}이고, 성별은 {gender}이에요."
)

# Parameter를 전달하여 최종 Prompt 생성
prompt_text = prompt.format(family_name="홍", gender="여성")

# Stream 방식으로 결과 출력
for chunk in llm.stream(input=prompt_text):
    print(chunk, end="", flush=True)

# 방법 2: Chain을 통해 간접 호출
chain = prompt | llm
result = chain.invoke({"family_name": "김", "gender": "남성"})
print(result)
  1. 코드 상세 분석

  2. 모듈 로딩

import os
from langchain_core.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi
  • os: 환경 변수를 설정하기 위해 사용
  • PromptTemplate: Parameter화된 Prompt를 생성하기 위한 클래스
  • Tongyi: Tongyi(통의 천문) 모델을 사용하기 위한 클래스
  1. 모델 초기화
os.environ["DASHSCOPE_API_KEY"] = "sk-당신의_API_KEY"
llm = Tongyi(model="qwen-max")
  • os.environ["DASHSCOPE_API_KEY"]: Tongyi API를 사용하기 위해 필요한 API 키를 설정
  • Tongyi(model="qwen-max"): Tongyi의 qwen-max 모델을 초기화
  1. Prompt Template 정의
prompt = PromptTemplate.from_template(
    "이름을 지어줄래요? 성은 {family_name}이고, 성별은 {gender}이에요."
)
  • PromptTemplate.from_template(): 주어진 문자열을 Template로 변환
  • {family_name}{gender}: Parameter로 사용할 변수명
  1. 방법 1: format()을 통한 직접 호출
prompt_text = prompt.format(family_name="홍", gender="여성")
  • format() 메서드: Template에 Parameter를 대입하여 최종 Prompt를 생성
  • 예제 출력: "이름을 지어줄래요? 성은 홍이고, 성별은 여성이에요."
  1. Stream 방식으로 출력
for chunk in llm.stream(input=prompt_text):
    print(chunk, end="", flush=True)
  • llm.stream(input=prompt_text): 모델에게 Prompt를 제공하고 결과를 차례대로 받아옴
  • print(chunk, end="", flush=True): 실시간으로 출력되도록 함
  1. 방법 2: Chain을 통한 간접 호출
chain = prompt | llm
result = chain.invoke({"family_name": "김", "gender": "남성"})
print(result)
  • prompt | llm: Prompt Template과 모델을 연결한 Chain 객체 생성
  • chain.invoke({...}): Parameter를 전달하고 결과를 받음
  1. 두 가지 방법 비교 | 방식 | 코드 양상 | 장점 | 적합한 사용場面 | |---|---|---|---| | format() + stream | 직접 Prompt를 조립하고 출력을 관리 | 유연성과 제어력이 뛰어남 | 실시간 UI, 채팅 앱 등 | | prompt | model | 간결한 Chain 방식 | 코드가 명확하고 유지보수가 쉬움 | 업무 로직, 백엔드 API 등 |

  2. 핵심 개념

  3. Parameter화된 Prompt Template: Prompt에 변수를 삽입하여 재사용성을 높임

  4. format() 메서드: Template에 Parameter를 할당

  5. Stream 방식: 결과를 실시간으로 출력

  6. Chain 구성: Prompt Template과 모델을 연결하여 일련의 작업을 수행

  7. 실행 예제

홍선아
김대성

태그: LangChain PromptTemplate Tongyi LCEL chain

6월 22일 20:09에 게시됨