构建安全可扩展的智能体沙箱基础设施


基本信息


导语

随着大模型应用落地,构建安全且可扩展的 Agent 沙箱基础设施已成为保障系统稳定性的关键环节。本文将深入探讨如何设计隔离环境,以有效平衡资源利用效率与安全风险控制。通过阅读,读者可以了解沙箱架构的核心设计原则,并掌握构建高弹性基础设施的实用策略。


评论

评价文章:Building secure, scalable agent sandbox infrastructure

一、 核心观点与支撑逻辑

中心观点: 随着 AI Agent 从单次对话向长期、自主任务演进,构建基于强隔离(Strong Isolation)有状态推理层级化资源管理的沙箱基础设施,是保障系统安全性与实现商业级可扩展性的必要前提。

支撑理由:

  1. 从“对话”到“行动”的安全边界转移

    • 事实陈述: 传统 LLM 应用主要处理文本生成,风险局限于提示词注入和内容合规。而 AI Agent 需要调用工具、执行代码、读写文件,拥有了改变现实世界状态的能力。
    • 你的推断: 文章强调 Sandbox(沙箱)的核心价值在于将“推理”与“执行”物理解耦。没有容器级或 MicroVM 级别的隔离,Agent 的任意代码执行(如 Python 解释器)将直接威胁宿主机安全。这是 Agent 落地生产环境的“底线工程”。
  2. 有状态推理的架构挑战

    • 事实陈述: Agent 的任务往往具有长周期特征(如编写一个复杂项目),需要保留上下文、变量和中间文件。
    • 作者观点: 文章可能主张采用“Warm Standby”或“Session Persistence”策略,而非传统的无状态函数计算。
    • 你的推断: 这是 Serverless 容器技术(如 AWS Firecracker)在 AI 领域的深度应用。如果每次 Tool Call 都冷启动一个新环境,Agent 将失去“记忆”能力,且延迟将导致用户体验崩塌。文章指出了算力调度从“吞吐量优先”转向“会话保持优先”的趋势。
  3. 资源非确定性的控制

    • 事实陈述: Agent 的行为具有概率性,可能会陷入死循环或意外消耗大量资源(如无限生成文件)。
    • 作者观点: 需要精细化的控制平面来限制 CPU、内存、网络及 API 调用频率。
    • 你的推断: 这要求基础设施层具备“熔断机制”。不同于传统 Web 服务的 QPS 限制,Agent 沙箱需要基于“步数”或“Token 消耗量”的动态计费与熔断策略。

反例/边界条件:

  1. 轻量级任务的过度设计:

    • 对于简单的“只读” Agent(例如仅查询数据库或通过 API 获取天气),引入 MicroVM 级别的重沙箱会造成数百毫秒的冷启动延迟,且资源利用率极低。此时,基于 WebAssembly (WASM) 的轻量级隔离或简单的进程级隔离可能更具性价比。
  2. 实时性交互场景:

    • 在实时音视频交互 Agent 中,沙箱的启动时间必须极低。如果文章过分强调强隔离的安全性而牺牲了冷启动速度,将导致此类应用无法落地。

二、 深度评价(基于 7 个维度)

1. 内容深度:高屋建瓴但细节需落地 文章触及了 AI Agent 工程化的核心痛点——安全与扩展的矛盾。它超越了单纯讨论 Prompt Engineering 的层面,进入了系统工程范畴。论证严谨性较高,正确识别了“代码执行”是当前最大的攻击面。然而,若文章未深入讨论“如何处理网络出站限制”或“如何防止侧信道攻击”,则在纵深防御的细节上略显不足。

2. 实用价值:架构决策的指南针 对于 CTO 或架构师而言,本文具有极高的参考价值。它指出了不能简单套用现有的 Serverless 平台(如 AWS Lambda)来直接运行 Agent,因为 Lambda 的超时限制和冷启动策略并不完全适配“思考-行动-观察”的循环模式。它指导团队在选型时需优先考虑支持持久化容器或快速快照恢复的技术栈(如 GVisor, Firecracker, Kata Containers)。

