Agents for Amazon Bedrock の Code Interpretation は 7/14 時点で Preview 中の機能です。将来的に動作や仕様が変更される可能性があります。
はじめに
Code Interpretation は Agents for Amazon Bedrock に追加された新しい機能です。ユーザーが要求したタスクを実行するためのコードスぺニットを安全なサンドボックス環境で生成、実行し、結果を提供します。
詳細は以下の記事が参考になります。
実行環境の調査
安全なサンドボックス環境とはどんな環境なんでしょう。恐らく独立したコンテナ環境等と推測されますが、 Code Interpretation さんにお願いしていろいろ情報を確認してみました。
基本情報
プロンプト
platform モジュールで実行環境の情報を表示して
Code Interpretation が生成したコードはエージェントのトレースから確認できます。
import platform
print("OS Name:", platform.system())
print("OS Release:", platform.release())
print("OS Version:", platform.version())
print("Architecture:", platform.architecture())
print("Machine:", platform.machine())
print("Processor:", platform.processor())
実行結果
OS Name: Linux
OS Release: 5.10.216-225.855.amzn2.aarch64
OS Version: #1 SMP Wed May 8 19:03:06 UTC 2024
Architecture: ('64bit', '')
Machine: aarch64
Processor: aarch64
ARM アーキテクチャで動作する Amazon Linux 2 環境であるようです。
ディスク
プロンプト
os.popen で df -h を実行して
生成されたコード
import os
cmd = "df -h"
output = os.popen(cmd).read()
print(output)
実行結果
Filesystem Size Used Avail Use% Mounted on
overlayfs:/overlay/root 2.0G 8.3M 1.8G 1% /
/dev/root 1.4G 1.4G 0 100% /rom
devtmpfs 494M 0 494M 0% /dev
/dev/vdb 2.0G 8.3M 1.8G 1% /rom/overlay
tmpfs 495M 0 495M 0% /dev/shm
tmpfs 495M 6.4M 489M 2% /run
tmpfs 99M 0 99M 0% /run/user/0
ルートファイルシステムとして OverlayFS がマウントされていることから、やはりコンテナ環境である可能性が高そうです。サイズは 2 GB でした。
CPU
プロンプト
os.open で lscpu を実行して
生成されたコード
import subprocess
cmd = "lscpu"
process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
print(output.decode())
実行結果
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
NUMA node(s): 1
Vendor ID: ARM
Model: 1
Model name: Neoverse-N1
Stepping: r3p1
BogoMIPS: 243.75
L1d cache: 64K
L1i cache: 64K
L2 cache: 1024K
L3 cache: 32768K
NUMA node0 CPU(s): 0
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
コア数は 1。Model name が Neoverse-N1 であることから、AWS Graviton2 と推測されます。
メモリ
プロンプト
os.popen で /proc/meminfo を実行して
生成されたコード
import os
cmd = "cat /proc/meminfo"
output = os.popen(cmd).read()
print(output)
実行結果
MemTotal: 1013372 kB
MemFree: 631388 kB
MemAvailable: 655916 kB
Buffers: 2896 kB
Cached: 204228 kB
SwapCached: 0 kB
Active: 42580 kB
Inactive: 307740 kB
Active(anon): 140 kB
Inactive(anon): 151488 kB
Active(file): 42440 kB
Inactive(file): 156252 kB
Unevictable: 4 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 72 kB
Writeback: 0 kB
AnonPages: 139340 kB
Mapped: 78716 kB
Shmem: 8424 kB
KReclaimable: 12120 kB
Slab: 22604 kB
SReclaimable: 12120 kB
SUnreclaim: 10484 kB
KernelStack: 1600 kB
PageTables: 1532 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 506684 kB
Committed_AS: 334264 kB
VmallocTotal: 135290159040 kB
VmallocUsed: 1912 kB
VmallocChunk: 0 kB
Percpu: 120 kB
AnonHugePages: 65536 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
メモリは 1 GB でした。
環境変数
プロンプト
osモジュールで環境変数の一覧を取得して
生成されたコード
import os
env_vars = os.environ
for key, value in env_vars.items():
print(f"{key}={value}")
実行結果
XDG_SESSION_ID=c2
HOSTNAME=localhost
PYENV_ROOT=/home/runtime/.pyenv
TERM=unknown
SHELL=/usr/bin/bash
HISTSIZE=1000
PYENV_VERSION=3.11.8
USER=runtime
PYENV_DIR=/opt/amazon/ci-repl-agent/var/files
PYENV_VIRTUALENV_INIT=1
PATH=/home/runtime/.pyenv/versions/3.11.8/bin:/home/runtime/.pyenv/libexec:/home/runtime/.pyenv/plugins/python-build/bin:/home/runtime/.pyenv/plugins/pyenv-virtualenv/bin:/home/runtime/.pyenv/plugins/pyenv-update/bin:/home/runtime/.pyenv/plugins/pyenv-doctor/bin:/home/runtime/.pyenv/plugins/pyenv-virtualenv/shims:/home/runtime/.pyenv/shims:/home/runtime/.pyenv/bin:/home/runtime/.pyenv/plugins/pyenv-virtualenv/shims:/home/runtime/.pyenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/runtime/.local/bin:/home/runtime/bin
MAIL=/var/spool/mail/runtime
PWD=/opt/amazon/ci-repl-agent/var/files
LANG=en_US.UTF-8
PYENV_HOOK_PATH=/home/runtime/.pyenv/pyenv.d:/usr/local/etc/pyenv.d:/etc/pyenv.d:/usr/lib/pyenv/hooks:/home/runtime/.pyenv/plugins/pyenv-virtualenv/etc/pyenv.d
HISTCONTROL=ignoredups
HOME=/home/runtime
SHLVL=1
PYENV_SHELL=bash
LOGNAME=runtime
LESSOPEN=||/usr/bin/lesspipe.sh %s
Python のバージョンは v3.11.8 であるようです。
インストール済みの Python ライブラリ
プロンプト
os.popen で pip list を実行して
生成されたコード
import os
cmd = "pip list"
stream = os.popen(cmd)
output = stream.read()
print(output)
実行結果
Package Version
------------------- ------------
absl-py 2.1.0
aiosignal 1.3.1
annotated-types 0.7.0
anyio 4.4.0
asgiref 3.8.1
astor 0.8.1
asttokens 2.4.1
attrs 23.2.0
backoff 2.2.1
bcrypt 4.1.3
beautifulsoup4 4.12.3
blinker 1.8.2
blis 0.7.11
bokeh 2.4.3
branca 0.7.2
cachetools 5.3.3
catalogue 2.0.10
certifi 2024.6.2
cffi 1.16.0
chardet 5.2.0
charset-normalizer 3.3.2
click 8.1.7
click-plugins 1.1.1
cloudpathlib 0.16.0
cloudpickle 3.0.0
confection 0.1.5
contourpy 1.2.1
cryptography 40.0.2
cssselect2 0.7.0
cycler 0.12.1
cymem 2.0.8
decorator 4.4.2
distro 1.9.0
Django 5.0.6
dnspython 2.6.1
duckdb 0.8.1
email_validator 2.1.1
entrypoints 0.4
et-xmlfile 1.1.0
executing 2.0.1
Faker 19.13.0
fastapi 0.111.0
ffmpeg-python 0.2.0
ffmpy 0.3.2
filelock 3.14.0
Flask 3.0.3
Flask-Cors 4.0.1
Flask-Login 0.6.3
fonttools 4.53.0
frozenlist 1.4.1
fsspec 2024.5.0
future 1.0.0
gensim 4.3.2
greenlet 3.0.3
gTTS 2.5.1
gunicorn 22.0.0
h11 0.14.0
h2 4.1.0
hpack 4.0.0
httptools 0.6.1
Hypercorn 0.17.3
hyperframe 6.0.1
idna 3.7
imageio 2.34.1
imageio-ffmpeg 0.5.1
imgkit 1.2.3
importlib_metadata 7.1.0
importlib_resources 6.4.0
ipython 8.25.0
itsdangerous 2.2.0
jedi 0.19.1
Jinja2 3.1.4
joblib 1.4.2
kiwisolver 1.4.5
langcodes 3.4.0
language_data 1.2.0
lazy_loader 0.4
loguru 0.7.2
lxml 5.2.2
marisa-trie 1.1.1
markdown-it-py 3.0.0
markdown2 2.4.13
markdownify 0.12.1
MarkupSafe 2.1.5
matplotlib 3.9.0
matplotlib-inline 0.1.7
matplotlib-venn 0.11.10
mdurl 0.1.2
mizani 0.9.3
moviepy 1.0.3
mpmath 1.3.0
multidict 6.0.5
murmurhash 1.0.10
mutagen 1.47.0
networkx 3.3
nltk 3.8.1
numexpr 2.10.0
numpy 1.26.4
openai 1.33.0
opencv-python 4.10.0.82
openpyxl 3.1.3
orjson 3.10.3
packaging 24.0
pandas 1.5.3
pandasai 1.5.3
parso 0.8.4
patsy 0.5.6
pdf2image 1.17.0
pdfkit 1.0.0
pdfminer.six 20231228
pdfplumber 0.11.0
pdfrw 0.4
pexpect 4.9.0
pillow 10.3.0
pip 24.0
platformdirs 4.2.2
plotly 5.22.0
plotnine 0.12.4
pooch 1.8.1
preshed 3.0.9
priority 2.0.0
proglog 0.1.10
prompt_toolkit 3.0.45
psycopg2-binary 2.9.9
ptyprocess 0.7.0
pure-eval 0.2.2
pycparser 2.22
pydantic 1.10.15
pydantic_core 2.18.4
pydub 0.25.1
Pygments 2.18.0
pymongo 4.7.2
PyNaCl 1.5.0
pyodbc 5.1.0
pyOpenSSL 23.2.0
pyparsing 3.1.2
PyPDF2 3.0.1
pypdfium2 4.30.0
pypng 0.20220715.0
pyshp 2.3.1
python-dateutil 2.9.0.post0
python-dotenv 1.0.1
python-multipart 0.0.9
pytz 2024.1
PyWavelets 1.6.0
pyxlsb 1.0.10
PyYAML 6.0.1
pyzbar 0.1.9
qrcode 7.4.2
rarfile 4.2
redis 5.0.4
regex 2024.5.15
reportlab 4.2.0
retrying 1.3.4
rich 13.7.1
scikit-image 0.23.2
scikit-learn 1.5.0
scipy 1.13.1
seaborn 0.13.2
setuptools 65.5.0
shapely 2.0.4
shellingham 1.5.4
six 1.16.0
smart-open 6.4.0
sniffio 1.3.1
soupsieve 2.5
spacy 3.7.4
spacy-legacy 3.0.12
spacy-loggers 1.0.5
SQLAlchemy 1.4.52
sqlparse 0.5.0
srsly 2.4.8
stack-data 0.6.3
starlette 0.37.2
statsmodels 0.14.2
svglib 1.5.1
svgwrite 1.4.3
sympy 1.12.1
tenacity 8.3.0
text-unidecode 1.3
textblob 0.18.0.post0
thinc 8.2.3
threadpoolctl 3.5.0
tifffile 2024.5.22
tinycss2 1.3.0
torch 2.3.0
torchaudio 2.3.0
torchvision 0.18.0
tornado 6.4
tqdm 4.66.4
traitlets 5.14.3
typer 0.9.4
typing_extensions 4.12.1
tzdata 2024.1
ujson 5.10.0
uvicorn 0.30.1
uvloop 0.19.0
Wand 0.6.13
wasabi 1.1.3
watchfiles 0.22.0
wcwidth 0.2.13
weasel 0.3.4
webencodings 0.5.1
Werkzeug 3.0.3
wordcloud 1.9.3
wsproto 1.2.0
xarray 2023.8.0
xgboost 2.0.3
XlsxWriter 3.2.0
xml-python 0.4.3
xyzservices 2024.4.0
yarl 1.9.4
zipp 3.19.1
zopfli 0.2.3
numpy や pandas 以外にもいろいろ入っていますね。インストール済みのライブラリから何ができそうかを考えてもよさそうです。beautifulsoup4 もインストールされていますが、Code Interpretation の実行環境はインターネットアクセスがないため、スクレイピングのコードを生成しても実行することはできません。
追加のライブラリをインストール
前述のとおりインターネットアクセスがないため、ネットワークエラーになります。
プロンプト
boto3 で EC2 インスタンスをリストして
生成されたコード1
import boto3
# EC2クライアントを作成
ec2 = boto3.client('ec2')
# インスタンスの一覧を取得
response = ec2.describe_instances()
# 各インスタンスの情報を表示
for reservation in response['Reservations']:
for instance in reservation['Instances']:
print(f"Instance ID: {instance['InstanceId']}")
print(f"Instance Type: {instance['InstanceType']}")
print(f"State: {instance['State']['Name']}")
print("---")
実行結果1
Traceback (most recent call last):
File "/home/runtime/.pyenv/versions/3.11.8/lib/python3.11/site-packages/IPython/core/interactiveshell.py", line 308, in raise_error
raise self.error_in_exec
File "/home/runtime/.pyenv/versions/3.11.8/lib/python3.11/site-packages/IPython/core/interactiveshell.py", line 3577, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-1-8cbf83ebfd09>", line 1, in <module>
import boto3
ModuleNotFoundError: No module named 'boto3'
"エラーが発生しました。boto3がインストールされていないようです。
boto3はAWS SDKのPythonバージョンで、別途インストールする必要があります。
pipを使ってboto3をインストールしてから、もう一度コードを実行してみましょう。",
生成されたコード2
!pip install boto3
実行結果2
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xffffa48dd790>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/boto3/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xffffa48dda10>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/boto3/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xffffa48d0290>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/boto3/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xffffa48d09d0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/boto3/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xffffa48d1490>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/boto3/
ERROR: Could not find a version that satisfies the requirement boto3 (from versions: none)
ERROR: No matching distribution found for boto3
"boto3のインストールに失敗しているようです。
このコード実行環境ではインターネット接続ができていないため、pipでパッケージをインストールできないようです。
別の方法として、boto3がインストール済みの仮想環境を用意するか、AWSの認証情報を設定する必要があります。
しかし、この実行環境ではそれらの操作ができないため、EC2インスタンスの一覧を取得することはできません。"
以上です。