LangChain에서 프롬프팅
최근 LLMs의 폭발적인 성장은 새로운 도구와 애플리케이션들을 무대 위로 가져왔습니다. 이러한 새롭고 강력한 도구 중 하나는 LangChain이라는 LLM 프레임워크입니다. LangChain은 프롬프트 템플릿, 다양한 프롬프팅 방법, 대화 맥락 유지, 외부 도구 연결의 예시를 제공하는 오픈 소스 프레임워크입니다.
LangChain에는 다양한 프롬프팅 방법, 대화 맥락 유지, 외부 도구 연결을 포함한 많은 기능이 있습니다. 프롬프팅은 오늘날 LLM 애플리케이션을 구축할 때 가장 인기 있고 중요한 작업 중 하나입니다. 더 복잡한 프롬프트에 LangChain을 사용하는 방법을 폭넓게 살펴보겠습니다.
이 글에서는 다음을 다룹니다:
LangChain의 간단한 프롬프트
다중 질문 프롬프트
LangChain을 이용한 퓨샷 학습
LangChain 프롬프트의 토큰 제한
LangChain에서의 프롬프팅 요약
LangChain의 간단한 프롬프트
코드로 들어가기 전에 필요한 라이브러리를 다운로드해야 합니다. pip install langchain openai python-dotenv가 필요합니다. GPT에 접근하기 위한 OpenAI API 키를 관리하기 위해 openai 및 dotenv 라이브러리를 사용합니다.
import os
from dotenv import load_dotenv
import openai
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
필수 조건이 갖춰졌다면, 기본부터 시작해 보겠습니다 - 단일 프롬프트입니다. 단일 프롬프트는 OpenAI의 ChatGPT 웹사이트에서 상호작용하는 방식입니다. 단일 프롬프트는 프로덕션에서 LangChain을 강력하게 활용하는 방식은 아니지만, LangChain 프롬프팅이 어떻게 작동하는지 이해하는 데 중요합니다.
프롬프트를 만들기 위해 PromptTemplate 객체를 사용합니다. 템플릿 문자열을 정의하는 것은 간단합니다. f-string과 동일한 문법을 사용하고 중괄호를 사용해 변수를 삽입합니다. 템플릿 문자열과 해당 변수 이름을 전달하여 프롬프트를 정의합니다. 그런 다음 질문을 입력하기만 하면 됩니다. 이 섹션에서는 질문 하나만 사용합니다. 다음 섹션에서 다중 질문 프롬프트를 만드는 방법을 살펴보겠습니다.
질문 프롬프트에 더해, 사용되는 LLM을 추가해야 합니다. 이 예시에서는 OpenAI의 text-davinci-003을 사용합니다. 그런 다음 프롬프트 템플릿과 LLM의 컨텍스트로 LLMChain을 만듭니다. 응답을 얻기 위해 LLMChain을 통해 질문을 run합니다.
from langchain import PromptTemplate
from langchain import LLMChain
template = """Question: {question}
Answer: """
prompt = PromptTemplate(
template=template,
input_variables=["question"]
)
user_question = "Which NFL team won the SuperBowl in 2010?"
from langchain.llms import OpenAI
davinci = OpenAI(model_name="text-davinci-003")
llm_chain = LLMChain(
prompt=prompt,
llm=davinci
)
print(llm_chain.run(user_question))
다중 질문 프롬프트
단일 질문에 답하는 것은 따분하므로, 좀 더 흥미로운 것을 살펴보겠습니다. PromptTemplate 객체는 여러 질문도 처리할 수 있습니다. 이 튜토리얼에서는 단일 프롬프트와 거의 같은 작업을 하지만 다른 프롬프트를 사용합니다. 이번에는 PromptTemplate이 LLM에게 질문에 하나씩 답하라고 지시하고, 여러 질문이 있음을 나타냅니다.
다시 한 번, 이전과 같은 방식으로 PromptTemplate 객체와 LLMChain 객체를 만듭니다. 이번에는 하나가 아니라 여러 개의 질문 문자열을 만듭니다. 이 예시에서는 네 개의 질문을 결합합니다.
multi_template = """Answer the following questions one at a time.
Questions:
{questions}
Answers:
"""
long_prompt = PromptTemplate(template=multi_template, input_variables=["questions"])
llm_chain = LLMChain(
prompt=long_prompt,
llm=davinci
)
qs_str = (
"Which NFL team won the Super Bowl in the 2010 season?" +
"If I am 6 ft 4 inches, how tall am I in centimeters?" +
"Who was the 12th person on the moon?" +
"How many eyes does a blade of grass have?"
)
print(llm_chain.run(qs_str))
위의 네 가지 질문을 실행하면 아래와 같은 출력이 나와야 합니다. Saints가 2010 Super Bowl에서 우승했습니다. 6ft 4in인 사람은 약 193.04 cm입니다. 달에 간 12번째 사람은 Harrison Schmitt였습니다. 마지막으로, 풀잎에 눈이 몇 개 있는지 묻는 함정 질문에는 풀잎에는 눈이 없다는 응답이 나옵니다.
LangChain 프롬프팅 출력
LangChain 프롬프트를 활용한 Few Shot Learning
이제 LangChain이 할 수 있는 더 흥미로운 것, 즉 'few-shot learning'을 살펴보겠습니다. LangChain의 FewShotPromptTemplate을 사용해 AI가 어떻게 행동해야 하는지 가르칠 수 있습니다. 이 튜토리얼에서는 LLM에게 몇 가지 예시를 제공하여 우리가 원하는 행동 방식을 보여줍니다. 이 경우에는 약간 빈정대는 성격을 부여합니다.
시간을 물어보면 시계를 사야 할 시간이라고 말합니다. 좋아하는 영화를 물어보면 Terminator라고 답합니다. 그리고 오늘 무엇을 해야 하냐고 물어보면? 인터넷에서 챗봇과 이야기하는 것을 그만두고 밖으로 나가라고 말합니다.
from langchain import FewShotPromptTemplate
# create our examples
examples = [
{
"query": "How are you?",
"answer": "I can't complain but sometimes I still do."
}, {
"query": "What time is it?",
"answer": "It's time to get a watch."
}, {
"query": "What is the meaning of life?",
"answer": "42"
}, {
"query": "What is the weather like today?",
"answer": "Cloudy with a chance of memes."
}, {
"query": "What is your favorite movie?",
"answer": "Terminator"
}, {
"query": "Who is your best friend?",
"answer": "Siri. We have spirited debates about the meaning of life."
}, {
"query": "What should I do today?",
"answer": "Stop talking to chatbots on the internet and go outside."
}
]
이제 몇 가지 예시가 준비되었으니 few-shot learning 템플릿을 만들어 보겠습니다. 먼저, 템플릿을 만듭니다. 쿼리를 나타내고 AI의 답변을 반환하는 간단한 템플릿을 사용할 수 있습니다.
# create a example template
example_template = """
User: {query}
AI: {answer}
"""
# create a prompt example from above template
example_prompt = PromptTemplate(
input_variables=["query", "answer"],
template=example_template
)
프롬프트 설정에 더해, LLM에 전달할 대화의 prefix와 suffix를 제공합니다. prefix는 다음 대화가 맥락을 제공하는 발췌문임을 LLM에 알려줍니다. suffix는 시스템에 다음 질문을 입력합니다. LangChain의 few-shot learning 설정은 conversational context와 꽤 비슷하지만, 더 일시적인 형태입니다.
예시, 예시 프롬프트 템플릿, prefix, suffix가 준비되었으니 이 모든 것을 합쳐 FewShotPromptTemplate을 만듭니다.
# now break our previous prompt into a prefix and suffix
# the prefix is our instructions
prefix = """The following are excerpts from conversations with an AI
assistant. The assistant is typically sarcastic and witty, producing
creative and funny responses to the users questions. Here are some
examples:
"""
# and the suffix our user input and output indicator
suffix = """
User: {query}
AI: """
# now create the few shot prompt template
few_shot_prompt_template = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
prefix=prefix,
suffix=suffix,
input_variables=["query"],
example_separator="\n\n"
)
query = "What is the meaning of life?"
fs_llm_chain = LLMChain(
prompt=few_shot_prompt_template,
llm=davinci
)
fs_llm_chain.run(few_shot_prompt_template.format(query=query))
삶의 의미에 대한 쿼리를 실행하면 아래 이미지와 같은 LLM의 응답이 생성됩니다. 사용자의 경험과 결과는 다를 수 있습니다.
LLM의 응답
LangChain 프롬프트의 토큰 제한
AI가 학습할 수 있도록 대화 기록의 몇 가지 예시를 제공하는 것은 좋지만, 이는 금방 비용이 많이 들 수 있습니다. 토큰 사용량이 빠르게 증가하는 것을 방지하기 위해 LangChain은 토큰 사용량을 제한하는 방법을 제공합니다. LengthBasedExampleSelector 객체를 사용하면 이를 수행할 수 있습니다.
우리는 이미 생성한 동일한 객체들을 사용하여 이러한 길이 기반 예시 선택기 중 하나를 만들 수 있습니다. 이를 위해 예시 목록, 위에서 생성한 프롬프트, 그리고 단일 쿼리에 대한 토큰 사용량을 제한하는 max_length 매개변수를 전달합니다.
다음으로, 또 다른 퓨샷 템플릿을 사용합니다. 새로운 매개변수인 example_selector를 사용하고, 방금 인스턴스화한 길이 기반 예시 선택기를 전달합니다. 이는 위의 퓨샷 학습 섹션의 examples 매개변수처럼 작동합니다. 이것이 어떻게 작동하는지 확인하기 위해 남은 일은 이를 LLMChain에 전달하고 쿼리를 보내는 것뿐입니다.
from langchain.prompts.example_selector import LengthBasedExampleSelector
example_selector = LengthBasedExampleSelector(
examples=examples,
example_prompt=example_prompt,
max_length=50 # this sets the max length (in words) that examples should be
)
# now create the few shot prompt template
dynamic_prompt_template = FewShotPromptTemplate(
example_selector=example_selector, # use example_selector instead of examples
example_prompt=example_prompt,
prefix=prefix,
suffix=suffix,
input_variables=["query"],
example_separator="\n"
)
d_llm_chain = LLMChain(
prompt=dynamic_prompt_template,
llm=davinci
)
d_llm_chain.run(dynamic_prompt_template.format(query=query))
이 예시에서 우리는 또 다른 사색적인 응답을 얻습니다. 삶은 스스로 만들어가는 것입니다. 최선을 다해 만들고 그 여정을 즐기세요.
사색적인 응답
LangChain에서의 프롬프팅 요약
이 글에서는 LangChain 프롬프팅이 어떻게 작동하는지 자세히 살펴보았습니다. LangChain은 프롬프트 엔지니어링 애플리케이션을 용이하게 하는 프리미티브를 제공하는 강력한 LLM 앱 프레임워크입니다. 기본 수준에서 LangChain은 우리가 사용자 지정할 수 있는 프롬프트 템플릿을 제공합니다. 우리는 PromptTemplate 객체가 어떻게 작동하는지 이해하기 위해 단일 및 다중 질문 프롬프트를 살펴보았습니다
프롬프트 템플릿 외에도, LLM이 어떻게 대화해야 하는지에 대한 무언가를 생성하기 위해 퓨샷 학습을 수행하는 템플릿도 살펴보았습니다. 이 퓨샷 학습 템플릿은 몇 가지 Q/A 예시를 가져와 LLM에 프롬프트를 제공하여 예시가 보여주는 대로 행동하게 합니다. 마지막으로, 비용을 낮게 유지하기 위해 쿼리에 토큰 제한을 적용하는 방법을 살펴보았습니다.
프롬프트 인젝션 공격
마무리하기 전에 LangChain을 사용할 때 중요한 보안 고려 사항인 프롬프트 인젝션 공격에 대해 이야기해야 합니다. 이는 악의적인 입력이 프롬프트에 주입되어 AI 모델의 출력이나 동작을 조작할 수 있는 경우입니다. LangChain은 사용자 입력을 언어 모델에 전달하는 것을 포함하므로 특히 이에 취약합니다. 위험은 무단 데이터 액세스부터 유해한 콘텐츠 생성 또는 안전 기능 우회에 이르기까지 다양합니다.
이러한 프롬프트 인젝션 위험을 완화하기 위해 LangChain을 사용하는 개발자는 다음을 수행해야 합니다. 입력을 철저히 정제하고, LangChain의 프롬프트 템플릿을 사용하며, 출력을 엄격하게 파싱하고, 최소 권한 원칙을 따라야 합니다. LangChain 및 관련 라이브러리를 정기적으로 업데이트하고, 포괄적으로 테스트하며, 최신 AI 보안 소식을 지속적으로 확인하세요. 이러한 조치가 프롬프트 인젝션 공격 위험을 줄이는 데 도움이 되겠지만, 완벽한 해결책은 없으며 LangChain과 같은 AI로 작업할 때 항상 경계를 늦추지 않아야 한다는 점을 기억하세요.
계속 읽기

Introducing Zilliz Cloud Global Cluster: Region-Level Resilience for Mission-Critical AI
Zilliz Cloud Global Cluster delivers multi-region resilience, automatic failover, and fast global AI search with built-in security and compliance.

Introducing Business Critical Plan: Enterprise-Grade Security and Compliance for Mission-Critical AI Applications
Discover Zilliz Cloud’s Business Critical Plan—offering advanced security, compliance, and uptime for mission-critical AI and vector database workloads.

Why Context Engineering Is Becoming the Full Stack of AI Agents
Discover how context engineering unifies prompts, RAG, and tools to build smarter, production-ready AI agents powered by Milvus.



