프롬프트는 LLM과 대화하는 언어. 좋은 프롬프트가 좋은 결과를 만드는건 당연!
내가 정신줄을 놓았습니다. 요즘 피곤해서 그래요. 알파때문에...
chain 넣기 전에 이거 언급하고 간다는걸...체인 마무리하니까 생각이 나네 ㅠㅠ 그냥 3장으로 갑니다. 암튼 llm이랑 대화를 잘 해보자고요.
3-1. promptTemplate
고정된 텍스트가 아닌, 변수를 포함한 템플릿으로 프롬프트를 작성하는 방법
# ❌ 비효율적인 방법
response1 = llm.invoke("Python이 뭔가요?")
response2 = llm.invoke("JavaScript가 뭔가요?")
response3 = llm.invoke("Java가 뭔가요?")
# ✅ 효율적인 방법 (템플릿 사용)
template = PromptTemplate(
input_variables=["language"],
template="{language}가 뭔가요?"
)
# week2_ch1_01_basic_template.py
from langchain_core.prompts import PromptTemplate
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="qwen3:1.7b")
# 템플릿 정의
prompt = PromptTemplate(
input_variables=["topic"],
template="{topic}에 대해 한 문장으로 설명해주세요."
)
# 프롬프트 생성 및 확인
formatted_prompt = prompt.format(topic="인공지능")
print("생성된 프롬프트:", formatted_prompt)
# LLM 실행
chain = prompt | llm
result = chain.invoke({"topic": "인공지능"})
print("\n답변:", result)
응답 :
(llm_env) PS C:\dev\llm> & C:/dev/llm/llm_env/Scripts/python.exe c:/dev/llm/3_1.template_basic.py
생성된 프롬프트: 인공지능에 대해 한 문장으로 설명해주세요.
답변: 인공지능은 데이터를 기반으로 학습하여 패턴을 식별하고 의사결정을 수행하는 자동화된 시스템을 의미합니다.
예제 2-여러 변수
# week2_ch1_02_multiple_variables.py
from langchain_core.prompts import PromptTemplate
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="qwen3:1.7b", temperature=0.7)
# 여러 변수를 가진 템플릿
prompt = PromptTemplate(
input_variables=["product", "feature", "tone"],
template="""당신은 {tone} 마케터입니다.
{product}의 {feature} 기능을 강조하는 광고 문구를 1개만 작성해주세요.
광고 문구:"""
)
# 체인 구성
chain = prompt | llm
# 다양한 조합으로 실행
combinations = [
{"product": "스마트폰", "feature": "배터리", "tone": "전문적인"},
{"product": "노트북", "feature": "성능", "tone": "친근한"},
{"product": "이어폰", "feature": "노이즈캔슬링", "tone": "감성적인"}
]
for combo in combinations:
print(f"\n{'='*60}")
print(f"제품: {combo['product']} | 특징: {combo['feature']} | 톤: {combo['tone']}")
print(f"{'='*60}")
result = chain.invoke(combo)
print(result)
응답 :
(llm_env) PS C:\dev\llm> & C:/dev/llm/llm_env/Scripts/python.exe c:/dev/llm/3_2.multiple_variables.py
============================================================
제품: 스마트폰 | 특징: 배터리 | 톤: 전문적인
============================================================
"장기적인 배터리, 무한한 에너지"
============================================================
제품: 노트북 | 특징: 성능 | 톤: 친근한
============================================================
**"Powerful Performance, Smarter Every Day!"**
(친근하게 느껴지는 문구로 성능과 효율성을 동시에 강조하며 사용자 경험을 풍부하게 만드는 라이프스타일을 전달합니다.)
============================================================
제품: 이어폰 | 특징: 노이즈캔슬링 | 톤: 감성적인
============================================================
"Cancel the noise, hear the clear." 🎧✨
그렇게 잘하는거 같진 않은....1.7b니까...
# week2_ch1_03_structured_prompt.py
from langchain_core.prompts import PromptTemplate
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="qwen3:1.7b")
# 구조화된 프롬프트 (멀티라인)
prompt = PromptTemplate(
input_variables=["role", "task", "context", "format"],
template="""# 역할
당신은 {role}입니다.
# 작업
{task}
# 맥락
{context}
# 출력 형식
{format}
답변:"""
)
chain = prompt | llm
result = chain.invoke({
"role": "경험 많은 Python 개발자",
"task": "초보자에게 리스트 컴프리헨션을 설명하세요.",
"context": "상대방은 for문은 알지만 리스트 컴프리헨션은 처음 접합니다.",
"format": "예제 코드 1개와 설명 2문장"
})
print(result)
응답 :

