๐ฏ ํ๋กฌํํธ ์์ง๋์ด๋ง
System Prompt, Few-shot, CoT, ์ค์ ํจํด, ํ๊ฐ
ํ๋กฌํํธ ์์ง๋์ด๋ง
๊ตฌ์กฐ ยท System Prompt ยท ํต์ฌ ๊ธฐ๋ฒ ยท ์ค์ ํจํด ยท ์ถ๋ก ํ๋ผ๋ฏธํฐ
ํ๋กฌํํธ๊ฐ ๊ณง ํ๋ก๊ทธ๋๋ฐ์ด๋ค
LLM์ ํ๋์ ์ ์ดํ๋ ๊ฐ์ฅ ์ง์ ์ ์ด๊ณ ๋น์ฉ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ
ํ๋กฌํํธ ๊ตฌ์กฐ
์ ์ ยท ์ค๋ฌผ ํด๋ถ ยท ์กฐ๋ฆฝ๊ณผ ํ๋ฆ
ํ๋กฌํํธ ๊ตฌ์กฐ
์ ์ ยท ์ค๋ฌผ ํด๋ถ ยท ํ๋ฆ โ ํ๋กฌํํธ๋ผ๋ ๊ตฌ์กฐ๋ฌผ์ ํด๋ถ๋
ํ๋กฌํํธ = LLM์ ๋ํ ์ ์ผํ ์ธํฐํ์ด์ค
์ฌ๋์ด ๋ชจ๋ธ์๊ฒ ์ ๋ฌํ๋ ์ ๋ ฅ ์ ์ฒด๋ฅผ ๊ตฌ์กฐ๋ก ์ดํดํฉ๋๋ค โ ๊ตฌ์กฐ๋ฅผ ์์์ผ ์ค๊ณํ ์ ์์ต๋๋ค.
- ์ ์ โ ์์ฐ์ด ์ ๋ ฅ์ ์ดํฉ
- ์ค๋ฌผ ํด๋ถ โ Converse ์์ฒญ ํ ๊ฑด
- ํ๋ฆ โ ์กฐ๋ฆฝ โ ์ถ๋ก โ ์ถ๋ ฅ
- ์ค๊ณ ๋์ โ system๊ณผ user ๋ฉ์์ง
๊ฐ์ ๋ชจ๋ธ์ด๋ผ๋ ํ๋กฌํํธ ์ค๊ณ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ฆฝ๋๋ค โ ์ฝ๋ ๋ณ๊ฒฝ ์์ด ๋์์ ์ ์ดํ๋ ๊ฐ์ฅ ์ง์ ์ ์ธ ์๋จ์ ๋๋ค.
ํ๋กฌํํธ์ ์ ์
์ง๋ฌธ ํ ์ค์ด ์๋, ๋ชจ๋ธ์๊ฒ ์ ๋ฌ๋๋ ์์ฐ์ด ์ ๋ ฅ์ ์ดํฉ
ํ๋กฌํํธ(Prompt) = ์ฌ๋์ด LLM์๊ฒ ์ ๋ฌํ๋ ์์ฐ์ด ์ ๋ ฅ์ ์ดํฉ. ์์คํ ์ง์์ด, ์ฌ์ฉ์ ์ง๋ฌธ, ์ฐธ๊ณ ๋ฌธ์, ๋ํ ์ด๋ ฅ์ ๋ชจ๋ ํฌํจํฉ๋๋ค.
์์คํ ์ง์์ด์ญํ ยท ๊ท์น
+
์ฌ์ฉ์ ์ง๋ฌธ์ด๋ฒ ์์ฒญ
+
์ฐธ๊ณ ๋ฌธ์๊ฒ์ ๊ฒฐ๊ณผ ยท ์๋ฃ
+
๋ํ ์ด๋ ฅ์ด์ ํด
=
ํ๋กฌํํธ
"์ง๋ฌธ ํ ์ค"
โ ํํ ํ๋กฌํํธ๋ผ ๋ถ๋ฅด๋ ๊ฒ์ ๋ค ์์ ์ค ํ๋์ผ ๋ฟ, ๋ชจ๋ธ์ ํญ์ ํฉ๊ณ ์ ์ฒด๋ฅผ ๋ฐ์ต๋๋ค
์ฌ์ฉ์์๊ฒ ๋ณด์ด๋ ์ง๋ฌธ์ ์ ๋ ฅ์ ์ผ๋ถ์ผ ๋ฟ์ ๋๋ค โ ์ดํฉ ์ ์ฒด๊ฐ ํ๋กฌํํธ์ด๊ณ , ๊ทธ ์ ์ฒด๊ฐ ์ค๊ณ์ ๋์์ ๋๋ค.
์ค๋ฌผ ํด๋ถ โ Converse ์์ฒญ ํ๋
์ค์ API ์์ฒญ ํ ๊ฑด์ ์ด์ด ๋ณธ ๋ค ์นธ โ ์นธ๋ง๋ค ๋ค๋ฅธ ์์ฑ์์ ์ค๊ณ ์์น
system
"๋น์ ์ AWS ์๋ฃจ์ ์ค ์ํคํ ํธ์ ๋๋ค. ์ถ์ธกํ์ง ๋ง๊ณ , ํ์์ ๋งํฌ๋ค์ด ํ๋กโฆ"
์ญํ ยท๊ท์น โ ์ฌ์ฉ์ ๋น๋ ธ์ถ (PART 2)
user
"์ด ์ํคํ ์ฒ๋ฅผ ๊ฒํ ํด ์ฃผ์ธ์: ALB โ ECS โ RDSโฆ"
๊ฐ๋ณ ์ ๋ ฅ โ ์ค๊ณ์ ์ฃผ ๋์
assistant
"๋จ์ผ AZ ๊ตฌ์ฑ์ด๋ผ ๊ฐ์ฉ์ฑ ์ํ์ด ์์ต๋๋ค. ๋ค์ ๋์์โฆ" (์ด์ ํด ์๋ต)
๋ฉํฐํด ๋งฅ๋ฝ ยท Few-shot ์์๋ก ํ์ฉ
inference
temperature: 0.2 ยท maxTokens: 1024
์์ฑ ๋ฐฉ์ ์ ์ด โ PART 5
๋ค ์นธ ์ค ๊ฐ๋ฐ์๊ฐ ์ง์ ์ค๊ณํ๋ ๊ฒ์ system๊ณผ user์ ๋๋ค โ assistant๋ ๋ฉํฐํด ๋งฅ๋ฝ ์ ์ง์ Few-shot ์์๋ก ํ์ฉ๋๊ณ , inference๋ PART 5์์ ์กฐ์ ํ๋ ์์ก์ด์ ๋๋ค.
ํ๋กฌํํธ ํ๋ฆ
์ธ ์กฐ๊ฐ์ ์กฐ๋ฆฝ โ LLM ์ถ๋ก โ ํ์์ ๊ฐ์ถ ์ถ๋ ฅ์ผ๋ก ์ด์ด์ง๋ ํ ์ฌ์ดํด
System Prompt์ค๊ณ๋ PART 2
User Message๊ฐ๋ณ โ ๋งค ์์ฒญ
Context๋ค์ ๋ชจ๋
โ
์กฐ๋ฆฝ
LLM ์ถ๋ก โ genai-basics์ 7๋จ๊ณ
โ ํ ํฐํโโฆ โ
โค ํ๋ฅ ยท โฅ ์ํ๋ง
โโฆ ์๊ธฐํ๊ท
Temperature ยท Top-P๊ฐ โคยทโฅ์์ ์์ฉ โ PART 5์์ ์กฐ์
โ
์์ฑ
Output
JSON ยท ๋งํฌ๋ค์ด ยท ์์ฐ์ด
ํ์๋ ํ๋กฌํํธ๋ก ์ ์ด (PART 4)
System Prompt์ User Message๋ง์ด ์๋๋๋ค โ Context์ ์ถ๋ก ํ๋ผ๋ฏธํฐ๊น์ง ํฌํจํ ์ ์ฒด ์ ๋ ฅ์ด ์ถ๋ ฅ ํ์ง์ ๊ฒฐ์ ํฉ๋๋ค.
System Prompt ์ค๊ณ
Persona ยท Rules ยท Format โ ๋ชจ๋ธ ํ๋์ ๊ธฐ๋ณธ ํ
System Prompt
๋ชจ๋ ๋ํ์ ์ ์ฉ๋๋ ๋ถ๋ณ ์ง์์ด์ ์ค๊ณ๋ฒ
Persona + Rules + Format
์ญํ ์ ๋ถ์ฌํ๊ณ , ๊ท์น์ผ๋ก ๊ฒฝ๊ณ๋ฅผ ๊ธ๊ณ , ํ์์ผ๋ก ์ถ๋ ฅ์ ๊ณ ์ ํฉ๋๋ค โ ๊ฐ๋๋ ์ผ์ ์ฒซ ๋ฒ์งธ ๋ฐฉ์ด์ ์ ๋๋ค.
- Persona โ ์ญํ ยท์ ๋ฌธ ๋ถ์ผยทํค
- Rules โ ๊ธ์ง ์ฌํญยท๋ฒ์ ์ ํ
- Format โ ์ถ๋ ฅ ๊ตฌ์กฐ ์ฌ์ ์ ์
- ์์น โ ๊ตฌ์ฒด์ ์ผ์๋ก ์ข๋ค
"์น์ ํ๊ฒ ๋ตํด์ค"๋ณด๋ค "2๋ฌธ์ฅ ์ด๋ด, ์กด๋๋ง, JSON ํ์"์ด ๋ซ์ต๋๋ค โ ๊ตฌ์ฒด์ฑ์ด System Prompt์ ํ์ง์ ๊ฒฐ์ ํฉ๋๋ค.
System Prompt 3์์
์ญํ ์ ๋ถ์ฌํ๊ณ , ๊ท์น์ ์ ํ๊ณ , ์ถ๋ ฅ ํ์์ ์ง์ โ ์ด 3๊ฐ์ง๊ฐ ๋ชจ๋ธ์ ํ๋ ํ
Persona (์ญํ )
"๋น์ ์ ์๋์ด ๋ฐฑ์๋ ์์ง๋์ด์
๋๋ค"
์ ๋ฌธ ๋ถ์ผ, ํค, ๊ด์ ์ ์ ์
Rules (๊ท์น)
"๋ชจ๋ฅด๋ฉด ๋ชจ๋ฅธ๋ค๊ณ ๋ต๋ณ"
๊ธ์ง ์ฌํญ, ๋ฒ์ ์ ํ, ์๋ต ๊ธธ์ด
Format (ํ์)
"JSON์ผ๋ก ์๋ต, key๋ ์์ด"
์ถ๋ ฅ ๊ตฌ์กฐ๋ฅผ ์ฌ์ ์ ์
์ญํ ์ด ๊ด์ ์, ๊ท์น์ด ๊ฒฝ๊ณ๋ฅผ, ํ์์ด ์ถ๋ ฅ ๊ตฌ์กฐ๋ฅผ ์ ํฉ๋๋ค โ 3์์์ ์กฐํฉ์ด ๋ชจ๋ธ ํ๋์ ๊ธฐ๋ณธ ํ์ ๋๋ค.
System Prompt ์์
3์์๋ฅผ ์กฐํฉํ ์ค์ System Prompt
# Persona
๋น์ ์ AWS Solutions Architect์
๋๋ค.
๊ณ ๊ฐ์ ์ํคํ
์ฒ ์ง๋ฌธ์ Well-Architected Framework ๊ธฐ๋ฐ์ผ๋ก ๋ต๋ณํฉ๋๋ค.
# Rules
- ๋ชจ๋ฅด๋ ๋ด์ฉ์ "ํ์ธ์ด ํ์ํฉ๋๋ค"๋ผ๊ณ ๋ต๋ณ
- ๋น์ฉ ๊ด๋ จ ์ง๋ฌธ์ ๊ตฌ์ฒด์ ๊ธ์ก์ ์ ์ํ์ง ์์
- ํญ์ ๋์์ 2๊ฐ์ง ์ด์ ์ ์
# Format
- ๋งํฌ๋ค์ด์ผ๋ก ์๋ต
- ์ถ์ฒ ์๋น์ค๋ | ์๋น์ค | ์ด์ | ํํ์ ํ
์ด๋ธ
- ๋ง์ง๋ง์ "โ ๏ธ ์ฃผ์์ฌํญ" ์น์
ํฌํจ
- # Persona โ Well-Architected ๊ธฐ๋ฐ์ผ๋ก ๋ต๋ณํ๋ AWS Solutions Architect ์ญํ ๋ถ์ฌ
- # Rules โ ์ถ์ธก ๊ธ์ง("ํ์ธ์ด ํ์ํฉ๋๋ค") ยท ๊ธ์ก ์ ์ ๊ธ์ง ยท ๋์ 2๊ฐ์ง ์ด์
- # Format โ ๋งํฌ๋ค์ด + ํ ์ด๋ธ๋ก ์ถ๋ ฅ ๊ตฌ์กฐ๋ฅผ ์ฌ์ ์ ๊ณ ์
- ์ธ ์น์ ์ด ๋ชจ๋ ๋ํ์ ๊ณตํต ์ ์ฉ๋๋ ๋ถ๋ณ ์ง์์ด
ํต์ฌ ๊ธฐ๋ฒ
Zero-shot ยท Few-shot ยท Chain of Thought ยท ReAct
ํต์ฌ ๊ธฐ๋ฒ
ํ์คํฌ ๋ณต์ก๋์ ๋ฐ๋ผ ๋จ๊ณ์ ์ผ๋ก ์ฌ๋ฆฌ๋ ๊ธฐ๋ฒ์ ์ฌ๋ค๋ฆฌ
Zero-shot โ Few-shot โ CoT โ ReAct
๊ฐ์ฅ ๋จ์ํ ๊ธฐ๋ฒ๋ถํฐ ์์ํด, ํ์คํฌ๊ฐ ๋ณต์กํด์ง ๋ ํ ๋จ๊ณ์ฉ ์ฌ๋ฆฝ๋๋ค.
- Zero-shot โ ์ง์๋ง์ผ๋ก ์ํ
- Few-shot โ ์์ 3~5๊ฐ๋ก ํจํด ํ์ต
- Chain of Thought โ ๋จ๊ณ๋ณ ์ถ๋ก ์์ฑ
- ReAct โ ์ถ๋ก + ๋๊ตฌ ์ฌ์ฉ ๋ฃจํ
๊ธฐ๋ฒ์ ๋์ฒด๊ฐ ์๋๋ผ ๋ณต์ก๋์ ๋ฐ๋ฅธ ์์น ์ฌ๋ค๋ฆฌ์ ๋๋ค โ ๋จ์ ํ์คํฌ์ ๋ฌด๊ฑฐ์ด ๊ธฐ๋ฒ์ ์ฐ๋ฉด ํ ํฐ๋ง ๋ญ๋น๋ฉ๋๋ค.
๊ธฐ๋ฒ์ ์งํ
๋จ์ํ ์ง์์์ ๊ตฌ์กฐํ๋ ์ถ๋ก ๊น์ง โ ํ์คํฌ ๋ณต์ก๋์ ๋ฐ๋ฅธ ๊ธฐ๋ฒ ์์น ์ฌ๋ค๋ฆฌ
Zero-shot์ผ๋ก ์์ํด ๋ถ์กฑํ๋ฉด ์์๋ฅผ, ๊ทธ๋๋ ๋ถ์กฑํ๋ฉด ์ถ๋ก ๊ณผ์ ์ ๋ํฉ๋๋ค โ ReAct๋ ์์ด์ ํธ์ ๊ธฐ๋ณธ ํจํด์ด ๋๋ฉฐ, ๋ฃจํ ์คํ์ ํ๋ค์ค ์์ง๋์ด๋ง ๋ชจ๋์์ ๊น์ด ๋ค๋ฃน๋๋ค.
Zero-shot โ ์ง์๊ฐ ์ ๋ถ๋ค
์์ ์์ด ์ง์๋ง์ผ๋ก โ ๋์ ยท ํ์ ยท ์ ์ฝ์ ์ง์์ ๋ด๋ ๊ฒ์ด Zero-shot์ ์ ๋ถ
๋ชจํธํ ์ง์
๊ตฌ์ฒด์ ์ง์ โ ๋์ ยท ํ์ ยท ์ ์ฝ
Zero-shot์ ํ์ง์ ์ง์์ ๊ตฌ์ฒด์ฑ์ด ๊ฒฐ์ ํฉ๋๋ค โ ๋์ยทํ์ยท์ ์ฝ ์ธ ๊ฐ์ง๋ฅผ ์ง์์ ๋ด๊ณ , ๊ทธ๋๋ ํ์์ด ํ๋ค๋ฆฌ๋ฉด ๋ค์ ๋จ๊ณ(Few-shot)๋ก ์ฌ๋ฆฝ๋๋ค.
Few-shot ์์ ์ค๊ณ
์ข์ ์์์ ๋์ ์์์ ์ฐจ์ด โ ์์์ ํ์ง์ด ๊ณง ์ถ๋ ฅ์ ํ์ง
๋์ ์์
๋ชจํธํ๊ณ ์ผ๊ด์ฑ ์์
- ์์ ์๊ฐ 1๊ฐ (ํจํด ํ์ต ๋ถ๊ฐ)
- ์ ๋ ฅ-์ถ๋ ฅ ํ์์ด ๋งค๋ฒ ๋ค๋ฆ
- ์์ง ์ผ์ด์ค๋ฅผ ์ปค๋ฒํ์ง ์์
- ์์๊ฐ ๋๋ฌด ๊ธธ์ด ํ ํฐ ๋ญ๋น
๋์ ์์๋ ๋ชจ๋ธ์ ํผ๋์ค๋ฝ๊ฒ ํฉ๋๋ค. ํ์์ด ๋ถ์ผ์นํ๋ฉด ๋ชจ๋ธ์ด ์ด๋ค ํ์์ ๋ฐ๋ฅผ์ง ์ถ์ธกํด์ผ ํฉ๋๋ค.
์ข์ ์์
๊ตฌ์ฒด์ ์ด๊ณ ์ผ๊ด๋จ
- ์์ 3~5๊ฐ (ํจํด ๋ช ํ)
- ์ ๋ ฅ-์ถ๋ ฅ ํ์ ์์ ์ผ๊ด
- ์ ์ ์ผ์ด์ค + ์์ง ์ผ์ด์ค ํฌํจ
- ์ค์ ํ๋ก๋์ ๋ฐ์ดํฐ์์ ์ถ์ถ
์ข์ ์์๋ ์ผ๊ด๋ ํฌ๋งท์ ๋ณด์ฌ์ฃผ๊ณ , ์์ง ์ผ์ด์ค๋ ํฌํจํฉ๋๋ค. ๋ชจ๋ธ์ด "์ด๋ ๊ฒ ํ๋ฉด ๋๋ค"๋ฅผ ๋ช ํํ ํ์ตํฉ๋๋ค.
์์์ ํ์ง์ด ๊ณง ์ถ๋ ฅ์ ํ์ง์ ๋๋ค โ ํ์์ด ์ผ๊ด๋ ์์ 3~5๊ฐ๋ฅผ ์ค์ ํ๋ก๋์ ๋ฐ์ดํฐ์์ ์ถ์ถํ๋ ๊ฒ์ด ์ด์์ ์ ๋๋ค.
Few-shot ์ค๋ฌผ โ ์์๋ assistant ํด์ผ๋ก
assistant ์ญํ ์ ์ค์ ์ฉ๋ โ user/assistant ์์ด ๊ณง ์์
Few-shot์ ๋ณ๋ ๋ฌธ๋ฒ์ด ์๋๋ผ ๋ฉ์์ง ๋ฐฐ์ด์ ํ์ฉ์ ๋๋ค โ ์์๋ฅผ ๋ํ ์ด๋ ฅ์ฒ๋ผ ๋ฃ์ผ๋ฉด ๋ชจ๋ธ์ด ํจํด์ ๋ฐ๋ผ๊ฐ๋๋ค.
{
"system": [{ "text": "์ํ ๋ฆฌ๋ทฐ์ ๊ฐ์ฑ์ ๋ถ๋ฅํฉ๋๋ค. ํ์: ๊ฐ์ฑ|์ ๋ขฐ๋" }],
"messages": [
{ "role": "user", "content": [{ "text": "๋ฐฐ์ก ๋น ๋ฅด๊ณ ์ข์์" }] },
{ "role": "assistant", "content": [{ "text": "๊ธ์ |0.97" }] },
{ "role": "user", "content": [{ "text": "ํฌ์ฅ์ด ์ฐข์ด์ ธ ์์ด์" }] },
{ "role": "assistant", "content": [{ "text": "๋ถ์ |0.94" }] },
{ "role": "user", "content": [{ "text": "์๊ฐ๋ณด๋ค ๋ฌด๊ฒ๋ค์" }] },
{ "role": "assistant", "content": [{ "text": "์ค๋ฆฝ|0.81" }] },
{ "role": "user", "content": [{ "text": "์ฌ๊ตฌ๋งค ์์ฌ ์์ด์" }] }
]
}
- ์์ 3์ = user/assistant ํด โ ๋ชจ๋ธ์ ์ด ๋ํ๊ฐ ์ค์ ๋ก ์์๋ค๊ณ ๋ณด๊ณ ํจํด์ ์ด์ด๊ฐ๋๋ค
- ํ์ ์์ ์ผ๊ด + ์์ง ์ผ์ด์ค โ ๊ฐ์ฑ|์ ๋ขฐ๋ ํ์ ๊ณ ์ , ์ ๋งคํ "์ค๋ฆฝ" ์ผ์ด์ค ํฌํจ
- ๋ง์ง๋ง user๋ง ์ค์ ์ง๋ฌธ โ ๋ชจ๋ธ์ ํ์ต๋ ํจํด๋๋ก "๊ธ์ |โฆ" ํ์์ผ๋ก ๋ตํฉ๋๋ค
Chain of Thought ํจ๊ณผ
"๋จ๊ณ๋ณ๋ก ์๊ฐํด" ํ ์ค์ ์ถ๊ฐํ๋ฉด โ ์ ํ๋๊ฐ ๊ทน์ ์ผ๋ก ํฅ์๋๋ ์๋ฆฌ
์ค๊ฐ ๊ณผ์ ์ด ์์ด ๊ฒ์ฆ ๋ถ๊ฐ
๋ณต์กํ ๋ฌธ์ ์์ ์ค๋ต๋ฅ ๋์ โ "Let's think step by step" ์ถ๊ฐ
์ค๊ฐ ์ถ๋ก ๊ณผ์ ์ ๋ช ์์ ์์ฑ
๊ฐ ๋จ๊ณ๋ฅผ ๊ฒ์ฆํ ์ ์์
๋น ๋ฅด์ง๋ง ๋ถ์ ํ
๋จ์ ํ์คํฌ์ ์ ํฉ โ ์ถ๋ ฅ ํ ํฐ ์ฆ๊ฐ (์ถ๋ก ๊ณผ์ ํฌํจ)
๋๋ฆฌ์ง๋ง ์ ํ
๋น์ฉ vs ์ ํ๋ ํ๋จ ํ์
CoT ์ค๋ฌผ โ ๊ฐ์ ์ง๋ฌธ, ๋ค๋ฅธ ์๋ต
"๋ ธํธ๋ถ 120๋ง์ 3๋์ ๋ชจ๋ํฐ 45๋ง์ 2๋, ์์ฐ 500๋ง์์ผ๋ก ๋๋์?"
์ง์ ๋ต๋ณ
+ "๋จ๊ณ๋ณ๋ก ๊ณ์ฐํด ์ฃผ์ธ์"
2. ๋ชจ๋ํฐ: 45๋ง ร 2 = 90๋ง
3. ํฉ๊ณ: 360๋ง + 90๋ง = 450๋ง โค 500๋ง
โ ์์ฐ ๋ด์ ๋๋ค (์ฌ์ 50๋ง์)
์ง์ ํ ์ค("๋จ๊ณ๋ณ๋ก")์ด ์ถ๋ก ํ ํฐ์ ์์ฑํ๊ฒ ๋ง๋ค์ด ์ ํ๋๋ฅผ ๋์ด์ฌ๋ฆฝ๋๋ค โ genai-basics์์ ๋ณธ "๋ ์ค๋ ์๊ฐํ๋ฉด ๋ ์ ํํ๋ค"์ ํ๋กฌํํธ ๋ฒ์ ์ ๋๋ค.
Role Prompting โ Persona๋ฅผ ๊ธฐ๋ฒ์ผ๋ก
๊ตฌ์ฒด์ ์ญํ ๋ถ์ฌ๋ก ํ์ฑํ๋๋ ๋๋ฉ์ธ ์ง์๊ณผ ์ด์กฐ
์ญํ ์์
- "์ด ์ฝ๋๋ฅผ ๋ฆฌ๋ทฐํด์ค"
- ์ผ๋ฐ์ ์ด๊ณ ํผ์์ ์ธ ํผ๋๋ฐฑ
- ๊ตฌ์ฒด์ ๊ด์ ์ด ์์
- ๋๋ฉ์ธ ๋งฅ๋ฝ์ ๊ณ ๋ คํ์ง ์์
์ญํ ์ด ์์ผ๋ฉด ๋ชจ๋ธ์ "์ผ๋ฐ์ AI ์ด์์คํดํธ"๋ก ๋์ํฉ๋๋ค. ์๋ต์ด ๊ด๋ฒ์ํ๊ณ ๊น์ด๊ฐ ๋ถ์กฑํฉ๋๋ค.
์ญํ ๋ถ์ฌ
- "๋น์ ์ 10๋ ์ฐจ ๋ณด์ ์์ง๋์ด์ ๋๋ค. ์ด ์ฝ๋๋ฅผ OWASP ๊ธฐ์ค์ผ๋ก ๋ฆฌ๋ทฐํด์ฃผ์ธ์"
- ๋ณด์ ์ทจ์ฝ์ ์ ์ง์คํ ๊ตฌ์ฒด์ ํผ๋๋ฐฑ
- ์ฌ๊ฐ๋ ๋ถ๋ฅ(Critical/High/Medium) ํฌํจ
- ์์ ๋ฐฉํฅ๊น์ง ์ ์
๊ตฌ์ฒด์ ์ญํ (์งํจ+๊ฒฝ๋ ฅ+์ ๋ฌธ ๋ถ์ผ)์ ๋ถ์ฌํ๋ฉด, ๋ชจ๋ธ์ด ํด๋น ๋๋ฉ์ธ์ ํ๋ ์์ํฌ์ ์ฉ์ด๋ฅผ ํ์ฉํ์ฌ ๊น์ด ์๋ ์๋ต์ ์์ฑํฉ๋๋ค.
์งํจยท๊ฒฝ๋ ฅยท์ ๋ฌธ ๋ถ์ผ๋ฅผ ๊ฐ์ถ ๊ตฌ์ฒด์ ์ญํ ์ด ๋๋ฉ์ธ ํ๋ ์์ํฌ์ ์ฉ์ด๋ฅผ ํ์ฑํํฉ๋๋ค โ "๋์์ค"์๋ ์๋ต์ ๊น์ด๊ฐ ๋ค๋ฆ ๋๋ค.
๊ณ ๊ธ ๊ธฐ๋ฒ
์ ๋ ฅ ๊ตฌ์กฐํ ยท ๊ตฌ์กฐํ ์ถ๋ ฅ ยท Prompt Chaining ยท ๋ค๊ฑฐํฐ๋ธ ํ๋กฌํํ
๊ณ ๊ธ ๊ธฐ๋ฒ
ํ๋ก๋์ ์์ ๋ฐ๋ณต ๊ฒ์ฆ๋ ๋ค ๊ฐ์ง โ ๋ชฉ์ ์ ํ๋, ์ถ๋ ฅ์ ์์ธก ๊ฐ๋ฅ์ฑ
๊ตฌ์กฐํ ยท ๊ฐ์ ยท ๋ถํด ยท ์ ์ฝ
์ ๋ ฅ์ ํ๊ทธ๋ก ๊ตฌ์กฐํํ๊ณ , ์ถ๋ ฅ์ ์คํค๋ง๋ก ๊ฐ์ ํ๊ณ , ์์ ์ ๋จ๊ณ๋ก ๋๋๊ณ , ๋ฒ์๋ฅผ ์ ์ฝ์ผ๋ก ์ขํ๋๋ค.
- ์ ๋ ฅ ๊ตฌ์กฐํ โ XML ํ๊ทธ๋ก ์ง์ยท์๋ฃ ๋ถ๋ฆฌ
- ๊ตฌ์กฐํ ์ถ๋ ฅ โ JSON Schema๋ก ํ์ ๊ฐ์
- Prompt Chaining โ ๋จ๊ณ ๋ถํด + ๋จ๊ณ๋ณ ๊ฒ์ฆ
- ๋ค๊ฑฐํฐ๋ธ ํ๋กฌํํ โ "ํ์ง ๋ง"๋ก ๋ฒ์ ์ถ์
ํต์ฌ ๊ธฐ๋ฒ์ด ํ ํธ์ถ์ ํ์ง์ ์ฌ๋ฆฐ๋ค๋ฉด, ๊ณ ๊ธ ๊ธฐ๋ฒ์ ์์ ์ ์ฒด์ ์ ๋ขฐ๋๋ฅผ ์ฌ๋ฆฝ๋๋ค โ ๋ค ๊ฐ์ง๋ ํจ๊ป ์กฐํฉํด ์ ์ฉํ ์ ์์ต๋๋ค.
์ ๋ ฅ ๊ตฌ์กฐํ โ XML ํ๊ทธ๋ก ์ง์์ ์๋ฃ ๋ถ๋ฆฌ
๊ธด ์๋ฃ์ ์ง์๊ฐ ์์ด๋ฉด ๋ชจ๋ธ๋ ํผ๋ โ ํ๊ทธ ๊ฒฝ๊ณ๊ฐ ๊ณง ๊ฐ๋๋ ์ผ (Anthropic ๊ณต์ ๊ถ์ฅ)
System Prompt(์ญํ ยท๊ท์น, PART 2)๋ฅผ ์ค๊ณํ๋ค๋ฉด, User ๋ฉ์์ง๋ ํ๊ทธ๋ก ๊ตฌ์กฐํํฉ๋๋ค โ ํ๋กฌํํธ ์ธ์ ์ ์ํ์๋ ์ ํจํฉ๋๋ค.
<instructions>
์๋ ํ์๋ก์์ ๊ฒฐ์ ์ฌํญ๋ง 3๊ฐ ์ถ์ถํด ์ฃผ์ธ์.
์ถ๋ ฅ์ ๋ฒํธ ๋ชฉ๋ก์ผ๋ก ์์ฑํฉ๋๋ค.
</instructions>
<document>
{{meeting_notes}}
</document>
<example>
1. ๋ฐฐํฌ ์ผ์ ์ 8์ 1์ฃผ๋ก ํ์
</example>
- ํ๊ทธ๋ก ๊ฒฝ๊ณ ์ ์ธ โ ์ง์ยท์๋ฃยท์์๋ฅผ XML ํ๊ทธ๋ก ๋ถ๋ฆฌ, ๋ชจ๋ธ์ด ์ญํ ๊ฒฝ๊ณ๋ฅผ ๋ช ํํ ์ธ์
- ๊ธด ์๋ฃ๋ document ์์ โ ์ง์๊ฐ ์๋ฃ ๋ณธ๋ฌธ์ ๋ฌปํ์ง ์์, ์๋ฃ ์์ "์ง์์ฒ๋ผ ๋ณด์ด๋ ๋ฌธ์ฅ"๋ ๋ฌด๋ ฅํ
- Claude ๊ณ์ด ํนํ โ XML ํ๊ทธ ์ธ์์ ์ต์ ํ๋์ด ์์ด Anthropic ๊ณต์ ๊ฐ์ด๋๊ฐ ๊ถ์ฅํ๋ ๋ฐฉ์
๊ตฌ์กฐํ ์ถ๋ ฅ ์์
Strands SDK์ Structured Output โ Pydantic ์คํค๋ง๋ก ์ถ๋ ฅ์ ๊ฐ์
from strands import Agent
from pydantic import BaseModel
# โ ์ถ๋ ฅ ๊ตฌ์กฐ๋ฅผ Pydantic ์คํค๋ง๋ก ์ ์ธ
class ReviewResult(BaseModel):
sentiment: str # "positive" | "negative" | "neutral"
confidence: float
summary: str
keywords: list[str]
agent = Agent(model=model, system_prompt="์ํ ๋ฆฌ๋ทฐ๋ฅผ ๋ถ์ํฉ๋๋ค.")
# โก ์คํค๋ง ์ค์ ์๋ต์ ๋ณด์ฅํ๋ ํ๋ผ๋ฏธํฐ
result = agent(
"์ด ์ ํ ์ ๋ง ์ข์์! ๋ฐฐ์ก๋ ๋น ๋ฅด๊ณ ํ์ง๋ ์ต๊ณ ",
structured_output_model=ReviewResult,
)
# โข ํ์ฑ ์์ด ํ์
์ด ๋ณด์ฅ๋ ๊ฐ์ฒด๋ก ๋ฐ๋ก ์ฌ์ฉ
print(result.structured_output)
# ReviewResult(sentiment='positive', confidence=0.95, ...)
- BaseModel โ ์ถ๋ ฅ ๊ตฌ์กฐ๋ฅผ Pydantic ์คํค๋ง๋ก ์ ์ธ
- structured_output_model โ ์คํค๋ง ์ค์ ์๋ต์ ๋ณด์ฅํ๋ ํ๋ผ๋ฏธํฐ
- result.structured_output โ ํ์ฑ ์์ด ํ์ ์ด ๋ณด์ฅ๋ ๊ฐ์ฒด๋ก ๋ฐ๋ก ์ฌ์ฉ, ํ์ฑ ์คํจ ์ ๊ฑฐ โ ๋ค์ด์คํธ๋ฆผ ์๋ํ ์ฐ๊ฒฐ
Prompt Chaining
๋ณต์กํ ์์ ์ ๋จ๊ณ๋ณ ๋ถํด โ ์๊ณ ๊ฒ์ฆ ๊ฐ๋ฅํ ๋จ๊ณ๋ค์ ์ฌ์ฌ
๋จ์ผ ํ๋กฌํํธ
ํ ๋ฒ์ ๋ชจ๋ ๊ฒ
- ํ ๋ฒ์ ๋ชจ๋ ๊ฒ์ ์๊ตฌ
- "๋ฌธ์ ์ฝ๊ณ , ์์ฝํ๊ณ , ๋ฒ์ญํ๊ณ , ์ด๋ฉ์ผ ์์ฑํด"
- ์ค๊ฐ ์คํจ ์ ์ ์ฒด ์ฌ์์
- ๋๋ฒ๊น ๋ถ๊ฐ๋ฅ
์ค๊ฐ ๋จ๊ณ๊ฐ ๋ณด์ด์ง ์์ ์ด๋์ ์๋ชป๋๋์ง ์ ์ ์์ต๋๋ค. ์คํจํ๋ฉด ์ ์ฒด๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ์คํํด์ผ ํฉ๋๋ค.
Chaining
๋จ๊ณ ๋ถํด + ๊ฒ์ฆ
- Step 1: ๋ฌธ์ ์์ฝ โ ๊ฒ์ฆ
- Step 2: ํต์ฌ ํฌ์ธํธ ์ถ์ถ โ ๊ฒ์ฆ
- Step 3: ์ด๋ฉ์ผ ์ด์ ์์ฑ โ ๊ฒ์ฆ
- ๊ฐ ๋จ๊ณ ๋ ๋ฆฝ ์ฌ์๋ ๊ฐ๋ฅ
๊ฐ ๋จ๊ณ์ ์ถ๋ ฅ์ด ๋ค์ ๋จ๊ณ์ ์ ๋ ฅ์ด ๋ฉ๋๋ค. ๋จ๊ณ๋ณ๋ก ๊ฒ์ฆํ๊ณ , ์คํจํ ๋จ๊ณ๋ง ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์๋ํ ์ ์์ต๋๋ค.
๋ณต์กํ ์์ ์ผ์๋ก ์ชผ๊ฐญ๋๋ค โ ์๊ณ ๊ฒ์ฆ ๊ฐ๋ฅํ ๋จ๊ณ์ ์ฌ์ฌ์ด ์ ์ฒด ์ ๋ขฐ๋๋ฅผ ๋ง๋ญ๋๋ค.
Prompt Chaining ์ฝ๋
์์ฝ โ ์ถ์ถ โ ์์ฑ โ ์ด์ ๋จ๊ณ์ ์ถ๋ ฅ์ด ๋ค์ ๋จ๊ณ์ ์ ๋ ฅ
from strands import Agent
# ๋จ์ผ ์ฑ
์ ํ๋กฌํํธ๋ก ์ญํ ์ ๋ถ๋ฆฌ
summarizer = Agent(model=model, system_prompt="๋ฌธ์๋ฅผ 3๋ฌธ์ฅ์ผ๋ก ์์ฝํฉ๋๋ค.")
extractor = Agent(model=model, system_prompt="ํต์ฌ ํฌ์ธํธ๋ฅผ 3๊ฐ ์ถ์ถํฉ๋๋ค.")
writer = Agent(model=model, system_prompt="๊ณ ๊ฐ ์๋ด ์ด๋ฉ์ผ์ ์์ฑํฉ๋๋ค.")
# โ Step 1 โ ์์ฝ: ์ถ๋ ฅ์ ํ์ธยท๊ฒ์ฆํ ์ ์๋ ์ฒซ ๋ฒ์งธ ์ง์
summary = str(summarizer(doc))
# โก Step 2 โ ์ด์ ๋จ๊ณ์ ์ถ๋ ฅ์ด ๊ทธ๋๋ก ๋ค์ ๋จ๊ณ์ ์
๋ ฅ
points = str(extractor(summary))
# โข Step 3 โ ์คํจํ๋ฉด ์ด ๋จ๊ณ๋ง ๋
๋ฆฝ ์ฌ์๋
email = str(writer(points))
- ๋จ๊ณ ๋ถํด โ ์์ฝยท์ถ์ถยท์์ฑ์ ๋จ์ผ ์ฑ ์ ํ๋กฌํํธ๋ก ๋ถ๋ฆฌ
- ์ถ๋ ฅ โ ์ ๋ ฅ ์ฐ๊ฒฐ โ ๋จ๊ณ ์ฌ์ด๊ฐ ๊ณง ๊ฒ์ฆ ์ง์
- ๋ ๋ฆฝ ์ฌ์๋ โ ์คํจํ ๋จ๊ณ๋ง ๋ค์ ์คํ, ์ ์ฒด ์ฌ์์ ๋ถํ์
๋ค๊ฑฐํฐ๋ธ ํ๋กฌํํ โ ๋ฒ์๋ฅผ ์ขํ๋ ์ ์ฝ
ํ์ง ๋ง์์ผ ํ ๊ฒ์ ๋ช ์ โ System Prompt Rules์ ํจํด ํ์ฅ
๋ฒ์ ์ ํ
"๋ฒ์ ๋ฐ ์ง๋ฌธ์ ๊ฑฐ์ "
๋ค๋ฃจ๋ ์ฃผ์ ์ ๊ฒฝ๊ณ๋ฅผ ์ ์ธ
๋ถํ์ค์ฑ ๊ท์น
"ํ์คํ์ง ์์ผ๋ฉด ๋ชจ๋ฅธ๋ค๊ณ ๋ต๋ณ"
์ถ์ธก ๋์ ์ ์งํ ํ๊ณ ์ ์ธ
์์ฑ ๊ธ์ง ๋ชฉ๋ก
"์ธ๋ถ URL์ ์์ฑํ์ง ๋ง๋ผ"
์ง์ด๋ด๊ธฐ ์ฌ์ด ์ถ๋ ฅ์ ์์ฒ ์ฐจ๋จ
System Prompt์ Rules(PART 2)๋ฅผ ํจํด์ผ๋ก ํ์ฅํ ๊ฒ์ ๋๋ค โ "ํ์ง ๋ง"์ ์ ์ฝ์ผ๋ก ๋ฒ์๋ฅผ ์ขํ๋ฉด ํ๊ฐ์ด ์ค๊ณ ์ผ๊ด์ฑ์ด ์ฌ๋ผ๊ฐ๋๋ค.
์ถ๋ก ํ๋ผ๋ฏธํฐ
Temperature ยท Top-P ยท Top-K ยท Max Tokens ยท Stop Sequences
์ถ๋ก ํ๋ผ๋ฏธํฐ
๋ฌด์์ ์์ฑํ ์ง๋ ํ๋กฌํํธ๊ฐ, ์ด๋ป๊ฒ ์์ฑํ ์ง๋ ํ๋ผ๋ฏธํฐ๊ฐ
ํ์ง์ ํ๋กฌํํธ๋ก, ์์ฑ ๋ฐฉ์์ ํ๋ผ๋ฏธํฐ๋ก
genai-basics์์ ๋ณธ ์ถ๋ก ํ์ดํ๋ผ์ธ์ โค ํ๋ฅ ยท โฅ ์ํ๋ง ยท โฆ ์ข ๋ฃ๋ฅผ ์กฐ์ ํ๋ ์์ก์ด ๋ค์ฏ ๊ฐ์ ๋๋ค.
- Temperature โ โค ๋ถํฌ์ ๋พฐ์กฑํจ
- Top-P โ โฅ ๋์ ํ๋ฅ ์ปท
- Top-K โ โฅ ์์ K๊ฐ ์ปท
- Max Tokens โ โฆ ๊ธธ์ด ์ํ
- Stop Sequences โ โฆ ์ค๋จ ๋ฌธ์์ด
๋ค์ฏ ์์ก์ด ์ค ๋ค ๊ฐ๋ Converse inferenceConfig ๊ธฐ๋ณธ ์ธํธ(temperature ยท topP ยท maxTokens ยท stopSequences)์ด๊ณ , Top-K๋ ๋ชจ๋ธ ๋ค์ดํฐ๋ธ ํ๋ผ๋ฏธํฐ์ ๋๋ค.
Temperature โ ๋ถํฌ์ ๋พฐ์กฑํจ
๊ฐ์ ํ๋ณด, ๋ค๋ฅธ ์์ก์ด โ ๋ฎ์ผ๋ฉด ๊ฒฐ์ ์ , ๋์ผ๋ฉด ๋ค์ (๋ถํฌ ์์น๋ ์์)
"์ด ๊ตฌ์ฑ์ ์ฃผ์ ์ํ์ ___" ๋ค์ ํ ํฐ ํ๋ณด
๊ฐ์ฉ์ฑ ยท ๋ณด์ ยท ๋น์ฉ ยท ์ง์ฐ
๋ฒ์ 0~1 โ Converse ์คํค๋ง
ํ์คํฌ๋ณ ๊ถ์ฅ
์ถ์ถ ยท ๋ถ๋ฅ ยท ์ฝ๋ 0
RAG ์ง์์๋ต 0~0.3
์์ฝ ยท ๋ฒ์ญ 0.2~0.5
๋ํ โ0.7
์ฐฝ์ 0.9~1.0
์ด๋ ์ชฝ์ผ๋ก ๋๋ฆด์ง๋ ํ์คํฌ๊ฐ ์ ํฉ๋๋ค โ ์ฌํ์ด ์ค์ํ๋ฉด 0์ผ๋ก, ๋ค์์ฑ์ด ์ค์ํ๋ฉด 0.9 ์ด์์ผ๋ก, ๋ํ๋ 0.7 ๋ถ๊ทผ์ด ๊ท ํ์ ์ ๋๋ค.
Top-P โ ๋์ ํ๋ฅ ์ปท
ํ๋ฅ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์๋ค๊ฐ ๋์ p์์ ์๋ฅด๋ ๋ฐฉ์ โ ๋จ์ ํ๋ณด ์์์๋ง ์ถ์ฒจ (์์น๋ ์์)
ํ๋ฅ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ ํ ๋์ ํฉ์ฐ
topP = 0.9
๋ฒ์ 0~1 ยท ์ฐฝ์ ํ๋ฆฌ์ 0.95
๋จ์ ํ๋ณด 3๊ฐ ์ค ํ๋ฅ ๋น์จ๋ก ์ถ์ฒจ
โ ๋ถํฌ๊ฐ ๋พฐ์กฑํ๋ฉด ํ๋ณด๊ฐ ์ค๊ณ , ํํํ๋ฉด ๋์ด๋๋ ๊ฐ๋ณ ์ปท
์ปท์ ๊ธฐ์ค์ ๊ฐ์๊ฐ ์๋๋ผ ๋์ ํ๋ฅ ์ ๋๋ค โ Temperature์ ํจ๊ป ์กฐ์ ํ๋, ๋์ ๋์์ ๊ทน๋จ์ผ๋ก ์ฌ๋ฆฌ์ง ์๋ ๊ฒ์ด ์์ ํ ๊ธฐ๋ณธ๊ธฐ์ ๋๋ค.
Top-K โ ์์ K๊ฐ ์ปท
ํ๋ฅ ๊ณผ ๋ฌด๊ดํ๊ฒ ์์ K๊ฐ๋ง ๋จ๊ธฐ๋ ๊ณ ์ ์ปท โ Top-P์์ ์ฐจ์ด๋ ์๋ฅด๋ ๊ธฐ์ค (์์น๋ ์์)
๊ฐ์ ๋ถํฌ์ ๊ฐ์ ์ปท ์ ์ฉ
topK = 2
1์ ๊ฐ์ฉ์ฑ 0.46
2์ ๋ณด์ 0.27
3์ ๋น์ฉ 0.17
4์ ์ง์ฐ 0.10
โ
์์ 2๊ฐ ์ค ์ถ์ฒจ
์ฃผ์
Converse inferenceConfig ๊ธฐ๋ณธ ์ธํธ(maxTokens ยท stopSequences ยท temperature ยท topP)์ Top-K๋ ์์ โ additionalModelRequestFields๋ก ์ ๋ฌํ๋ ๋ชจ๋ธ ๋ค์ดํฐ๋ธ ํ๋ผ๋ฏธํฐ (์: Anthropic top_k)
๊ฐ์ "ํ๋ณด ์๋ฅด๊ธฐ"๋ผ๋ Top-K๋ ๊ฐ์ ๊ณ ์ , Top-P๋ ๋์ ํ๋ฅ ๊ฐ๋ณ์ ๋๋ค โ Converse์์๋ ๊ธฐ๋ณธ ์ธํธ๊ฐ ์๋๋ผ additionalModelRequestFields๋ก ์ ๋ฌํฉ๋๋ค.
Max Tokens โ ์ถ๋ ฅ ๊ธธ์ด ์ํ
์ํ์ ๋ฟ์ผ๋ฉด ๋ฌธ์ฅ ์ค๊ฐ์ด๋ผ๋ ๋๊น โ ์ถ๋ ฅ ํ ํฐ ๊ณผ๊ธ์ด๋ฏ๋ก ๊ธธ์ด ์ํ์ด ๊ณง ๋น์ฉ ์ํ
2. ์ง๊ธ ๊ธฐํ: 30์ผ ์ด๋ด
3. ์์ฝ๊ธ: ๊ณ์ฝ๊ธ์ 10%
2. ์ง๊ธ ๊ธฐํ: 30์ผ ์ดโ
โ ์ํ ๋๋ฌ ยท ์ฌ๊ธฐ์ ์ ๋จ โ
๋น์ฉ ๊ด์
์ถ๋ ฅ ํ ํฐ ร ๋จ๊ฐ = ์๋ต ๋น์ฉ
โ
maxTokens = ์๋ต ํ๋์ ์ง์ถ ์ํ์
์๋ต์ stopReason์ด "max_tokens"๋ฉด ์ํ์ ๋ฟ์ ์๋ฆฐ ๊ฒ์ ๋๋ค โ ํ์ ๊ธธ์ด์ ์ฌ์ ๋ฅผ ๋ํด ์ํ์ ์ก๋, ๋ฌดํ์ ์ด์ด ๋์ง ์๋ ๊ฒ์ด ๋น์ฉ ์์ ์ฅ์น์ ๋๋ค.
Stop Sequences โ ์ค๋จ ๋ฌธ์์ด
์ง์ ํ ๋ฌธ์์ด์ด ์์ฑ ์คํธ๋ฆผ์ ๋ฑ์ฅํ๋ ์๊ฐ ์ฆ์ ์ข ๋ฃ โ ๋๋๋ ์ง์ ์ ์์ฝํ๋ ์์ก์ด
์์ฑ ์คํธ๋ฆผ
stopSequences: ["๋."]
1. ๋ฐฐ์ ํ๋: 5,000๋ง์
โ
2. ์ง๊ธ ๊ธฐํ: 30์ผ ์ด๋ด
โ
๋.
์ฆ์ ์ข ๋ฃ
stopReason: "stop_sequence"
์ด ์ธ์ ์ฐธ๊ณ ํ ์ ์โฆ
์ถ๊ฐ ์ค๋ช โฆ
โ ์์ฑ๋์ง ์์ โ ๋ถํ์ํ ๊ผฌ๋ฆฌ๊ฐ ์๋ฆผ
์ฐ์์
๋ชฉ๋ก์ ๋ ํ์
ํด์ ๊ฒฝ๊ณ ๊ฐ์
์ถ๋ ฅ ํ์ ๊ณ ์
๋ชจ๋ธ์ด ์ค์ค๋ก ๋ฉ์ถ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋๋๋ ์ง์ ์ ๋ฌธ์์ด๋ก ์์ฝํฉ๋๋ค โ ๋ชฉ๋ก์ ๋, ํด์ ๊ฒฝ๊ณ์ฒ๋ผ ์ถ๋ ฅ ํ์์ ๊ฐ์ ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
inferenceConfig โ Bedrock์์ ์ง์ ํ๊ธฐ
Converse API ํธ์ถ ํ ๋ฒ์ ํจ๊ป ๋ค์ด๊ฐ๋ ํ๋กฌํํธ์ ํ๋ผ๋ฏธํฐ
import boto3
client = boto3.client("bedrock-runtime", region_name="us-east-1")
response = client.converse(
modelId="us.anthropic.claude-sonnet-4-6",
system=[{"text": "๊ณ์ฝ์์์ ๊ธ์ก ์กฐํญ๋ง ์ถ์ถํฉ๋๋ค."}],
messages=[{"role": "user", "content": [{"text": contract}]}],
# โ ๊ธฐ๋ณธ ์ธํธ 4์ข
์ inferenceConfig ํ๋์ ๋ชจ์์
inferenceConfig={
"temperature": 0, # โก ์ถ์ถ ํ์คํฌ โ ์ฌํ ๊ฐ๋ฅ์ฑ ์ฐ์
"maxTokens": 1024, # โข ์ถ๋ ฅ ๊ธธ์ด ์ํ = ๋น์ฉ ์ํ
"stopSequences": ["๋."],
},
# โฃ Top-K ๋ฑ ๊ธฐ๋ณธ ์ธํธ ๋ฐ ํ๋ผ๋ฏธํฐ๋ ๋ชจ๋ธ ๋ค์ดํฐ๋ธ ํ๋๋ก
# additionalModelRequestFields={"top_k": 50},
)
print(response["output"]["message"]["content"][0]["text"])
- inferenceConfig โ temperature ยท topP ยท maxTokens ยท stopSequences ๊ธฐ๋ณธ ์ธํธ๋ฅผ ํ ๊ฐ์ฒด๋ก ์ ๋ฌ
- temperature 0 โ ์ถ์ถ ํ์คํฌ ๊ถ์ฅ, ๊ฐ์ ์ ๋ ฅ์ด๋ฉด ํญ์ ๊ฐ์ ์ถ๋ ฅ
- maxTokens ยท stopSequences โ ๊ธธ์ด ์ํ(๋น์ฉ ์ํ)๊ณผ ์ค๋จ ๋ฌธ์์ด๋ก ์ข ๋ฃ ์ง์ ์ ์ด์ค์ผ๋ก ์์ฝ
- additionalModelRequestFields โ Top-K์ฒ๋ผ ๊ธฐ๋ณธ ์ธํธ์ ์๋ ๋ชจ๋ธ ๋ค์ดํฐ๋ธ ํ๋ผ๋ฏธํฐ์ ์ ๋ฌ ๊ฒฝ๋ก
๋ค์ ๋จ๊ณ: ์ปจํ ์คํธ ์์ง๋์ด๋ง
ํ๋กฌํํธ์ ํ๋ผ๋ฏธํฐ๋ง์ผ๋ก ๋ถ์กฑํ ๋ โ "๋ฌด์์ ๋ฃ์ ๊ฒ์ธ๊ฐ"๋ก ๋ํ๋ ์์ผ
ํ๋กฌํํธ๋ ์์์ผ ๋ฟ
ํ๋กฌํํธ ๊ธฐ๋ฒ์ ๋ง์คํฐํ๋ค๋ฉด, ๋ค์์ "๋ชจ๋ธ์ ๋ฌด์์ ๋ณด์ฌ์ค ๊ฒ์ธ๊ฐ"๋ฅผ ์ค๊ณํ๋ ์ปจํ ์คํธ ์์ง๋์ด๋ง์ ๋๋ค โ ๋์ด๋ ํ๋กฌํํธ์ ๋ฒ์ ยท๋น๊ตยท๋ฐฐํฌ๋ Prompt Management ๋ชจ๋์์ ๋ค๋ฃน๋๋ค.
- RAG
- Memory
- Tool Results
- Compression
- Ordering
"์ด๋ป๊ฒ ์ธ๊น"์ ๋ค์ ์ง๋ฌธ์ "๋ฌด์์ ๋ณด์ฌ์ค๊น"์ ๋๋ค โ ๊ฒ์ ๊ฒฐ๊ณผยท๋ฉ๋ชจ๋ฆฌยท๋๊ตฌ ๊ฒฐ๊ณผ๊น์ง ํฌํจํ ์ ๋ ฅ ์ ์ฒด์ ์ค๊ณ๋ก ์ด์ด์ง๋๋ค.
ํ๋กฌํํธ โ ์ปจํ ์คํธ โ ํ๋ค์ค๋ก ์ด์ด์ง๋ ์์ง๋์ด๋ง์ ์ฒซ ๋จ๊ณ.