Продвинутый

DeepSeek Harness: Всё как Плагин — Архитектура и Практика

Алексей Кузнецов
Алексей Кузнецов
Системный администратор31 октября 2026 г.11 мин чтения

Разбираем DeepSeek Harness: как всё в системе становится плагином, примеры, архитектура и практические рекомендации для разработчиков.

DeepSeek Harness: Всё как Плагин — Архитектура и Практика

Разбираем DeepSeek Harness: как всё в системе становится плагином, примеры, архитектура и практические рекомендации для разработчиков.

Что такое DeepSeek Harness и его концепция

DeepSeek Harness — это фреймворк, позволяющий рассматривать любые компоненты системы как плагины. Он не навязывает жёсткую структуру, а задаёт contract‑based подход: каждый плагин объявляет свои возможности, а остальные части работают с ними через единый интерфейс. Такой подход упрощает расширение, тестирование и масштабирование как в небольших проектах, так и в крупных распределённых системах.

Во-первых, DeepSeek Harness делает акцент на изоляции: плагины запускаются в отдельном процессе или контейнере, что гарантирует предсказуемость и упрощает отладку. Во‑вторых, конфигурация декларативна — описывается в YAML‑файле, где указываются зависимости, точки входа и параметры. Это позволяет управлять жизненным циклом плагина без изменения кода.

Плагин как фундаментальный элемент

В DeepSeek Harness любой «модуль» — это плагин. Это могут быть AI‑агенты, сервисы ввода‑вывода, адаптеры к базе данных или даже простые скрипты‑обёртки. Плагин обязан предоставить метаданные (name, version, entrypoint) и реализовать интерфейс, объявленный в ядре фреймворка.

Пример регистрации плагина в манифесте plugin.yaml:

yaml
name: deepseek-llm
version: "1.2.0"
entrypoint: "bin/llm-server"
dependencies:
  - rust-runtime >=1.70
  - tokio >=1.30

Команда для установки и активации плагина выглядит так:

bash
deepseek plugin install ./plugins/deepseek-llm
deepseek plugin enable deepseek-llm

После включения плагин автоматически регистрирует свою точку входа в общую сеть сервисов, что видно в логах:

[2025-09-26 10:15:42] INFO  Plugin 'deepseek-llm' loaded (version 1.2.0)
[2025-09-26 10:15:42] INFO  Registering endpoint /v1/generate

Ссылка на практику использования подобных подходов в реальных проектах: Набор навыков для работы с AI-агентами.

Архитектурные принципы

DeepSeek Harness опирается на несколько ключевых принципов, которые делают его привлекательным для инженеров, ценящих предсказуемость и поддерживаемость.

  1. Модульность — вся система собирается из независимых плагинов. Каждый из них отвечает только за свою задачу, что упрощает тестирование и замену.
  2. Декларативность — всё, что влияет на поведение системы, описывается в конфигурационных файлах, а не в коде. Это позволяет менять параметры без перекомпиляции.
  3. Изоляция процессов — каждый плагин работает в отдельном контейнере или подпроцессе, что защищает основной сервис от падений отдельных компонентов.
  4. Hot‑reload — изменения в конфигурации или в коде плагина могут быть применены без перезапуска всего приложения, что ускоряет итеративную разработку.

Пример типичной конфигурации harness.yaml, где перечислены плагины и их параметры:

yaml
services:
  - name: llm-inference
    plugin: deepseek-llm
    resources:
      cpu: 2
      memory: 4G
    env:
      MODEL_PATH: /models/llm.bin
      LOG_LEVEL: info

  - name: data-ingest
    plugin: file-ingest
    schedule: "*/5 * * * *"
    inputs:
      - type: s3
        bucket: my-data-bucket
        prefix: raw/

Эти правила позволяют построить гибкую архитектуру, где каждый элемент можно масштабировать отдельно, а при необходимости добавить новый плагин, достаточно лишь разместить его в репозитории и указать в конфиге. Такой подход согласуется с рекомендациями из статьи Навыки реальных инженеров: практические практики из .agents о важности чёткой границы ответственности за отдельные части системы.

Как реализовать плагин в DeepSeek Harness

### Создание базового плагина

Во-первых, структура плагина проста: каталог с манифестом и исполняемым файлом‑handler. Манифест описывает метаданные — название, версию, список зависимостей. Далее создаём простой обработчик, который будет получать запрос от Harness и возвращать результат.

