在沙盒里运行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 文件夹中,您应该在列表中看到 Dockerfilerequirements.txt

构建 Docker 镜像...

docker build -t code-agent .

然后运行镜像...

docker run -it --env-file .env code-agent

下面是您如何通过命令行与编码代理(代理技能)交互的视图...

如果您前往 docker UI,您将看到您的容器已列出...


原文链接: Claude Code Sandboxing

汇智网翻译整理,转载请标明出处