# week2_ch1_04_from_template.py
from langchain_core.prompts import PromptTemplate
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="qwen3:1.7b")
# 방법 1: 기본 방식
prompt1 = PromptTemplate(
input_variables=["name"],
template="{name}에 대해 설명해주세요."
)
chain1 = prompt1 | llm
result1 = chain1.invoke({"name": "랭체인"})
print(result1)
# 방법 2: from_template (더 간단)
prompt2 = PromptTemplate.from_template("{name}에 대해 설명해주세요.")
# 두 방식 모두 동일하게 작동
chain2 = prompt2 | llm
result2 = chain2.invoke({"name": "LangChain"})
print(result2)
응답 :
(llm_env) PS C:\dev\llm> & C:/dev/llm/llm_env/Scripts/python.exe c:/dev/llm/3_4.from_template.py
**LangChain**은 대형 언어 모델(이하 LLM)의 개발 및 배포를 위한 프레임워크로, 대형 언어 모델의 훈련, 평가, 배포, 그리고 다양한 기능을 지원하는 도구 세트입니다. LangChain은 주로 **GPT**, **BERT**, **T5** 등 다양한 대형 언어 모델을 훈련하고, 이를 활용해 텍스트 생성, 답변, 데이터 분석 등 다양한 작업을 수행하는 데 도움을 줍니다.
---
### 🔍 **LangChain의 주요 구성 요소**
1. **모델 (Model)**
- 대형 언어 모델의 훈련된 가상 모델을 제공합니다. 예: GPT, BERT, T5 등.
- 모델의 구조, 훈련 데이터, 훈련 과정을 관리할 수 있습니다.
2. **데이터 처리 (Data Processing)**
- 훈련 데이터의 전처리, 정규화, 편집 등 작업을 지원합니다.
- 데이터의 품질과 효율성을 향상시키는 기능을 제공합니다.
3. **평가 및 테스트 (Evaluation & Testing)**
- 모델의 성능을 평가하는 기능(예: 텍스트 생성 정확도, 답변 품질)을 포함합니다.
- 테스트 케이스와 평가 지표를 제공하여 모델의 효과성을 분석할 수 있습니다.
4. **배포 및 활용 (Deployment & Use Cases)**
- 모델을 텍스트 생성, 답변, 데이터 분석 등으로 활용할 수 있도록 도와줍니다.
- 다양한 플랫폼(예: Hugging Face, TensorFlow, PyTorch)과의 통합 기능을 제공합니다.
5. **도구 및 라이브러리 (Tools & Libraries)**
- 모델 훈련, 평가, 배포 과정에서 사용할 수 있는 다양한 도구와 라이브러리가 포함되어 있습니다.
- 예: 훈련 데이터의 전처리, 모델의 최적화, 테스트 케이스 생성 등.
---
### 🧠 **LangChain의 주요 기능**
- **모델 훈련**: 대형 언어 모델의 훈련 과정을 지원하며, 데이터의 정제와 모델의 편향 제어를 가능하게 합니다.
- **모델 평가**: 텍스트 생성, 답변, 데이터 분석 등 다양한 작업의 성능을 평가합니다.
- **모델 배포**: 텍스트 생성, 답변, 데이터 분석 등으로 실제 활용에 도움을 줍니다.
- **통합 기능**: Hugging Face, TensorFlow, PyTorch 등 다양한 플랫폼과의 통합을 지원하여 개발의 유연성을 높입니다.
---
### 📦 **LangChain의 활용 사례**
- **텍스트 생성**: 대형 언어 모델을 사용해 텍스트를 생성하고, 텍스트의 품질을 평가합니다.
- **답변 생성**: 사용자 입력에 따라 대형 언어 모델을 활용해 정확한 답변을 생성합니다.
- **데이터 분석**: 대형 언어 모델을 사용해 데이터를 분석하고, 통찰을 도출합니다.
- **모델 최적화**: 훈련 데이터의 정제, 모델의 성능 향상을 위해 최적화 작업을 수행합니다.
---
### 📚 **LangChain의 주요 특징**
- **구조화된 도구**: 모델 훈련, 평가, 배포 과정을 구조화하여 개발의 효율성을 높입니다.
- **다양한 모델 지원**: GPT, BERT, T5 등 다양한 대형 언어 모델을 훈련 및 활용합니다.
- **통합 플랫폼**: Hugging Face, TensorFlow, PyTorch 등 다양한 프레임워크와의 통합을 지원합니다.
---
### 🧠 **LangChain의 중요성**
LangChain은 대형 언어 모델의 훈련과 활용을 위한 체계적인 도구를 제공하여, 개발자들이 효율적으로 모델을 구축하고, 실제 활용에 도움을 줍니다. 이는 텍스트 생성, 답변, 데이터 분석 등 다양한 작업의 성능 향상을 가능하게 합니다.
---
### 📦 **결론**
LangChain은 대형 언어 모델의 개발 및 배포를 위한 프레임워크로, 훈련 데이터 처리, 모델 평가, 배포 등 다양한 기능을 지원합니다. 이는 텍스트 생성, 답변, 데이터 분석 등 실제 활용에 도움을 줍니다. 대형 언어 모델의 훈련과 활용을 효율적으로 관리하고, 품질을 향상시키는 데 중요한 역할을 합니다.
---
### **1. 기초 개념**
- **등급 시스템**: 노드나 전송의 우선순위를 특정 기준(예: 전송량, 신뢰도, 성능 등)에 따라 결정합니다.
- **전송 순서**: 등급에 따라 블록체인의 데이터 처리 순서가 달라집니다. 예를 들어, 높은 등급의 노드는 더 빠르게 전송을 처리합니다.
---
### **2. 구조와 작동 방식**
- **노드 등급**: 노드의 성능(전송량, 보안, 신뢰도 등)에 따라 등급이 매겨집니다. 높은 등급의 노드는 더 많은 권한을 가지며, 데이터 처리에 영향을 줍니다.
- **전송 우선순위**: 등급이 높은 노드는 더 빠르게 블록을 생성하고, 데이터를 처리하는 데 더 효율적으로 작동합니다.
- **보안성**: 높은 등급의 노드는 더 많은 보안 인증을 필요로 하며, 이는 전체 네트워크의 안정성을 보장합니다.
---
### **3. 장점**
- **효율성**: 높은 등급의 노드가 더 많은 작업을 처리할 수 있어, 전체 네트워크의 처리 속도가 빠릅니다.
- **보안성**: 중요한 노드가 보안에 더 강한 검증을 받는다는 점에서, 시스템의 안정성이 높아집니다.
- **신뢰성**: 노드의 성능에 따라 등급이 결정되므로, 신뢰할 수 있는 노드가 더 많은 권한을 가지게 됩니다.
---
### **4. 한계와 고려 사항**
- **등급 유지**: 등급이 변동할 경우, 네트워크의 일관성과 안정성이 위협받을 수 있습니다.
- **불균형 가능성**: 높은 등급의 노드가 과도하게 작업을 처리할 경우, 전체 네트워크의 부하를 초과할 수 있습니다.
- **사기 방지**: 높은 등급의 노드가 과도하게 허가를 받는다면, 악의적인 활동에 대한 방어가 약화될 수 있습니다.
---
### **5. 예시**
- **크립토캐시**: 일부 코인은 노드의 전송량, 보안 수준에 따라 등급을 매겨서, 빠르게 처리되는 블록을 우선적으로 생성합니다.
- **정부 또는 기관 블록체인**: 정부 기관의 데이터 처리 시스템에서, 신뢰도가 높은 노드가 우선적으로 처리를 수행하여, 민감한 데이터를 보호합니다.
---
### **6. 결론**
랭체인은 **등급 시스템을 기반으로 전송 순서를 결정하는 블록체인 구조**로, 효율성과 보안성을 동시에 고려할 수 있는 방식입니다. 그러나 등급 유지 및 보안 방어에 대한 철저한 관리가 필요합니다. 이는 블록체인 기술의 발전에 중요한 역할을 합니다.
암튼 결과는 비슷...두번 나옴
3-5. 실전 예제 : 이메일 작성 도우미
# week2_ch1_05_email_assistant_improved.py
from langchain_core.prompts import PromptTemplate
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="qwen3:1.7b", temperature=0.7)
# 발신자 정보를 포함한 이메일 템플릿
email_template = PromptTemplate(
input_variables=["recipient", "purpose", "tone", "key_points",
"sender_name", "sender_position", "sender_contact"],
template="""다음 조건에 맞는 업무 이메일을 작성해주세요.
받는 사람: {recipient}
목적: {purpose}
어조: {tone}
포함할 내용: {key_points}
발신자 정보:
- 이름: {sender_name}
- 직위: {sender_position}
- 연락처: {sender_contact}
제목과 본문을 작성하되, 끝에 발신자 서명을 다음 형식으로 넣어주세요:
감사합니다.
{sender_name}
{sender_position}
{sender_contact}
---
"""
)
chain = email_template | llm
# 사용 예시
result = chain.invoke({
"recipient": "김팀장님",
"purpose": "프로젝트 진행상황 보고",
"tone": "정중하고 간결한",
"key_points": "1) 데이터 수집 완료, 2) 분석 진행 중, 3) 다음 주 화요일 회의 요청",
"sender_name": "이우철",
"sender_position": "데이터 분석팀 부장",
"sender_contact": "wclee@parucnc.com / 010-8711-xxxx"
})
print(result)
응답 :
(llm_env) PS C:\dev\llm> & C:/dev/llm/llm_env/Scripts/python.exe c:/dev/llm/3_5.email_assist.py
**제목**: 프로젝트 진행 상황 보고
안녕하세요, 김팀장님
데이터 수집 작업은 완료되었습니다. 현재 분석 작업 중이며, 다음 주 화요일에 회의를 요청드립니다.
감사합니다.
이우철
데이터 분석팀 부장
wclee@parucnc.com / 010-8711-5556
---
**발신자 서명**
감사합니다.
이우철
데이터 분석팀 부장
wclee@parucnc.com / 010-8711-xxxx