3. 创新性:将云原生安全范式引入 AI 虽然“沙箱”概念在云安全领域并不新鲜,但将其明确作为 AI Agent 的第一性原理进行阐述,具有前瞻性。它提出了“Agent Runtime”这一新层级的抽象,将 AI 安全从“模型对齐”延伸到了“运行时约束”。

4. 可读性:逻辑清晰 通常此类技术文章结构清晰:问题(Agent 不安全)-> 解决方案(沙箱隔离)-> 挑战(状态管理与扩展性)-> 最佳实践。这种结构易于工程师理解。

5. 行业影响:定义了 Agent Infra 的标准 随着 E2B、CodeSandBox 等初创公司的兴起,本文代表了行业共识:Agent Infrastructure 是下一个万亿级赛道。它将推动云厂商推出针对 AI Agent 定制的容器实例产品(例如 AWS 已在 Bedrock 中应用类似沙箱技术)。

6. 争议点或不同观点

  • 网络隔离 vs. 联网能力: 极端的安全主张切断所有公网访问,但这会扼杀 Agent 的能力。如何平衡“自由上网”与“防止数据外传”是最大争议点。
  • 静态分析 vs. 动态沙箱: 部分观点认为,应在代码进入沙箱前通过 SAST(静态应用安全测试)进行拦截,而非完全依赖运行时沙箱来“接盘”。

7. 实际应用建议


代码示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 示例1:基于Docker的Agent沙箱隔离环境
import docker
import time

def create_agent_sandbox(agent_id):
    """
    为AI Agent创建隔离的Docker容器沙箱
    解决问题:防止Agent代码执行影响宿主机环境
    """
    client = docker.from_env()
    
    # 创建容器配置
    container = client.containers.run(
        image="python:3.9-slim",
        command="tail -f /dev/null",  # 保持容器运行
        detach=True,
        name=f"agent_sandbox_{agent_id}",
        mem_limit="512m",  # 内存限制
        cpu_quota=50000,   # CPU限制
        network_mode="none",  # 禁用网络
        read_only=True,     # 只读文件系统
    )
    
    print(f"沙箱已创建,容器ID: {container.id[:12]}")
    return container

# 使用示例
sandbox = create_agent_sandbox("agent_001")
time.sleep(2)  # 模拟Agent执行任务
sandbox.stop()
sandbox.remove()
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 示例2:资源监控与自动回收机制
import psutil
import threading
import time

class ResourceMonitor:
    """
    监控Agent资源使用并自动回收超限进程
    解决问题:防止Agent消耗过多系统资源
    """
    def __init__(self, max_memory=1024*1024*1024, max_cpu=80):
        self.max_memory = max_memory
        self.max_cpu = max_cpu
        self.running = False
        
    def monitor_process(self, pid):
        """监控指定进程的资源使用"""
        process = psutil.Process(pid)
        while self.running:
            try:
                mem_usage = process.memory_info().rss
                cpu_usage = process.cpu_percent(interval=1)
                
                if mem_usage > self.max_memory or cpu_usage > self.max_cpu:
                    print(f"资源超限!内存: {mem_usage}, CPU: {cpu_usage}%")
                    process.terminate()
                    break
            except psutil.NoSuchProcess:
                break
                
    def start(self, pid):
        """启动监控线程"""
        self.running = True
        monitor_thread = threading.Thread(
            target=self.monitor_process, 
            args=(pid,)
        )
        monitor_thread.start()
        return monitor_thread

# 使用示例
if __name__ == "__main__":
    import os
    monitor = ResourceMonitor()
    # 模拟一个消耗资源的进程
    pid = os.fork()
    if pid == 0:  # 子进程
        while True:
            pass  # 消耗CPU
    else:  # 父进程
        monitor.start(pid)
        time.sleep(3)  # 监控3秒
        monitor.running = False
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 示例3:安全的代码执行沙箱
import sys
import io
from contextlib import redirect_stdout

class SafeExecutor:
    """
    安全执行不可信代码的沙箱环境
    解决问题:防止恶意代码执行危险操作
    """
    def __init__(self):
        self.allowed_modules = {'math', 'random', 'datetime'}
        
    def execute(self, code):
        """执行代码并返回结果"""
        output = io.StringIO()
        restricted_globals = {
            '__builtins__': {
                'print': print,
                'range': range,
                'len': len,
            }
        }
        
        # 添加允许的模块
        for mod in self.allowed_modules:
            restricted_globals[mod] = __import__(mod)
            
        try:
            with redirect_stdout(output):
                exec(code, restricted_globals, {})
            return output.getvalue()
        except Exception as e:
            return f"执行错误: {str(e)}"

