ADK์ฉ Bash ๋๊ตฌ¶
ExecuteBashTool์ ์ฌ์ฉํ๋ฉด ADK ์์ด์ ํธ๊ฐ ๋ก์ปฌ ์์
๊ณต๊ฐ ๋๋ ํ ๋ฆฌ ๋ด์์ Bash ๋ช
๋ น์ ์คํํ ์ ์์ต๋๋ค. ์ด ๋๊ตฌ๋ ํ์ผ ์์คํ
์์
, ์คํฌ๋ฆฝํธ ์คํ ๋๋ ์์ด์ ํธ๋ฅผ ํตํด ๋ก์ปฌ ํ๊ฒฝ๊ณผ ์ง์ ์ํธ์์ฉํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
์ด ๋๊ตฌ๋ Python ADK์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ค์น¶
Bash ๋๊ตฌ๋ ํต์ฌ ์์ด์ ํธ ๊ฐ๋ฐ ํคํธ(ADK)์ ๊ธฐ๋ณธ์ผ๋ก ํฌํจ๋์ด ์์ต๋๋ค. ๋ณ๋์ ํตํฉ ํจํค์ง๋ฅผ ์ค์นํ ํ์ ์์ด ๋ฉ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์์ด์ ํธ์ ํจ๊ป ์ฌ์ฉ¶
POSIX ์ ์ฉ
ExecuteBashTool์ ํ์ฌ Linux ๋๋ macOS์ ๊ฐ์ POSIX ์์คํ
์์๋ง ์ง์๋ฉ๋๋ค. Windows ์์คํ
์์ ์ด ๋๊ตฌ๋ฅผ ์คํํ๋ฉด ์ฌ๊ฐํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Bash ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ExecuteBashTool์ ์ธ์คํด์คํํ๊ณ ์์ด์ ํธ์ tools ๋ชฉ๋ก์ ํฌํจํฉ๋๋ค. ์ฝ๋ ์ค๋ํซ์ ์คํํ๊ธฐ ์ ์ my_workspace_path๊ฐ ์ ํจํ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก ๋ฌธ์์ด๋ก ์ ์๋์ด ์๋์ง ํ์ธํ์ธ์.
from google.adk.tools.bash_tool import ExecuteBashTool, BashToolPolicy
policy = BashToolPolicy(
allowed_command_prefixes=("ls", "cat", "grep"),
timeout_seconds=30,
max_memory_bytes=1024 * 1024 * 512, # 512MB
max_file_size_bytes=1024 * 1024 * 10, # 10MB
max_child_processes=5
)
tool = ExecuteBashTool(workspace=my_workspace_path, policy=policy)
๋ณด์ ๋ฐ ์คํ ๋ณดํธ ์กฐ์น¶
์์์ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ ๋ณธ์ง์ ์ธ ์ํ์ ๋๋ฐํ๋ฏ๋ก, ExecuteBashTool์๋ ์์ฑ๋ ํ์ ํ๋ก์ธ์ค์ ์ ์ฉ๋๋ ์ฌ๋ฌ ํ์ ๋ฐ ์ ํ์ ๋ณด์ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค.
๊ธฐ๋ณธ ์ ์ฑ ์ ๋ชจ๋ ๋ช ๋ น ํ์ฉ¶
๊ธฐ๋ณธ์ ์ผ๋ก BashToolPolicy๋ allowed_command_prefixes=("*",)๋ก ์ด๊ธฐํ๋ฉ๋๋ค. ์ฆ, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ช
๋ น์ด ํ์ฉ๋ฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณดํธํ๋ ค๋ฉด ์ ์ฑ
์ ์ด๊ธฐํํ ๋ ํ์ฉ๋๋ ๋ช
๋ น์ ๋ช
์์ ์ผ๋ก ์ ํํด์ผ ํฉ๋๋ค.
# ๋ณด์ ๊ตฌํ ์์
from google.adk.tools.bash_tool import BashToolPolicy
strict_policy = BashToolPolicy(
allowed_command_prefixes=("ls ", "cat ", "pwd")
)
๋ด์ฅ ๋ณดํธ ๊ธฐ๋ฅ¶
- ์ฌ์ฉ์ ํ์ธ: ๋๊ตฌ๋ ๋ช
๋ น์ ์คํํ๊ธฐ ์ ์ ํญ์ ์ฌ์ฉ์ ํ์ธ์ ์์ฒญํฉ๋๋ค. ํ๋ ์์ํฌ๋ ์คํ์ ์ผ์ ์ค์งํ๊ณ
adk_request_confirmationํ๋ฆ์ ํตํด ์ฌ์ฉ์ ๋๋ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ช ๋ น์ ์น์ธํ ๋๊น์ง ๋๊ธฐํฉ๋๋ค. - ๋ช
๋ น ๊ฒ์ฆ:
allowed_command_prefixes๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ช ๋ น์ ํ์ฉ ๋ชฉ๋ก์ ์ถ๊ฐํ๊ณblocked_operators๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ฌธ์์ด ํจํด์ ์๊ฒฉํ๊ฒ ๊ธ์งํ ์ ์์ต๋๋ค. - ๋ฆฌ์์ค ์ ํ: ํฌํฌ ๋ด(fork bomb)์ด๋ ๋ฉ๋ชจ๋ฆฌ ๊ณ ๊ฐ์ ๋ฐฉ์งํ๊ธฐ ์ํด OS ์์ค์ ์ ํ์ธ
setrlimit์ด ์ ์ฉ๋์ด ๋ฉ๋ชจ๋ฆฌ ์๋น, ํ์ผ ํฌ๊ธฐ ๋ฐ ํ์ ํ๋ก์ธ์ค ์๋ฅผ ์ ํํฉ๋๋ค. - ์ฝ์ด ๋คํ ๋นํ์ฑํ: ๋ฏผ๊ฐํ ๋ฉ๋ชจ๋ฆฌ ์ ์ถ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์คํ ํ์ ํ๋ก์ธ์ค์ ๋ํด ์ฝ์ด ๋คํ๊ฐ ์๊ฒฉํ๊ฒ ๋นํ์ฑํ(
RLIMIT_CORE๊ฐ0์ผ๋ก ์ค์ )๋ฉ๋๋ค. - ํ๋ก์ธ์ค ๊ทธ๋ฃน ์ข
๋ฃ: ๋ช
๋ น์ด
timeout_seconds๋ฅผ ์ด๊ณผํ๋ฉด ๋๊ตฌ๋ ์ ์ฒด ํ๋ก์ธ์ค ๊ทธ๋ฃน์SIGKILL์ ๋ฐ์กํ์ฌ ๊ณ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๊ฐ ๋จ์ง ์๋๋ก ํฉ๋๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ¶
| ๋๊ตฌ ์ด๋ฆ | ํด๋์ค ์ด๋ฆ | ์ค๋ช |
|---|---|---|
execute_bash |
ExecuteBashTool |
์์ ๊ณต๊ฐ ๋ด์์ Bash ๋ช ๋ น์ ์คํํฉ๋๋ค. POSIX ์ ์ฉ |