전통적인 소프트웨어 애플리케이션은 코드를 작성하여 구축되지만, AI 애플리케이션은 종종 prompt에서 로직을 도출합니다. 이 가이드는 LangSmith에서 prompt engineering의 핵심 개념을 안내합니다.

왜 prompt engineering인가?

prompt는 모델의 무대를 설정합니다. 마치 즉흥 공연에서 관객이 배우의 다음 연기를 지시하는 것처럼 - 모델의 기본 능력을 변경하지 않고 행동을 안내합니다. 배우에게 “해적이 되어라”라고 말하는 것이 그들의 연기 방식을 결정하는 것처럼, prompt는 모델이 응답하는 방식을 형성하는 지침, 예제 및 컨텍스트를 제공합니다. Prompt engineering은 모델의 행동 방식을 변경할 수 있게 해주기 때문에 중요합니다. 모델의 행동을 변경하는 다른 방법(fine-tuning 등)이 있지만, prompt engineering은 일반적으로 시작하기 가장 간단하며 종종 가장 높은 ROI를 제공합니다. 우리는 종종 prompt engineering이 다학제적이라는 것을 봅니다. 때로는 최고의 prompt engineer가 애플리케이션을 구축하는 소프트웨어 엔지니어가 아니라 제품 관리자나 다른 도메인 전문가일 수 있습니다. 이러한 학제 간 구축을 지원하기 위한 적절한 도구와 인프라를 갖추는 것이 중요합니다.

Prompts vs. prompt templates

이러한 용어를 종종 혼용하여 사용하지만, “prompts”와 “prompt templates”의 차이를 이해하는 것이 중요합니다. Prompts는 language model에 전달되는 메시지를 의미합니다. Prompt Templates는 원하는 정보를 담기 위해 prompt를 포맷하는 방법을 의미합니다. Prompt templates는 few shot 예제, 외부 컨텍스트 또는 prompt에 필요한 기타 외부 데이터에 대한 변수를 포함할 수 있습니다.

LangSmith의 Prompts

LangSmith에서 prompt templates를 저장하고 버전 관리할 수 있습니다. 이해해야 할 prompt template의 몇 가지 주요 측면이 있습니다.

Chat vs Completion

두 가지 다른 유형의 prompts가 있습니다: chat 스타일 prompts와 completion 스타일 prompts. Chat 스타일 prompts는 메시지 목록입니다. 이것은 요즘 대부분의 model API에서 지원하는 prompting 스타일이므로 일반적으로 선호되어야 합니다. Completion 스타일 prompts는 단순히 문자열입니다. 이것은 오래된 prompting 스타일이므로 주로 레거시 이유로 존재합니다.

F-string vs. mustache

f-string 또는 mustache 형식을 사용하여 입력 변수로 prompt를 포맷할 수 있습니다. 다음은 f-string 형식의 예제 prompt입니다:
Hello, {name}!
그리고 다음은 mustache를 사용한 예제입니다:
Hello, {{name}}!
조건부 mustache prompt를 추가하려면:
{{#is_logged_in}}  Welcome back, {{name}}!{{else}}  Please log in.{{/is_logged_in}}
  • playground UI는 is_logged_in 변수를 인식하지만, 중첩된 변수는 직접 지정해야 합니다. 위의 조건부 prompt가 작동하도록 하려면 다음을 inputs에 붙여넣으세요:
{  "name": "Alice"}
LangSmith Playground는 기본 template 형식으로 f-string을 사용하지만, prompt 설정/template 형식 섹션에서 mustache 형식으로 전환할 수 있습니다. mustache는 조건부 변수, 루프 및 중첩된 키에 대해 더 많은 유연성을 제공합니다. 조건부 변수의 경우 ‘inputs’ 섹션에서 json 변수를 수동으로 추가해야 합니다. 문서를 읽어보세요

Tools

Tools는 LLM이 외부 세계와 상호 작용하는 데 사용할 수 있는 인터페이스입니다. Tools는 이름, 설명 및 tool을 호출하는 데 사용되는 인수의 JSON schema로 구성됩니다.

Structured output

Structured output은 대부분의 최신 LLM의 기능으로, 원시 텍스트를 출력으로 생성하는 대신 지정된 schema를 따릅니다. 이것은 내부적으로 Tools를 사용할 수도 있고 사용하지 않을 수도 있습니다.
Structured outputs는 tools와 유사하지만 몇 가지 주요 차이점이 있습니다. Tools의 경우 LLM이 호출할 tool을 선택합니다(또는 아무것도 호출하지 않을 수 있음). structured output의 경우 LLM은 항상 이 형식으로 응답합니다. Tools의 경우 LLM이 여러 tools를 선택할 수 있습니다. structured output의 경우 하나의 응답만 생성됩니다.

Model

선택적으로 prompt template과 함께 model 구성을 저장할 수 있습니다. 여기에는 model의 이름과 기타 매개변수(temperature 등)가 포함됩니다.

Prompt versioning

버전 관리는 다양한 prompts를 반복하고 협업하는 데 핵심적인 부분입니다.

Commits

prompt에 대한 모든 저장된 업데이트는 새로운 commit을 생성합니다. 이전 commit을 볼 수 있어 이전 prompt 버전을 검토하거나 필요한 경우 이전 상태로 되돌리기 쉽습니다. SDK에서는 prompt 이름과 함께 commit hash를 지정하여 prompt의 특정 commit에 액세스할 수 있습니다(예: prompt_name:commit_hash). UI에서는 Commits 탭의 오른쪽 상단에 있는 “diff” 버튼을 토글하여 commit을 이전 버전과 비교할 수 있습니다.

Tags

새로운 commit이 추가되더라도 참조할 수 있도록 사람이 읽을 수 있는 tag로 prompt commit에 태그를 지정할 수 있습니다. 일반적인 사용 사례로는 dev 또는 prod tag로 prompt에 태그를 지정하는 것이 있습니다. 이를 통해 어떤 버전의 prompts가 어디에서 사용되는지 추적할 수 있습니다.

Prompt playground

Prompt playground는 prompts를 반복하고 테스트하는 과정을 원활하게 만듭니다. 사이드바에서 또는 저장된 prompt에서 직접 playground에 들어갈 수 있습니다. Playground에서 다음을 수행할 수 있습니다:
  • 사용 중인 model 변경
  • 사용 중인 prompt template 변경
  • output schema 변경
  • 사용 가능한 tools 변경
  • prompt template을 통해 실행할 입력 변수 입력
  • model을 통해 prompt 실행
  • outputs 관찰

여러 prompts 테스트

playground에 더 많은 prompts를 추가하여 outputs를 쉽게 비교하고 어떤 버전이 더 나은지 결정할 수 있습니다:

Dataset에 대한 테스트

dataset에 대해 테스트하려면 오른쪽 상단에서 dataset을 선택하고 Start를 누르기만 하면 됩니다. 결과가 스트리밍되는지 여부와 테스트의 반복 횟수를 수정할 수 있습니다. “View Experiment” 버튼을 클릭하여 테스트 결과를 더 자세히 살펴볼 수 있습니다.

비디오 가이드


Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I