# 使用示例
executor = SafeExecutor()
safe_code = """
import math
print(f"π的值: {math.pi}")
"""
unsafe_code = """
import os
os.system("rm -rf /")
"""

print("安全代码执行结果:")
print(executor.execute(safe_code))

print("\n不安全代码执行结果:")
print(executor.execute(unsafe_code))

案例研究

1:E2B

1:E2B

背景: E2B 是一个专为 AI 代码解释器设计的开发平台,旨在帮助开发者构建能够编写和执行代码的 AI 应用。随着 AI Agent(智能体)从简单的聊天机器人向能够自主执行复杂任务的代理演进,安全地运行不可信代码成为了一个核心需求。

问题: AI Agent 生成的代码往往不可预测且可能包含恶意逻辑(如无限循环、系统破坏或挖矿脚本)。直接在生产环境或简单的 Docker 容器中运行这些代码存在巨大的安全风险,且难以隔离资源消耗,容易导致宿主机资源耗尽或遭受逃逸攻击。

解决方案: E2B 构建了一个基于 Firecracker 微虚拟机技术的沙箱基础设施。与传统的容器化方案不同,Firecracker 提供了内核级别的隔离,确保每个 AI Agent 的执行环境都是完全独立的。该平台预装了常用的编程语言和库,允许 AI Agent 通过 API 在毫秒级内启动一个安全的环境,执行代码并获取结果,执行完毕后环境立即销毁。

效果: 通过这种微虚拟机沙箱架构,E2B 实现了极高的安全性,有效防止了代码逃逸和供应链攻击。同时,其冷启动时间被优化在 1 秒以内,满足了 AI 应用对高并发和低延迟的严格要求,使得开发者能够放心地让 AI Agent 处理包括数据分析、网页爬虫和自动化办公在内的复杂任务。


2:Replit

2:Replit

背景: Replit 是一个流行的在线 IDE 平台,拥有数千万用户。为了提升开发效率,Replit 推出了其 AI 核心产品 Ghostwriter,这是一个能够理解上下文并协助开发者编写代码、调试甚至重构项目的 AI Agent。

问题: 当引入 AI Agent 来辅助开发时,平台面临着一个严峻的挑战:AI 的建议可能会引入安全漏洞,或者在某些情况下,AI 需要实际运行代码来验证逻辑或测试环境。如果在一个多租户的在线 IDE 中,无法将 AI 的执行环境与用户的主开发环境进行严格隔离,那么 AI 的错误操作可能会破坏用户的项目文件,甚至波及到同一物理机上的其他用户。

解决方案: Replit 构建了一套高度动态的沙箱基础设施,专门用于 AI Agent 的操作。这套架构利用了定制的容器化技术和资源配额管理(基于 cgroups),为每一个 AI Agent 会话创建了一个临时的、受限的执行环境。该环境与用户的实际项目存储空间逻辑分离,AI 可以在其中安全地安装依赖、运行测试或编译代码,而不会对用户的源代码造成不可逆的修改。

效果: 这种架构使得 Replit 的 AI 能够安全地执行“危险”操作,例如运行潜在的不安全代码片段或自动修复 Bug 而无需用户担心数据丢失。它显著提升了 AI 辅助编程的准确性和实用性,因为 AI 可以通过“试错”来学习,同时保障了平台整体的安全性和稳定性。


3:Arcane (开源项目)

3:Arcane (开源项目)

背景: Arcane 是一个基于 AutoGPT 构建的实验性开源项目,旨在探索 AI Agent 在完全自主的情况下进行软件开发的能力。该项目的目标是让 AI 能够像人类工程师一样,接收需求、编写代码、调试错误并完成部署。

