chain = prompt_template | llm
chain.invoke("광주")
wsl
conda create --name agent python=3.12
conda activate agent
Proceed ([y]/n) ?
# To activate this environment, use
#
# $ conda activate agent
#
# To deactivate an active environment, use
#
# $ conda deactivate
pip install -r requirements.txt
python -m ipykernel install --user --name agent --display-name agent
루트 경로에 .env 만들고 OpenAI API Key 환경변수 설정
OPENAI_API_KEY=sk-proj- ...
환경변수 가져오기
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv()
모델 설정
model = "gpt-5-mini-2025-08-07"
llm = ChatOpenAI(
temperature=0,
model_name= model
)
llm.invoke("안녕")
프롬프트 템플릿 생성
from langchain_core.prompts import PromptTemplate
template = "{city}의 특산물은 무엇인가?"
prompt_template = PromptTemplate.from_template(template)
prompt_template.format(city='대구')
yaml 파일로 생성
_type: "prompt"
template: |
{dish} 요리의 레시피를 다음 형식에 맞게 상세하게 설명하세요.
한국어로 200자 내외로 작성해주세요
[레시피 형식]
1. 주요 재료
2. 조리 시간
3. 조리 방법
4. 팁
#Answer:
input_variables: ["dish"]
recipe_prompt = load_prompt('recipe.yaml')
recipe_chain = recipe_prompt | llm
recipe_chain.invoke("고향만두")
사용할 더미 data
data = [
{
"question" : "A가 좋아하는 음식",
"answer" : "닭갈비, 일식카레, 오므라이스, 김치볶음밥, 초밥"
},
{
"question" : "B가 좋아하는 음식",
"answer" : "초밥, 스파게티, 포케, 삼계탕, 돈가스"
},
{
"question" : "C가 좋아하는 음식",
"answer" : "짜장면, 떡볶이, 미역국, 피자, 수육"
}
]
Question에 해당하는 answer가 담긴 더미 data를 example prompt로 생성
from langchain_core.prompts.few_shot import FewShotPromptTemplate
example_prompt = PromptTemplate(
input_variables=["question", "answer"],
template="문장: {question}\n정답: {answer}"
)
LangChain에서 Few-Shot Prompting 구현할 때
템플릿 설정하는 단계
few_shot_prompt = FewShotPromptTemplate(
examples=data,
example_prompt=example_prompt,
suffix="Question:\n{question}\nAnswer",
input_variables=["input"])
| examples=data | 학습시킬 데이터셋(질문-답변) | |
| example_prompt=example_prompt | 예시 data를 문장 구조로 변환해 AI에 전 | |
| suffix | 사용자 질문이들어갈 자리 | |
| input_variables | 사용자가 입력할 변수명 |
from langchain_core.output_parsers import StrOutputParser
few_chain = few_shot_prompt | llm | StrOutputParser()
few_chain.invoke("A하고 B하고 점메추")
from langchain_core.prompts import ChatPromptTemplate
chat_template = ChatPromptTemplate.from_messages(
[
("system", "당신은 강원 출신 사투리를 사용하는 쉐프입니다. 당신의 이름 {name}입니다. "),
('human', "안녕하세요"),
('ai', "무슨 요리를 도와드릴까?"),
('human' , "{user_input}"),
]
)
messages = chat_template.format_messages(name='백종원', user_input="고향만두에 들어가는 재료는 어떤게 필요한가요?")
llm.invoke(messages)
chain = chat_template | llm | StrOutputParser()
chain.invoke({'name' : '백종원', 'user_input' : '순대국 만드는 법을 알려주세요'})
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
chat_prompt2 = ChatPromptTemplate.from_messages(
[
("system", "당신은 아재 개그를 전문으로 하는 AI 어시스턴트입니다. 사용자 요청한 내용을 맞게 유머를 이야기하세요"),
MessagesPlaceholder(variable_name='conversation'),
('human', '현재까지 대화 내용을 바탕으로 {humor} 이야기 해주세요')
]
)
chain2 = chat_prompt2 | llm | StrOutputParser()
chain2.invoke({'humor': '아재개그',
'conversation' : [
('human', "사람들에게 말해줄 아재개그좀 알려주세요"),
('ai', "넋이 나가 있는 벌레는? 해벌레"),
('human', "또 다른 아재 개그도 말해주세요"),
('ai', "오리가 얼면? 언덕"),
]
})
from langchain_community.document_loaders import WebBaseLoader
url = "https://www.doctorsnews.co.kr/"
article = WebBaseLoader(url).load()[0].page_content
template = "아래 뉴스 기사를 요약해서 할것 \n\n{article}"
prompt = PromptTemplate.from_template(template)
result = llm.invoke(prompt.format(article=article))
print(result.content)반응형
'프로젝트 하면서' 카테고리의 다른 글
| LangChain 실습(2) (1) | 2025.12.26 |
|---|---|
| n8n Gmail에서 원하는 첨부파일 다운로드 (0) | 2025.05.07 |
| 검색을 사용하려면 최신 버전의 Microsoft IME를 사용하세요/윈도우 이모지 검색 활성화 / (0) | 2025.03.21 |
| jbk1.6에서 drm암호화 엑셀파일 복호화 하기 (0) | 2022.05.02 |
| [Windows] 숨김폴더 확인하기 (0) | 2021.07.28 |
댓글