[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6P89YSF4243XNYZS191AASX":3,"skill-same:01M6P89YSF4243XNYZS191AASX":76},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":34,"commitSha":57,"skillDirectory":58,"forksCount":13,"repositoryHtmlUrl":59,"repositoryHomepageUrl":6,"ownerHtmlUrl":60,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":61,"install":62,"resources":75},"01M6P89YSF4243XNYZS191AASX","llmops-platform-engineering",null,"Build production LLMOps platforms with CI\u002FCD, model promotion workflows, evaluation gates, rollback, and governance across cloud and self-hosted inference.","duc-duy-1612\u002FOnline-Delivery-Systems-Web","duc-duy-1612","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F192231384?v=4","01M6NSDKQQDKVTHZ8DZMZ1VYY6","01M6NSDKW8DDVTQHBT1HBDDJPT",0,"MIT","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fllmops-platform-engineering\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"llmops","llmops platform engineering","platform","platform engineering","engineering","Evaluation","devops-security","access","model","only","community","main","self","across","ci","critical","scripts","relevant","CI\u002FCD","workflows","2026-11-10 10:12:30",false,"---\nname: llmops-platform-engineering\ndescription: Build production LLMOps platforms with CI\u002FCD, model promotion workflows,\n  evaluation gates, rollback, and governance across cloud and self-hosted inference.\ncategory: devops\nrisk: critical\nsource: https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\nsource_repo: BagelHole\u002FDevOps-Security-Agent-Skills\nsource_type: community\ndate_added: '2026-09-20'\nlicense: MIT\nlicense_source: https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\u002Fblob\u002Fmain\u002FLICENSE\ncompatibility: Requires the relevant platform CLIs (kubectl, helm, terraform, git,\n  CI runners) and authorized access to the target environment. Docs-only; helper scripts\n  and templates not bundled.\nmetadata:\n  author: devops-skills\n  version: '1.0'\n---\n\n# LLMOps Platform Engineering\n\nDesign and operate an internal LLM platform that supports rapid experimentation without compromising reliability, cost, or compliance.\n\n## When to Use This Skill\n\n- Building an internal platform for teams to deploy and manage LLM-powered features\n- Designing CI\u002FCD pipelines that include model evaluation gates\n- Setting up A\u002FB testing infrastructure for model versions\n- Creating Kubernetes-based model serving infrastructure\n- Establishing governance workflows for model promotion\n\n## Prerequisites\n\n- Kubernetes cluster with GPU node pools (or cloud inference API access)\n- Container registry (Harbor, ECR, GCR, or ACR)\n- CI\u002FCD system (GitHub Actions, GitLab CI, or Argo Workflows)\n- Observability stack (Prometheus + Grafana + OpenTelemetry)\n- Model registry (MLflow or custom metadata store)\n\n## Outcomes\n\n- Standardized path from experiment to production\n- Safe model rollout with quality and safety gates\n- Repeatable infra modules for inference, vector DB, and observability\n- Clear ownership model across platform, app, and security teams\n\n## Reference Architecture\n\n1. **Control Plane**: model registry, prompt\u002Fversion catalog, policy checks, eval pipeline.\n2. **Data Plane**: inference gateway, vector database, cache, feature store.\n3. **Ops Plane**: telemetry, alerting, SLO dashboards, cost analytics.\n4. **Security Plane**: IAM boundaries, secret rotation, content filters, audit logs.\n\n## Model Promotion Pipeline\n\n```yaml\n# .github\u002Fworkflows\u002Fmodel-promotion.yaml\nname: Model Promotion Pipeline\non:\n  workflow_dispatch:\n    inputs:\n      model_name:\n        description: \"Model identifier\"\n        required: true\n      model_version:\n        description: \"Model version to promote\"\n        required: true\n      target_env:\n        description: \"Target environment\"\n        required: true\n        type: choice\n        options: [staging, production]\n\njobs:\n  evaluate:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Run quality evaluation suite\n        run: |\n          python -m evals.run \\\n            --model \"${{ inputs.model_name }}:${{ inputs.model_version }}\" \\\n            --suite quality \\\n            --output results\u002Fquality.json\n\n      - name: Run safety evaluation suite\n        run: |\n          python -m evals.run \\\n            --model \"${{ inputs.model_name }}:${{ inputs.model_version }}\" \\\n            --suite safety \\\n            --output results\u002Fsafety.json\n\n      - name: Run latency benchmark\n        run: |\n          python -m evals.benchmark \\\n            --model \"${{ inputs.model_name }}:${{ inputs.model_version }}\" \\\n            --concurrent-users 50 \\\n            --duration 300 \\\n            --output results\u002Flatency.json\n\n      - name: Gate check - quality\n        run: |\n          python -m evals.gate_check \\\n            --results results\u002Fquality.json \\\n            --threshold-file thresholds\u002Fquality.yaml\n\n      - name: Gate check - safety\n        run: |\n          python -m evals.gate_check \\\n            --results results\u002Fsafety.json \\\n            --threshold-file thresholds\u002Fsafety.yaml\n\n      - name: Gate check - latency\n        run: |\n          python -m evals.gate_check \\\n            --results results\u002Flatency.json \\\n            --threshold-file thresholds\u002Flatency.yaml\n\n      - name: Upload eval evidence\n        uses: actions\u002Fupload-artifact@v4\n        with:\n          name: eval-results-${{ inputs.model_version }}\n          path: results\u002F\n\n  approve:\n    needs: evaluate\n    runs-on: ubuntu-latest\n    environment: ${{ inputs.target_env }}\n    steps:\n      - name: Record approval\n        run: |\n          echo \"Approved by: ${{ github.actor }}\"\n          echo \"Model: ${{ inputs.model_name }}:${{ inputs.model_version }}\"\n          echo \"Target: ${{ inputs.target_env }}\"\n          echo \"Time: $(date -u +%Y-%m-%dT%H:%M:%SZ)\"\n\n  deploy:\n    needs: approve\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Deploy canary\n        run: |\n          kubectl set image deployment\u002F${{ inputs.model_name }}-canary \\\n            model=${{ inputs.model_name }}:${{ inputs.model_version }} \\\n            -n ai-${{ inputs.target_env }}\n\n      - name: Wait for canary validation (15 min)\n        run: |\n          python -m canary.validate \\\n            --deployment ${{ inputs.model_name }}-canary \\\n            --namespace ai-${{ inputs.target_env }} \\\n            --duration 900 \\\n            --quality-threshold 0.85 \\\n            --error-rate-threshold 0.02\n\n      - name: Promote to full rollout\n        run: |\n          kubectl set image deployment\u002F${{ inputs.model_name }} \\\n            model=${{ inputs.model_name }}:${{ inputs.model_version }} \\\n            -n ai-${{ inputs.target_env }}\n          kubectl rollout status deployment\u002F${{ inputs.model_name }} \\\n            -n ai-${{ inputs.target_env }} --timeout=300s\n```\n\n## Evaluation Gate Thresholds\n\n```yaml\n# thresholds\u002Fquality.yaml\ngates:\n  groundedness:\n    metric: groundedness_score\n    min: 0.85\n    comparison: gte\n  task_success:\n    metric: task_success_rate\n    min: 0.90\n    comparison: gte\n  hallucination:\n    metric: hallucination_rate\n    max: 0.08\n    comparison: lte\n  regression:\n    metric: quality_delta_vs_baseline\n    min: -0.02\n    comparison: gte\n    description: \"Must not regress more than 2% vs current production\"\n\n# thresholds\u002Flatency.yaml\ngates:\n  p50_latency:\n    metric: latency_p50_ms\n    max: 800\n    comparison: lte\n  p95_latency:\n    metric: latency_p95_ms\n    max: 2000\n    comparison: lte\n  p99_latency:\n    metric: latency_p99_ms\n    max: 5000\n    comparison: lte\n  throughput:\n    metric: requests_per_second\n    min: 50\n    comparison: gte\n```\n\n## A\u002FB Testing Configuration\n\n```yaml\n# ab-test-config.yaml\napiVersion: gateway.ai\u002Fv1\nkind: ABTest\nmetadata:\n  name: model-comparison-q1\n  namespace: ai-production\nspec:\n  duration: 7d\n  traffic_split:\n    control:\n      model: gpt-4o-2024-08-06\n      weight: 70\n    treatment:\n      model: gpt-4o-2025-01-15\n      weight: 30\n  metrics:\n    primary:\n      - task_success_rate\n      - user_satisfaction_score\n    secondary:\n      - latency_p95\n      - cost_per_request\n      - hallucination_rate\n  guardrails:\n    auto_rollback_if:\n      - metric: task_success_rate\n        threshold: 0.80\n        window: 1h\n      - metric: hallucination_rate\n        threshold: 0.15\n        window: 30m\n  assignment:\n    strategy: sticky_user\n    hash_key: user_id\n```\n\n## Kubernetes Model Serving Deployment\n\n```yaml\n# model-serving-deployment.yaml\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: llm-inference\n  namespace: ai-production\n  labels:\n    app: llm-inference\n    model: gpt-4o\n    version: \"2025-01\"\nspec:\n  replicas: 3\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 1\n      maxUnavailable: 0\n  selector:\n    matchLabels:\n      app: llm-inference\n  template:\n    metadata:\n      labels:\n        app: llm-inference\n        model: gpt-4o\n      annotations:\n        prometheus.io\u002Fscrape: \"true\"\n        prometheus.io\u002Fport: \"8080\"\n        prometheus.io\u002Fpath: \"\u002Fmetrics\"\n    spec:\n      topologySpreadConstraints:\n        - maxSkew: 1\n          topologyKey: topology.kubernetes.io\u002Fzone\n          whenUnsatisfiable: DoNotSchedule\n          labelSelector:\n            matchLabels:\n              app: llm-inference\n      containers:\n        - name: model\n          image: registry.internal\u002Fvllm-server:0.4.1\n          args:\n            - \"--model=\u002Fmodels\u002Fcurrent\"\n            - \"--tensor-parallel-size=1\"\n            - \"--max-model-len=8192\"\n            - \"--gpu-memory-utilization=0.90\"\n          ports:\n            - containerPort: 8000\n              name: inference\n            - containerPort: 8080\n              name: metrics\n          resources:\n            requests:\n              cpu: \"4\"\n              memory: \"16Gi\"\n              nvidia.com\u002Fgpu: \"1\"\n            limits:\n              cpu: \"8\"\n              memory: \"32Gi\"\n              nvidia.com\u002Fgpu: \"1\"\n          readinessProbe:\n            httpGet:\n              path: \u002Fhealth\n              port: 8000\n            initialDelaySeconds: 60\n            periodSeconds: 10\n          livenessProbe:\n            httpGet:\n              path: \u002Fhealth\n              port: 8000\n            initialDelaySeconds: 120\n            periodSeconds: 30\n          volumeMounts:\n            - name: model-weights\n              mountPath: \u002Fmodels\n              readOnly: true\n            - name: config\n              mountPath: \u002Fetc\u002Fvllm\n      volumes:\n        - name: model-weights\n          persistentVolumeClaim:\n            claimName: model-weights-pvc\n        - name: config\n          configMap:\n            name: vllm-config\n      tolerations:\n        - key: nvidia.com\u002Fgpu\n          operator: Exists\n          effect: NoSchedule\n      nodeSelector:\n        gpu-type: a100\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: llm-inference\n  namespace: ai-production\nspec:\n  selector:\n    app: llm-inference\n  ports:\n    - name: inference\n      port: 8000\n      targetPort: 8000\n    - name: metrics\n      port: 8080\n      targetPort: 8080\n---\napiVersion: autoscaling\u002Fv2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: llm-inference-hpa\n  namespace: ai-production\nspec:\n  scaleTargetRef:\n    apiVersion: apps\u002Fv1\n    kind: Deployment\n    name: llm-inference\n  minReplicas: 2\n  maxReplicas: 10\n  metrics:\n    - type: Pods\n      pods:\n        metric:\n          name: llm_queue_depth\n        target:\n          type: AverageValue\n          averageValue: \"5\"\n    - type: Pods\n      pods:\n        metric:\n          name: gpu_utilization_percent\n        target:\n          type: AverageValue\n          averageValue: \"75\"\n  behavior:\n    scaleUp:\n      stabilizationWindowSeconds: 60\n      policies:\n        - type: Pods\n          value: 2\n          periodSeconds: 120\n    scaleDown:\n      stabilizationWindowSeconds: 300\n      policies:\n        - type: Pods\n          value: 1\n          periodSeconds: 300\n```\n\n## CI\u002FCD Design for AI Services\n\n- Build immutable containers with pinned dependencies and model hashes.\n- Use environment promotion: `dev -> stage -> prod`.\n- Fail deployment if:\n  - regression evals drop below baseline,\n  - safety tests exceed risk threshold,\n  - p95 latency exceeds SLO budget.\n- Store deployment evidence for audits (commit SHA, eval report, approver).\n\n## Operational SLOs\n\n| Signal | Target | Measurement Window |\n|--------|--------|--------------------|\n| Availability | 99.9% | 30-day rolling |\n| p95 Latency | \u003C 1200ms | 5-min buckets |\n| Cost per request | \u003C $0.05 | 1-hour average |\n| Task success rate | > 90% | 24-hour rolling |\n| Groundedness | > 85% | 24-hour rolling |\n\n## Platform Guardrails\n\n- Enforce tenant quotas and model allow-lists.\n- Require structured output contracts for automation paths.\n- Default to low-risk model settings for critical workflows.\n- Disable unconstrained tool execution in production.\n\n## Tooling Stack (Example)\n\n| Layer | Tools |\n|-------|-------|\n| Orchestration | Argo Workflows, GitHub Actions, Airflow |\n| Model Registry | MLflow, custom metadata DB |\n| Gateway | LiteLLM, Envoy-based API gateway |\n| Observability | OpenTelemetry + Prometheus + Grafana + Langfuse |\n| Policy | OPA\u002FRego for deployment and runtime checks |\n| Evaluation | RAGAS, custom eval harness, Promptfoo |\n| Serving | vLLM, TGI, Triton Inference Server |\n\n## Troubleshooting\n\n| Issue | Diagnosis | Resolution |\n|-------|-----------|------------|\n| Canary fails quality gate | Compare eval results with baseline | Adjust model config or revert version |\n| Deployment stuck in rollout | Check pod events and resource quotas | Fix resource limits or node availability |\n| A\u002FB test shows no significant difference | Verify traffic split and sample size | Extend test duration or increase treatment weight |\n| Model cold start too slow | Large model weight download | Use pre-cached PVCs or init containers |\n| Eval pipeline flaky | Non-deterministic model outputs | Set temperature=0 for evals, increase sample size |\n\n## Related Skills\n\n- ai-pipeline-orchestration (`ai-pipeline-orchestration`) - Orchestrate ingestion and inference workflows\n- agent-evals (`agent-evals`) - Build evaluation gates for releases\n- llm-gateway (`llm-gateway`) - Route and control LLM traffic\n- model-registry-governance (`model-registry-governance`) - Model lifecycle and approval workflows\n- ai-sre-incident-response (`ai-sre-incident-response`) - AI-specific incident response\n\n## Limitations\n\n- Guidance executes against real environments: confirm target, blast radius, and rollback plan before applying anything.\n- Never deploy to production without explicit approval. Docs-only import: upstream scripts and templates not bundled.\n\n### Example\n\n```bash\ngit status && git diff --stat\nkubectl diff -f manifest.yaml\n```\n\n> Adapted from [BagelHole\u002FDevOps-Security-Agent-Skills](https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills) (MIT); frontmatter, When to Use\u002FLimitations, and safety boundaries added for upstream compliance. Docs-only import: helper scripts and templates not bundled.\n","# LLMOps Platform Engineering\n\nDesign and operate an internal LLM platform that supports rapid experimentation without compromising reliability, cost, or compliance.\n\n## When to Use This Skill\n\n- Building an internal platform for teams to deploy and manage LLM-powered features\n- Designing CI\u002FCD pipelines that include model evaluation gates\n- Setting up A\u002FB testing infrastructure for model versions\n- Creating Kubernetes-based model serving infrastructure\n- Establishing governance workflows for model promotion\n\n## Prerequisites\n\n- Kubernetes cluster with GPU node pools (or cloud inference API access)\n- Container registry (Harbor, ECR, GCR, or ACR)\n- CI\u002FCD system (GitHub Actions, GitLab CI, or Argo Workflows)\n- Observability stack (Prometheus + Grafana + OpenTelemetry)\n- Model registry (MLflow or custom metadata store)\n\n## Outcomes\n\n- Standardized path from experiment to production\n- Safe model rollout with quality and safety gates\n- Repeatable infra modules for inference, vector DB, and observability\n- Clear ownership model across platform, app, and security teams\n\n## Reference Architecture\n\n1. **Control Plane**: model registry, prompt\u002Fversion catalog, policy checks, eval pipeline.\n2. **Data Plane**: inference gateway, vector database, cache, feature store.\n3. **Ops Plane**: telemetry, alerting, SLO dashboards, cost analytics.\n4. **Security Plane**: IAM boundaries, secret rotation, content filters, audit logs.\n\n## Model Promotion Pipeline\n\n```yaml\n# .github\u002Fworkflows\u002Fmodel-promotion.yaml\nname: Model Promotion Pipeline\non:\n  workflow_dispatch:\n    inputs:\n      model_name:\n        description: \"Model identifier\"\n        required: true\n      model_version:\n        description: \"Model version to promote\"\n        required: true\n      target_env:\n        description: \"Target environment\"\n        required: true\n        type: choice\n        options: [staging, production]\n\njobs:\n  evaluate:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Run quality evaluation suite\n        run: |\n          python -m evals.run \\\n            --model \"${{ inputs.model_name }}:${{ inputs.model_version }}\" \\\n            --suite quality \\\n            --output results\u002Fquality.json\n\n      - name: Run safety evaluation suite\n        run: |\n          python -m evals.run \\\n            --model \"${{ inputs.model_name }}:${{ inputs.model_version }}\" \\\n            --suite safety \\\n            --output results\u002Fsafety.json\n\n      - name: Run latency benchmark\n        run: |\n          python -m evals.benchmark \\\n            --model \"${{ inputs.model_name }}:${{ inputs.model_version }}\" \\\n            --concurrent-users 50 \\\n            --duration 300 \\\n            --output results\u002Flatency.json\n\n      - name: Gate check - quality\n        run: |\n          python -m evals.gate_check \\\n            --results results\u002Fquality.json \\\n            --threshold-file thresholds\u002Fquality.yaml\n\n      - name: Gate check - safety\n        run: |\n          python -m evals.gate_check \\\n            --results results\u002Fsafety.json \\\n            --threshold-file thresholds\u002Fsafety.yaml\n\n      - name: Gate check - latency\n        run: |\n          python -m evals.gate_check \\\n            --results results\u002Flatency.json \\\n            --threshold-file thresholds\u002Flatency.yaml\n\n      - name: Upload eval evidence\n        uses: actions\u002Fupload-artifact@v4\n        with:\n          name: eval-results-${{ inputs.model_version }}\n          path: results\u002F\n\n  approve:\n    needs: evaluate\n    runs-on: ubuntu-latest\n    environment: ${{ inputs.target_env }}\n    steps:\n      - name: Record approval\n        run: |\n          echo \"Approved by: ${{ github.actor }}\"\n          echo \"Model: ${{ inputs.model_name }}:${{ inputs.model_version }}\"\n          echo \"Target: ${{ inputs.target_env }}\"\n          echo \"Time: $(date -u +%Y-%m-%dT%H:%M:%SZ)\"\n\n  deploy:\n    needs: approve\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Deploy canary\n        run: |\n          kubectl set image deployment\u002F${{ inputs.model_name }}-canary \\\n            model=${{ inputs.model_name }}:${{ inputs.model_version }} \\\n            -n ai-${{ inputs.target_env }}\n\n      - name: Wait for canary validation (15 min)\n        run: |\n          python -m canary.validate \\\n            --deployment ${{ inputs.model_name }}-canary \\\n            --namespace ai-${{ inputs.target_env }} \\\n            --duration 900 \\\n            --quality-threshold 0.85 \\\n            --error-rate-threshold 0.02\n\n      - name: Promote to full rollout\n        run: |\n          kubectl set image deployment\u002F${{ inputs.model_name }} \\\n            model=${{ inputs.model_name }}:${{ inputs.model_version }} \\\n            -n ai-${{ inputs.target_env }}\n          kubectl rollout status deployment\u002F${{ inputs.model_name }} \\\n            -n ai-${{ inputs.target_env }} --timeout=300s\n```\n\n## Evaluation Gate Thresholds\n\n```yaml\n# thresholds\u002Fquality.yaml\ngates:\n  groundedness:\n    metric: groundedness_score\n    min: 0.85\n    comparison: gte\n  task_success:\n    metric: task_success_rate\n    min: 0.90\n    comparison: gte\n  hallucination:\n    metric: hallucination_rate\n    max: 0.08\n    comparison: lte\n  regression:\n    metric: quality_delta_vs_baseline\n    min: -0.02\n    comparison: gte\n    description: \"Must not regress more than 2% vs current production\"\n\n# thresholds\u002Flatency.yaml\ngates:\n  p50_latency:\n    metric: latency_p50_ms\n    max: 800\n    comparison: lte\n  p95_latency:\n    metric: latency_p95_ms\n    max: 2000\n    comparison: lte\n  p99_latency:\n    metric: latency_p99_ms\n    max: 5000\n    comparison: lte\n  throughput:\n    metric: requests_per_second\n    min: 50\n    comparison: gte\n```\n\n## A\u002FB Testing Configuration\n\n```yaml\n# ab-test-config.yaml\napiVersion: gateway.ai\u002Fv1\nkind: ABTest\nmetadata:\n  name: model-comparison-q1\n  namespace: ai-production\nspec:\n  duration: 7d\n  traffic_split:\n    control:\n      model: gpt-4o-2024-08-06\n      weight: 70\n    treatment:\n      model: gpt-4o-2025-01-15\n      weight: 30\n  metrics:\n    primary:\n      - task_success_rate\n      - user_satisfaction_score\n    secondary:\n      - latency_p95\n      - cost_per_request\n      - hallucination_rate\n  guardrails:\n    auto_rollback_if:\n      - metric: task_success_rate\n        threshold: 0.80\n        window: 1h\n      - metric: hallucination_rate\n        threshold: 0.15\n        window: 30m\n  assignment:\n    strategy: sticky_user\n    hash_key: user_id\n```\n\n## Kubernetes Model Serving Deployment\n\n```yaml\n# model-serving-deployment.yaml\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: llm-inference\n  namespace: ai-production\n  labels:\n    app: llm-inference\n    model: gpt-4o\n    version: \"2025-01\"\nspec:\n  replicas: 3\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 1\n      maxUnavailable: 0\n  selector:\n    matchLabels:\n      app: llm-inference\n  template:\n    metadata:\n      labels:\n        app: llm-inference\n        model: gpt-4o\n      annotations:\n        prometheus.io\u002Fscrape: \"true\"\n        prometheus.io\u002Fport: \"8080\"\n        prometheus.io\u002Fpath: \"\u002Fmetrics\"\n    spec:\n      topologySpreadConstraints:\n        - maxSkew: 1\n          topologyKey: topology.kubernetes.io\u002Fzone\n          whenUnsatisfiable: DoNotSchedule\n          labelSelector:\n            matchLabels:\n              app: llm-inference\n      containers:\n        - name: model\n          image: registry.internal\u002Fvllm-server:0.4.1\n          args:\n            - \"--model=\u002Fmodels\u002Fcurrent\"\n            - \"--tensor-parallel-size=1\"\n            - \"--max-model-len=8192\"\n            - \"--gpu-memory-utilization=0.90\"\n          ports:\n            - containerPort: 8000\n              name: inference\n            - containerPort: 8080\n              name: metrics\n          resources:\n            requests:\n              cpu: \"4\"\n              memory: \"16Gi\"\n              nvidia.com\u002Fgpu: \"1\"\n            limits:\n              cpu: \"8\"\n              memory: \"32Gi\"\n              nvidia.com\u002Fgpu: \"1\"\n          readinessProbe:\n            httpGet:\n              path: \u002Fhealth\n              port: 8000\n            initialDelaySeconds: 60\n            periodSeconds: 10\n          livenessProbe:\n            httpGet:\n              path: \u002Fhealth\n              port: 8000\n            initialDelaySeconds: 120\n            periodSeconds: 30\n          volumeMounts:\n            - name: model-weights\n              mountPath: \u002Fmodels\n              readOnly: true\n            - name: config\n              mountPath: \u002Fetc\u002Fvllm\n      volumes:\n        - name: model-weights\n          persistentVolumeClaim:\n            claimName: model-weights-pvc\n        - name: config\n          configMap:\n            name: vllm-config\n      tolerations:\n        - key: nvidia.com\u002Fgpu\n          operator: Exists\n          effect: NoSchedule\n      nodeSelector:\n        gpu-type: a100\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: llm-inference\n  namespace: ai-production\nspec:\n  selector:\n    app: llm-inference\n  ports:\n    - name: inference\n      port: 8000\n      targetPort: 8000\n    - name: metrics\n      port: 8080\n      targetPort: 8080\n---\napiVersion: autoscaling\u002Fv2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: llm-inference-hpa\n  namespace: ai-production\nspec:\n  scaleTargetRef:\n    apiVersion: apps\u002Fv1\n    kind: Deployment\n    name: llm-inference\n  minReplicas: 2\n  maxReplicas: 10\n  metrics:\n    - type: Pods\n      pods:\n        metric:\n          name: llm_queue_depth\n        target:\n          type: AverageValue\n          averageValue: \"5\"\n    - type: Pods\n      pods:\n        metric:\n          name: gpu_utilization_percent\n        target:\n          type: AverageValue\n          averageValue: \"75\"\n  behavior:\n    scaleUp:\n      stabilizationWindowSeconds: 60\n      policies:\n        - type: Pods\n          value: 2\n          periodSeconds: 120\n    scaleDown:\n      stabilizationWindowSeconds: 300\n      policies:\n        - type: Pods\n          value: 1\n          periodSeconds: 300\n```\n\n## CI\u002FCD Design for AI Services\n\n- Build immutable containers with pinned dependencies and model hashes.\n- Use environment promotion: `dev -> stage -> prod`.\n- Fail deployment if:\n  - regression evals drop below baseline,\n  - safety tests exceed risk threshold,\n  - p95 latency exceeds SLO budget.\n- Store deployment evidence for audits (commit SHA, eval report, approver).\n\n## Operational SLOs\n\n| Signal | Target | Measurement Window |\n|--------|--------|--------------------|\n| Availability | 99.9% | 30-day rolling |\n| p95 Latency | \u003C 1200ms | 5-min buckets |\n| Cost per request | \u003C $0.05 | 1-hour average |\n| Task success rate | > 90% | 24-hour rolling |\n| Groundedness | > 85% | 24-hour rolling |\n\n## Platform Guardrails\n\n- Enforce tenant quotas and model allow-lists.\n- Require structured output contracts for automation paths.\n- Default to low-risk model settings for critical workflows.\n- Disable unconstrained tool execution in production.\n\n## Tooling Stack (Example)\n\n| Layer | Tools |\n|-------|-------|\n| Orchestration | Argo Workflows, GitHub Actions, Airflow |\n| Model Registry | MLflow, custom metadata DB |\n| Gateway | LiteLLM, Envoy-based API gateway |\n| Observability | OpenTelemetry + Prometheus + Grafana + Langfuse |\n| Policy | OPA\u002FRego for deployment and runtime checks |\n| Evaluation | RAGAS, custom eval harness, Promptfoo |\n| Serving | vLLM, TGI, Triton Inference Server |\n\n## Troubleshooting\n\n| Issue | Diagnosis | Resolution |\n|-------|-----------|------------|\n| Canary fails quality gate | Compare eval results with baseline | Adjust model config or revert version |\n| Deployment stuck in rollout | Check pod events and resource quotas | Fix resource limits or node availability |\n| A\u002FB test shows no significant difference | Verify traffic split and sample size | Extend test duration or increase treatment weight |\n| Model cold start too slow | Large model weight download | Use pre-cached PVCs or init containers |\n| Eval pipeline flaky | Non-deterministic model outputs | Set temperature=0 for evals, increase sample size |\n\n## Related Skills\n\n- ai-pipeline-orchestration (`ai-pipeline-orchestration`) - Orchestrate ingestion and inference workflows\n- agent-evals (`agent-evals`) - Build evaluation gates for releases\n- llm-gateway (`llm-gateway`) - Route and control LLM traffic\n- model-registry-governance (`model-registry-governance`) - Model lifecycle and approval workflows\n- ai-sre-incident-response (`ai-sre-incident-response`) - AI-specific incident response\n\n## Limitations\n\n- Guidance executes against real environments: confirm target, blast radius, and rollback plan before applying anything.\n- Never deploy to production without explicit approval. Docs-only import: upstream scripts and templates not bundled.\n\n### Example\n\n```bash\ngit status && git diff --stat\nkubectl diff -f manifest.yaml\n```\n\n> Adapted from [BagelHole\u002FDevOps-Security-Agent-Skills](https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills) (MIT); frontmatter, When to Use\u002FLimitations, and safety boundaries added for upstream compliance. Docs-only import: helper scripts and templates not bundled.\n",{"name":5,"risk":38,"source":48,"license":14,"category":49,"metadata":50,"date_added":53,"description":7,"source_repo":54,"source_type":33,"compatibility":55,"license_source":56},"https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills","devops",{"author":51,"version":52},"devops-skills","1.0","2026-09-20","BagelHole\u002FDevOps-Security-Agent-Skills","Requires the relevant platform CLIs (kubectl, helm, terraform, git, CI runners) and authorized access to the target environment. Docs-only; helper scripts and templates not bundled.","https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\u002Fblob\u002Fmain\u002FLICENSE","f3312ba749561b6159f477dbfc9313c875d40a56",".agents\u002Fskills_archive\u002Fllmops-platform-engineering","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612","2026-10-25 23:50:58",{"source":8,"skillName":5,"commands":63,"prompt":73,"zipAvailable":74},[64,67,70],{"tool":65,"command":66},"npx","npx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill llmops-platform-engineering",{"tool":68,"command":69},"bunx","bunx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill llmops-platform-engineering",{"tool":71,"command":72},"pnpm","pnpm dlx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill llmops-platform-engineering","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fllmops-platform-engineering\u002FSKILL.md",true,[],[77,96,119,144,172,196],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":84,"publishedAt":43},"01M6Q0FA5FZ410Z33Z3TFQ4DBA","zero-trust","Implement zero-trust network architecture. Configure identity-based access, micro-segmentation, and continuous verification. Use when implementing modern security architectures.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzero-trust\u002FSKILL.md",[83],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[85,86,87,88,89,90,79,91,29,30,92,32,33,34,93,38,94,39,40,95],"ZeRO","trust","zero trust","architecture","assessment","verification","segmentation","configure","active","scope","implementing",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":43},"01M6Q0F1YZJW3KX5FBKEVZ8CV4","zcode-delegate","Delegate coding tasks to the Z.AI ZCode CLI only when the user explicitly requests it, while the orchestrator retains review and landing responsibility.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzcode-delegate\u002FSKILL.md",[],[103,104,105,106,107,108,109,110,111,31,112,113,114,32,115,33,116,117,38,118],"delegate","zcode","zcode delegate","review","cli","orchestration","tasks","run","Bash","node","read","orchestrator","files","desktop app","app","agent-orchestration",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":43},"01M6Q0ETK41VGNMYEXW0T00AJN","youtube-transcript","Fetch YouTube transcripts through DeepAPI or local fallback tooling and save clean text output.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript\u002FSKILL.md",[],[126,127,128,129,130,131,132,133,134,135,136,137,138,33,34,139,140,141,142,143],"transcript","youtube transcript","youtube","safe","github","codex","research","license","https","text","fetch","tooling","clean","local","output","deepapi","youtube transcripts","blob",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":161,"publishedAt":43},"01M6Q0EPPH2PVMDW40017F8WX0","youtube-transcript-skills","Fetch YouTube video transcripts, search videos\u002Fchannels, browse channels, and extract playlists via the getyoutubetranscript.com API - free tier, no card required.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript-skills\u002FSKILL.md",[150,153,156],{"categoryNo":151,"categoryName":152,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":154,"categoryName":155,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":157,"categoryName":158,"taxonomyType":159,"taxonomyTypeDesc":160},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[126,127,128,162,129,163,130,131,133,164,165,166,167,136,168,33,34,169,170,171],"youtube transcript skills","gemini","search","api","Video","browse","api-integration","free","card","channels",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":182,"publishedAt":43},"01M6Q0EAB96PX83W5PTE8A0R8D","youtube-notetaker","Turn YouTube talks into local study notes with slides, transcripts, editable annotations, and a markdown-backed viewer.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-notetaker\u002FSKILL.md",[178,181],{"categoryNo":179,"categoryName":180,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":154,"categoryName":155,"taxonomyType":20,"taxonomyTypeDesc":21},[128,183,184,107,129,185,186,187,188,133,166,189,190,191,192,34,193,139,194,195],"youtube notetaker","notetaker","workflow","official","notes","code","markdown","slides","annotations","README","study","dair-academy","viewer",{"skillNo":197,"name":198,"nameZh":6,"description":199,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":200,"categories":201,"keywords":203,"publishedAt":43},"01M6Q0E55F0GW5MX48V8HXS8B5","youtube-full","Fetch YouTube transcripts, search videos, browse channels, and extract playlists via TranscriptAPI — no yt-dlp, no Google API key, works from any cloud server.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-full\u002FSKILL.md",[202],{"categoryNo":151,"categoryName":152,"taxonomyType":20,"taxonomyTypeDesc":21},[204,128,205,206,129,163,164,207,208,165,166,167,136,209,168,33,34,169,210,142],"youtube full","full","google","server","dlp","credits","automatic"]