实用笔记:揭开代理网格的神秘面纱——在……上扩展AI代理与大语言模型
《实用笔记》操作指南:揭秘代理网格——面向采用该模式的团队,介绍如何在合同、校验机制及即插即用代码模块上扩展人工智能代理与大型语言模型。
本指南将逐步构建从原材料到可运行系统的完整流程,主题为“揭秘智能网格:在 Kubernetes 上扩展 AI 智能体与大语言模型”。重点在于可操作的步骤、明确的检查点,以及可直接放入代码仓库的代码,无需猜测其用途。 在概览阶段,应在修改代码之前明确输入参数、各步骤的负责人以及完成标准。操作人员应能够从已知的检查点重新运行相应步骤,而无需推测隐藏状态。 需同时记录正常流程与故障恢复流程。重试机制、人工审核环节以及错误处理都是产品不可或缺的部分,而非后续需要补充的功能。
生产环境智能 AI 的核心瓶颈
在处理“核心瓶颈”阶段时,首先写下相关契约:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 优先选择小型、可测试的单元,而非庞大的脚本。当某个步骤失败时,故障应能指向单一的责任模块,而非复杂的流程链。 缓存稳定的系统指令和工具结构。重复发送相同的开头信息是导致资源浪费的常见原因。
认识技术栈:代理网状结构的蓝图
在完成“认识 Stack 平台”这一阶段时,首先需写下契约:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 将这一阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功判定标准,并杜绝无声的半完成状态。 缓存稳定的系统指令和工具架构。重复发送相同的开头信息是导致资源浪费的常见原因。
1. kagent:代理运行时环境
在完成1 kagent的The Agent阶段时,首先需明确合同条款:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持一致性。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免从演示环境过渡到共享环境时出现意外费用。 缓存稳定的系统指令和工具架构。重复发送相同的开头信息是导致资源浪费的常见原因。 在完成1 kagent的The Agent阶段时,首先需明确合同条款:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持一致性。 同时记录正常流程和故障恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的组成部分,而非后续需要补充的功能。
2. agentgateway:流量管理员
在将“Agentgateway The Traffic”阶段视为可度量的对象时,其效果最佳。在扩大范围之前,先记录一份理想的处理结果、一个故障案例以及回滚说明。 相较于庞大的脚本,应优先使用小型且可测试的单元。当某一步骤出现故障时,故障原因应能明确指向某个具体的责任模块,而非复杂的流程链。 需为每轮对话和每次会话设定令牌预算。智能代理工具会大量消耗上下文资源,设置上限可避免演示过程突然产生额外费用。
3. llm-d:工作负载分配器
在将工作负载阶段视为可度量的对象时,3 llm-d 的效果最佳。在扩大范围之前,先记录一份理想的输出文本、一个失败案例以及回滚说明。 把这一阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,绝不允许出现无声无息的半完成状态。 需为每轮对话和每次会话设定token预算。智能代理工具会大量消耗上下文资源,设置上限可避免演示过程变成意外的费用账单。
4. vLLM:GPU核心动力
在4 vLLM的GPU阶段中,将其视为可测量的对象才能获得最佳效果。在扩大应用范围之前,先记录一份理想的处理流程、一个故障案例以及回滚说明。在功能结果旁同时记录处理时间以及Token或查询成本。提前了解成本情况,就能避免在从演示环境过渡到共享环境时出现意外账单。为每轮对话和每次会话设定Token预算——智能工具往往会大量消耗上下文,设置上限可防止演示过程变成意外收费的源头。在4 vLLM的GPU阶段中,将其视为可测量的对象才能获得最佳效果。在扩大应用范围之前,先记录一份理想的处理流程、一个故障案例以及回滚说明。需同时记录正常处理路径和故障恢复路径。重试机制、人工审核环节以及错误消息处理都是产品本身的一部分,而非后续需要补充的功能。
1. 系统架构
在“系统架构”阶段,应在修改代码之前明确输入内容、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。相比冗长的脚本,更应采用小型且可测试的单元。当某个步骤失败时,故障原因应能指向单一责任模块,而非复杂的流程链。如果后续步骤是代码调用或工具调用,相比自由形式的文字描述,带有结构化格式及模式验证的输出更为合适。
内部机制:在网格中处理请求
在“内部处理”阶段,应在修改代码之前明确输入内容、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功判定标准,并拒绝默许的半完成状态。 当下一步操作是代码编写或工具调用时,优先采用具有架构验证的结构化输出,而非自由形式的文字描述。
2. 安装控制器与CRDs
在“安装2个控制器CRD”阶段,修改代码之前需明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。应在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。当下一步操作为编写代码或调用工具时,宜采用带有模式验证的结构化输出,而非自由形式的文字描述。在“安装2个控制器CRD”阶段,修改代码之前需明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。需同时记录正常流程和故障恢复流程。重试机制、人工审核环节以及死信处理都是产品功能的一部分,而非后续需要补充的内容。
# 1. Install Kubernetes Gateway API & Inference Extension CRDs
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.5.0/standard-install.yaml
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v0.1.0/manifests.yaml
# 2. Add Helm Registries
helm repo add agentgateway oci://cr.agentgateway.dev/charts
helm repo add kagent https://charts.kagent.dev
helm repo update
# 3. Install agentgateway (Control & Data Plane)
helm upgrade -i agentgateway-crds agentgateway/agentgateway-crds -n agentgateway-system --create-namespace
helm upgrade -i agentgateway agentgateway/agentgateway -n agentgateway-system
# 4. Install kagent (Agent Runtime)
helm upgrade -i kagent kagent/kagent -n kagent-system --create-namespace
3. 部署 GPU 推理基础设施(vLLM & llm-d)
在完成“部署 GPU 推理”这一阶段时,首先需明确相关约定:所需输入、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 建议使用小型、可测试的单元而非庞大的脚本。当某个步骤失败时,故障应能指向单一责任模块,而非复杂的流程链。 缓存稳定的系统指令和工具结构。重复发送相同的开头信息是造成资源浪费的常见原因。
预填充并解码部署配置(vllm-infrastructure.yaml)
在处理“预填充解码部署 vllm-基础设施”阶段时,首先需明确相关约定:所需输入、成功标志以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改始终符合要求。 将此阶段视为输入与验证后输出之间的契约。为相关产物命名,定义成功判定标准,杜绝无声的半完成状态。 缓存稳定的系统指令和工具架构。重复发送相同的开头信息是导致资源浪费的常见原因。
apiVersion: apps/v1
kind: Deployment
metadata:
name: vllm-prefill
namespace: llm-serving
labels:
app: vllm-prefill
spec:
replicas: 1
selector:
matchLabels:
app: vllm-prefill
template:
metadata:
labels:
app: vllm-prefill
spec:
containers:
- name: vllm
image: vllm/vllm-openai:latest
args:
- "--model"
- "meta-llama/Meta-Llama-3-8B-Instruct"
- "--experimental-prefill-only" # Optimization: Dedicated Prefill role
- "--gpu-memory-utilization"
- "0.90"
- "--port"
- "8000"
ports:
- containerPort: 8000
name: http
resources:
limits:
nvidia.com/gpu: "1" # Schedule on premium compute node
cpu: "4"
memory: 16Gi
volumeMounts:
- mountPath: /root/.cache/huggingface
name: model-cache
- mountPath: /dev/shm
name: dshm
volumes:
- name: model-cache
persistentVolumeClaim:
claimName: vllm-model-cache-pvc
- name: dshm
emptyDir:
medium: Memory
sizeLimit: 4Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: vllm-decode
namespace: llm-serving
labels:
app: vllm-decode
spec:
replicas: 3 # Scale out dynamically based on load
selector:
matchLabels:
app: vllm-decode
template:
metadata:
labels:
app: vllm-decode
spec:
containers:
- name: vllm
image: vllm/vllm-openai:latest
args:
- "--model"
- "meta-llama/Meta-Llama-3-8B-Instruct"
- "--experimental-decode-only" # Optimization: Dedicated token generator role
- "--gpu-memory-utilization"
- "0.90"
- "--port"
- "8000"
ports:
- containerPort: 8000
name: http
resources:
limits:
nvidia.com/gpu: "1" # Schedule on low-cost L4/A10G nodes
cpu: "4"
memory: 16Gi
volumeMounts:
- mountPath: /root/.cache/huggingface
name: model-cache
- mountPath: /dev/shm
name: dshm
volumes:
- name: model-cache
persistentVolumeClaim:
claimName: vllm-model-cache-pvc
- name: dshm
emptyDir:
medium: Memory
sizeLimit: 4Gi
llm-d 配置(llmd-routing.yaml)
在处理 llm-d 配置中的 llmd-routing yaml 阶段时,首先需明确相关规范:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持一致性。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在系统从演示环境切换到共享环境时出现意外费用。 缓存稳定的系统指令和工具架构。重复发送相同的前置信息是导致资源浪费的常见原因。 在处理 llm-d 配置中的 llmd-routing yaml 阶段时,首先需明确相关规范:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持一致性。 需同时记录正常流程和故障恢复流程。重试机制、人工审核环节以及错误消息处理都是产品功能的一部分,而非后续需要补充的内容。
apiVersion: inference.networking.x-k8s.io/v1alpha1
kind: InferencePool
metadata:
name: llama3-decode-pool
namespace: llm-serving
spec:
selector:
matchLabels:
app: vllm-decode
targetPort: 8000
---
apiVersion: inference.networking.x-k8s.io/v1alpha1
kind: InferenceObjective
metadata:
name: llama3-serving-objective
namespace: llm-serving
spec:
modelName: "meta-llama/Meta-Llama-3-8B-Instruct"
prefillService:
name: vllm-prefill
port: 8000
decodePool:
name: llama3-decode-pool
4. 配置agentgateway
在将“配置agentgateway”这一阶段视为可度量的指标时,其效果最佳。在扩大范围之前,需记录一份理想的操作案例、一个故障实例以及回滚说明。 建议使用小型且可测试的单元,而非庞大的脚本。当某一步骤出现故障时,故障应指向单一责任模块,而非复杂的流程链。 需为每轮对话和每次会话设定令牌预算。智能代理工具会大量消耗上下文资源,设置上限可避免演示过程突然产生额外费用。
网关定义(agent-gateway.yaml)
将“网关定义”agent-gateway yaml阶段视为可度量的工作面时,其效果最佳。在扩大范围之前,需记录一份理想案例、一个故障场景以及回滚说明。 应将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,杜绝默许的半完成状态。 需为每轮及每次会话设定令牌预算。智能代理工具会大量消耗上下文资源,设置上限可避免演示阶段突然产生额外费用。
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: agent-gateway
namespace: agentgateway-system
spec:
gatewayClassName: agentgateway
listeners:
- name: http
protocol: HTTP
port: 8080
allowedRoutes:
namespaces:
from: All
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: llm-inference-route
namespace: llm-serving
spec:
parentRefs:
- name: agent-gateway
namespace: agentgateway-system
rules:
- matches:
- path:
type: PathPrefix
value: /v1/chat/completions
backendRefs:
- name: llama3-serving-objective
kind: InferenceObjective
group: inference.networking.x-k8s.io
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: mcp-tools-route
namespace: agent-tools
spec:
parentRefs:
- name: agent-gateway
namespace: agentgateway-system
rules:
- matches:
- path:
type: PathPrefix
value: /mcp/tools
backendRefs:
- name: mcp-tool-server-service
port: 50051
5. 部署kagent AI Agent Pod
将“部署kagent AI”阶段视为可度量的工作面时,其效果最佳。在扩大范围之前,需记录一份理想案例、一个故障场景以及回滚说明。 除了功能结果外,还需记录处理时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外账单。
apiVersion: apps/v1
kind: Deployment
metadata:
name: kagent-orchestrator
namespace: kagent-system
spec:
replicas: 2
selector:
matchLabels:
app: kagent-orchestrator
template:
metadata:
labels:
app: kagent-orchestrator
spec:
containers:
- name: agent-runtime
image: kagent/runtime:latest
env:
# Route all model and tool API calls through agentgateway
- name: OPENAI_API_BASE
value: "http://agent-gateway.agentgateway-system.svc.cluster.local:8080/v1"
- name: MCP_SERVER_URL
value: "http://agent-gateway.agentgateway-system.svc.cluster.local:8080/mcp/tools"
resources:
limits:
cpu: "2"
memory: 4Gi
requests:
cpu: "1"
memory: 2Gi