问题: 赋予 AI Agent 对文件系统和网络的高度自主权带来了巨大的风险。早期的实验表明,不受控的 Agent 可能会因为错误的配置命令删除关键系统文件,或者陷入无限循环消耗大量 API 配额。此外,为了测试 Agent 的能力,需要一个可复现、易销毁的标准化环境,但这在传统的云服务器上难以实现。

解决方案: Arcane 团队开发了一套基于 Docker 的沙箱编排系统,作为 AI Agent 的“游乐场”。该方案将 Agent 限制在一个特定的 Docker 容器内,并使用 Seccomp 和 AppArmor 等 Linux 内核安全模块严格限制其系统调用权限。Agent 只能访问特定的项目目录,无法触及宿主机敏感信息,并且所有的网络请求都经过监控和限流。

效果: 这套沙箱基础设施成为了研究 AI Agent 行为模式的关键工具。它不仅防止了实验性 AI 对开发环境造成破坏,还允许研究人员通过快照和回滚功能,快速分析 Agent 在执行失败时的状态。这为构建更安全、可控的自主 AI 系统提供了宝贵的实践经验,证明了严格的资源隔离是实现高级 Agent 应用的先决条件。


最佳实践

最佳实践指南

实践 1:实施严格的隔离与微虚拟化技术

说明: 传统的基于进程或容器的隔离(如 Docker)对于 AI 智能体来说往往不够安全,因为智能体可能会尝试利用内核漏洞逃逸。最佳实践是使用基于虚拟机级别的微虚拟化技术。这能确保每个智能体实例都在独立的内核环境中运行,即使智能体被攻破,攻击者也无法逃逸到宿主机或其他智能体的环境中。

实施步骤:

  1. 评估并采用微虚拟化平台,如 Firecracker、gVisor 或 QEMU。
  2. 为每个智能体会话启动独立的轻量级虚拟机。
  3. 限制虚拟机的资源配额(CPU、内存、磁盘 IO),防止资源耗尽攻击。
  4. 确保虚拟机镜像仅包含运行所需的最小依赖集。

注意事项:

  • 避免直接使用 Docker 作为唯一的安全边界,除非结合了用户态内核或其他强化机制。
  • 监控虚拟机启动时间,确保其符合智能体交互的延迟要求。

实践 2:构建多层网络防御与受控出口

说明: 智能体通常需要访问互联网(调用 API、搜索信息),但这引入了数据泄露和供应链攻击的风险。必须实施严格的网络控制,确保智能体只能与特定的外部端点通信,并且所有流量都经过审计。默认应采用“默认拒绝”的策略。

实施步骤:

  1. 为沙箱环境配置独立的虚拟网络(VPC)或子网。
  2. 在出口网关部署代理层(如 Envoy 或 Nginx),用于强制流量经过检查。
  3. 实施白名单机制,仅允许智能体访问已知安全的域名和 IP 地址。
  4. 拦截所有入站连接请求,智能体环境应对外完全不可见。

注意事项:

  • 注意处理 TLS/SSL 流量,确保在解密代理时不引入额外的性能瓶颈或安全漏洞。
  • 定期审查和更新允许访问的外部服务列表。

实践 3:建立不可变文件系统与分层存储

说明: 为了防止智能体恶意修改系统配置或植入持久化后门,应确保运行环境是不可变的。所有运行时写入操作都应被视为临时的,并在会话结束后丢弃。这不仅能提高安全性,还能简化环境的扩展和版本管理。

实施步骤:

  1. 将操作系统和依赖库挂载为只读模式。
  2. 使用临时文件系统或内存盘处理 /tmp/var 等需要写入的目录。
  3. 采用分层存储策略:底层镜像共享,顶层写入层隔离。
  4. 每次任务执行完毕后,销毁该实例的写入层,不保留任何状态。

注意事项:

  • 如果需要持久化数据(如代码生成结果),必须通过受控的通道(如上传到对象存储)进行,严禁在本地磁盘持久化。
  • 确保只读挂载不会导致依赖库需要写入临时文件时报错。

实践 4:限制资源使用以防止拒绝服务

说明: AI 智能体可能会编写代码执行无限循环、内存泄漏或大规模文件操作,导致基础设施资源耗尽。必须通过严格的内核级资源限制来防止单个失控的智能体影响整个集群的可用性。

