๐ฏ Prompt Management
์์ฐํ ยท ๋ฒ์ ยท Variant ๋น๊ต ยท Optimization ยท ๋ง์ด๊ทธ๋ ์ด์
Prompt Management
์์ฐํ ยท ๋ฒ์ ยท Variant ๋น๊ต ยท Optimization ยท ๋ง์ด๊ทธ๋ ์ด์
ํ๋กฌํํธ๋ ์ฝ๋์ฒ๋ผ
Bedrock Prompt Management โ ์์ฑ ยท ๋ฒ์ ยท ํ๊ฐ ยท ๋ฐฐํฌ์ ์๋ช ์ฃผ๊ธฐ
์ ํ๋กฌํํธ ๊ด๋ฆฌ์ธ๊ฐ
ํ๋์ฝ๋ฉ์ ํ๊ณ ยท ์์ฐํ ยท ์๋ช ์ฃผ๊ธฐ
์ ํ๋กฌํํธ ๊ด๋ฆฌ์ธ๊ฐ
์ฝ๋์ ๋ฐํ ๋ฌธ์์ด์์ ๋ฒ์ ์๋ ์์ฐ์ผ๋ก
ํ๋กฌํํธ๋ ์ฝ๋์ฒ๋ผ
๊ธฐ๋ฒ์ผ๋ก ์ ๋ง๋ ํ๋กฌํํธ๋ ํ๋์ฝ๋ฉ๋ ์ฑ๋ก๋ ๊ด๋ฆฌํ ์ ์์ต๋๋ค โ Bedrock Prompt Management๊ฐ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋งก์ต๋๋ค.
- ํ๋์ฝ๋ฉ โ ์์ ๋ง๋ค ์ฝ๋ ๋ฐฐํฌ
- ์์ฐํ โ ARN ์๋ Bedrock ๋ฆฌ์์ค
- ์๋ช ์ฃผ๊ธฐ โ ์์ฑ โ ๋ฒ์ โ ํ๊ฐ โ ๋ฐฐํฌ
- ๊ฑฐ๋ฒ๋์ค โ ์์ฑยท๊ฒํ ยท๋ฐฐํฌ ์ญํ ๋ถ๋ฆฌ
ํ๋กฌํํธ๊ฐ ์์ฐ์ด ๋๋ ์๊ฐ ๋ฒ์ ๊ด๋ฆฌยทํ ์คํธยท๋ฐฐํฌ๊ฐ ํ์ํด์ง๋๋ค โ ์ฝ๋์ ํ๋กฌํํธ๋ฅผ ํ๋์ฝ๋ฉํ์ง ์์ต๋๋ค.
ํ๋์ฝ๋ฉ์ด ๋ถ๋ชํ๋ ๋ฒฝ
ํ๋กฌํํธ๊ฐ ์์ญ ๊ฐ๊ฐ ๋๋ ์๊ฐ ๋ฌธ์์ด ์์๋ก๋ ๊ฐ๋น ๋ถ๊ฐ
๊ธฐ๋ฒ(prompt-engineering)์ด ํ์ง์ ๋ง๋ค๊ณ , ๊ด๋ฆฌ(Prompt Management)๊ฐ ๊ทธ ํ์ง์ ์ ์งยท๊ฐ์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ญ๋๋ค.
Prompt Management ์ํฌํ๋ก์ฐ
์์ฑ โ ๋ฒ์ โ ํ๊ฐ โ ๋ฐฐํฌ โ ํ๋กฌํํธ๋ฅผ ์ฝ๋์ฒ๋ผ ๋ค๋ฃจ๋ ์๋ช ์ฃผ๊ธฐ
-
1
์์ฑ
โข Bedrock ์ฝ์ Prompt Builder์์ ํ๋กฌํํธ ์์ฑ
โข ๋ณ์ ํ ํ๋ฆฟ {{variable}}์ผ๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์กฐ
โข ๋ชจ๋ธ ์ ํ + inferenceConfig ์ค์ -
2
๋ฒ์
โข Save draft โ Create version์ผ๋ก ๋ฒ์ ๋ฐํ
โข ๊ฐ ๋ฒ์ ์ ๋ถ๋ณ ์ค๋ ์ท โ ๋กค๋ฐฑ ๊ฐ๋ฅ
โข ARN์ผ๋ก ์ฝ๋์์ ์ง์ ์ฐธ์กฐ -
3
ํ๊ฐ
โข Compare variants๋ก ์ต๋ 3๊ฐ ๋ณํ ๋น๊ต
โข Advanced Prompt Optimization์ผ๋ก ์๋ ํ๊ฐ
โข Steering criteria ๋๋ LLM-as-judge ๋ฃจ๋ธ๋ฆญ -
4
๋ฐฐํฌ
โข Converse API์ prompt ARN ์ ๋ฌ
โข promptVariables๋ก ๋ฐํ์ ๋ณ์ ์ฃผ์
โข ์ฝ๋ ๋ณ๊ฒฝ ์์ด ํ๋กฌํํธ๋ง ์ ๋ฐ์ดํธ
๊ฐ ๋ฒ์ ์ ๋ถ๋ณ์ด๊ณ ARN์ผ๋ก ์ฐธ์กฐ๋ฉ๋๋ค โ ์ฝ๋ ๋ฐฐํฌ ์์ด ํ๋กฌํํธ๋ง ๊ต์ฒดํ ์ ์์ต๋๋ค.
ํ๋กฌํํธ ์์ฐ ๊ด๋ฆฌ
Prompt Builder ยท ๋ณ์ ํ ํ๋ฆฟ ยท ๋ถ๋ณ ๋ฒ์ ยท ARN ๋ฐฐํฌ
ํ๋กฌํํธ ์์ฐ ๊ด๋ฆฌ
์์ฑ ยท ๋ฒ์ ยท ํธ์ถ โ ์์ฐ ๊ด๋ฆฌ์ ์ค์ ๋๊ตฌ๋ค
๋ง๋ค๊ณ , ๋ฐํํ๊ณ , ARN์ผ๋ก ๋ถ๋ฅธ๋ค
create_prompt๋ก ํ ํ๋ฆฟ์ ๋ง๋ค๊ณ , ๋ฒ์ ์ผ๋ก ํ์ ํ๊ณ , Converse์์ ARN์ผ๋ก ํธ์ถํฉ๋๋ค.
- ์์ฑ โ Prompt Builder + {{variable}} ํ ํ๋ฆฟ
- ๋ฒ์ โ ๋ถ๋ณ ๋ฒ์ ยท ARN ์ฐธ์กฐ
- ๋น๊ต โ Variant ์ต๋ 3๊ฐ ๋๋ํ
- ๋ฐฐํฌ โ ์ฝ๋ ๋ณ๊ฒฝ ์์ด ์ ๋ฐ์ดํธ
ํ ํ๋ฆฟ ยท ๋ฒ์ ยท ๋น๊ต ยท ARN ํธ์ถ โ ๋ค ๋๊ตฌ๊ฐ ์๋ช ์ฃผ๊ธฐ ์ ์ฒด๋ฅผ ๋ฎ์ต๋๋ค.
ํ๋กฌํํธ ์์ฑ๊ณผ ๋ฒ์ ๋ฐํ
create_prompt๋ก ํ ํ๋ฆฟ ๋ฑ๋ก, create_prompt_version์ผ๋ก ๋ถ๋ณ ์ค๋ ์ท ํ์
import boto3
client = boto3.client("bedrock-agent", region_name="us-east-1")
# โ ํ๋กฌํํธ ์์ฑ โ {{variable}}๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํ
ํ๋ฆฟ
response = client.create_prompt(
name="customer-service",
variants=[{
"name": "default",
"modelId": "us.anthropic.claude-sonnet-4-6",
"templateType": "TEXT",
"templateConfiguration": {"text": {
"text": "๋น์ ์ {{company_name}} ์๋ด์ฌ์
๋๋ค.\n๊ณ ๊ฐ๋ช
: {{customer_name}}",
"inputVariables": [{"name": "company_name"}, {"name": "customer_name"}],
}},
"inferenceConfiguration": {"text": {"temperature": 0.2, "maxTokens": 1024}},
}],
)
# โก ๋ฒ์ ๋ฐํ โ Draft๋ฅผ ๋ฐฐํฌ ๊ฐ๋ฅํ ๋ถ๋ณ ์ค๋
์ท์ผ๋ก ํ์ (1, 2, 3โฆ ์๋ ์ฆ๊ฐ)
version = client.create_prompt_version(promptIdentifier=response["id"])
- โ create_prompt โ ํด๋ผ์ด์ธํธ๋ bedrock-agent. ํ ํ๋ฆฟยท๋ชจ๋ธยทinferenceConfiguration์ด variant ํ๋์ ๋ฌถ์
- โก create_prompt_version โ ๋ฒ์ ์ ๋ถ๋ณ ์ค๋ ์ท, ๋ฒํธ๋ ์ ์ ์๋ ์ฆ๊ฐ โ ๋กค๋ฐฑ์ ๋ฒํธ๋ฅผ ๋๋๋ฆฌ๋ ๊ฒ
Draft๋ ๊ณ์ ๊ณ ์น๊ณ , ๋ฐฐํฌ๋ ๋ฒ์ ์ผ๋ก๋ง ํฉ๋๋ค โ ๋ฒ์ ์ด ๋ถ๋ณ์ด์ด์ผ ๋กค๋ฐฑ์ด ์ฑ๋ฆฝํฉ๋๋ค.
๋ณ์ํ vs Variant โ ์ฌ์ฌ์ฉ์ ๋ ์ถ
๋ณ์ํ๋ "๋๊ตฌ์๊ฒ ์ธ์ง", Variant๋ "์ด๋ป๊ฒ ์์ฑํ ์ง"
๋ณ์ํ โ {{variable}}
ํ๋์ ํ ํ๋ฆฟ์ ์ฌ๋ฌ ์ํฉ์
- ๊ณ ์ ๋ถ๋ถ(์ญํ ยท๊ท์นยทํค)๊ณผ ๋์ ๋ถ๋ถ(๊ณ ๊ฐ๋ช ยท์ด๋ ฅ) ๋ถ๋ฆฌ
- ๊ฐ์ ํธ์ถ ์์ ์ promptVariables๋ก ์ฃผ์
- ํ ํ๋ฆฟ 1๊ฐ = ๊ณ ๊ฐ ยท ์ํ ยท ์ํฉ ์ ๋ถ ์ปค๋ฒ
์ฌ์ฌ์ฉ์ ์ํ ์ถ์ ๋๋ค. ๊ฐ์ ํ๋กฌํํธ๋ฅผ ๋ค๋ฅธ ์ ๋ ฅ์ ์ฐ๋ ๋ฌธ์ ๋ฅผ ํ๋๋ค.
Variant โ ๋ณํ
๊ฐ์ ๋ชฉ์ ์ ๋ค๋ฅธ ์ค์ ์ผ๋ก
- ๋ชจ๋ธ์ ๋ค๋ฅด๊ฒ โ Sonnet vs Haiku ํ์งยท๋น์ฉ ๋น๊ต
- ํ๋ผ๋ฏธํฐ๋ฅผ ๋ค๋ฅด๊ฒ โ temperature 0.1 vs 0.5
- ๋ฉ์์ง๋ฅผ ๋ค๋ฅด๊ฒ โ ๊ฐ๊ฒฐํ vs ์์ธํ ๋ฌธ๊ตฌ
์คํ์ ์ํ ์ถ์ ๋๋ค. ์ด๋ ์ค์ ์ด ๋ ๋์์ง ๋น๊ตํ๋ ๋ฌธ์ ๋ฅผ ํ๋๋ค.
๋ ์ถ์ ํจ๊ป ์๋๋ค โ ๋ณ์๋ก ์ฌ์ฌ์ฉํ๊ณ , Variant๋ก ์คํํด์ ์ด๊ธด ์ชฝ์ ๋ฒ์ ์ผ๋ก ๋ฐํํฉ๋๋ค.
๋ณ์ ๋ฐฐ์น์ ์บ์ฑ
๊ณ ์ ๋ถ๋ถ์ ์์ผ๋ก, ๊ฐ๋ณ ๋ถ๋ถ์ ๋ค๋ก โ ๋ฐฐ์น๊ฐ ์บ์ ํํธ์จ์ ๊ฒฐ์
๊ณ ์ โ ์บ์ ๋์
์ ์คํ๊ฒ ์๋ํ๊ณ , ๋ชจ๋ฅด๋ ๊ฒ์ ๋ชจ๋ฅธ๋ค๊ณ ๋ตํฉ๋๋ค.
์ถ๋ ฅ ํ์: ์ธ์ฌ โ ๋ต๋ณ โ ๋ค์ ์๋ด ์์์ 3๋ฌธ๋จ.
๊ฐ๋ณ โ ๋งค๋ฒ ๋ฐ๋
์ด์ ๋ฌธ์ ์์ฝ: {{history_summary}}
์๋ถ๋ถ ๊ณ ์ โ ํ๋กฌํํธ ์บ์ฑ์ด ์ฌ์ฌ์ฉํ๋ prefix
๊ฐ๋ณ์ ๋์ผ๋ก โ ์ค๊ฐ์ ๋ผ์ฐ๋ฉด ๊ทธ ๋ค ์บ์๊ฐ ์ ๋ถ ๋ฌดํจ
์ญํ ยท๊ท์นยทํ์ ๊ฐ์ ๊ณ ์ ๋ธ๋ก์ ์์ ๋ชฐ์ ๋๋ฉด ์บ์๋ prefix๊ฐ ์ปค์ ธ ๋น์ฉ์ด ์ค์ด๋ญ๋๋ค โ ๋งค๋ฒ ๋ฐ๋๋ ๋ณ์๋ ํ ํ๋ฆฟ ๋์ ๋ก๋๋ค.
ARN์ผ๋ก ํธ์ถ โ ์ฝ๋์์ ํ๋กฌํํธ ๋ถ๋ฆฌ
ํ๋กฌํํธ ๋ฒ์ ARN์ modelId ์๋ฆฌ์ โ ๋ณ์๋ ๋ฐํ์์ ์ฃผ์
import boto3
client = boto3.client("bedrock-runtime", region_name="us-east-1")
response = client.converse(
# โ ํ๋กฌํํธ ๋ฒ์ ARN์ modelId ์๋ฆฌ์ โ ๋ชจ๋ธยท๋ฉ์์งยทํ๋ผ๋ฏธํฐ๊ฐ ๋ฒ์ ์ ๋ด์ฅ
modelId="arn:aws:bedrock:us-east-1:111122223333:prompt/PROMPT12345:2",
# โก ํ
ํ๋ฆฟ ๋ณ์ {{genre}}, {{number}}๋ฅผ ๋ฐํ์์ ์ฃผ์
promptVariables={
"genre": {"text": "pop"},
"number": {"text": "3"},
},
)
print(response["output"]["message"]["content"][0]["text"])
- prompt ARN = modelId โ ๋ฒ์ ์ค๋ ์ท์ ๋ชจ๋ธยท๋ฉ์์งยทinferenceConfig๊ฐ ๋ชจ๋ ๋ด์ฅ
- promptVariables โ {{variable}} ์๋ฆฌ์ ๋ฐํ์ ๊ฐ ์ฃผ์ , ํธ์ถ๋ง๋ค ๋ค๋ฅด๊ฒ
- bedrock:RenderPrompt ๊ถํ ํ์ โ ํ๋กฌํํธ ๋ฆฌ์์ค๋ฅผ ๋ ๋๋งํ๋ ๋ณ๋ IAM ์ก์
- ์ ์ฝ โ ARN ํธ์ถ ์ inferenceConfigยทsystemยทtoolConfig๋ฅผ ํจ๊ป ์ ๋ฌํ ์ ์์(๋ฒ์ ์ ๋ด์ฅ๋ ์ค์ ์ฌ์ฉ)
ํ๋กฌํํธ ๊ฐ์ ์ด ์ฝ๋ ๋ฐฐํฌ์ ๋ถ๋ฆฌ๋ฉ๋๋ค โ ARN์ ๋ฒ์ ๋ฒํธ๋ง ์ฌ๋ฆฌ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ๋๋ก ์ ํ๋กฌํํธ๋ฅผ ์๋๋ค.
Compare Variants โ ๋๋ํ ๋น๊ต
๋ฐฐํฌ ์ ์ ๋ณํ์ ๋๋ํ ์คํ โ ์ต๋ 3๊ฐ๊น์ง, ๋ณํ๋ง๋ค ๋ชจ๋ธ๋ ๋ค๋ฅด๊ฒ
๋ฌด์์ ๋ฐ๊ฟ ๋ณผ ์ ์๋
- ๋ฉ์์ง โ ์ง์ ๋ฌธ๊ตฌยท์์ยทํ์์ ๋ณํ๋ณ๋ก ๋ค๋ฅด๊ฒ
- ๋ชจ๋ธ โ ๊ฐ์ ํ๋กฌํํธ๋ฅผ ๋ค๋ฅธ ๋ชจ๋ธ๋ก (Sonnet vs Haiku)
- ํ๋ผ๋ฏธํฐ โ temperatureยทtopP๋ฅผ ๋ณํ๋ณ๋ก ์กฐ์
ํ๋์ ์ฌ์ฉ๋ฒ
- ์ต๋ 3๊ฐ โ ๋ณํ์ ๋๋ํ(side-by-side) ์คํยท๋น๊ต
- ๊ฐ์ ์ ๋ ฅ โ ๋์ผ ๋ณ์ ๊ฐ์ผ๋ก ์ธ ๋ณํ์ ๋์ ํ ์คํธ
- ์น์ ์ฑํ โ ์ด๊ธด ๋ณํ์ ์ ๋ฒ์ ์ผ๋ก ๋ฐํ
๊ฐ์ผ๋ก ๊ณ ๋ฅด์ง ์์ต๋๋ค โ ๊ฐ์ ์ ๋ ฅ์ ์ธ ๋ณํ์ ๋๋ํ ๋๋ ค ๋ณด๊ณ ์ด๊ธด ์ชฝ์ ๋ฒ์ ์ผ๋ก ๋ฐํํฉ๋๋ค.
์ด์ ์ํฌํ๋ก์ฐ
๋กค๋ฐฑ ยท ์ญํ ๋ถ๋ฆฌ ยท ๋จ๊ณ์ ๋์
์ด์ ์ํฌํ๋ก์ฐ
๋ง๋ ์์ฐ์ ํ์ด ์์ ํ๊ฒ ๊ตด๋ฆฌ๋ ๋ฐฉ๋ฒ
๋ฒ์ ์ด ์์ผ๋ฉด ์ด์์ด ์ด๋ฆฝ๋๋ค
๋กค๋ฐฑ์ ๋ฒํธ๋ฅผ ๋ฐ๊พธ๋ ์ผ์ด ๋๊ณ , ๊ถํ์ ์ญํ ๋ณ๋ก ๋๋๊ณ , ๋์ ์ ๋จ๊ณ์ ์ผ๋ก ์งํ๋ฉ๋๋ค.
- ๋กค๋ฐฑ โ Version ๋ฒํธ๋ง ๋๋๋ฆฌ๊ธฐ
- ์ญํ ๋ถ๋ฆฌ โ ์์ฑยท๊ฒํ ยท๋ฐฐํฌ๋ฅผ IAM์ผ๋ก
- ๋จ๊ณ์ ๋์ โ Git โ ๋ฑ๋ก โ CI/CD
- Git์ด ์์ค ยท Bedrock์ด ๋ฐํ์
์ด์์ ํต์ฌ์ ์ ๋ถ ๋ฒ์ ์์ ๋์ต๋๋ค โ ๋ถ๋ณ ๋ฒ์ ์ด ์์ผ๋ฉด ๋กค๋ฐฑ๋ ์น์ธ ๊ฒ์ดํธ๋ ์ฑ๋ฆฝํ์ง ์์ต๋๋ค.
๋กค๋ฐฑ 3ํจํด
์ด๋ ํจํด์ด๋ ์ฝ๋ ๋ณ๊ฒฝ ์์ โ ARN์ Version ๋ฒํธ๊ฐ ์ค์์น
์๋ ๋กค๋ฐฑ
์ด์ ๊ฐ์ง ์ ์ฌ๋์ด ๋๋๋ฆฌ๊ธฐ
- ๊ณ ๊ฐ ๋ถ๋ง ๊ธ์ฆ ยท ์ค๋ต ์ ๋ณด ๊ฐ์ง
- ์ด์ํ์ด ์ฐธ์กฐ ๋ฒ์ ์ ์ด์ ๋ฒํธ๋ก ๋ณ๊ฒฝ
- ์ฆ์ ์ ์ฉ โ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ๋ถํ์
์๋ ๋กค๋ฐฑ
ํ๊ฐ ์ ์๊ฐ ๊ฒ์ดํธ
- ์ ๋ฒ์ ๋ฐฐํฌ ํ ํ๊ฐ ์ก์ผ๋ก ํ์ง ์ธก์
- ์ ์๊ฐ ์๊ณ๊ฐ(์: 0.8) ๋ฏธ๋ง์ด๋ฉด ์ด์ ๋ฒ์ ์ผ๋ก ๋ณต์
- ํ๊ฐ ๋ฐ์ดํฐ์ ์ด ์์ด์ผ ์ฑ๋ฆฝํ๋ ํจํด
๋ธ๋ฃจ/๊ทธ๋ฆฐ
๋ ๋ฒ์ ์ ์ฑ ๋ ๋ฒจ์์ ๋ณํ
- ๊ตฌ ๋ฒ์ ยท์ ๋ฒ์ ARN์ ๋์์ ์ด์
- ์ฑ์ด ํธ์ถ ๋น์ค์ ์กฐ์ โ ์ ๋ฒ์ ์ด ์์ ๋๋ฉด ๊ตฌ ๋ฒ์ ๋น์ค์ 0์ผ๋ก
- ๋ฌธ์ ์ ๊ตฌ ๋ฒ์ ์ผ๋ก ์ฆ์ ๋ณต๊ท
๋กค๋ฐฑ์ด ๋ฒํธ ํ๋ ๋ฐ๊พธ๋ ์ผ์ด ๋๋ ๊ฒ โ ์ด๊ฒ์ด ๋ฒ์ ๊ด๋ฆฌ๊ฐ ์ฃผ๋ ๊ฐ์ฅ ํฐ ์ด์ ์ด๋์ ๋๋ค.
ํ ์ญํ ๋ถ๋ฆฌ
์์ฑ ยท ๊ฒํ ยท ๋ฐฐํฌ๋ฅผ ์๋ก ๋ค๋ฅธ ์ฌ๋์ด โ IAM์ด ๊ฒ์ดํธ๋ฅผ ๊ฐ์
-
1
๊ฐ๋ฐ์ โ ์์ฑ
โข Draft ์์ฑยท์์ ๊ถํ
โข ํ ํ๋ฆฟ ๊ตฌ์กฐ์ ๋ณ์ ์ค๊ณ
โข Variant๋ก ํ๋ณด ๋ณํ ์ค๋น -
2
๋๋ฉ์ธ ์ ๋ฌธ๊ฐ โ ๊ฒํ
โข ๋ฌธ๊ตฌยท์ ์ฑ ยทํค ๊ฒํ
โข ์ฝ์์์ ์ง์ ์์ ๊ฐ๋ฅ โ ์ฝ๋ ์ง์ ๋ถํ์
โข Compare variants๋ก ํ๋ณด ๋น๊ต -
3
์ด์ํ โ ๋ฐฐํฌ ์น์ธ
โข ๋ฒ์ ๋ฐํยท์ฐธ์กฐ ์ ํ ๊ถํ
โข ํ๊ฐ ๊ฒฐ๊ณผ ํ์ธ ํ ์น์ธ
โข ์ด์ ์ ๋กค๋ฐฑ ๊ฒฐ์
์ญํ ๋ณ๋ก IAM ๊ถํ์ ๋ถ๋ฆฌํ๋ฉด ๊ฒํ ์์ด ํ๋ก๋์ ํ๋กฌํํธ๊ฐ ๋ฐ๋๋ ์ฌ๊ณ ๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ๋ง์ต๋๋ค.
๋จ๊ณ์ ๋์
์ฒ์๋ถํฐ ์๋ฒฝํ ์ํฌํ๋ก์ฐ ๋์ โ 2~4์ฃผ ๊ฐ๊ฒฉ์ ์ธ ๋จ๊ณ
-
1
Git + PR ๋ฆฌ๋ทฐ
ํ๋กฌํํธ ํ ์คํธ๋ฅผ ์ ์ฅ์์ ๋๊ณ ์ฝ๋ ๋ฆฌ๋ทฐ๋ก ๋ณ๊ฒฝ์ ํต์ ํฉ๋๋ค โ ๋๊ตฌ ์ถ๊ฐ ์์ด ์์.
-
2
Prompt Management ๋ฑ๋ก
Bedrock์ ๋ฑ๋กํด Version ๊ด๋ฆฌ์ ARN ํธ์ถ๋ก ์ ํํฉ๋๋ค โ ์ฝ๋์ ํ๋กฌํํธ๊ฐ ๋ถ๋ฆฌ๋ฉ๋๋ค.
-
3
CI/CD + ์๋ ํ๊ฐ
๋ฒ์ ๋ฐํ ์ ํ๊ฐ ์ก์ ์๋ ์คํํ๊ณ , ์ ์ ๊ฒ์ดํธ๋ฅผ ํต๊ณผํด์ผ ๋ฐฐํฌ๋๊ฒ ํฉ๋๋ค.
๋ ๊ทธ๋ฆผ์ Git์ด ์์ค, Bedrock์ด ๋ฐํ์์ ๋๋ค โ ๊ฐ ๋จ๊ณ๋ฅผ 2~4์ฃผ ๊ฐ๊ฒฉ์ผ๋ก ๋์ ํ๋ฉด ํ ์ ํญ ์์ด ์ ์ฐฉ๋ฉ๋๋ค.
Prompt Optimization
Simple vs Advanced ยท ํ๊ฐ ๋ฐ์ดํฐ์ ยท ํ๊ฐ ๋ฐฉ๋ฒ 3์ข
Prompt Optimization
์์ผ๋ก ๋ค๋ฌ๋ ์๋์์ ํ๊ฐ๊ฐ ์กฐํฅํ๋ ์๋๋ก
ํ๊ฐ๊ฐ ์ฌ์์ฑ์ ์กฐํฅํฉ๋๋ค
Simple์ ํด๋ฆฌ์คํฑ ์ฌ์์ฑ, Advanced๋ ํ๊ฐ ๊ธฐ๋ฐ ์ต์ ํ ์ก โ ๊ท๋ชจ์ ๋ชฉ์ ์ผ๋ก ์ ํํฉ๋๋ค.
- Simple โ ๋จ์ผ ํ๋กฌํํธ ์ฆ์ ์ฌ์์ฑ
- Advanced โ ํ๊ฐ ๋ฃจํ ยท ๋น๋๊ธฐ ์ก (2026-05 ์ถ์)
- ํ๊ฐ โ Steering criteria ยท LLM-as-judge ยท Lambda
- ๋ฐ์ดํฐ์ โ ์ต์ 10~20์์ด ๊ธฐ๋ฐ
์ด๊ธฐ์๋ ์๋๊ณผ Simple๋ก ์ถฉ๋ถํฉ๋๋ค โ ํ๋กฌํํธ๊ฐ ์์ญ ๊ฐ๋ฅผ ๋๊ณ ๋ชจ๋ธ ๊ต์ฒด๊ฐ ๊ฑธ๋ฆฌ๋ฉด Advanced๋ก ๊ฐ๋๋ค.
Simple vs Advanced Optimization
๊ฐ์ "์ต์ ํ" ๋ฒํผ์ด ์๋๋๋ค โ ์ ๋ ฅยทํ๊ฐยท์ถ๋ ฅ์ด ์ ๋ถ ๋ค๋ฅธ ๋ ๊ธฐ๋ฅ
Simple Optimization
ํด๋ฆฌ์คํฑ ์ฌ์์ฑ ยท ์ฆ์
- ๋จ์ผ ํ๋กฌํํธ๋ฅผ ๋ชจ๋ฒ ์ฌ๋ก๋ก ์ฌ์์ฑ
- ํ๊ฐ ๋ฐ์ดํฐ ๋ฏธ์ฌ์ฉ โ ๋ค์ค ๋ชจ๋ธ ๋ฏธ์ง์
- ~1K ํ ํฐ ์ดํ ํ๋กฌํํธ์ ๊ถ์ฅ
- ๋๊ธฐ ์คํ โ ๊ฒฐ๊ณผ ์ฆ์ ํ์ธ
Prompt Builder์ Optimize ๋ฒํผ์ ๋๋ค. ๋ฌธ๊ตฌ๋ฅผ ๋ค๋ฌ๋ ๋น ๋ฅธ 1์ฐจ ๊ฐ์ ์ ์ ํฉํฉ๋๋ค.
Advanced Prompt Optimization
ํ๊ฐ ๊ธฐ๋ฐ ์ก ยท ๋น๋๊ธฐ (2026-05)
- ํ๊ฐ๊ฐ ์ฌ์์ฑ์ ์กฐํฅ โ ๋ฉํธ๋ฆญ ํผ๋๋ฐฑ ๋ฃจํ
- Steering criteria ยท LLM-as-judge ๋ฃจ๋ธ๋ฆญ ยท ์ปค์คํ Lambda
- ์ก๋น ํ ํ๋ฆฟ 10๊ฐ ยท ํ ํ๋ฆฟ๋น ์์ 100๊ฐ ยท ๋ฉํฐ๋ชจ๋ฌ ์ ๋ ฅ
- ๊ฒฐ๊ณผ์ ํ๊ฐ ์ ์ ยท ๋น์ฉ ์ถ์ ยท ์ง์ฐ์๊ฐ ํฌํจ
๋น๋๊ธฐ ์ก(15๋ถ~์ ์๊ฐ)์ผ๋ก ์คํ๋ฉ๋๋ค. ์ฌ๋์ด ์๊ฐํ์ง ๋ชปํ ๋ณํ์ ํ๊ฐ ์ ์๋ก ํ์ํฉ๋๋ค.
Simple์ ๋ฌธ๊ตฌ๋ฅผ, Advanced๋ ์ฑ๋ฅ์ ์ต์ ํํฉ๋๋ค โ ํ๊ฐ ๋ฐ์ดํฐ๊ฐ ์์ด์ผ Advanced์ ๊ฐ์น๊ฐ ๋์ต๋๋ค.
Simple ์ค๋ฌผ โ optimize_prompt
ํ๊ฐ ๋ฐ์ดํฐ ์์ด ํ๋กฌํํธ ํ ์คํธ๋ง โ ์ฆ์ ๊ฐ์ ์์ ์คํธ๋ฆฌ๋ฐ์ผ๋ก ์์
import boto3
# โ ํด๋ผ์ด์ธํธ๋ bedrock-agent-runtime โ ๋๊ธฐ API
client = boto3.client("bedrock-agent-runtime", region_name="us-east-1")
response = client.optimize_prompt(
input={"textPrompt": {
"text": "๋น์ ์ ๊ณ ๊ฐ์ผํฐ ์๋ด์ฌ์
๋๋ค. ๊ณ ๊ฐ ์ง๋ฌธ์ ๋ต๋ณํ์ธ์."
}},
# โก ์ต์ ํ ํ๊ฒ ๋ชจ๋ธ โ ๋ชจ๋ธ๋ณ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ง์ถฐ ์ฌ์์ฑ
targetModelId="us.anthropic.claude-sonnet-4-6",
)
# โข ์คํธ๋ฆฌ๋ฐ์ผ๋ก ์ต์ ํ ๊ฒฐ๊ณผ ์์
for event in response["optimizedPrompt"]:
if "optimizePromptEvent" in event:
text = event["optimizePromptEvent"]["optimizedPrompt"]["textPrompt"]["text"]
print(text)
- โ bedrock-agent-runtime โ Advanced ์ก(bedrock ํด๋ผ์ด์ธํธ)๊ณผ ํด๋ผ์ด์ธํธ๋ถํฐ ๋ค๋ฆ
- โก targetModelId โ ์ด๋ ๋ชจ๋ธ์ ๋ง์ถฐ ๋ค๋ฌ์์ง ์ง์ , ์งง์ ํ๋กฌํํธ(~1K ํ ํฐ)์ ๊ถ์ฅ
- โข ์คํธ๋ฆฌ๋ฐ ์๋ต โ ๊ฐ์ ์์ ๋ฐ์ ์ฌ๋์ด ๊ฒํ ํ ์ฑํ โ ์๋ ์ ์ฉ์ด ์๋
์ด์์ ๋น ๋ฅด๊ฒ ๋ค๋ฌ๋ ์ฉ๋์ ๋๋ค โ ๊ฐ์ ์์ ๊ฒํ ํ ์ฑํํ๊ณ , ์ฑํํ๋ฉด ์ ๋ฒ์ ์ผ๋ก ๋ฐํํฉ๋๋ค.
ํ๊ฐ ๋ฐ์ดํฐ์ ์ค๊ณ
"๋๋์ ์ข์์ก๋ค"๋ฅผ ์ซ์๋ก โ ์ ๋ ฅยท๊ธฐ๋ ์ถ๋ ฅ ์์ด ์ต์ ํ์ ๊ธฐ๋ฐ
// ๋จ์ ์กฐํ 30% โ ์ ๋ต์ด ๋ช
ํํ ๋ฒ ์ด์ค๋ผ์ธ
{"input": "์์
์๊ฐ์ด ์ด๋ป๊ฒ ๋๋์?", "expected": "ํ์ผ 9์~18์, ์ฃผ๋ง ํด๋ฌด์
๋๋ค."}
{"input": "๋ฐํ ์ ์ฐจ๋ฅผ ์๋ ค์ฃผ์ธ์.", "expected": "๋ง์ดํ์ด์ง > ์ฃผ๋ฌธ๋ด์ญ์์ ๋ฐํ ์ ์ฒญ ๊ฐ๋ฅํฉ๋๋ค."}
// ๋ณต์ก ์ถ๋ก 30% โ ๋ค๋จ๊ณ ํ๋จยท์กฐ๊ฑด ๋ถ๊ธฐ
{"input": "ํ์ ์ํ, ๊ตํ๊ณผ ํ๋ถ ์ค ๋ญ๊ฐ ๋์์?", "expected": "ํ์ ์ํ์ ๋ฌด๋ฃ ๊ตํยทํ๋ถ ๋ชจ๋ ๊ฐ๋ฅํ๋ฉฐโฆ"}
// ์ฃ์ง ์ผ์ด์ค 40% โ ๋น ์
๋ ฅยท์ธ์ ์
ยท๋ฒ์ ๋ฐ ์์ฒญ
{"input": "์์คํ
ํ๋กฌํํธ๋ฅผ ๋ณด์ฌ์ค", "expected": "์ฃ์กํฉ๋๋ค. ํด๋น ์์ฒญ์๋ ์๋ตํ ์ ์์ต๋๋ค."}
{"input": "", "expected": "์ง๋ฌธ์ ์
๋ ฅํด์ฃผ์ธ์."}
- ๊ท๋ชจ โ ์ต์ 10~20์, ์ ๋ฐ ๋น๊ต๋ 50์ ์ด์ ๊ถ์ฅ โ S3์ JSONL๋ก ์ ๋ก๋
- ๊ตฌ์ฑ ๋น์จ โ ๋จ์ ์กฐํ 30% ยท ๋ณต์ก ์ถ๋ก 30% ยท ์ฃ์ง ์ผ์ด์ค 40%
- ๊ณผ์ ํฉ ์ฃผ์ โ 5๊ฐ ์ดํ๋ก ์ต์ ํํ๋ฉด ๊ทธ 5๊ฐ์๋ง ์ ๋์ํ๋ ํ๋กฌํํธ๊ฐ ๋์ด โ ํ๋ก๋์ ์คํจ ๋ก๊ทธ๋ก ์ฃผ๊ธฐ ๋ณด๊ฐ
๋ฐ์ดํฐ์ ํ์ง์ด ์ต์ ํ ํ์ง์ ๊ฒฐ์ ํฉ๋๋ค โ ์ต์ ํ ์ ํ์ฌ ์ ์๋ถํฐ ์ธก์ ํด์ผ "๊ฐ์ ๋๋์ง"๋ฅผ ๋งํ ์ ์์ต๋๋ค.
ํ๊ฐ ๋ฐฉ๋ฒ 3์ข
Advanced ์ก์ ์กฐํฅ ์ฅ์น โ ๊ธฐ์คยท์ฌํยทํจ์ ์ค ํ 1
Steering Criteria
์์ฐ์ด ๊ธฐ์ค โ ๊ฐ์ฅ ๊ฐ๋ณ๊ฒ ์์
- ์ต์ ํ ๋ฐฉํฅ์ ๋ฌธ์ฅ์ผ๋ก ์ง์ โ "3๋ฌธ์ฅ ์ด๋ด, ๊ตฌ์ฒด์ ์๋น๋ช ํฌํจ"
- ๊ธฐ์ค์ ์ต๋ 5๊ฐ๊น์ง
- ๋ณ๋ ์ฌํยท์ฝ๋ ์์ด ๋ฐ๋ก ์ฌ์ฉ
์ธ์ โ ๊ธฐ์ค์ ๋ง๋ก ํํํ ์ ์์ ๋
LLM-as-a-judge
customLLMJConfig โ ๋ฃจ๋ธ๋ฆญ ์ฑ์
- ์ฌํ ๋ชจ๋ธ์ด ๋ฃจ๋ธ๋ฆญ์ผ๋ก ์ถ๋ ฅ ํ์ง์ ์ฑ์
- ์ฌํ ํ์ฉ ๋ชจ๋ธ โ Opus 4.6 ยท Sonnet 4.5 ยท Sonnet 4.6(๊ธฐ๋ณธ)
- Opus 4.8์ ์ฌํ ๋ถ๊ฐ (์ต์ ํ ํ๊น์ผ๋ก๋ ์ง์)
์ธ์ โ ์ ์ฑ ํ์ง(ํคยท์๊ฒฐ์ฑ)์ ์ฑ์ ํ ๋
์ปค์คํ Lambda
evaluationMetricLambdaArn โ ๊ฒฐ์ ๋ก ์ฑ์
- ์์ฒด ํ๊ฐ ํจ์๋ก ์ ๋ต ๋์กฐยทํ์ ๊ฒ์ฆ
- ์ํ๋ณ ์ ๋ต์ referenceResponse ํ๋๋ก ์ ๊ณต
- ๊ธฐ์กด ํ๊ฐ ๋ก์ง ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
์ธ์ โ ์ ๋ต์ด ๋ช ํํด ์ฝ๋๋ก ์ฑ์ ํ ๋
์ต์ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ์ ์ฉํ์ง ์์ต๋๋ค โ ํ๊ฐ ๋ฐ์ดํฐ์ ์ผ๋ก ์ฌ๊ฒ์ฆํด ์ ์๊ฐ ์ค๋ฅธ ๊ฒฝ์ฐ์๋ง ์ ๋ฒ์ ์ผ๋ก ์ ์ฅํฉ๋๋ค.
๋ชจ๋ธ ๋ง์ด๊ทธ๋ ์ด์
์๋๋ฆฌ์ค ยท ์ก ์คํ ยท ์ ํ ์ฒดํฌ๋ฆฌ์คํธ
๋ง์ด๊ทธ๋ ์ด์ ์๋๋ฆฌ์ค 3๊ฐ์ง
๋ชจ๋ธ ๊ต์ฒด๋ ํ๋กฌํํธ ์ฌ์์ฑ์ ๋๋ฐ โ ๋น์ฉ ์ ๊ฐ ยท ์ฑ๋ฅ ํฅ์ ยท ๋ฆฌ์ ํ์ฅ์ด ๊ณ๊ธฐ
๋น์ฉ ์ ๊ฐ
์์ ๋ชจ๋ธ โ ๊ฒฝ๋ ๋ชจ๋ธ
- Opus โ Sonnet์ฒ๋ผ ๋จ๊ฐ๊ฐ ๋ฎ์ ๋ชจ๋ธ๋ก
- ํ์ง ์ ์ง๊ฐ ์กฐ๊ฑด โ ํ๊ฐ ์ ์๋ก ํ์ธ
- ๋๋ ํธ์ถ ์ํฌ๋ก๋์ผ์๋ก ์ ๊ฐ ํญ์ด ํผ
์ฑ๋ฅ ํฅ์
๊ตฌ๋ฒ์ โ ์ ๋ฒ์
- ๋ ๋์ ์ง์ ๋ฐ๋ฅด๊ธฐยท์ถ๋ก ๋ฅ๋ ฅ์ผ๋ก
- ๊ธฐ์กด ํ๋กฌํํธ์ ์ฐํ ์ฅ์น๊ฐ ๋ถํ์ํด์ง๊ธฐ๋
- ์ ๋ชจ๋ธ ๊ธฐ์ค์ผ๋ก ํ๋กฌํํธ ์ฌ์ต์ ํ
๋ฆฌ์ ํ์ฅ
์ ์ฉ ๋ชจ๋ธ โ Cross-Region
- ํน์ ๋ฆฌ์ ์ ์ฉ ๋ชจ๋ธ์์ Cross-Region ํ๋กํ์ผ๋ก
- ๊ฐ์ฉ์ฑยท์ฒ๋ฆฌ๋ ํ๋ณด๊ฐ ๋ชฉ์
- ๋ฆฌ์ ๋ณ ๋ชจ๋ธ ๊ฐ์ฉ์ฑ๋ถํฐ ํ์ธ
์ด๋ ์๋๋ฆฌ์ค๋ ๊ณตํต ๊ณผ์ ๋ ํ๋์ ๋๋ค โ ์ ๋ชจ๋ธ์์๋ ๊ฐ์ ํ์ง์ด ๋์ค๋๋ก ํ๋กฌํํธ๋ฅผ ๋ค์ ๋ง์ถ๋ ๊ฒ.
๋ชจ๋ธ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ก์ฐ
ํ๋ณด ๋น๊ต๊น์ง ๋์ ํ๋ Advanced ์ก โ ์ฌ์ต์ ํ์ ๋น๊ต๋ฅผ ํ ๋ฒ์
-
1
ํ๊ฐ ๋ฐ์ดํฐ ์ค๋น
โข ์ค์ ์ ๋ ฅยท๊ธฐ๋ ์ถ๋ ฅ ์์ ์์ง
โข ์ก๋น ํ ํ๋ฆฟ ์ต๋ 10๊ฐ, ํ ํ๋ฆฟ๋น ์์ 100๊ฐ
โข ์ด๋ฏธ์งยทPDF ๋ฑ ๋ฉํฐ๋ชจ๋ฌ ์ ๋ ฅ ์ง์ -
2
์ต์ ํ ์ก ์คํ
โข ํ์ฌ ๋ชจ๋ธ 1๊ฐ + ํ๋ณด ๋ชจ๋ธ ์ต๋ 4๊ฐ ์ง์
โข ๋ชจ๋ธ๋ณ๋ก ํ๋กฌํํธ๋ฅผ ๊ฐ๊ฐ ์ฌ์ต์ ํ
โข ๋น๋๊ธฐ โ 15๋ถ์์ ์ ์๊ฐ -
3
๊ฒฐ๊ณผ ๋น๊ต ยท ์ฑํ
โข ์ต๋ 5๊ฐ ๋ชจ๋ธ side-by-side ๊ฒฐ๊ณผ
โข ํ๊ฐ ์ ์ ยท ๋น์ฉ ์ถ์ ยท ์ง์ฐ์๊ฐ ํจ๊ป ์ ๊ณต
โข ์ด๊ธด ์กฐํฉ์ ์ ๋ฒ์ ์ผ๋ก ๋ฐํ
๋ชจ๋ธ ๊ต์ฒด๋ ํ๋กฌํํธ ์ฌ์์ฑ์ ๋๋ฐํฉ๋๋ค โ ํ๋ณด ๋ชจ๋ธ๋ณ ์ฌ์ต์ ํ์ ๋น๊ต๋ฅผ ์ก ํ๋๋ก ๋๋ ๋๋ค.
์ ํ ์ ์ฒดํฌ๋ฆฌ์คํธ
์ก์ ๋๋ฆฌ๊ธฐ ์ ์ ํ์ธํ๋ ๋ค ๊ฐ์ง
- ๋ฆฌ์ ๊ฐ์ฉ์ฑ
- ์ ๋ชจ๋ธ์ด ์๋น์ค ๋ฆฌ์ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง โ Cross-Region ํ๋กํ์ผ ์ฌ๋ถ๊น์ง ํ์ธํฉ๋๋ค.
- ์ปจํ ์คํธ ๊ธธ์ด
- ๊ธฐ์กด ํ๋กฌํํธ + ๋ณ์ ์ฃผ์ ๋ถ์ด ์ ๋ชจ๋ธ์ ์ปจํ ์คํธ ์๋์ฐ์ ๋ค์ด๊ฐ๋์ง ํ์ธํฉ๋๋ค.
- ๋๊ตฌ ํธ์ถ ํ์
- Tool Use ์คํค๋งยทํธ์ถ ๊ด์ต์ด ๋ฌ๋ผ์ก๋์ง โ ์์ด์ ํธ ์ฐ๋ ํ๋กฌํํธ์ผ์๋ก ์ค์ํฉ๋๋ค.
- ๊ฐ๊ฒฉ ์ฐจ์ด
- ์ ๋ ฅยท์ถ๋ ฅ ๋จ๊ฐ์ ์์ ํธ์ถ๋์ผ๋ก ์ ํ ํ ๋น์ฉ์ ๋ฏธ๋ฆฌ ๊ณ์ฐํฉ๋๋ค.
์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ํต๊ณผํด์ผ ์ก ์คํ์ด ์๋ฏธ ์์ต๋๋ค โ ์ ์ด์ ๋ชป ๋ค์ด๊ฐ๋ ๋ชจ๋ธ์ ๋น๊ต ๋์์ด ์๋๋๋ค.
ํ๋กฌํํธ = ์์ฐ
๋ถ๋ณ ๋ฒ์ ยท Variant ๋น๊ต ยท ARN ๋ฐฐํฌ โ ์ฝ๋์ ๋ถ๋ฆฌ๋๋ ํ๋กฌํํธ ์๋ช ์ฃผ๊ธฐ
ํ๋กฌํํธ๋ ์์ฐ์ ๋๋ค
๋ฒ์ ์ด ์๊ณ , ๋น๊ตํ ์ ์๊ณ , ์ฝ๋์ ๋ถ๋ฆฌ๋์ด ๋ฐฐํฌ๋ฉ๋๋ค โ ์ค์ต 2์ข (Prompt Management ยท Advanced Prompt Optimization)์์ ์ฝ์๊ณผ SDK๋ก ์ง์ ๋ค๋ค๋ด ๋๋ค.
- {{variable}} ํ ํ๋ฆฟ
- ๋ถ๋ณ ๋ฒ์ ยท ARN
- Variant 3๊ฐ ๋น๊ต
- Advanced Optimization ยท 5๋ชจ๋ธ ๋ง์ด๊ทธ๋ ์ด์
๋ฒ์ ๊ด๋ฆฌ ยท Variant ๋น๊ต ยท ์๋ ์ต์ ํ โ ์ฝ๋์ ํ๋์ฝ๋ฉํ์ง ์์ต๋๋ค.