yaml
# dsh-plugin.yaml
name: "example-hello"
version: "1.0.0"
description: "Простой плагин, возвращающий статический ответ"
author: "Alexey Kuznetsov"
dependencies:
  - "github.com/deepseek/harness-sdk@v1"
go
// main.go
package main

import (
	"encoding/json"
	"github.com/deepseek/harness-sdk/pkg/logger"
)

type Response struct {
	Message string `json:"message"`
}

func handler(ctx logger.Context) (any, error) {
	resp := Response{Message: "Привет, мир!"}
	return resp, nil
}

func main() {
	// Инициализация контекста и регистрация обработчика
	_ = logger.New()
	_ = logger.RegisterHandler("example-hello", handler)
	// Дальнейшая логика запуска сервера – в рамках Harness
}
bash
# Структура проекта
mkdir -p example-hello/{cmd,internal}
cp dsh-plugin.yaml example-hello/
go mod init example-hello
go get github.com/deepseek/harness-sdk@v1
go build -o bin/example-hello internal/main.go

Сборка и запуск выполняются в контейнере, который Harness поднимает автоматически. Важно, чтобы бинарник был упакован в образ с тем же именем, что указано в манифесте (example-hello).

Если нужно протестировать локально, удобно использовать утилиту dsh-cli:

bash
dsh-cli run --plugin example-hello --input '{}'

Набор навыков для работы с AI-агентами описывает подходы к тестированию подобных плагинов в изоляции.

### Интеграция с существующими сервисами

Справедливой интеграции достигается через объявление плагина в конфигурации Harness и привязку его к нужному пайплайну. Пример конфигурации для подключения к существующему API‑сервису выглядит так:

yaml
# harness-config.yaml
plugins:
  - name: "example-hello"
    version: "1.0.0"
    endpoint: "https://my-service.example.com/api"
    credentials:
      type: "api_key"
      key: "sk_1234567890abcdef"
bash
# Регистрация плагина через CLI
dsh plugin register --file harness-config.yaml

С практической точки зрения, после регистрации плагин становится доступен в любом этапе пайплайна через шаг Run Plugin. Пример шага в YAML‑манифесте:

yaml
steps:
  - name: "Execute hello plugin"
    plugin: "example-hello"
    args:
      - "--mode=test"
    timeout: "2m"

Если сервис уже развернут в Kubernetes, удобно использовать kubectl внутри плагина:

yaml
# Пример кода внутри handler'а
import "k8s.io/client-go/kubernetes"
import "k8s.io/client-go/tools/clientcmd"

func getK8sClient() (kubernetes.Interface, error) {
    kubeconfig, err := kubernetes.InClusterConfig()
    if err != nil {
        return nil, err
    }
    return kubernetes.NewForConfig(kubeconfig)
}

Такой подход позволяет переиспользовать уже существующие сервисы без изменения их кода.

Для более сложных сценариев, когда требуется взаимодействие с несколькими сервисами, удобно собрать конфигурацию в один YAML‑файл и передать его в плагин через переменные окружения:

yaml
# env.yaml
HARNESS_API_URL: "https://harness.example.com/api"
HARNESS_API_KEY: "sk_harness_key"
bash
export $(cat env.yaml | xargs)
dsh plugin run --config env.yaml --input '{"action":"sync"}'

Simantic: симуляция прошивок для AI-агентов показывает, как можно использовать аналогичные подходы для моделирования работы плагинов в изолированных средах.

Автономная разработка на Rust с помощью Claw-Code — пример, как писать собственные обработчики на Rust, если требуется высокая производительность.

Во-первых, базовый плагин — это минимальный, проверяемый набор кода, который уже проходит тесты в CI. Во-вторых, интеграция с существующими сервисами требует корректного описания endpoint‑ов, аутентификации и параметров запуска. При соблюдении этих правил плагин будет работать предсказуемо, а инфраструктура останется стабильной годами.

Практические примеры использования

Автоматизация задач через плагины

Во-первых, DeepSeek Harness позволяет превратить любую обычную утилиту в плагин, который вызывается из скриптов или CI‑pipeline.
Пример — плагин, который создаёт резервную копию базы PostgreSQL на TrueNAS 48 ТБ хранилище.

bash
# main.tf — описание плагина
terraform {
  required_providers {
    deepseek = {
      source  = "deepseek/dsh-plugin"
      version = "~> 1.2"
    }
  }
}