实施步骤:

  1. 使用 Linux Cgroups 或虚拟机监控程序设置严格的 CPU 时间片限制。
  2. 限制内存大小,并启用 OOM(内存溢出)杀手机制。
  3. 限制磁盘写入速度和容量,防止“磁盘炸弹”攻击。
  4. 设置严格的执行超时时间,超过时间强制终止进程。

注意事项:

  • 在设置超时和内存限制时,要考虑到智能体执行复杂任务(如编译大型项目)的合理需求,避免误杀正常任务。
  • 监控资源使用趋势,以便动态调整配额。

实践 5:实施严格的审计与可观测性

说明: 在沙箱环境中,假设“一切都会发生故障”是必要的。由于智能体行为具有不确定性,必须记录所有操作以便事后分析、调试和取证。这不仅是安全需求,也是优化智能体行为的关键。

实施步骤:

  1. 记录所有系统调用,特别是文件操作、网络请求和进程创建。
  2. 采集智能体的标准输出和标准错误流。
  3. 记录网络流量的元数据(源、目标、端口、大小)。
  4. 将日志发送到中心化的安全信息和事件管理(SIEM)系统,并设置异常行为告警。

注意事项:

  • 审计数据本身可能包含敏感信息,需确保审计日志的存储和访问是安全的。
  • 注意日志采集带来的性能开销,避免影响沙箱的运行速度。

实践 6:实施深度防御的权限控制

说明: 即使沙箱被攻破,也应限制攻击者能造成的损害。这意味着智能体在执行任务时,应仅拥有完成任务所需的最小权限。应避免使用 root 用户运行智能


学习要点

  • 根据您提供的主题,以下是关于构建安全、可扩展的 AI 智能体沙盒基础设施的关键要点总结:
  • 采用严格的资源隔离机制(如微虚拟机或 gVisor),确保智能体在执行不可信代码时不会逃逸并影响宿主机或其他租户。
  • 构建分层防御体系,不仅依赖网络隔离,还需在内核层面强制执行安全策略,以应对智能体可能发起的复杂攻击。
  • 引入可观测性和行为分析工具,实时监控智能体的系统调用和资源消耗,以便在异常行为发生时迅速进行干预或阻断。
  • 设计无状态或快速重建的沙盒环境,利用快照技术和预编译镜像,将智能体的冷启动时间降至最低以支持高并发。
  • 实施精细化的网络出站控制,通过代理或防火墙规则严格限制智能体的外部访问权限,防止数据泄露或被利用进行 DDoS 攻击。
  • 建立自动化的资源配额与计费系统,限制单个智能体的 CPU、内存和执行时长,以防止资源被恶意耗尽或产生意外的高额成本。

常见问题

1: 什么是 Agent Sandbox(智能体沙箱),为什么它是必需的?

1: 什么是 Agent Sandbox(智能体沙箱),为什么它是必需的?

A: Agent Sandbox 是一种隔离的执行环境,专门用于运行自主智能体的代码或操作。由于现代 AI 智能体通常被授予执行代码、调用 API 或修改文件的权限以完成复杂任务,如果直接在生产环境或用户本地运行,存在极大的安全风险(如删除系统文件、泄露敏感数据或执行恶意命令)。沙箱技术通过在隔离的容器(如 Docker 或 Firecracker microVM)中运行这些操作,确保了宿主机的安全,同时允许智能体拥有必要的自由度去试错和学习。


2: 在构建沙箱基础设施时,应选择容器还是微虚拟机?

2: 在构建沙箱基础设施时,应选择容器还是微虚拟机?

A: 这取决于您的具体需求。容器(如 Docker)启动速度快、资源占用少,且易于与 Kubernetes 集成,适合大多数对隔离性要求不是极端苛刻的场景。然而,容器共享宿主机内核,存在潜在的容器逃逸风险。微虚拟机(如 Firecracker、gVisor)提供了独立的内核,通过硬件级虚拟化实现更强的隔离性和安全性,适合处理不受信任的代码或高敏感度的多租户环境,但代价是启动时间稍长和一定的性能损耗。构建可扩展的基础设施时,通常建议支持多种隔离技术,根据任务的风险等级动态选择。


3: 如何防止智能体在沙箱内消耗过多资源或发起拒绝服务攻击?

