๐ฏ Strands SDK ๊ธฐ์ด
์์ด์ ํฑ ๋ฃจํ, ๋๊ตฌ, MCP, Structured Output
Strands Agents SDK
Agent ยท Tool ยท Model ยท MCP
์์ด์ ํธ๋ฅผ ๋ง๋๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ
3์ค ์ฝ๋๋ก ์์ํ๋ ํ๋ก๋์ ์์ด์ ํธ SDK
Strands Agents SDK ๊ฐ์
Model-Driven ยท 4ํจํค์ง ยท Python + TypeScript
์์ด์ ํธ ๊ฐ๋ฐ์ ํจ๋ฌ๋ค์ ์ ํ
LLM์ ์ถ๋ก ๋์ฝ์ด ๋ฐ๊พผ ํ๋จ์ ์ฃผ์ฒด
์ธ๋๊ฐ ๋ด๋ ค์ฌ์๋ก ๊ฐ๋ฐ์๊ฐ ์ฐ๋ ์ฝ๋๋ ์ค์ด๋ค๊ณ
๋ชจ๋ธ์ ํ๋จ ๋ฒ์๋ ๋์ด์ง๋๋ค
์ด 3์ธ๋ ์ ๊ทผ์ AWS๊ฐ ๊ตฌํํ ๊ฒ โ Strands Agents SDK
๋ฐํ์ ๋ ธํธ
ํน์ LLM API๋ก ์์ด์ ํธ๋ฅผ ์ง์ ๋ง๋ค์ด๋ณด์ ๋ถ ๊ณ์ ๊ฐ์? ๋ฃจํ๋ฅผ ๋๋ฆฌ๊ณ ์๋ต์ ํ์ฑํ๋ค ๋ณด๋ฉด ์์ด์ ํธ๋ง๋ค ๋๊ฐ์ ๊ธฐ๋ฐ ์ฝ๋๋ฅผ ๋ฐ๋ณตํด์ ์ง๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์ ํ๋ ์์ํฌ๊ฐ ๋์๋๋ฐ, ์ด๋ฒ์๋ ๊ทธ๋ํ์ ์ํ ๋จธ์ ์ ์ค๊ณํ๋ ๋ถ๋ด์ด ์๋ก ์๊ฒผ์ฃ . ๊ทธ ์ฌ์ด ๋ชจ๋ธ์ ์ถ๋ก ๋ฅ๋ ฅ์ด ํฌ๊ฒ ์ข์์ง๋ฉด์, ํ๋ฆ ์์ฒด๋ฅผ ๋ชจ๋ธ์๊ฒ ๋งก๊ฒจ๋ ๋๋ ์์ ์ด ์จ ๊ฒ๋๋ค. ์ด ์ธ ๋ฒ์งธ ์ ๊ทผ์ AWS๊ฐ ๊ตฌํํ ๊ฒ์ด ์ค๋ ๋ค๋ฃฐ Strands Agents SDK์ ๋๋ค.
Model-Driven ์ค๊ณ ์ฒ ํ
3์ธ๋์ ํต์ฌ โ ๋ชจ๋ธ์ด ์ถ๋ก ํ๊ณ ๋๊ตฌ๋ฅผ ์ ํ, ๊ฐ๋ฐ์๋ ๋๊ตฌ๋ง ์ ๊ณต
๊ฐ๋ฐ์๊ฐ ํ๋ ์ผ
๋๊ตฌ ์ ๊ณต๊น์ง๋ง
- @tool ๋ฐ์ฝ๋ ์ดํฐ๋ก Python ํจ์๋ฅผ ๋๊ตฌ๋ก ๋ฑ๋ก
- ์ด๋ฆยท์ค๋ช ยทํ๋ผ๋ฏธํฐ ์คํค๋ง ์ ๊ณต
- ํธ์ถ ์์ยท๋ถ๊ธฐ ๋ก์ง์ ์์ฑํ์ง ์์
๋๊ตฌ๋ ํ๋ฒํ Python ํจ์. docstring๊ณผ ํ์ ํํธ๊ฐ ๋ชจ๋ธ์๊ฒ ์ ๋ฌ๋๋ ์ค๋ช ์๊ฐ ๋๋ฏ๋ก, ๋ช ํํ๊ฒ ์ธ์๋ก ๋ชจ๋ธ์ ๋๊ตฌ ์ ํ์ด ์ ํํด์ง.
๋ชจ๋ธ์ด ํ๋ ์ผ
์ถ๋ก ยท ์ ํ ยท ํ๋จ
- ์ฌ์ฉ์ ์์ฒญ์ ๋ถ์ํด ํ์ํ ๋๊ตฌ ์ ํ
- ํธ์ถ ์์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์์จ ๊ฒฐ์
- ๊ฒฐ๊ณผ๋ฅผ ํ๊ฐํด ๋ฐ๋ณต ๋๋ ์๋ฃ ํ๋จ โ ๋๊ตฌ ํธ์ถ ์๋ ์๋ต์ด ๊ณง ์ข ๋ฃ
๊ธฐ์กด ํ๋ ์์ํฌ์์ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ก ์ง๋ ์ค์ผ์คํธ๋ ์ด์ ์ ๋ชจ๋ธ์ ์ถ๋ก ์ด ๋์ฒด. ์คํ ์ฌ์ดํด์ ๋์์ PART 3 ์์ด์ ํฑ ๋ฃจํ์์ ์์ธํ ๋ค๋ฃธ.
๋ฐํ์ ๋ ธํธ
์ด ์ฌ๋ผ์ด๋๊ฐ ์ค๋ ๊ฐ์์ ํต์ฌ ํ ์ฅ์ ๋๋ค. ์ผ์ชฝ์ ๋ณด์๋ฉด ๊ฐ๋ฐ์๊ฐ ํ๋ ์ผ์ด ๋๊ตฌ ๋ฑ๋ก์์ ๋๋๊ณ , ์ด๋ค ๋๊ตฌ๋ฅผ ์ธ์ ์ด๋ค ์์๋ก ๋ถ๋ฅผ์ง๋ ์ค๋ฅธ์ชฝ์ ๋ชจ๋ธ์ด ๊ฒฐ์ ํฉ๋๋ค. ๊ทธ๋์ docstring๊ณผ ํ์ ํํธ๊ฐ ๋จ์ํ ์ฃผ์์ด ์๋๋ผ ๋ชจ๋ธ์ด ์ฝ๋ ์ค๋ช ์๊ฐ ๋๋ ๊ฑฐ์ฃ . ๋๊ตฌ ์ค๋ช ์ ๋์ถฉ ์ฐ๋ฉด ๋ชจ๋ธ์ด ์๋ฑํ ๋๊ตฌ๋ฅผ ๊ณ ๋ฅด๋ ๊ฑธ ์ง์ ๊ฒฝํํ์๊ฒ ๋ ํ ๋ฐ, ๊ทธ๋งํผ ์ค๋ช ์์ ํ์ง์ด ๊ณง ์์ด์ ํธ์ ํ์ง์ ๋๋ค.
์์ด์ ํธ ํ๋ ์์ํฌ ์ธ๋๊ต์ฒด
๊ฐ์ ๋ชฉํ, ๋ค๋ฅธ ์ถ๋ฐ์ โ ์ธ๋๊ฐ ๋ค๋ฅธ ๋ ํ๋ ์์ํฌ
๋ฐํ์ ๋ ธํธ
์ค๋ฌด ๊ฐ๊ฐ์ผ๋ก ๋ง์๋๋ฆฌ๋ฉด, 2์ธ๋ ํ๋ ์์ํฌ๋ก ์์ด์ ํธ๋ฅผ ๋ง๋ค ๋๋ ์ค๊ณ ๋ฌธ์๋ถํฐ ๋ ธ๋์ ์ฃ์ง๋ฅผ ๊ทธ๋ฆฌ๋ ์ผ๋ก ์์ํฉ๋๋ค. Strands์์๋ ๊ทธ ์๋ฆฌ๋ฅผ ํ์ํ ๋๊ตฌ ๋ชฉ๋ก์ ์ ๋ฆฌํ๋ ์ผ์ด ๋์ ํ์ฃ . ์์ ์ฝ๋๋ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์์ญ ์ค์์ 3์ค๋ก ์ค์ด๋ญ๋๋ค. ์๋ ์ธ์ฉ์ด Strands์ ์ถ๋ฐ์ ์ธ๋ฐ, Amazon ๋ด๋ถ ํ๋ค์ด ์์ด์ ํธ๋ฅผ ์ด์ํ๋ฉด์ ์ป์ ๊ฒฐ๋ก ์ ๋๋ค. ๋จ์ํจ์ด ๊ณง ๋ฐฐํฌ ์๋๋ผ๋ ๊ฒ๋๋ค.
Strands Agents SDK
AWS๊ฐ ๋ง๋ ์คํ์์ค ์์ด์ ํธ ํ๋ ์์ํฌ โ AgentCore์ ๊ธฐ๋ฐ ์ค์ผ์คํธ๋ ์ด์ ์์ง
ํต์ฌ ์์น 3๊ฐ์ง
3์ค ์์ด์ ํธ
Agent(model, tools) + agent("์ง๋ฌธ") โ ๊ทธ๋ํยท์ํ ๋จธ์ ์ ์ ์์
๊ด๋ฆฌํ ๋ฐฐํฌ
AgentCore Runtime์ ์ฝ๋ ์์ ์์ด ๊ทธ๋๋ก ๋ฐฐํฌ
์ ์ง์ ํ์ฅ
3์ค๋ก ์์ โ HooksยทPluginsยทInterventions๋ฅผ ํ๋ก๋์ ์๊ตฌ์ ๋ง์ถฐ ์ถ๊ฐ
๋ฐํ์ ๋ ธํธ
์ซ์ ๋ช ๊ฐ๋ง ์ง๊ณ ๊ฐ๊ฒ ์ต๋๋ค. 2025๋ ์ ์คํ์์ค๋ก ๊ณต๊ฐ๋๊ณ , ์๊ฐ PyPI ๋ค์ด๋ก๋๊ฐ 3,400๋ง์ ๋์ต๋๋ค. ์ ์ ํ๋ ์์ํฌ์น๊ณ ๋ ์ฑํ ์๋๊ฐ ์๋นํ ๋น ๋ฅธ ํธ์ด์ฃ . ๊ทธ๋ฆฌ๊ณ ์ค์ํ ํฌ์ธํธ๋ AgentCore์์ ๊ด๊ณ์ธ๋ฐ, Strands๋ AgentCore์ ๊ธฐ๋ฐ ์ค์ผ์คํธ๋ ์ด์ ์์ง์ด๋ผ์ ๋ก์ปฌ์์ ๋ง๋ ์์ด์ ํธ๋ฅผ ์ฝ๋ ์์ ์์ด ๊ด๋ฆฌํ ๋ฐํ์์ผ๋ก ์ฌ๋ฆด ์ ์์ต๋๋ค. ํต์ฌ ์์น ์ธ ๊ฐ์ง ์ค์์๋ ์ ์ง์ ํ์ฅ์ ๊ธฐ์ตํด ์ฃผ์ธ์. 3์ค๋ก ์์ํด์ ํ๋ก๋์ ์๊ตฌ๊ฐ ์๊ธธ ๋ Hooks๋ฅผ ๋ถ์ฌ๊ฐ๋ ๋ฐฉ์์ ๋๋ค.
Strands 4ํจํค์ง ์ํ๊ณ
์ฝ์ด ยท ๋๊ตฌ ยท ํ๊ฐ ยท TypeScript โ ํ์ํ ๊ฒ๋ง ๊ณจ๋ผ ์ค์นํ๋ ๋ชจ๋ํ ์ํ๊ณ
๋ฐํ์ ๋ ธํธ
ํจํค์ง ๊ตฌ์กฐ๋ฅผ ๋ณด์๋ฉด ์ค๊ณ ์ฒ ํ์ด ๊ทธ๋๋ก ๋ณด์ ๋๋ค. ์ฝ์ด์ธ strands-agents ํ๋๋ง ์ค์นํด๋ ์์ด์ ํธ๊ฐ ๋์๊ฐ๊ณ , ๋๋จธ์ง๋ ์ ๋ถ ์ ํ์ด์์. ๋๊ตฌ๊ฐ ํ์ํ๋ฉด tools ํจํค์ง๋ฅผ, ํ์ง ์ธก์ ์ด ํ์ํ๋ฉด evals ํจํค์ง๋ฅผ ๋ํ๋ ์์ ๋๋ค. ์น ์๋น์ค๋ ํ๋ก ํธ์๋์ ๋ถ์ด์ค ๋ถ๋ค์ TypeScript SDK๋ ์๋ค๋ ์ ์ฐธ๊ณ ํ์๊ณ ์. ์ค๋ ๋ค๋ฃจ๋ ๋ฒ์๋ ์ฝ์ด์ tools ๋ ๊ฐ๋ฉด ์ถฉ๋ถํฉ๋๋ค.
Agent ๊ตฌ์ฑ
Model + Tools + System Prompt ยท 3์ค ์ฝ๋
Agent = Model + Tools + System Prompt
์ด ์ธ ๊ฐ์ง ์กฐํฉ์ด ์์ด์ ํธ์ ์ ๋ถ โ 3์ค ์ฝ๋์ ์ ์ฒด
์ธ ๊ฐ์ง๋ฉด ์ถฉ๋ถํ๋ค
Model์ด ํ๋จํ๊ณ , Tools๊ฐ ํ๋ํ๊ณ , System Prompt๊ฐ ๋ฐฉํฅ์ ์ก์ต๋๋ค โ agent("์ง๋ฌธ") ํ๋๋ก ์์ด์ ํฑ ๋ฃจํ๊ฐ ์์๋ฉ๋๋ค.
- Model โ ํ์
- Tools โ ์ ํ
- System Prompt โ ์ ํ
๋ฐํ์ ๋ ธํธ
์์ด์ ํธ๋ผ๊ณ ํ๋ฉด ๋ญ๊ฐ ๋ณต์กํ ๊ตฌ์กฐ๋ฌผ์ ์์ํ๊ธฐ ์ฌ์ด๋ฐ, Strands์์๋ ์ด ์ธ ๊ฐ์ง๊ฐ ์ ๋ถ์ ๋๋ค. ๋น์ ํ์๋ฉด Model์ ๋๋, Tools๋ ์๋ฐ, System Prompt๋ ์ ๋ฌด ์ง์นจ์์์. ์๋ก ์จ ํ์์๊ฒ ์ง์นจ์๋ฅผ ์ฃผ๊ณ ํ์ํ ๋๊ตฌ๋ฅผ ์ฅ์ฌ์ฃผ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ตฌ์กฐ์ ๋๋ค. ์ด ๊ทธ๋ฆผ ํ๋๋ง ๋จธ๋ฆฌ์ ๋ฃ์ด๋์๋ฉด, ์ดํ ํํธ๋ค์ด ์ ๋ถ ์ด ์ธ ์์๋ฅผ ํ๋์ฉ ๊น์ด ํ๋ ์ฌํ๋ผ๋ ๊ฑธ ์์๊ฒ ๋ฉ๋๋ค.
๊ตฌ์ฑ์์์ ์ญํ
Model๋ง ํ์ โ ๋๋จธ์ง๋ ์์ด๋ ๋์ํ๋ ์ ํ ์์
Model
์ถ๋ก ์์ง โ ๋๊ตฌ ์ ํ๊ณผ ์๋ฃ ์ฌ๋ถ๋ฅผ ํ๋จ
- LLM ํ๋ก๋ฐ์ด๋ โ BedrockModel ๋ฑ ๊ณต์ 15์ข
- ํ์ โ ์์ด์ ํธ์ ๋๋
- ์ฌํ โ PART 5 ยท ๋ชจ๋ธ ํ๋ก๋ฐ์ด๋
Tools
ํ๋ ๋ฅ๋ ฅ โ ์ธ๋ถ ์ธ๊ณ์ ์ํธ์์ฉ
- @tool ํจ์ ๋๋ MCPClient
- ์ ํ โ ์์ผ๋ฉด ๊ทธ๋ฅ ์ฑํ ๋ด
- ์ฌํ โ PART 4 ยท ๋๊ตฌ ์ํ๊ณ
System Prompt
ํ๋ฅด์๋ โ ์ญํ ยท๊ท์นยท์๋ต ํ์ ์ ์
- LLM์ system ๋ฉ์์ง๋ก ์ ๋ฌ
- ์ ํ โ ์์ผ๋ฉด ๋ฒ์ฉ ์๋ต
- ์์ฑ๋ฒ โ ์ด ํํธ์์ ์ด์ด์
ํ์๋ Model ํ๋ โ ์ด๋ฏธ ์๋ ์ฑํ ๋ด์ ๋๊ตฌ๋ง ๋ํ๋ฉด ๊ทธ๋๋ก ์์ด์ ํธ๊ฐ ๋ฉ๋๋ค.
๋ฐํ์ ๋ ธํธ
์ธ ์์ ์ค์ ํ์๊ฐ Model ํ๋๋ฟ์ด๋ผ๋ ๊ฒ ์ฌ๋ฏธ์๋ ๋ถ๋ถ์ ๋๋ค. Tools ์์ด ๋ง๋ค๋ฉด ๊ทธ๋ฅ ์ฑํ ๋ด์ด ๋๊ณ , System Prompt๊ฐ ์์ผ๋ฉด ๋ฒ์ฉ ์๋ต์ ํ๋ ๋น์๊ฐ ๋ฉ๋๋ค. ๊ฑฐ๊พธ๋ก ๋งํ๋ฉด, ์ด๋ฏธ ๊ฐ๊ณ ๊ณ์ ์ฑํ ๋ด์ ๋๊ตฌ๋ง ๋ํ๋ฉด ์์ด์ ํธ๊ฐ ๋๋ค๋ ๋ป์ด๊ธฐ๋ ํ์ฃ . ๊ฐ ์์๋ ๋ค ํํธ์์ ๊น์ด ๋ค๋ฃจ๋๊น, ์ฌ๊ธฐ์๋ ์ญํ ๊ตฌ๋ถ๋ง ์ก๊ณ ๋์ด๊ฐ์๋ฉด ๋ฉ๋๋ค.
Model โ ์ถ๋ก ์์ง
์ด๋ค LLM์ด ํ๋จ์ ๋งก์์ง ์ง์ โ ์์ด์ ํธ์ ๋๋
from strands import Agent
from strands.models import BedrockModel
# โ ํ๋ก๋์
โ Bedrock (IAM ์ธ์ฆ, ๊ถ์ฅ)
model = BedrockModel(model_id="us.anthropic.claude-sonnet-4-6")
agent = Agent(model=model)
# โก ๋ก์ปฌ ๊ฐ๋ฐ๋ก ์ ํ โ ์๋ 2์ค๋ง ๊ต์ฒด, ๋๋จธ์ง ์ฝ๋๋ ๊ทธ๋๋ก
# from strands.models.ollama import OllamaModel
# agent = Agent(model=OllamaModel(model_id="llama3"))
- BedrockModel โ IAM ์ธ์ฆ, ํ๋ก๋์ ๊ถ์ฅ. ๋๊ตฌ ์ ํยท๋ฐ๋ณตยท์๋ฃ๋ฅผ ํ๋จํ๋ ์ถ๋ก ์์ง
- ๋ชจ๋ธ ๊ต์ฒด๋ 2์ค โ toolsยทsystem_prompt ์ฝ๋๋ ๊ทธ๋๋ก
- ๊ณต์ 15์ข ํ๋ก๋ฐ์ด๋ ์ง์ โ ์์ธ๋ PART 5
๋ฐํ์ ๋ ธํธ
์ฝ๋์์ ์ฃผ๋ชฉํ์ค ๋ถ๋ถ์ ๊ต์ฒด ๋น์ฉ์ ๋๋ค. ํ๋ก๋์ ์์๋ IAM ์ธ์ฆ์ ์ฐ๋ BedrockModel์ ๊ถ์ฅํ๊ณ , ๋ก์ปฌ ๊ฐ๋ฐ๋ก ์ ํํ ๋๋ ์ฃผ์ ์ฒ๋ฆฌ๋ ๋ ์ค์ฒ๋ผ Ollama๋ก ๋ฐ๊พธ๋ฉด ๋์ด์์. ๋ชจ๋ธ์ ๋ฐ๊ฟ๋ tools์ system_prompt ์ชฝ ์ฝ๋๋ ํ ๊ธ์๋ ์ ๋ฐ๋๋๋ค. ํ์ฌ์ ๋ชจ๋ธ ์ ์ฑ ์ด ๋ฐ๋์ด๋ ์์ด์ ํธ ๋ก์ง์ ๋ค์ ์งค ํ์๊ฐ ์๋ค๋ ๊ฑด ์ค๋ฌด์์ ๊ฝค ํฐ ์ฅ์ ์ ๋๋ค.
Tools โ ํ๋ ๋ฅ๋ ฅ
๋ชจ๋ธ์ด ํธ์ถํ ์ ์๋ ํจ์ ๋ชฉ๋ก โ ์ธ๋ถ ์ธ๊ณ์์ ์ ์
ํต์ฌ ํฌ์ธํธ
- @tool
- Python ํจ์๋ฅผ ๊ทธ๋๋ก ๋๊ตฌ๋ก ๋ฑ๋กํ๋ ๋ฐ์ฝ๋ ์ดํฐ
- docstring
- ๋ชจ๋ธ์๊ฒ ์ ๋ฌ๋๋ ์ฌ์ฉ ์ค๋ช ์ โ ๊ตฌ์ฒด์ ์ผ์๋ก ์ ํ์ด ์ ํ
- tools=[...]
- ๋ชจ๋ธ์ ๊ฒฐ์ ์ ์ค์ ํ๋์ผ๋ก ์ฎ๊ธฐ๋ ์ ์
- ํ์ฅ
- ์นดํ ๊ณ ๋ฆฌ๋ณ ๋นํธ์ธ + MCP ์ฐ๊ฒฐ โ ์์ธ๋ PART 4
์ฝ๋
from strands import Agent, tool
# ํจ์์ @tool๋ง ๋ถ์ด๋ฉด ๋ชจ๋ธ์ด ํธ์ถ ๊ฐ๋ฅํ ๋๊ตฌ๊ฐ ๋จ
@tool
def get_weather(city: str) -> str:
"""๋์์ ํ์ฌ ๋ ์จ๋ฅผ ์กฐํํฉ๋๋ค."""
return f"{city}: ๋ง์, 24ยฐC"
# ๋ฑ๋ก โ ๋ชจ๋ธ์ด ์ ํํ ์ ์๋ ํ๋ ๋ชฉ๋ก
agent = Agent(model=model, tools=[get_weather])
๋ฐํ์ ๋ ธํธ
์ฌ๊ธฐ์ ๋ง์ ๋ถ๋ค์ด ๋๋ผ์๋๋ฐ, ๋๊ตฌ๋ฅผ ๋ง๋๋ ๋ฐ ๋ณ๋์ ํด๋์ค๋ ์คํค๋ง ์ ์๊ฐ ์์ต๋๋ค. ํ๋ฒํ Python ํจ์์ @tool ํ๋ ๋ถ์ด๋ฉด ๋์ด์์. ๋์ docstring์ด ๋ชจ๋ธ์๊ฒ ๊ทธ๋๋ก ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์, ํจ์ ์ค๋ช ์ ์ฌ๋ ๋๋ฃ์๊ฒ ์ธ์์ธ๊ณํ๋ฏ ๊ตฌ์ฒด์ ์ผ๋ก ์ฐ๋ ์ต๊ด์ด ์ค์ํฉ๋๋ค. tools ๋ฆฌ์คํธ์ ๋ด๋ ์๊ฐ ๋ชจ๋ธ์ ์ ํ์ง๊ฐ ๋๋ ๊ฑฐ๊ณ ์. ๋๊ตฌ ์ด์ผ๊ธฐ๋ PART 4์์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ด์ด๊ฐ๊ฒ ์ต๋๋ค.
System Prompt โ ํ๋ฅด์๋
์ญํ ยท๊ท์นยท์๋ต ํ์์ ํ ์คํธ๋ก ์ ์ โ ๊ฐ์ฅ ๊ฐ๋ ฅํ ํ๋ ์ ์ด ์๋จ
agent = Agent(
model="us.anthropic.claude-sonnet-4-6",
# โ ํ๋ฅด์๋ โ ์ ์ฒด์ฑยทํ๋ ๊ท์น์ system ๋ฉ์์ง๋ก ์ ๋ฌ
system_prompt="""๋น์ ์ AWS ๋น์ฉ ๋ถ์ ์ ๋ฌธ๊ฐ์
๋๋ค.
๊ท์น:
- ํญ์ get_cost_data ๋๊ตฌ๋ก ์ค์ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ๋ค ๋ต๋ณ
- ์ถ์ธก ๊ธ์ง โ ๋ฐ์ดํฐ ์์ผ๋ฉด "ํ์ธ ๋ถ๊ฐ"๋ก ๋ต๋ณ
- ๊ธ์ก์ USD ๊ธฐ์ค, ์์์ 2์๋ฆฌ๊น์ง
์ถ๋ ฅ ํ์:
- ์๋น์ค๋ณ ๋น์ฉ์ ํ
์ด๋ธ๋ก ์ ๋ฆฌ
- ์ ์ ๋๋น ์ฆ๊ฐ๋ฅ ํฌํจ""",
# โก ์ '๊ท์น' ๋ฌธ์ฅ์ด ๋๊ตฌ ์ฌ์ฉ ์กฐ๊ฑด์ ํต์
tools=[get_cost_data, get_recommendations],
)
- ์ ์ฒด์ฑยทํ๋ ๊ท์น ์ ์ โ LLM์ system ๋ฉ์์ง๋ก ์ ๋ฌ
- ๋๊ตฌ ์ฌ์ฉ ์กฐ๊ฑดยท๊ธ์ง ์ฌํญ์ ๋ฌธ์ฅ์ผ๋ก ํต์
- ๊ตฌ์ฒด์ ์ผ์๋ก ํ๋์ด ์ผ๊ด๋จ โ ๊ท์นยท์ถ๋ ฅ ํ์ ๋ช ์ ๊ถ์ฅ
๋ฐํ์ ๋ ธํธ
์์คํ ํ๋กฌํํธ๋ ์ ์ค์ ๊ฐ์ฅ ์ ํ๊ฐ๋๋ ์์์ธ๋ฐ, ์ฌ์ค ๊ฐ์ฅ ๊ฐ๋ ฅํ ํ๋ ์ ์ด ์๋จ์ ๋๋ค. ์์์ ๊ท์น ์น์ ์ ๋ณด์๋ฉด ๋๊ตฌ ์ฌ์ฉ ์กฐ๊ฑด์ ๋ฌธ์ฅ์ผ๋ก ํต์ ํ๊ณ ์์ฃ . ์ถ์ธก ๊ธ์ง, ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ํ์ธ ๋ถ๊ฐ๋ก ๋ตํ๋ผ โ ์ด๋ฐ ๋ฌธ์ฅ ํ๋๊ฐ ๊ทผ๊ฑฐ ์๋ ๋ต๋ณ์ ์ค์ง์ ์ผ๋ก ์ค์ฌ์ค๋๋ค. ์์ด์ ํธ๊ฐ ์ด์ํ๊ฒ ๋์ํ ๋๋ ์ฝ๋๋ณด๋ค ์์คํ ํ๋กฌํํธ๋ฅผ ๋จผ์ ์์ฌํด ๋ณด์๊ธธ ๊ถํฉ๋๋ค.
3์ค ์์ด์ ํธ
ModelยทToolsยทSystem Prompt๋ฅผ ์ฝ๋๋ก ์ฎ๊ธฐ๋ฉด โ ๊ทธ๋๋ก ๋์ํ๋ ์์ด์ ํธ
ํต์ฌ ํฌ์ธํธ
- model
- ์ถ๋ก ์์ง โ ๋๊ตฌ ์ ํยท๋ฐ๋ณตยท์๋ฃ๋ฅผ ํ๋จ (์ฌํ๋ PART 5)
- tools
- ๋ชจ๋ธ์ด ์ ํํ ์ ์๋ ํ๋ ๋ชฉ๋ก (์ฌํ๋ PART 4)
- system_prompt
- ์ญํ ยท๊ท์นยท์๋ต ํ์ โ ํ๋ฅด์๋
- agent("์ง๋ฌธ")
- ์์ด์ ํฑ ๋ฃจํ ์์ โ ๋ค์ ํํธ์ ์ฃผ์
์ฝ๋
from strands import Agent
from strands.models import BedrockModel
from strands_tools import http_request
# ์์ด์ ํธ ์กฐ๋ฆฝ โ ๋ชจ๋ธ + ๋๊ตฌ + ์์คํ
ํ๋กฌํํธ
agent = Agent(
model=BedrockModel(model_id="us.anthropic.claude-sonnet-4-6"),
tools=[http_request],
system_prompt="GitHub API ๋์ฐ๋ฏธ์
๋๋ค. ํ๊ตญ์ด๋ก ๋ต๋ณํฉ๋๋ค.",
)
# ์คํ โ ์ง๋ฌธ ํ ์ค๋ก ์์ด์ ํฑ ๋ฃจํ ์์
result = agent("strands-agents/harness-sdk ์ ์ฅ์์ star ์๋?")
๋ฐํ์ ๋ ธํธ
์์ ๋ณธ ์ธ ๊ตฌ์ฑ์์๋ฅผ ์ค์ ๋ก ์กฐ๋ฆฝํ๋ฉด ์ด ์ฝ๋๊ฐ ๋ฉ๋๋ค. ์ํฌํธ๋ฅผ ๋นผ๋ฉด ์ค์ง์ ์ธ ์ฝ๋๋ Agent ์์ฑ๊ณผ ํธ์ถ๋ฟ์ด์์. ๊ทธ๋ฐ๋ฐ ๋ง์ง๋ง ์ค์์ ์ง๋ฌธ์ ๋๊ธฐ๋ ์๊ฐ ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๊น์? ๋ชจ๋ธ์ด http_request ๋๊ตฌ๋ก GitHub API๋ฅผ ๋ถ๋ฅด๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๊ด์ฐฐํ๊ณ , ๋ตํ ์ง ๋ ์กฐํํ ์ง ์ค์ค๋ก ํ๋จํฉ๋๋ค. ์ด ๋ฐ๋ณต ๊ณผ์ ์ด ๋ฐ๋ก ๋ค์ ํํธ์ ์ฃผ์ , ์์ด์ ํฑ ๋ฃจํ์ ๋๋ค.
์์ด์ ํฑ ๋ฃจํ
Reason โ Act โ Observe ยท ์ํ์ค ยท ์ข ๋ฃ ์กฐ๊ฑด
Reason โ Act โ Observe
๋ชฉํ ๋ฌ์ฑ๊น์ง ์ถ๋ก ยท์คํยท๊ด์ฐฐ์ ๋ฐ๋ณตํ๋ ํต์ฌ ์ฌ์ดํด
๋ฐํ์ ๋ ธํธ
๋ฃจํ๋ ์ด ์ธ ๋จ๊ณ์ ๋ฐ๋ณต์ ๋๋ค. ์ฌ๋์ด ์ผํ๋ ๋ฐฉ์๊ณผ ๋๊ฐ๋ค๊ณ ๋ณด์๋ฉด ๋ผ์. ์ํฉ์ ํ์ ํ๊ณ , ํ๋ํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด์ ๋ค์์ ์ ํ๋ ๊ฒ๋๋ค. ์ค์ํ ๊ฑด ์ด ์ฌ์ดํด์ ๋ช ๋ฒ ๋์ง ๊ฐ๋ฐ์๊ฐ ๋ฏธ๋ฆฌ ์ ํ์ง ์๋๋ค๋ ์ ์ ๋๋ค. ๋ชฉํ๊ฐ ๋ฌ์ฑ๋๋ค๊ณ ๋ชจ๋ธ์ด ํ๋จํ ๋๊น์ง ๋์๊ฐ๋๋ค.
๋ฃจํ์ ๊ตฌ์กฐ โ Agent๊ฐ ํ๋ธ
Prompt๊ฐ ๋ค์ด์ Result๊ฐ ๋์ฌ ๋๊น์ง โ Agent๊ฐ ModelยทTools์ ์๋ฐฉํฅ์ผ๋ก ๊ตํ
๋ชจ๋ธ์ ๋๊ตฌ๋ฅผ ์ง์ ์คํํ์ง ์์ต๋๋ค โ ๋๊ตฌ ๊ฒฐ์ ๋ง ๋ฐํํ๊ณ ์คํ์ Agent ํ๋ธ์ ๋ชซ์ด๋ผ, ์คํ ์๋ค์ ๊ฒ์ฆยท๋ก๊น (Hooks)์ด ๋ผ์ด๋ค ์๋ฆฌ๊ฐ ์๊น๋๋ค.
๋ฐํ์ ๋ ธํธ
์ด ๊ทธ๋ฆผ์์ Agent๊ฐ ๊ฐ์ด๋ฐ ํ๋ธ๋ผ๋ ์ ์ ๋ด์ฃผ์ธ์. ๋ชจ๋ธ์ด ๋๊ตฌ๋ฅผ ์ง์ ์คํํ๋ ๊ฒ ์๋๋๋ค. ๋ชจ๋ธ์ ์ด๋ค ๋๊ตฌ๋ฅผ ์ฐ๊ฒ ๋ค๋ ๊ฒฐ์ ๋ง ๋ฐํํ๊ณ , ์ค์ ์คํ์ Agent๊ฐ ๋งก์ต๋๋ค. ๊ทธ๋์ ๋๊ตฌ ์คํ ์๋ค์ ๊ฒ์ฆ์ด๋ ๋ก๊น ์ ๋ผ์ ๋ฃ์ ์ ์๋ ๊ฑฐ๊ณ , ์ ์ ๋ค์ ๋ณผ Hooks๊ฐ ๊ฑธ๋ฆฌ๋ ์ง์ ๋ ๋ฐ๋ก ์ด ํ๋ธ์ ๋๋ค. ์ ์ ๋ฐ์ค ์์ด agent ํธ์ถ ํ ๋ฒ ์์์ ๋ฒ์ด์ง๋ ์ผ ์ ์ฒด์ ๋๋ค.
์์ฒญ์์ ๋ต๋ณ๊น์ง โ ๋ฃจํ๊ฐ ๋๋ ๋ชจ์ต
ํ ๋ฒ์ ํธ์ถ ์์์ ๋ฃจํ๊ฐ 2ํ์ ํ๋ ์ค์ ์ํ์ค โ ์ฌ์ฉ์ ยท Agent ยท Model ยท Tools
๋ฐํ์ ๋ ธํธ
์ด๋ฒ์๋ ์ค์ ์๊ฐ ์์๋ก ๋ฐ๋ผ๊ฐ ๋ณด์์ฃ . ์ฒซ ํ์ ์์ ๋ชจ๋ธ์ด tool_use๋ฅผ ๋ฐํํ๋ฉด Agent๊ฐ ๋๊ตฌ๋ฅผ ์คํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ํ์ ์ถ๊ฐํด์ ๋ค์ ๋ชจ๋ธ์๊ฒ ๋ณด๋ ๋๋ค. ๋ ๋ฒ์งธ ํ์ ์์ ๋ชจ๋ธ์ด ๋๊ตฌ ํธ์ถ ์์ด ํ ์คํธ๋ก๋ง ๋ตํ๋ฉด ๊ทธ๊ฒ ๊ณง ์ข ๋ฃ ์ ํธ์์. ๋ณ๋์ ์ข ๋ฃ API๊ฐ ์๋ ๊ฒ ์๋๋ผ, ์๋ต์ ํํ ์์ฒด๊ฐ ๊ณ์๊ณผ ์ข ๋ฃ๋ฅผ ๊ตฌ๋ถํ๋ค๋ ๊ฒ ํฌ์ธํธ์ ๋๋ค.
๋ฃจํ ์ข ๋ฃ ์กฐ๊ฑด
๊ธฐ๋ณธ ๋์์ ์์ฐ ์ข ๋ฃ โ ๋ฐ๋ณต ์ํ์ limits ๋ด์ฅ, ๊ทธ ์ธ ์ค๋จ์ ๋ณด์กฐ ์๋จ
์์ฐ ์ข ๋ฃ
๋ชจ๋ธ์ด ๋๊ตฌ ํธ์ถ ์์ด ์ต์ข ์๋ต โ stop_reason: end_turn
- ๋๊ตฌ ํธ์ถ(tool_use)์ด ์ ์ผํ "๊ณ์" ์ ํธ
- ๋ฐ๋ณต ์ํ์ด ํ์ํ๋ฉด ๋ด์ฅ limits ํ๋ผ๋ฏธํฐ โ ๊ฐ์ด๋ฐ ์นด๋
limits โ ๋ด์ฅ ๋ฐ๋ณต ์ํ
agent(prompt, limits={"turns": 10, ...}) โ turns ยท output_tokens ยท total_tokens ์์ฐ ์ง์
- ์ด๊ณผ ์ stop_reason: limit_turns ยท limit_output_tokens ยท limit_total_tokens
- ๊ฐ ๋ฃจํ ๋ฐ๋ณต ์์ ์ ๊ฒ์ฌ โ ๋ํ ์ํ๋ฅผ ๋ณด์กดํ ์ฑ ์ข ๋ฃ
๋ณด์กฐ ์๋จ โ Hooks ยท cancel
BeforeToolCallEvent์์ event.cancel_tool = "์ฌ์ " โ ๋๊ตฌ ์คํ ์ฐจ๋จ
- ์ทจ์ ์ฌ์ ๊ฐ ๋๊ตฌ ๊ฒฐ๊ณผ๋ก ๋ชจ๋ธ์ ์ ๋ฌ โ ๋ชจ๋ธ์ด ๋ง๋ฌด๋ฆฌ ์๋ต
- ์ธ๋ถ ์ค๋จ์ agent.cancel() โ stop_reason: cancelled
๋ฐ๋ณต ์ํ์ limits ํ๋ผ๋ฏธํฐ๊ฐ ๋ด์ฅ โ ์ด๊ณผ ์ stop_reason: limit_turns ๋ฑ์ผ๋ก ์ข
๋ฃ๋์ด ํญ์ฃผ ๋น์ฉ์ ๋ฐฉ์ดํฉ๋๋ค.
๋ฐํ์ ๋ ธํธ
๊ทธ๋ผ ๋ชจ๋ธ์ด ๊ณ์ ๋๊ตฌ๋ง ๋ถ๋ฅด๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ด๋ด ๋๋ฅผ ์ํด limits ํ๋ผ๋ฏธํฐ๊ฐ ๋ด์ฅ๋์ด ์์ต๋๋ค. ํธ์ถํ ๋ turns, output_tokens, total_tokens ์์ฐ์ ์ง์ ํ๋ฉด ๊ฐ ๋ฃจํ ๋ฐ๋ณต์ด ์์๋ ๋ ๊ฒ์ฌํด์, ์ด๊ณผํ๋ฉด limit_turns ๊ฐ์ stop_reason์ผ๋ก ๋ํ ์ํ๋ฅผ ๋ณด์กดํ ์ฑ ์ข ๋ฃ๋ฉ๋๋ค. ๋ณด์กฐ ์๋จ๋ ๋ ๊ฐ์ง ์๋๋ฐ์, ํ ์์ cancel_tool๋ก ๋๊ตฌ ์คํ์ ์ฐจ๋จํ๋ฉด ๊ทธ ์ฌ์ ๊ฐ ๋ชจ๋ธ์ ์ ๋ฌ๋์ด ๋ชจ๋ธ์ด ๋ง๋ฌด๋ฆฌ ์๋ต์ ํ๊ณ , ์ฌ์ฉ์ ์ทจ์๋ ํ์์์ ๊ฐ์ ์ธ๋ถ ์ ํธ๋ agent.cancel()๋ก ์ฒ๋ฆฌํฉ๋๋ค. ํ๋ก๋์ ์์๋ ๋น์ฉ ๋ฐฉ์ด์ ์ผ๋ก limits๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๊ฑธ์ด๋์๋ ๊ฑธ ๊ถํฉ๋๋ค.
๋๊ตฌ ์ํ๊ณ
@tool ยท ๋นํธ์ธ ๋๊ตฌ ยท MCPClient
๋๊ตฌ์ ์ธ ๊ฐ์ง ๊ณต๊ธ ๊ฒฝ๋ก
์ง์ ์ ์ ยท ๊ฐ์ ธ๋ค ์ฐ๊ธฐ ยท ์ธ๋ถ ์ฐ๊ฒฐ
๋ฐํ์ ๋ ธํธ
๋๊ตฌ๋ฅผ ํ๋ณดํ๋ ๊ฒฝ๋ก๋ ์ธ ๊ฐ์ง์ ๋๋ค. ์ฌ๋ด API์ฒ๋ผ ์ฐ๋ฆฌ ํ์ฌ์๋ง ์๋ ๊ธฐ๋ฅ์ @tool๋ก ์ง์ ๋ง๋ค๊ณ , ํ์ผ ์ฝ๊ธฐ๋ HTTP ํธ์ถ์ฒ๋ผ ํํ ๊ธฐ๋ฅ์ ์นดํ ๊ณ ๋ฆฌ๋ณ ๋นํธ์ธ์์ ๊ฐ์ ธ๋ค ์ฐ๊ณ , ์ด๋ฏธ MCP ์๋ฒ๋ก ๊ณต๊ฐ๋ ๊ธฐ๋ฅ์ MCPClient๋ก ์ฐ๊ฒฐํฉ๋๋ค. ์ค๋ฌด์์๋ ์ธ ๊ฒฝ๋ก๋ฅผ ์์ด ์ฐ๊ฒ ๋๋๋ฐ, ์ ๋๊ตฌ๋ฅผ ๋ง๋ค๊ธฐ ์ ์ ๋นํธ์ธ๊ณผ MCP ์ํ๊ณ๋ถํฐ ๊ฒ์ํด ๋ณด์๋ ๊ฒ ์๊ฐ์ ์๋ผ๋ ๊ธธ์ ๋๋ค. ์ด์ ํ๋์ฉ ์ฝ๋๋ก ๋ณด๊ฒ ์ต๋๋ค.
@tool ๋ฐ์ฝ๋ ์ดํฐ
Python ํจ์์ ๋ถ์ด๋ฉด ์์ด์ ํธ๊ฐ ํธ์ถ ๊ฐ๋ฅํ ๋๊ตฌ๋ก ๋ณํ
# ์ํฌํธ โ ๋ฐ์ฝ๋ ์ดํฐ ํ๋๋ฉด ์ถฉ๋ถ
from strands import tool
# โ @tool ๋ฐ์ฝ๋ ์ดํฐ โ ํจ์๋ฅผ ๋๊ตฌ๋ก ๋ณํ
@tool
# โก ํ์
ํํธ โ ํ๋ผ๋ฏธํฐ ์คํค๋ง ์๋ ์์ฑ
def get_weather(city: str, unit: str = "celsius") -> dict:
# โข docstring โ ๋ชจ๋ธ์๊ฒ ์ ๋ฌ๋๋ ์ฌ์ฉ ์ค๋ช
์
"""๋์์ ํ์ฌ ๋ ์จ๋ฅผ ์กฐํํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ๋ ์จ๋ฅผ ๋ฌผ์ด๋ณผ ๋ ํธ์ถํ์ธ์.
city: ๋์๋ช
(์: "์์ธ", "Tokyo")
unit: ์จ๋ ๋จ์ โ "celsius" ๋๋ "fahrenheit"
๋ฐํ: {"temp": 22, "condition": "๋ง์"}
"""
# โฃ ๋ฐํ๊ฐ โ ๋ชจ๋ธ์ด ๊ด์ฐฐํ๋ ์คํ ๊ฒฐ๊ณผ
return {"temp": 22, "condition": "๋ง์"}
- @tool ๋ฐ์ฝ๋ ์ดํฐ ํ๋๋ก Python ํจ์๊ฐ ์์ด์ ํธ ๋๊ตฌ๋ก ๋ณํ
- ํ์
ํํธ โ ํ๋ผ๋ฏธํฐ ์คํค๋ง ์๋ ์์ฑ (
city: str, ๊ธฐ๋ณธ๊ฐ ์ง์) - docstring โ ๋ชจ๋ธ์๊ฒ ์ ๋ฌ๋๋ ์ฌ์ฉ ์ค๋ช ์, ํธ์ถ ์์ ํ๋จ ๊ทผ๊ฑฐ
- ๋ฐํ๊ฐ โ ๋ชจ๋ธ์ด ๊ด์ฐฐํ๋ ๋๊ตฌ ์คํ ๊ฒฐ๊ณผ
๋ฐํ์ ๋ ธํธ
์๊น ์ ๊น ๋ณธ @tool์ ์ด๋ฒ์ ์์ธํ ๋ฏ์ด๋ณด๊ฒ ์ต๋๋ค. ํ์ ํํธ์์ ํ๋ผ๋ฏธํฐ ์คํค๋ง๊ฐ ์๋ ์์ฑ๋๋๊น, unit์ฒ๋ผ ๊ธฐ๋ณธ๊ฐ์ด ์๋ ์ ํ ํ๋ผ๋ฏธํฐ๋ ๊ทธ๋๋ก ํํ๋ฉ๋๋ค. docstring์๋ ์ธ์ ํธ์ถํด์ผ ํ๋์ง, ํ๋ผ๋ฏธํฐ ์์, ๋ฐํ ํํ๊น์ง ์ ์ด์ฃผ๋ ๊ฒ ์ข์์. ๋ชจ๋ธ ์ ์ฅ์์๋ ์ด ๋ฌธ์๊ฐ ๋๊ตฌ์ ๋ํด ์๋ ์ ๋ถ๊ฑฐ๋ ์. ๋๊ตฌ ์ ํ์ด ์๊พธ ์ด๊ธ๋๋ค๋ฉด ์ฝ๋๊ฐ ์๋๋ผ docstring์ ๋ค๋ฌ๋ ๊ฒ ์ ๋ต์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋นํธ์ธ ๋๊ตฌ ์นดํ ๊ณ ๋ฆฌ
๋ ๊ณต๊ธ์ โ SDK ์ฝ์ด ๋๋ด 6์ข ๊ณผ strands-agents-tools ์นดํ ๊ณ ๋ฆฌ๋ณ ํ์ฅ
ํต์ฌ ํฌ์ธํธ
- ์ฝ์ด ๋๋ด 6์ข
- bash ยท file_editor ยท http_request ยท notebook ยท sleep ยท stop โ v1.50 ์ดํ SDK ์ฝ์ด์ ๋๋ด, ๋ณ๋ ์ค์น ์์ด ์ฆ์ ์ฌ์ฉ
- file_read ยท file_write ยท editor
- ํ์ผ โ ๋ก์ปฌ ํ์ผ CRUD, ์ฝ๋ ํธ์ง
- http_request ยท retrieve
- ๋คํธ์ํฌ โ REST API ํธ์ถ, RAG ๊ฒ์
- shell ยท python_repl
- ์์คํ โ ๋ช ๋ น ์คํยท์ฝ๋ ํ๊ฐ, ์ต์ ๊ถํ์ผ๋ก ๋ฑ๋ก
- use_aws ยท calculator ยท current_time
- AWSยท์ ํธ โ AWS CLI ๋ํ, ๊ณ์ฐ, ์๊ฐ
์ฝ๋
# ์ํฌํธ โ ํ์ํ ๋๊ตฌ๋ง ๊ณจ๋ผ์
from strands import Agent
from strands_tools import file_read, http_request, current_time
# ๋ฑ๋ก โ ๋ฆฌ์คํธ์ ๋ด์ผ๋ฉด ๋
agent = Agent(tools=[file_read, http_request, current_time])
๋ฐํ์ ๋ ธํธ
์ง์ ๋ง๋ค๊ธฐ ์ ์ ์ฌ๊ธฐ ์๋์ง ๋จผ์ ํ์ธํ์ธ์. ๋นํธ์ธ ๋๊ตฌ์ ๊ณต๊ธ์์ ๋ ๊ฐ๋์ธ๋ฐ, bash๋ file_editor, http_request ๊ฐ์ ํต์ฌ 6์ข ์ SDK ์ฝ์ด์ ๋๋ด๋์ด ์์ด์ tools ํจํค์ง๋ฅผ ์ค์นํ์ง ์์๋ ๋ฐ๋ก ์ธ ์ ์๊ณ , ๊ทธ ๋ฐ์ ์นดํ ๊ณ ๋ฆฌ๋ณ ํ์ฅ ๋๊ตฌ๋ strands-agents-tools ํจํค์ง์์ import ํ ์ค์ด๋ฉด ๋ฐ๋ก ์๋๋ค. ํนํ use_aws๋ AWS CLI๋ฅผ ๋ํํด์ ์์ด์ ํธ๊ฐ AWS ๋ฆฌ์์ค๋ฅผ ์ง์ ๋ค๋ฃจ๊ฒ ํด์ฃผ๋๊น AWS ํ๊ฒฝ์์๋ ํ์ฉ๋๊ฐ ๋์ต๋๋ค. ๋ค๋ง shell์ด๋ python_repl์ฒ๋ผ ๊ฐ๋ ฅํ ๋๊ตฌ๋ ์์ด์ ํธ์๊ฒ ์คํ ๊ถํ์ ์ฃผ๋ ์ ์ด๋ผ๋ ์ ์ ๊ธฐ์ตํ์ธ์. ํ๋ก๋์ ์์๋ ๊ผญ ํ์ํ ๋๊ตฌ๋ง ๊ณจ๋ผ ๋ฃ๋ ์ต์ ๊ถํ ์์น์ด ์์ ํฉ๋๋ค.
MCPClient ์ฐ๊ฒฐ
์ธ๋ถ MCP(Model Context Protocol) ์๋ฒ์ ๋๊ตฌ๋ฅผ ๋์ ์ผ๋ก ๋ก๋
# ์ํฌํธ โ Agent์ MCP ํด๋ผ์ด์ธํธ, stdio ์ ์ก
from strands import Agent
from strands.tools.mcp import MCPClient
from mcp import stdio_client, StdioServerParameters
# โ MCP ํด๋ผ์ด์ธํธ โ transport callable๋ก stdio ์๋ฒ ์ฐ๊ฒฐ
mcp = MCPClient(lambda: stdio_client(StdioServerParameters(
command="npx",
args=["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
)))
# โก ์ฐ๊ฒฐ ์ปจํ
์คํธ โ ์๋ฒ ๋๊ตฌ๋ฅผ ๋ก๋ํด ์์ด์ ํธ์ ๋ฑ๋ก
with mcp:
agent = Agent(
tools=mcp.list_tools_sync(), # โข MCP ์๋ฒ ๋๊ตฌ ์๋ ๋ฑ๋ก
)
result = agent("/tmp ๋๋ ํ ๋ฆฌ์ ํ์ผ ๋ชฉ๋ก์ ๋ณด์ฌ์ค")
# โฃ ์ ํ โ client_name: MCP ์ด๊ธฐํ ์ ์๋ฒ์ ์๋ฆด ํด๋ผ์ด์ธํธ ์ด๋ฆ
# MCPClient(transport, client_name="cost-agent")
# โค ๋ณด์กฐ โ mcpServers JSON ์ค์ (ํ์ผ/๋์
๋๋ฆฌ)์ ์ผ๊ด ๋ก๋
# agent = Agent(tools=MCPClient.load_servers("mcp.json"))
- MCPClient โ transport callable๋ก stdio MCP ์๋ฒ ์ฐ๊ฒฐ
with์ปจํ ์คํธ โ ์ฐ๊ฒฐ ์๋ช ๊ด๋ฆฌ, ๋ธ๋ก ์์์๋ง ๋๊ตฌ ์ฌ์ฉ ๊ฐ๋ฅ- list_tools_sync() โ ์๋ฒ ๋๊ตฌ๋ฅผ ์กฐํํด Agent์ ์๋ ๋ฑ๋ก
client_nameโ ์๋ฒ์ ์ ๋ฌ๋๋ ํด๋ผ์ด์ธํธ ์๋ณ์ ํ๋ผ๋ฏธํฐ- load_servers() โ ์๋ฒ๋น MCPClient๋ฅผ ๋ง๋ค์ด ๋ฐํํ๋ ๋ณด์กฐ API, ์ฃผ ํ๋ฆ์ ์๋ฒ๋ณ ์ธ์คํด์คํ
๋ฐํ์ ๋ ธํธ
๋ง์ง๋ง ๊ฒฝ๋ก๋ ์ธ๋ถ ์ฐ๊ฒฐ์ ๋๋ค. MCP๋ ๋๊ตฌ๋ฅผ ํ์ค ํ๋กํ ์ฝ๋ก ๋ ธ์ถํ๋ ๋ฐฉ์์ด๋ผ, ์ด๋ฏธ ๊ณต๊ฐ๋ MCP ์๋ฒ๊ฐ ์๋ค๋ฉด ์ฝ๋ ๋ช ์ค๋ก ๊ทธ ์๋ฒ์ ๋๊ตฌ ์ ์ฒด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์์๋ npx๋ก ํ์ผ์์คํ MCP ์๋ฒ๋ฅผ ๋์ ์ฐ๊ฒฐํ๋ ์ฝ๋์ธ๋ฐ์, with ๋ธ๋ก์ด ์ฐ๊ฒฐ ์๋ช ์ ๊ด๋ฆฌํ๋๊น ๋๊ตฌ ์ฌ์ฉ์ ๋ฐ๋์ ๋ธ๋ก ์์์ ํด์ผ ํฉ๋๋ค. list_tools_sync()๊ฐ ์๋ฒ์ ๋๊ตฌ ๋ชฉ๋ก์ ๋ฐ์ Agent์ ๋ฑ๋กํด ์ฃผ๊ณ ์. ์๋ฒ์ ์ฐ๋ฆฌ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ฆฌ๊ณ ์ถ์ผ๋ฉด client_name ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ ํ ์ ์๊ณ , ์ฐ๊ฒฐํ ์๋ฒ๊ฐ ์ฌ๋ฟ์ด๋ฉด mcpServers JSON ์ค์ ์ ํต์งธ๋ก ์ฝ์ด ์๋ฒ๋น MCPClient๋ฅผ ๋ง๋ค์ด ์ฃผ๋ load_servers()๋ ๋ณด์กฐ๋ก ์ ๊ณต๋ฉ๋๋ค. ์ฌ๋ด์ ์ด๋ฏธ MCP ์๋ฒ๋ฅผ ์ด์ ์ค์ด์๋ผ๋ฉด, Strands ์์ด์ ํธ์ ๊ทธ๋๋ก ๊ฝ์ ์ ์๋ค๋ ๋ป์ ๋๋ค.
๋ชจ๋ธ ํ๋ก๋ฐ์ด๋
๊ณต์ 15์ข ํ๋ก๋ฐ์ด๋ ยท BedrockModel ยท Structured Output
๋ชจ๋ธ ํ๋ก๋ฐ์ด๋
์์ด์ ํธ์ ๋๋๋ฅผ ๊ฐ์ ๋ผ์ฐ๋ ๊ณ์ธต โ Agent ์ฝ๋๋ ๊ทธ๋๋ก
๋ชจ๋ธ ํ๋ก๋ฐ์ด๋
Agent ์ฝ๋๋ ๊ทธ๋๋ก ๋๊ณ ๋ชจ๋ธ๋ง ๊ต์ฒดํฉ๋๋ค โ ํ๋ก๋ฐ์ด๋๋ง๋ค ๋ค๋ฅธ ๊ฒ์ ์ธ์ฆ๋ฟ์ ๋๋ค.
- ๊ณต์ 15์ข + ์ปค๋ฎค๋ํฐ 10์ข โ Bedrock ยท Anthropic ยท OpenAI ๋ฑ
- ๊ธฐ๋ณธ: BedrockModel โ IAM ์ธ์ฆ ยท ํ๋ก๋์ ๊ถ์ฅ
- ๊ต์ฒด ๋น์ฉ: model_id ํ ์ค
- Structured Output โ ํ๋ก๋ฐ์ด๋ ๊ณตํต
๊ฐ๋ฐ์ ๋ฌด๋ฃ ๋ก์ปฌ Ollama, ํ๋ก๋์ ์ Bedrock โ ์ด๋ ์กฐํฉ์ด๋ toolsยทsystem_prompt ์ฝ๋๋ ๋ฐ๋์ง ์์ต๋๋ค.
๋ฐํ์ ๋ ธํธ
๋ณธ๊ฒฉ์ ์ผ๋ก ๋ค์ด๊ฐ๊ธฐ ์ ์ ํฐ ๊ทธ๋ฆผ์ ํ ์ฅ์ผ๋ก ์ก๊ณ ์์ํ๊ฒ ์ต๋๋ค. ๋ฉ์์ง๋ ํ๋์์. ๋ชจ๋ธ์ ๋ฐ๊ฟ๋ Agent ์ฝ๋๋ ๊ทธ๋๋ก๋ผ๋ ๊ฒ๋๋ค. ๊ณต์ 15์ข ํ๋ก๋ฐ์ด๋ ์ค ๊ธฐ๋ณธ์ BedrockModel์ด๊ณ , ๊ฐ๋ฐ ๋จ๊ณ์์๋ ๋ฌด๋ฃ์ธ Ollama๋ก ๋๋ฆฌ๋ค๊ฐ ํ๋ก๋์ ์์ Bedrock์ผ๋ก ๋์ด๊ฐ๋ ์กฐํฉ์ด ํํฉ๋๋ค. ์ด์ ์ ์ฒด ๋ชฉ๋ก๋ถํฐ ํ๋ก ๋ณด์์ฃ .
๊ณต์ 15์ข ๋ชจ๋ธ ํ๋ก๋ฐ์ด๋
ํ๋์ Agent ์ฝ๋๋ก ๋ชจ๋ธ๋ง ๊ต์ฒด โ ํ๋ก๋ฐ์ด๋๋ณ๋ก ๋ค๋ฅธ ๊ฒ์ ์ธ์ฆ๋ฟ
| ํด๋์ค | ์ฉ๋ |
|---|---|
| BedrockModel | AWS ํ๋ก๋์ (๊ถ์ฅ) |
| NovaAPIModel | Amazon Nova โ Python ์ ์ฉ |
| AnthropicModel | Anthropic API ์ง์ |
| OpenAIModel | GPT ์๋ฆฌ์ฆ |
| OpenAIResponsesModel | Responses API |
| GeminiModel | Google AI |
| OllamaModel | ๋ก์ปฌ ์ถ๋ก (๋ฌด๋ฃ) |
| LiteLLMModel | 100+ ๋ชจ๋ธ ํตํฉ ํ๋ก์ |
| ํด๋์ค | ์ฉ๋ |
|---|---|
| LlamaCPPModel | ๋ก์ปฌ GGUF |
| LlamaAPIModel | Llama ํด๋ผ์ฐ๋ |
| MistralModel | Mistral AI |
| SageMakerModel | ์ปค์คํ ์๋ํฌ์ธํธ |
| WriterModel | Writer AI |
| VercelModel | Vercel AI SDK โ TS ์ ์ฉ |
| ์ปค๋ฎค๋ํฐ 10์ข | Cohere ยท vLLM ยท xAI ๋ฑ โ ๋ณ๋ ์ฐ๋ |
๋ฐํ์ ๋ ธํธ
ํ๊ฐ ๊ธธ์ง๋ง ๋ฉ์์ง๋ ํ๋์ ๋๋ค. Agent ์ฝ๋๋ ๊ทธ๋๋ก ๋๊ณ ๋ชจ๋ธ๋ง ๊ฐ์ ๋ผ์ด๋ค๋ ๊ฑฐ์ฃ . ๊ฐ๋ฐ ๋จ๊ณ์์๋ ๋ฌด๋ฃ์ธ Ollama ๋ก์ปฌ ๋ชจ๋ธ๋ก ๋๋ฆฌ๊ณ ํ๋ก๋์ ์ Bedrock์ผ๋ก ๊ฐ๋ ์กฐํฉ์ด ํํ ํจํด์ ๋๋ค. ํ์์ ๋ ๊ฐ์ง๋ง ์ฃผ์ํ์๋ฉด ๋๋๋ฐ, ์ต๊ทผ ์ถ๊ฐ๋ Amazon Nova๋ Python ์ ์ฉ์ด๊ณ , ๋ฐ๋๋ก Vercel์ TypeScript SDK ์ ์ฉ์ ๋๋ค. ๊ณต์ 15์ข ๋ฐ์๋ Cohere๋ vLLM ๊ฐ์ ์ปค๋ฎค๋ํฐ ์ฐ๋์ด 10์ข ์๊ณ , ํ์ ์๋ ๋ชจ๋ธ์ด๋ผ๋ LiteLLM ํ๋ก์๋ฅผ ๊ฑฐ์น๋ฉด 100๊ฐ ์ด์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
BedrockModel ์ค์
๊ธฐ๋ณธ ํ๋ก๋ฐ์ด๋ โ model_id ํ ์ค๋ก ๋ชจ๋ธ ๊ต์ฒด
์ค์ ์ฝ๋
from strands.models import BedrockModel
# ๊ธฐ๋ณธ โ model_id๋ง ์ง์ (us. ์ ๋์ด = Cross-Region ์ถ๋ก ํ๋กํ์ผ)
model = BedrockModel(model_id="us.anthropic.claude-sonnet-4-6")
# ์์ธ ์ค์ โ ๋ฆฌ์ ยท์์ฑ ํ๋ผ๋ฏธํฐ ์ ์ด
model = BedrockModel(
model_id="us.anthropic.claude-sonnet-4-6",
region_name="us-east-1",
temperature=0.1,
max_tokens=4096,
)
# ์กฐ๋ฆฝ โ ์ด๋ค ์ค์ ์ด๋ Agent์๋ model ํ๋๋ก ์ ๋ฌ
agent = Agent(model=model, tools=[...])
ํต์ฌ ํ๋ผ๋ฏธํฐ
- model_id
- ์ถ๋ก ํ๋กํ์ผ ID โ ํ์ด๋ฐ์ด์ ๋ชจ๋ธ ARN์ด ์๋
- region_name
- ๋ชจ๋ธ ๊ฐ์ฉ ๋ฆฌ์ (us-east-1 ยท us-west-2 ๋ฑ)
- temperature
- ์๋ต ๋ฌด์์์ฑ โ ๋ฎ์์๋ก ๊ฒฐ์ ์
- max_tokens
- ์๋ต ๊ธธ์ด ์ํ
๋ฐํ์ ๋ ธํธ
๊ธฐ๋ณธ ํ๋ก๋ฐ์ด๋์ธ BedrockModel ์ค์ ์ ๋ณด๊ฒ ์ต๋๋ค. ๊ฐ์ฅ ํํ ์ค์๊ฐ model_id์ธ๋ฐ, ํ์ด๋ฐ์ด์ ๋ชจ๋ธ ARN์ด ์๋๋ผ ์ถ๋ก ํ๋กํ์ผ ID๋ฅผ ๋ฃ์ด์ผ ํฉ๋๋ค. us. ์ ๋์ด๊ฐ ๋ถ์ผ๋ฉด ํฌ๋ก์ค ๋ฆฌ์ ์ถ๋ก ํ๋กํ์ผ์ด๋ผ ํธ๋ํฝ์ด ์ฌ๋ฌ ๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋๊ณ ์. temperature๋ ์์ด์ ํธ ์ฉ๋๋ผ๋ฉด ๋ฎ๊ฒ ์ก์์ ๋๊ตฌ ์ ํ์ด ๊ฒฐ์ ์ ์ผ๋ก ๋์ค๊ฒ ํ๋ ํธ์ด ์์ ์ ์ ๋๋ค. ์ด๋ค ์ค์ ์ ํ๋ Agent์๋ model ์ธ์ ํ๋๋ก ๋ค์ด๊ฐ๋ค๋ ๊ตฌ์กฐ๋ ๋์ผํฉ๋๋ค.
Structured Output
์์ด์ ํธ์ ๋ต์ ์ฝ๋๊ฐ ๋ฐ์ ๋ โ ์์ ํ ์คํธ ๋์ ์คํค๋ง๋ก, ํ๋ก๋ฐ์ด๋ ๊ณตํต
์ฌ์ฉ ์ฝ๋
from pydantic import BaseModel
from strands import Agent
# ์ถ๋ ฅ ์คํค๋ง ์ ์ โ Pydantic ๋ชจ๋ธ์ด ๊ณง JSON Schema
class WeatherReport(BaseModel):
city: str
temp_celsius: float
condition: str
humidity: int
# ์คํค๋ง ์ง์ ํธ์ถ โ structured_output_model๋ก ์คํค๋ง ์ ๋ฌ
agent = Agent(model="us.anthropic.claude-sonnet-4-6")
result = agent("์์ธ ๋ ์จ๋ฅผ ์๋ ค์ค", structured_output_model=WeatherReport)
# ๊ฒฐ๊ณผ ์ ๊ทผ โ ํ์ฑ ์คํจ ์์ด Pydantic ์ธ์คํด์ค๋ก ์์
report = result.structured_output
# report.city == "์์ธ", report.temp_celsius == 22.5
Pydantic ์คํค๋ง๋
ํ์ด์ฌ ํ์ค ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
- ํด๋์ค ํ๋ ์ ์ธ์ด ๊ณง JSON Schema๋ก ๋ณํ๋์ด ๋ชจ๋ธ์ ์ ๋ฌ
- ์๋ต์ด ์คํค๋ง์ ๋ค๋ฅด๋ฉด ๊ฒ์ฆ ๋จ๊ณ์์ ๊ฑธ๋ฌ์ง
- ๊ฒฐ๊ณผ๋ ํ์
์๋ Python ๊ฐ์ฒด โ ๋ฌธ์์ด ํ์ฑ ์ฝ๋๊ฐ ์ฌ๋ผ์ง
๋ฐํ์ ๋ ธํธ
์์ด์ ํธ์ ๋ต์ ์ฌ๋์ด ์๋๋ผ ์ฝ๋๊ฐ ๋ฐ์์ผ ํ ๋๊ฐ ์์ฃ . ์์ ํ ์คํธ๋ฅผ ์ ๊ท์์ผ๋ก ํ์ฑํ๋ ๋์ , Pydantic ํด๋์ค๋ก ์คํค๋ง๋ฅผ ์ ์ธํ๊ณ structured_output_model๋ก ๋๊ธฐ๋ฉด ๋ฉ๋๋ค. ํด๋์ค ํ๋ ์ ์ธ์ด ๊ทธ๋๋ก JSON Schema๋ก ๋ณํ๋์ด ๋ชจ๋ธ์ ์ ๋ฌ๋๊ณ , ๊ฒฐ๊ณผ๋ ํ์ ์๋ Python ๊ฐ์ฒด๋ก ๋์์ต๋๋ค. ์์ด์ ํธ๋ฅผ ํ์ดํ๋ผ์ธ์ ํ ๋จ๊ณ๋ก ์ฐ๊ฑฐ๋ ๋ค๋ฅธ ์์คํ ๊ณผ ์ฐ๋ํ ๋ ์ฌ์ค์ ํ์ ๊ธฐ๋ฅ์ด๊ณ ์. ํน์ ๋ชจ๋ธ ์ ์ฉ์ด ์๋๋ผ ํ๋ก๋ฐ์ด๋ ๊ณตํต์ผ๋ก ๋์ํ๋ค๋ ์ ๋ ๊ธฐ์ตํด ์ฃผ์ธ์.
ํ๋ ์์ํฌ ํฌ์ง์ ๋
Strands vs LangGraph vs CrewAI vs Bedrock Agents
ํ๋ ์์ํฌ ํฌ์ง์ ๋
์ค๊ณ ์ฒ ํ์ด ๋ค๋ฅธ ๋ค ๊ฐ์ง ์ ํ์ง โ Strands๊ฐ ์ ์๋ ์๋ฆฌ
๋ค ๊ฐ์ง ์ ํ์ง
์ด๋ ํ๋๊ฐ ์ ๋ต์ด ์๋๋ผ ์ค๊ณ ์ฒ ํ์ด ๋ค๋ฆ ๋๋ค โ ์ฒซ ๋ถ๊ธฐ๋ ์ฝ๋ ๋ ๋ฒจ ์ ์ด์ ํ์ ์ฌ๋ถ์ ๋๋ค.
- Strands โ ๋ชจ๋ธ ์ค์ฌ ยท ํ๋ก๋์ ์ง์ ๋น๋
- LangGraph โ ๊ทธ๋ํ ์ํฌํ๋ก์ฐ
- CrewAI โ ์ญํ ๊ธฐ๋ฐ ํ๋กํ ํ์
- Bedrock Agents โ ์์ ๊ด๋ฆฌํ
Strands์ ์๋ฆฌ โ ์ฝ๋ ๋ ๋ฒจ ์ ์ด + ์ต์ ์ถ์ํ + AWS ๋ฐฐํฌ ๊ฒฝ๋ก ๋ด์ฅ, ํ๋ก๋์ ์์ด์ ํธ๋ฅผ ์ง์ ๋น๋ํ ๋์ ์ ํ์ง์ ๋๋ค.
๋ฐํ์ ๋ ธํธ
๋ง์ง๋ง ํํธ์ ๋๋ค. ๋ค ํ๋ ์์ํฌ๋ ์ฐ์ด์ด ์๋๋ผ ์ค๊ณ ์ฒ ํ์ ์ฐจ์ด๋ก ๊ฐ๋ฆฝ๋๋ค. ์ฝ๋ ๋ ๋ฒจ ์ ์ด๊ฐ ํ์ ์๋ค๋ฉด ์์ ๊ด๋ฆฌํ์ธ Bedrock Agents, ๊ทธ๋ํ ์ค๊ณ๊ฐ ํต์ฌ์ด๋ฉด LangGraph, ์ญํ ๊ธฐ๋ฐ์ ๋น ๋ฅธ ํ๋กํ ํ์ ์ด๋ฉด CrewAI, ํ๋ก๋์ ์์ด์ ํธ๋ฅผ ์ง์ ๋น๋ํ๋ค๋ฉด Strands์ ๋๋ค. ์ด์ ์ฌ์ฏ ๊ฐ ์ถ์ผ๋ก ๋๋ํ ๋๊ณ ๋น๊ตํด ๋ณด๊ฒ ์ต๋๋ค.
์์ด์ ํธ ํ๋ ์์ํฌ ๋น๊ต
์ค๊ณ ์ฒ ํยท์ถ์ํ ์์คยท๋ฐฐํฌ ๊ฒฝ๋ก๊ฐ ๋ค๋ฅธ 4๊ฐ์ง ์ ํ์ง
| ์ถ | Strands | LangGraph | CrewAI | Bedrock Agents |
|---|---|---|---|---|
| ์ค๊ณ ์ฒ ํ | ๋ชจ๋ธ ์ค์ฌ ยท ์ต์ ์ถ์ํ | ๊ทธ๋ํ ์ํฌํ๋ก์ฐ | ์ญํ ๊ธฐ๋ฐ ๋ฉํฐ์์ด์ ํธ | ์์ ๊ด๋ฆฌํ |
| ์ฝ๋ ๋ ๋ฒจ | Python/TS ์ง์ ์ ์ด | StateGraph ๋ ธ๋ ์ ์ | YAML + Python | API/์ฝ์๋ง |
| ๋ฉํฐ์์ด์ ํธ | Agents-as-Tools ยท Swarm ยท Graph | ๋ ธ๋ ๊ฐ ๋ฉ์์ง | Crew + Task | ๋ด์ฅ ํ์ |
| ๋ฐฐํฌ | Lambda ยท Fargate ยท AgentCore | ์์ฒด ๊ด๋ฆฌ | ์์ฒด ๊ด๋ฆฌ | AWS ๊ด๋ฆฌํ |
| ์ปค์คํฐ๋ง์ด์ง | ๋ฌด์ ํ (์ฝ๋ ๋ ๋ฒจ) | ๊ทธ๋ํ ๋ด ์ ํ | ์ญํ ํ ํ๋ฆฟ | ์ ํ์ |
| ์ ํฉ ์๋๋ฆฌ์ค | ํ๋ก๋์ ์์ด์ ํธ ์ง์ ๋น๋ | ๋ณต์กํ ์กฐ๊ฑด๋ถ ๋ถ๊ธฐ | ๋น ๋ฅธ ํ๋กํ ํ์ | ์ธํ๋ผ ๊ด๋ฆฌ ์ต์ํ |
๊ฐ๋ฆผ๊ธธ์ ๋ฐฐํฌ ํ โ LangGraphยทCrewAI๋ ์์ฒด ๊ด๋ฆฌ, Strands๋ Lambda ยท Fargate ยท AgentCore ๊ฒฝ๋ก๊ฐ ์ด๋ ค ์๊ณ , Bedrock Agents๋ AWS ๊ด๋ฆฌํ์ ๋๋ค.
๋ฐํ์ ๋ ธํธ
์ด๋ ํ๋๊ฐ ์ ๋ต์ด๋ผ๊ธฐ๋ณด๋ค, ์ค๊ณ ์ฒ ํ์ด ๋ค๋ฅธ ๋ค ๊ฐ์ง ์ ํ์ง์ ๋๋ค. ํ์์ ๋ฐฐํฌ ํ์ ๋ด์ฃผ์ธ์. LangGraph์ CrewAI๋ ๋ฐฐํฌ ์ธํ๋ผ๋ฅผ ์ง์ ๊ด๋ฆฌํด์ผ ํ๋ ๋ฐ๋ฉด, Strands๋ Lambda, Fargate, AgentCore๊น์ง AWS ๋ฐฐํฌ ๊ฒฝ๋ก๊ฐ ์ด๋ ค ์์ต๋๋ค. ๋ฐ๋ํธ ๊ทน๋จ์ธ Bedrock Agents๋ ์์ ๊ด๋ฆฌํ์ด๋ผ ํธํ์ง๋ง ์ปค์คํฐ๋ง์ด์ง์ด ์ ํ๋๊ณ ์. ์ฌ๋ฌ๋ถ ํ์ด๋ผ๋ฉด ์ด ์ฌ์ฏ ๊ฐ ์ถ ์ค์ ์ด๋ ๊ฒ์ ๊ฐ์ฅ ์ค์ํ๊ฒ ๋ณด์๊ฒ ์ด์? ๊ทธ ๋ต์ ๋ฐ๋ผ ์ ํ์ด ๋ฌ๋ผ์ง๋๋ค.
์ ํ ์์ฌ๊ฒฐ์ ํธ๋ฆฌ
์/์๋์ค๋ก ๋ด๋ ค๊ฐ๋ ํ ๋ง์ถค ํ๋ ์์ํฌ ์ ํ ๊ฐ์ด๋
๋ฐํ์ ๋ ธํธ
๋ฐฉ๊ธ ๊ทธ ์ง๋ฌธ์ ์์๋๋ก ๋ง๋ค๋ฉด ์ด๋ ๊ฒ ๋ฉ๋๋ค. ์ฒซ ๋ถ๊ธฐ๊ฐ ๊ฐ์ฅ ์ค์ํ๋ฐ, ์ฝ๋ ๋ ๋ฒจ ์ ์ด๊ฐ ํ์ ์๋ค๋ฉด ๊ณ ๋ฏผํ ๊ฒ ์์ด Bedrock Agents๋ก ์ด์ ๋ถ๋ด์ ์์ ๋ ๊ฒ ๋ซ์ต๋๋ค. ์ ์ด๊ฐ ํ์ํ๋ค๋ฉด ๊ทธ๋ค์์ ์ํฌํ๋ก์ฐ์ ์ฑ๊ฒฉ์ด์์. ๋ณต์กํ ์กฐ๊ฑด๋ถ ๋ถ๊ธฐ๊ฐ ํต์ฌ์ด๋ฉด LangGraph, ์ญํ ๊ธฐ๋ฐ์ ๋น ๋ฅธ ํ๋กํ ํ์ ์ด๋ฉด CrewAI, ๊ทธ๋ฆฌ๊ณ ํ๋ก๋์ ์์ด์ ํธ๋ฅผ ์ง์ ๋น๋ํ๋ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๊ฐ Strands์ ๋๋ค. ์ง๊ธ ์งํ ์ค์ธ ํ๋ก์ ํธ๋ฅผ ์ด ํธ๋ฆฌ์ ํ๋ฒ ๋์ ํด ๋ณด์์ฃ .
Strands์ ์ฐจ๋ณ์
๋ค๋ฅธ ํ๋ ์์ํฌ์ ๊ตฌ๋ถ๋๋ ํต์ฌ ์ค๊ณ ๊ฒฐ์
์ต์ ์ถ์ํ
๋ง๋ฒ ์๋ ์ฝ๋ โ Agent, Tool, Model 3๊ฐ ํด๋์ค๋ง์ผ๋ก ์์
ํ๋ก๋ฐ์ด๋ ๋ ๋ฆฝ
๊ณต์ 15์ข (+์ปค๋ฎค๋ํฐ 10์ข ) ๋ชจ๋ธ ํ๋ก๋ฐ์ด๋ โ ์ฝ๋ ๋ณ๊ฒฝ ์์ด model_id๋ง ๊ต์ฒด
๋ฐฐํฌ ๋ด์ฅ
Lambda ยท Fargate ยท AgentCore Runtime โ SDK์์ ํ๋ก๋์ ๊น์ง
์ธ ๊ฒฐ์ ์ด ๊ฐ๋ฆฌํค๋ ๋ฐฉํฅ์ ํ๋ โ Agent ยท Tool ยท Model ์ธ ๊ฐ์ง๋ก ์์ํด ํ๋ก๋์ ๊น์ง ๊ฐ๋ SDK์ ๋๋ค.
๋ฐํ์ ๋ ธํธ
๋ง๋ฌด๋ฆฌํ๋ฉด์ Strands์ ์ค๊ณ ๊ฒฐ์ ์ธ ๊ฐ์ง๋ฅผ ์ ๋ฆฌํ๊ฒ ์ต๋๋ค. ์ฒซ์งธ, ์ถ์ํ๋ฅผ ์ต์๋ก ์ ์งํด์ ๋๋ฒ๊น ํ ๋ ํ๋ ์์ํฌ ๋ด๋ถ๋ฅผ ํ๊ณ ๋ค ์ผ์ด ์ ์ต๋๋ค. ๋์งธ, ํ๋ก๋ฐ์ด๋ ๋ ๋ฆฝ์ด๋ผ ๋ชจ๋ธ ์ ํ์ด ๋ฒค๋ ๊ณ์ฝ์ด ์๋๋ผ ์ฝ๋ ํ ์ค์ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ์ ์งธ, agentcore CLI ๋ ๋ช ๋ น์ผ๋ก ๊ด๋ฆฌํ ๋ฐํ์๊น์ง ๊ฐ๋ ๋ฐฐํฌ ๊ฒฝ๋ก๊ฐ SDK์ ๋ด์ฅ๋์ด ์์ต๋๋ค. ์ค๋ ๋ด์ฉ์ ํ ๋ฌธ์ฅ์ผ๋ก ์ค์ด๋ฉด, Agent, Tool, Model ์ธ ๊ฐ์ง๋ก ์์ํด์ ํ๋ก๋์ ๊น์ง ๊ฐ๋ SDK๋ผ๊ณ ๊ธฐ์ตํด ์ฃผ์๋ฉด ๋ฉ๋๋ค.
Agent ยท Tool ยท Model โ ์ธ ๊ฐ์ง๋ก ์์ํ๋ ํ๋ก๋์ ์์ด์ ํธ