Skip to content

DeepSeek Harness 引擎

架构

Portal Chat (Vue 3) → Gateway (:8010) → engine-deepseek-{id}:8649 → 平台 LiteLLM 代理 → DeepSeek v4 Flash

                  DNS 命名规范路由 (X-Agent-ID 头)

DeepSeek Harness 引擎把 dsh CLI(npm 包 @deepseek-ai/dsh,Cordis 插件架构) 包装为 OpenAI 兼容的 HTTP/SSE 服务:容器内 server.py 接收请求,spawn dsh --profile veyraos-sdk 子进程(SDK profile 暴露 newline-delimited JSON-RPC stdio 通道),把 dsh 的 session.event 流式事件翻译成 OpenAI SSE 流给 gateway。 模型不直连 DeepSeek 官方 API,统一经平台 LiteLLM 代理(OpenAI 兼容 endpoint + per-instance key)。

容器构建

  • 基础镜像: python:3.11-slim(终段)
  • 构建段: node:20 — 全局安装 @deepseek-ai/dsh(锁版本 0.1.2-rc.1
    • 沙箱插件 @veyraos/opensandbox-shell
  • 运行时: FastAPI + uvicorn + pyyaml,内置 server.py / entrypoint.sh / profile 模板 / engines/_shared/profile_isolation.py
  • 入口: entrypoint.sh — 校验 dsh CLI、检测沙箱开关、启动 API server(端口 8649)

API 面

端点说明
GET /health健康检查
POST /v1/chat/completionsOpenAI 兼容响应:默认/显式 stream:true 为 SSE 流(delta + 工具进度帧 + usage);显式 stream:false 聚合为 chat.completion JSON
POST/GET /v1/sessions创建 / 列举 session
GET /v1/sessions/{sid}/messages读 session 历史
DELETE/PATCH /v1/sessions/{sid}删 / 改名 session
POST /v1/sessions/{sid}/stop停止该 session 正在运行的推理(幂等)
GET /v1/models当前注入的模型列表
GET /v1/files列举 profile 默认工作区目录
GET /v1/files/content读取工作区文件内容(≤1MB 文本)

SSE 输出契约与 claudecode 引擎一致:delta 帧(content / reasoning_content)、 p 工具进度帧(running→success/error)、末帧 usage、[DONE]、30s keepalive。

多用户隔离

与 claudecode 同机制(engines/_shared/profile_isolation.py):

per-profile UID(20000-29999)  ← useradd -r -M -u {uid} -d {profile_dir} deepseek-{name[:25]}
+ chown -R {uid}:{uid} profile 目录
+ chmod 0700 profile 目录
+ spawn dsh 时 preexec_fn 降权
+ cwd = HOME = /opt/data/profiles/{name}
+ DSH_HOME = {profile_dir}/.dsh  ← dsh session 日志/settings 按 profile 隔离

沙箱(可选)

  • 开启条件:Pod env 同时存在 OPENSANDBOX_SERVER_URLOPENSANDBOX_API_KEY
  • 开启后 dsh 的 shell 工具执行经插件 @veyraos/opensandbox-shell 转发到 OpenSandbox server(建 ephemeral 沙箱 → 执行命令 → 命令结束删除沙箱)
  • 未开启则 dsh 使用本地 provider(降权 uid 执行),沙箱插件不加载

环境变量

变量用途来源
API_SERVER_KEY引擎 API KeyK8s secret
API_SERVER_PORT监听端口(默认 8649)固定
OPENAI_BASE_URL平台 LiteLLM 代理地址平台注入
OPENAI_API_KEYper-instance 模型 Key平台注入
DSH_MODEL默认模型名(deepseek-v4-flash)平台注入
OPENSANDBOX_SERVER_URL沙箱服务地址平台注入(可选)
OPENSANDBOX_API_KEY沙箱服务 Key平台注入(可选)
OPENSANDBOX_IMAGE沙箱镜像(默认 ubuntu:22.04)平台注入(可选)

请求头 X-Ua-Profile 指定 profile(sk- API Key 无登录态调用时 gateway 自动按实例 派生 {agent_short}-default 默认 profile);X-Ua-Model-Config 可每请求注入 base_url / api_key / default_model,优先于 Pod env。

人设注入:请求体 messages 里的 system 消息经 DSH_SYSTEM_PROMPT env 进入 dsh 原生 system prompt(sdk-minimal bundle 的 system-prompt 插件读取该 env),不并入用户消息。

基于内网部署的企业级 AI 智能体平台