3: 如何防止智能体在沙箱内消耗过多资源或发起拒绝服务攻击?

A: 资源管理是沙箱基础设施的核心部分。必须实施严格的限制措施,包括:1. 计算限制:通过 Linux cgroups 限制 CPU 使用率和内存大小;2. 存储限制:限制磁盘写入量和临时文件系统的容量;3. 网络限制:配置网络带宽限制,并使用防火墙规则(如 eBPF 或 iptables)限制其只能访问特定的外部 IP 或白名单域名。此外,实施超时机制至关重要,如果智能体的执行时间超过预设阈值(例如 30 秒),系统应强制终止该进程并销毁沙箱。


4: 沙箱环境应如何处理网络访问?

4: 沙箱环境应如何处理网络访问?

A: 原则上应遵循“默认拒绝”策略。沙箱不应拥有无限制的互联网访问权限。最佳实践是:1. 出站流量过滤:仅允许智能体访问完成任务所必需的特定 API(例如特定的天气 API 或数据库端点);2. 流量监控:记录所有出站请求以便审计和调试;3. 防止数据外渗:阻止对非预期的端口或协议(如 SMTP、SSH)的访问。对于高度敏感的任务,可以配置完全离线的沙箱环境,仅通过工具调用与外界交互。


5: 如何保证沙箱基础设施的可扩展性?

5: 如何保证沙箱基础设施的可扩展性?

A: 为了应对高并发请求,架构设计应考虑无状态性和快速调度。1. 无状态设计:沙箱实例本身不应持久化状态,每次任务执行完毕后应销毁或重置,以便快速复用;2. 预热池:维护一个热启动的沙箱池,在请求到达前预先初始化容器或微虚拟机,从而将冷启动延迟降至毫秒级;3. 自动扩缩容:结合 Kubernetes 或类似编排工具,根据队列长度自动增加或减少沙箱工作节点的数量。此外,应将执行层与控制层分离,避免调度器成为瓶颈。


6: 智能体在沙箱中生成的数据应如何持久化和处理?

6: 智能体在沙箱中生成的数据应如何持久化和处理?

A: 沙箱通常是临时的,一旦销毁,其内部文件系统也会被清空。因此,持久化必须通过显式的数据通道进行。常见的方法包括:1. 对象存储挂载:将沙箱生成的文件(如图表、报告)直接上传至云存储(如 S3);2. 写入共享卷:对于高性能需求,可以挂载高性能网络文件系统,但需注意清理旧数据;3. 结构化日志流:将 stdout/stderr 和自定义日志实时流式传输到中心化日志系统(如 ELK 或 CloudWatch)。关键是要确保沙箱无法随意“污染”持久化存储,必须经过验证和清洗。


7: 在构建此类系统时,有哪些容易被忽视的安全隐患?

7: 在构建此类系统时,有哪些容易被忽视的安全隐患?

A: 除了基础的隔离,开发者常忽略以下隐患:1. 侧信道攻击:虽然进程被隔离,但通过监控 CPU 使用率、缓存命中率等,智能体可能推断出同一物理机上其他租户的活动;2. 依赖投毒:如果沙箱允许智能体安装 pipnpm 包,恶意的公共包可能会在沙箱销毁前利用漏洞探测宿主机;3. WebLLM 浏览器漏洞:如果沙箱内运行了无头浏览器进行网页抓取,渲染引擎本身可能存在未修补的 0-day 漏洞。因此,必须定期更新沙箱镜像的基础镜像,并限制沙箱对宿主机 proc 文件系统的访问权限。


思考题

## 挑战与思考题

### 挑战 1: [简单]

问题**: 在设计 Agent 沙箱时,最基础的隔离级别通常依赖于操作系统级的虚拟化技术。请列举 Linux 环境下实现资源隔离的三种核心技术,并解释它们各自主要限制了什么(例如:CPU、内存、网络等)。

提示**: 思考 Linux 内核提供的 Namespace 特性包含哪些具体的类型,以及 Cgroups 在资源控制中扮演的角色。


引用

注:文中事实性信息以以上引用为准;观点与推断为 AI Stack 的分析。



站内链接

相关文章