在沙盒里运行Claude Code
在这里,我将分享一个编写代码的 Anthropic Skill(通用代理)的最简单示例,以及两种创建沙盒环境的方法...
一些背景知识...
在具有代码编写能力的 AI 代理的语境中,沙盒是一个关键的隔离层。
它保护您的系统免受 AI 生成的潜在有害或错误代码的侵害。
当 AI 代理编写代码时,总是存在代码可能包含错误、死循环、资源密集型操作甚至安全漏洞的风险。
特别是当 AI 代理正在实验或从用户反馈中学习时。
通过在沙盒环境中运行代理(如 Python 虚拟环境、Docker 容器或专用虚拟机),您可以创建边界,限制生成的代码可以访问和修改的内容。
这意味着,如果 AI 编写的代码试图删除文件、消耗过多内存或访问敏感系统资源,沙盒会将损害限制在一个可以轻松重置或丢弃的隔离空间中。
高级沙盒化可以包括:
- 限制文件系统访问,
- 网络隔离,
- CPU/内存限制,以及
- 代码执行的时间约束。
在创建容器时,所有这些参数以及更多内容都可以设置...
这个保护层允许您安全地试验 AI 生成的代码,而不会冒犯您的开发环境或生产系统的风险。
对于任何部署自主编码代理的人来说,这都是必不可少的实践。
虚拟环境 vs Docker 容器
我对使用 VE 或 DC 的主要差异做了一些研究...
从实际角度来看,VE 易于快速设置或运行。DC 要求稍高,但...
据说 Docker 容器比 Python 虚拟环境提供更强的隔离性、更好的可移植性和更一致的行为。
据说这使得 Docker 成为生产级 AI 代理部署和安全敏感工作流的更好选择。
虚拟环境(venv 或 virtualenv)在同一操作系统内的应用程序级别隔离 Python 包和依赖项。
简而言之,使用虚拟环境进行快速、本地实验;当隔离、一致性和生产准备就绪变得不可协商时,切换到 Docker。
它们防止项目之间的版本冲突,但共享主机内核、文件系统和系统级库。
如果恶意代码运行,这为意外干扰或安全泄露留下了空间。
Docker 容器通过封装整个运行时环境(包括操作系统用户空间、库、二进制文件和网络堆栈)走得更远。
Docker 似乎更适合更深层的进程隔离,在不同机器上可重复构建。
同时能够实施严格的资源限制和安全策略。
虽然虚拟环境对于本地开发来说仍然轻量且快速,但 Docker 在需要为运行不受信任的 AI 生成的代码、CI/CD 管道或部署到多样化基础设施而进行沙盒化的场景中表现出色。
MacOS 上的虚拟环境设置...
创建一个工作目录...
mkdir ai-sandbox-agent
进入该目录...
cd ai-sandbox-agent
创建一个虚拟环境...
python3 -m venv sandbox_env
激活虚拟环境...
source sandbox_env/bin/activate
运行这些安装...
pip install anthropic
和...
pip install python-dotenv ipython
将您的 Anthropic API 保存为环境变量...
echo "ANTHROPIC_API_KEY=your_api_key_here" > .env
创建一个空 Python 文件并命名...
touch code_agent.py
打开它...
vim code_agent.py
粘贴以下 Python 代码:
import os
from anthropic import Anthropic
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
# 初始化客户端
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
def run_code_agent(task):
"""
运行一个具有代码编写能力的 AI 代理
"""
system_prompt = """你是一个专业的代码编写助手。
当被要求编写代码时:
- 提供干净的、有注释的代码
- 解释代码的功能
- 在适当的地方包含错误处理
- 建议如何运行/测试代码
"""
message = client.messages.create(
model="claude-sonnet-4-5-20250529",
max_tokens=4000,
system=system_prompt,
messages=[
{"role": "user", "content": task}
]
)
return message.content[0].text
# 交互模式
if __name__ == "__main__":
print("AI 代码代理已初始化!")
print("输入 'exit' 退出\n")
while True:
task = input("您想让我编写什么代码?> ")
if task.lower() in ['exit', 'quit']:
print("再见!")
break
print("\n" + "="*60)
response = run_code_agent(task)
print(response)
print("="*60 + "\n")
您可以从命令行运行此编码代理:
python code_agent.py
然后在提示时输入您的请求:
What would you like me to code? > 构建一个简单的 Flask API,包含两个端点
Docker 设置
安装 Docker...
pip install docker
创建 Dockerfile
cat > Dockerfile << 'EOF'
FROM python:3.11-slim
创建 requirements.txt 文件...
cat > requirements.txt << 'EOF'
anthropic
python-dotenv
EOF
粘贴后按回车。
在 ai-sandbox-agent 文件夹中,您应该在列表中看到 Dockerfile 和 requirements.txt。
构建 Docker 镜像...
docker build -t code-agent .
然后运行镜像...
docker run -it --env-file .env code-agent
下面是您如何通过命令行与编码代理(代理技能)交互的视图...
如果您前往 docker UI,您将看到您的容器已列出...
原文链接: Claude Code Sandboxing
汇智网翻译整理,转载请标明出处