>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Python

使用 SIE 构建 AI Agent 时如何摆脱容器动物园

Superlinked logo

在本地或开源神经网络之上构建自主 Agent 正迅速成为一个基础设施噩梦。如果你正在组装一个包含多个决策步骤的 RAG 系统,你需要同时运行多个窄用途系统。你需要一个用于搜索的向量模型、一个独立的重排序器、一个用于解析 PDF 中复杂图形的工具、一个安全分类器,以及一个生成式 LLM。

结果,开发环境很快就会变成一堆 docker-compose 文件。一个容器占用 vLLM 的内存,另一个启动 Text Embeddings Inference,第三个仅为通过 GLiNER 进行偏执实体提取而启动 PyTorch。让所有这些实例持续运行是累积大量 GPU 账单的最佳方式。

Superlinked 的工程师遇到了同样的问题,并发布了 SIE(Superlinked Inference Engine)。这是一个推理服务器,将所有 Agent 任务处理整合到一个屋檐下。

底层原理

SIE 采用不同的方法。你不再运行五个独立的推理服务器,而是部署一个响应标准 OpenAI 端点(如 /v1/embeddings/v1/chat/completions)的集群。

主要特性是按需动态加载模型,并使用 LRU(最近最少使用)驱逐算法。当 Agent 需要 OCR 来解析用户上传的扫描件时,SIE 会将文档识别模型加载到 GPU 内存中。一旦解析阶段完成,系统进入对话阶段,这个很少使用的模型就会释放内存供生成网络使用。

开箱即用的目录包含一百多种预配置设置。热门选项包括 BGE-M3、ColBERTv2、SPLADE-v3、GLiNER、Docling、Qwen3,以及 Granite Guardian 等提示注入保护模型。

本地快速入门

对于初步了解,标准 Python 包就足够了。你可以用两个命令在 CPU 或 Apple Silicon 上启动一个测试实例:

pip install "sie-server[local]"
sie-server serve

如果你计划在 NVIDIA GPU 上运行重型工作负载,从一开始就选择 Docker。开发者有意将服务拆分为隔离容器,因为存在冲突的系统依赖。OCR 模型需要最新的 transformers 库,因此作为单独的标签发布。

对于向量搜索,启动基础容器如下:

docker run --gpus all -p 8080:8080 \
  -v sie-hf-cache:/app/.cache/huggingface \
  ghcr.io/superlinked/sie-server:latest-cuda12-default

你可以用标准 curl 调用验证它是否正常工作:

curl http://localhost:8080/v1/embeddings \
  -H 'Content-Type: application/json' \
  -d '{"model": "sentence-transformers/all-MiniLM-L6-v2", "input": "Привет, мир"}'

在第一次请求时,服务器自动从 Hugging Face 下载权重并保存到本地缓存,因此后续查询不会有下载延迟。

使用 Python SDK 编程

为了与服务器配合使用,作者编写了 Python 和 TypeScript 库。SDK 处理调用特定任务,如分类或命名实体提取。

以下是一个示例,展示如何在单个客户端中对文本进行向量化、重排序结果和提取实体:

from sie_sdk import SIEClient
from sie_sdk.types import Item

client = SIEClient("http://localhost:8080")

# Получаем эмбеддинг
embedding = client.encode("sentence-transformers/all-MiniLM-L6-v2", Item(text="Привет мир"))

# Считаем релевантность документов
scores = client.score(
    "cross-encoder/ms-marco-MiniLM-L-6-v2",
    Item(text="Что такое машинное обучение?"),
    [Item(text="ML обучается на данных."), Item(text="Сегодня солнечная погода.")],
)

# Извлекаем сущности через GLiNER
entities = client.extract(
    "urchade/gliner_multi-v2.1",
    Item(text="Тим Кук руководит компанией Apple в Купертино."),
    labels=["person", "organization", "location"],
)

语法简单直接。你不需要为 HTTP 端点编写自己的包装器,也不需要为每个小型模型引入第三方库。

生产就绪

许多类似的开源项目停留在为本地使用而精心打磨 README 的阶段。在 SIE 的案例中,作者立即发布了用于部署到 Kubernetes 的基础设施工具。

仓库和组织中的相关项目包括:

  • 用于快速安装的 Helm chart sie-cluster
  • 为 AWS(EKS)、Google Cloud(GKE)和 Azure(AKS)提供的现成 Terraform 模块。
  • 用于将 Pod 自动缩放到零的 KEDA 配置。
  • 用于指标收集的负载均衡器和 Grafana 仪表板。

将 Pod 缩放到零的能力对于内部企业服务非常有用。如果员工夜间不使用 Agent,云端 GPU 就不会闲置。

注意事项

一个用于所有任务的单一推理服务器的概念听起来很棒,但没有完美的解决方案。

主要陷阱是冷启动延迟。当模型因 LRU 驱逐而从 GPU 内存中移除时,下一个请求必须等待权重从磁盘重新加载。在相对较慢的存储上,这会给 Agent 的响应增加几秒钟的延迟。

第二个细节与 Docker 镜像分离有关。如果你的管道同时需要基于 LightOnOCR 的 OCR 和基于 SGLang 的快速 LLM 推理,你仍然需要启动两个不同的 SIE 容器,因为它们的环境不同。

值得一试吗?

SIE 是在自有硬件或私有云上构建管道的团队的绝佳选择。如果你厌倦了为一个 RAG 系统维护五个不同容器来支撑基础设施,这个项目将节省大量时间。

如果你的架构很简单,只有一个对话模型,没有复杂的文档处理和重排序阶段,就没有必要切换到 SIE。在这种情况下,常规的 vLLM 或 Ollama 就完全足够了。

相关项目