- 개요 대형 모델을 활용한 개발에서 가장 기본적인 기능 중 하나는 Parameter화된 Prompt Template입니다. 이 문서에서는 LangChain과 Tongyi(통의 천문)을 사용해 간단한 아기 이름 생성 예제를 통해 다음을 학습합니다:
- PromptTemplate란 무엇인가?
- Parameter가 포함된 Prompt를 어떻게 정의하는가?
- Parameter를 전달하는 두 가지 방법: format() 직접 호출과 Chain 구성体를 통해 간접 호출
- Stream 방식과 일반 호출 방식의 차이
실제 코드만 분석하며 핵심 기능을 집중적으로 설명합니다.
- 환경준비 필요한 패키지를 설치합니다:
pip install langchain langchain-core langchain-community dashscope
- 전체 코드
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)
-
코드 상세 분석
-
모듈 로딩
import os
from langchain_core.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi
os: 환경 변수를 설정하기 위해 사용PromptTemplate: Parameter화된 Prompt를 생성하기 위한 클래스Tongyi: Tongyi(통의 천문) 모델을 사용하기 위한 클래스
- 모델 초기화
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 모델을 초기화
- Prompt Template 정의
prompt = PromptTemplate.from_template(
"이름을 지어줄래요? 성은 {family_name}이고, 성별은 {gender}이에요."
)
PromptTemplate.from_template(): 주어진 문자열을 Template로 변환{family_name}과{gender}: Parameter로 사용할 변수명
- 방법 1: format()을 통한 직접 호출
prompt_text = prompt.format(family_name="홍", gender="여성")
format()메서드: Template에 Parameter를 대입하여 최종 Prompt를 생성- 예제 출력: "이름을 지어줄래요? 성은 홍이고, 성별은 여성이에요."
- 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): 실시간으로 출력되도록 함
- 방법 2: Chain을 통한 간접 호출
chain = prompt | llm
result = chain.invoke({"family_name": "김", "gender": "남성"})
print(result)
prompt | llm: Prompt Template과 모델을 연결한 Chain 객체 생성chain.invoke({...}): Parameter를 전달하고 결과를 받음
-
두 가지 방법 비교 | 방식 | 코드 양상 | 장점 | 적합한 사용場面 | |---|---|---|---| | format() + stream | 직접 Prompt를 조립하고 출력을 관리 | 유연성과 제어력이 뛰어남 | 실시간 UI, 채팅 앱 등 | | prompt | model | 간결한 Chain 방식 | 코드가 명확하고 유지보수가 쉬움 | 업무 로직, 백엔드 API 등 |
-
핵심 개념
-
Parameter화된 Prompt Template: Prompt에 변수를 삽입하여 재사용성을 높임
-
format() 메서드: Template에 Parameter를 할당
-
Stream 방식: 결과를 실시간으로 출력
-
Chain 구성: Prompt Template과 모델을 연결하여 일련의 작업을 수행
-
실행 예제
홍선아
김대성