provider "deepseek" {
  # токен доступа к Harness
  api_token = var.harness_token
}

resource "deepseek_plugin" "pg_backup" {
  name        = "pg-backup"
  description = "Создаёт дамп PostgreSQL и отправляет его на TrueNAS"
  runtime     = "bash"

  # скрипт, который будет выполнен как плагин
  entrypoint = <<-EOT
    #!/usr/bin/env bash
    set -euo pipefail

    # 1. формируем имя дампа
    TIMESTAMP=$(date +%Y%m%d_%H%M%S)
    FILE="/tmp/pg_${TIMESTAMP}.dump"

    # 2. делаем дамп
    pg_dump -U ${var.pg_user} -F c -b -v -f "${FILE}" ${var.pg_db}

    # 3. копируем на TrueNAS (NFS‑монтировка /mnt/truenas)
    cp "${FILE}" /mnt/truenas/backups/postgres/
  EOT

  variables = {
    pg_user  = var.pg_user
    pg_db    = var.pg_db
  }
}

Справочно: в статье «Навыки реальных инженеров: практические практики из .agents» (ссылка) описаны подходы к написанию таких скриптов.

С практической точки зрения, после того как плагин объявлен, его можно вызвать из любого CI‑скрипта:

bash
# .github/workflows/backup.yml
name: PostgreSQL backup

on:
  schedule:
    - cron: '0 2 * * *'   # каждый день в 02:00

jobs:
  backup:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        uses: actions/checkout@v3

      - name: Run DeepSeek Harness plugin
        run: |
          terraform init
          terraform apply -auto-approve

Интеграция с CI/CD и мониторингом

Согласно набору навыков для работы с AI‑агентами (ссылка), DeepSeek Harness удобно встраивается в GitHub Actions, GitLab CI или Jenkins.

Пример — пайплайн, который после успешного деплоя Kubernetes‑манифеста запускает плагин, проверяющий доступность сервиса через curl и отправляющий метрику в Prometheus.

yaml
# .gitlab-ci.yml
stages:
  - deploy
  - test
  - monitor

deploy:
  stage: deploy
  script:
    - kubectl apply -f k8s/deployment.yaml
  artifacts:
    paths:
      - k8s/

test:
  stage: test
  script:
    - |
      # Ждём, пока сервис станет доступен
      for i in {1..10}; do
        curl -sSf http://my-service.local/health && break
        sleep 5
      done
    - echo "Сервис готов к тестированию"
  needs: ["deploy"]

monitor:
  stage: monitor
  script:
    - |
      # Запускаем плагин, который отправляет метрику в Prometheus
      deepseek plugin run pg-health-check --prometheus-url http://prometheus:9090
  needs: ["test"]
  only:
    - main

В этом примере плагин pg-health-check (не показан) собирает метрики response_time и error_rate, после чего делает curl‑запрос к эндпоинту /health. Если метрика превышает порог, CI‑pipeline падает, что гарантирует предсказуемость работы сервиса.

Для более глубокого мониторинга рекомендуется включить экспорт метрик в Prometheus через встроенный /metrics‑эндпоинт плагина, как описано в статье «Simantic: симуляция прошивок для AI‑агентов» (ссылка).

Таким образом, DeepSeek Harness сочетает удобство плагин‑ориентированного доступа к любой логике с полноценной интеграцией в современные цепочки CI/CD и системами мониторинга, что делает его практичным инструментом для разработчиков, работающих с кластерами и инфраструктурой домашних серверов.

Ограничения и рекомендации по эксплуатации

### Потенциальные конфликты и безопасность

Во-первых, плагины DeepSeek Harness загружаются в общем процессе, поэтому конфликт версий или несовместимых зависимостей может привести к падению всего сервиса. С практической точки зрения важно фиксировать точные версии плагинов в манифесте и проверять их совместимость перед запуском.

Если мы посмотрим на пример docker‑compose.yml, где определены несколько плагинов, видно, что без указания версии может произойти неожиданный переход на последнюю стабильную сборку,breaks‑совместимость:

yaml
version: "3.9"
services:
  harness:
    image: deepseek/harness:latest
    ports:
      - "8080:8080"
    volumes:
      - ./plugins:/app/plugins
    environment:
      - PLUGINS_DIR=/app/plugins
    restart: unless-stopped

Чтобы избежать конфликтов, рекомендуется явно указать версии плагинов в отдельном файле plugins/manifest.json:

json
{
  "plugins": [
    {
      "name": "deepseek-llm",
      "version": "1.4.2"
    },
    {
      "name": "deepseek-orchestrator",
      "version": "2.1.0"
    }
  ]
}

Команда проверки версии выглядит так:

bash
docker run --rm deepseek/harness:1.4.2 manifest list

Если плагин использует общие переменные окружения, лучше изолировать их с помощью пользовательских неймспейсов и ограниченных возможностей контейнера. Например, запуск с флагом --security-opt no-new-privileges и удалением лишних возможностей:

bash
docker run -d \
  --name deepseek-plugin \
  --security-opt no-new-privileges \
  --cap-drop ALL \
  --security-opt seccomp=./seccomp.json \
  deepseek/harness:1.4.2

Для повышения предсказуемости применяйте AppArmor профиль, если он доступен в вашей ОС. Это уменьшит риск эскалации привилегий, если плагин будет скомпрометирован.

Ссылка на практические рекомендации из материалов проекта: Навыки реальных инженеров: практические практики из .agents.

### Поддержка и обновления

С практической точки зрения обновления плагинов DeepSeek Harness требуют тщательного планирования, иначе можно нарушить предсказуемость работы всей системы. Рекомендуется использовать фиксированные версии в docker‑compose.yml и проверять изменения в отдельном стенде перед применением в продакшн.

Пример обновления плагина без простоя:

bash
# Сначала скачиваем новую версию
docker compose pull deepseek/harness-plugin:2.3.1

# Затем перезапускаем только сервис плагина
docker compose up -d deepseek/harness-plugin

Для отката к предыдущей версии достаточно указать нужный тег:

bash
docker compose down
docker compose up -d deepseek/harness-plugin:2.2.5

В CI‑pipeline можно добавить шаг, который автоматически проверяет changelog и запускает набор тестов в изолированном контейнере. Это позволяет убедиться, что новая версия не нарушает работу других плагинов.

Если в вашем проекте используется несколько нод Proxmox, удобно применять canary‑деплой: обновляйте один узел, проверяйте метрики (Prometheus, Grafana) и только после подтверждения стабильности переключайте остальные ноды.

Ссылка на примеры автоматизации обновлений: Автономная разработка на Rust с помощью Claw-Code.

Для более детального руководства по поддержке AI‑агентов см. Набор навыков для работы с AI-агентами.

Часто задаваемые вопросы

Как DeepSeek Harness обеспечивает изоляцию плагинов и почему это важно для стабильности системы?

Плагины запускаются в отдельном процессе или контейнере, что предотвращает падение одного модуля от влияния на остальные части системы. Изоляция упрощает отладку, поскольку логи и метрики привязаны к конкретному процессу. При сбое плагина остальные сервисы продолжают работу без перезапуска. Это повышает предсказуемость и упрощает масштабирование.

Что требуется в YAML‑манифесте плагина для его корректной регистрации и как выглядит пример?

В манифесте указываются обязательные метаданные — name, version, entrypoint, а также список зависимостей. Пример из статьи показывает плагин deepseek-llm с указанием версии, пути к бинарнику и зависимостей rust-runtime и tokio. Эти сведения позволяют системе загрузить плагин и связать его с нужными ресурсами. Зависимости задаются с оператором >=, что гарантирует совместимость.

Какие команды используются для установки и активации плагина, и как можно проверить, что он успешно загружен?

Для установки используется deepseek plugin install <path>, а для включения — deepseek plugin enable <name>. После выполнения в логах появляется строка вида [...] INFO Plugin 'deepseek-llm' loaded (version 1.2.0). Проверка состояния возможна через deepseek plugin list, которая показывает статус активных и отключенных плагинов. Эти команды позволяют управлять жизненным циклом без изменения кода.

Как DeepSeek Harness определяет точки входа плагина и какие типичные сценарии использования этого подхода?

Точка входа объявляется в манифесте в поле entrypoint и регистрируется в общем сервисе после загрузки плагина. Это позволяет другим компонентам обращаться к функции через единый API, например, вызвать /v1/generate у LLM‑плагина. Типичные сценарии включают интеграцию AI‑агентов, адаптеров к базе данных или скриптов‑обёрток, которые могут быть подменены без изменения основной системы. Декларативная конфигурация упрощает добавление новых возможностей в продакшн.

Поделиться:TelegramX / TwitterVK

Читайте также