DeepSeek Harness 到底值不值得你上?我把它的内核扒了一遍
DeepSeek Harness å°åºå¼ä¸å¼å¾ä½ ä¸ï¼ææå®çå æ ¸æäºä¸é
æ¡è¥¿è¥¿å 2026-08-19 0 é 读7åéDeepSeek Harness å°åºå¼ä¸å¼å¾ä½ ä¸ï¼ææå®çå æ ¸æäºä¸é
æè¿ DeepSeek 弿ºç Harnessï¼ä¸ç§° dshï¼å·å±äºãæäººè¯´å®æ¯ Claude Code å¹³æ¿ï¼æäººè¯´åæ¯å¥å£³ãä½ç»å¤§å¤æ°æç« åå¨ä¸ä¸ªå½ä»¤å°±ç»æäºï¼npx @deepseek-ai/dsh webã
ææå®æ¹ææ¡£åæºç æ¶ææäºä¸éï¼ç»è®ºæ¯ï¼å®å¼ä¸å¼å¾ä¸ï¼åå³äºä½ æ¯åªä¸ç±»äººãæ¬æä¸æå®è£ ï¼åªè®²å®å°åºå¨è§£å³ä»ä¹é®é¢ï¼ä»¥ååªç±»äººè¯¥è®¤ççãåªç±»äººå 嫿¥ã
30 ç§éè§ï¼dsh = ä¸ä¸ªæ Agent è¿è¡æ¶åæå¯ç»ååºç¡è®¾æ½çæ¡æ¶ãå æ ¸ Cordis ç¨ãæä»¶ + å ±äº«ä¸ä¸æ + ç±»ååäºä»¶ + å¯éå¯ä½ç¨ãåä»¶å¥å®ç°æ¶ç©ºå¯ç»åï¼å®çææéæ¯ Trajectory å¯å®¡è®¡ï¼æ¨¡åçå°çé½è½ä»æ¥å¿é建ï¼ãç»è®ºä¸æ¯ã好ä¸å¥½ç¨ãï¼èæ¯ãä½ å±äºåªä¸ç±»äººãã
ä¸ãå å»é ï¼ä½ æ©å°±å¨ç¨"Harness"äº
å¾å¤äººæ dsh 彿"åä¸ä¸ª AI è天æ¡"ï¼è¿æ¯è¯¯è§£ãdsh ç宿¹å ¬å¼åªæä¸å¥è¯ï¼
Agent = Model + Harness
模ååªè´è´£æ¨çãçæ£å³å®ä¸ä¸ª Agent è½ä¸è½å¹²æ´»çæ¯ Harness è¿ä¸å±ï¼å®ç®¡ä¸ä¸ææä¹æ¼ãå·¥å ·æä¹è°ãå¨åªæ§è¡ãè¿ç¨å´©äºæä¹æ¢å¤ãå Agent æä¹è°åº¦ã
åä¸ä¸ªæ¨¡åï¼å¥å¨ä¸åç Harness ä¸ï¼è¡¨ç°ä¼å·®å¾å¤ã宿¹ææ¡£æç¡®åäº Harness è³å°è¦åçä¸é¢è¿å 个é®é¢ãæä»¥ dsh 䏿¯æ¥æ¿ä»£æ¨¡åçï¼å®æ¯æ¥æ"模åå°çå®ä¸ç"è¿æ¡é¾è·¯åæå¯ç»åçåºç¡è®¾æ½ãè¿å°±æ¯ä¸ºä»ä¹æè¯´"ä½ æ©å°±å¨ç¨ Harness"ï¼Claude CodeãCodex æ¬è´¨é½æ¯ Harnessï¼åªæ¯å®ä»¬ææ©å±ç¹å æäºäº§åãdsh çåºå«æ¯ææ´æ¡è¿è¡æ¶é½æä»¶åäºã
äºãCordis äºè¦ç´ ï¼ä¸åçæä»¶ççå夫
dsh åºå±æ¯ Cordisï¼ä¸ä¸ªè¢« vendor è¿ä»åºçæä»¶æ¡æ¶ãå®ç设计被ä¸ç¯è®ºæãA Programming Paradigm for Spatiotemporal Composabilityãå½¢å¼åãè½å°ä»£ç ï¼æ ¸å¿æ¯äºä¸ªæ¦å¿µï¼ä»¥ä¸ä¸ºåºäºå®æ¹ææ¡£ç»ææ´ççæ¶æç¤ºæï¼ééåæºç ï¼è¯·å¿ç´æ¥å¤å¶è¿è¡ï¼ï¼
// æ¶æç¤ºæï¼Cordis äºè¦ç´ å¦ä½è½å°ï¼åºäºå®æ¹ææ¡£æ´çï¼ééåæºç ï¼
class MyPlugin {
// 1. Pluginï¼å®ç° Service ç对象ï¼å¯ä»¥æ¯å½æ°æ Service åç±»
inject = ['counter']; // 3. ä¾èµå£°æï¼æ¡æ¶å¨ä¾èµå°±ç»ªæ¶èªå¨æ¿æ´»æ¬æä»¶
apply(ctx) {
// 2. Contextï¼å
±äº«æå¡ä»åºï¼æä»¶æç¨³å®é®æè½½è½å
ctx.tools.register('my-tool', { ... }); // ctx.tools ç±å
¶ä»æä»¶æä¾
// 4. Typed Eventsï¼waterfall ä¸é´ä»¶ï¼è°ç¨ next() ææ¾è¡ä¸æ¸¸
ctx.on('agent/pre-step', (input, next) => {
if (shouldBlock(input)) return; // ä¸è°ç¨ next = çè·¯æ¥ç®¡
return next(input);
});
// 5. å¯é Effectsï¼æä»¶å¸è½½æ¶ï¼è¿äºæ³¨å被è¿è¡æ¶èªå¨æ¤é
ctx.effect(() => { /* 注åæå¡ / çå¬ / å¯å¨å®æ¶å¨ */ });
}
}
äºä¸ªè¦ç´ è®²æ¸ æ¥ï¼
- Pluginï¼ä¸ä¸ªåè½æ¨¡åï¼å¯ä»¥æ¯å½æ°æ Service ç±»ã
- Contextï¼å
±äº«æå¡ä»åºï¼æç¨³å®é®æè½½ï¼ä¾å¦
ctx.toolsãctx.llmãctx.sessionsãctx.fsãctx.shellãæä»¶ä¹é´é 鮿¾è½åï¼ä¸äºç¸ import å ·ä½å®ç°ã - Serviceï¼è¢«æè½½å° Context ä¸çå ·ä½è½åï¼å¯è¢«æ¿æ¢ã
- Typed Eventsï¼æä»¶é´éä¿¡æºå¶ï¼æåç§å忍¡å¼ï¼
emitï¼åå®å°±èµ°ï¼ãwaterfallï¼ä¸é´ä»¶å¼ï¼å¿ é¡»è°next()ææ¾è¡ï¼å¯çè·¯æ¥ç®¡ï¼ãparallelï¼å¹¶åï¼ãserialï¼ä¸²è¡ã带è¿åå¼ï¼ãagent/pre-stepãagent/requestãtools/*齿¯ waterfallï¼è¿æ¯"æ¦æª/æ¹å"çå®ç°åºç¡ã - Effectsï¼æ³¨åæå¡ãå·¥å
·ãçå¬å¨ã宿¶å¨é½éè¿
ctx.effect()ç»è®°æå¯è¿½è¸ªçå¯ä½ç¨ï¼æä»¶å¸è½½æ¶èªå¨æ¤éã
ä¸é¢è¿å¼ 徿äºè¦ç´ çä¾èµå ³ç³»ç»åºæ¥ï¼æ³¨æå®æ²¡æç¹æå æ ¸ï¼æ©å± dsh çæ¹å¼ï¼æ¯ææä»¶æå°å«çæä»¶æè¾¹ã
åç§äºä»¶å忍¡å¼ï¼æ¯"æ¦æª/æ¹å"è½åçæ¥æºï¼å¼å¾åç¬çä¸ç¼ï¼
è¿å¥è®¾è®¡ççº¢å©æ¯"æ¶ç©ºå¯ç»å"ï¼ç©ºé´ä¸ç»ä»¶å£°æä¾èµãä¾èµæ»¡è¶³ææ¿æ´»ï¼æ¶é´ä¸ç»ä»¶ç¦»å¼åå¯ä½ç¨å°½é宿´æ¢å¤ã宿¹ææ¡£èªå·±ç¹æï¼æ²¡æéè¦æè¡¥ä¸çç¹æå æ ¸ï¼æ©å± dsh çæ¹å¼æ¯ææä»¶æå°å ¶ä»æä»¶æè¾¹ã
ä¸ãå®çæ£å¼é±çå°æ¹ï¼Trajectory å¯å®¡è®¡
è¿æ¯ dsh åºå«äºå¤§é¨å Agent å·¥å ·çæ ¸å¿ï¼ä¹æ¯æè¯»å®æ¶æææ³è®²çç¹ã宿䏿¡æ¶æä¸åéï¼
Model-visible = loggedï¼æ¨¡åçå¾å°çï¼å¿ é¡»è½ä»ä¼è¯æ¥å¿é建ï¼
ä¼è¯æ¯ä¸ä»½ç±»ååäºä»¶ç append-only æ¥å¿ï¼å
¸åäºä»¶æ turn/startãstep/startãuser/messageãassistant/chunkãassistant/messageãtool/callãtool/resultãstep/endãturn/endãæ¨¡ååå²ä¸æ¯åç¬ç»´æ¤çç¶æï¼èæ¯ä»è¿ä»½æ¥å¿æ´¾çåºæ¥çæå½±ã
è¿ä¸ªä¸åé带æ¥åä¸ªå®æå®ç好å¤ï¼
- 坿¢å¤ï¼è¿ç¨éå¯åç¨äºä»¶éå»ºç¶æã
- å¯ååï¼ä»å·²å®æè½®æ¬¡å¼æ°å®éªåæ¯ï¼åç¶å¯æ¢å¤ï¼æ¹ä¾¿åæ¶èã
- å¯åæ¾ï¼éç°ææ¬¡å·¥å ·è°ç¨å模å交äºã
- å¯å®¡è®¡ï¼ç¥é模å为ä»ä¹çå°ææ®µä¸ä¸æï¼æ¹ä¾¿è¯æµä¸åæ¨¡åææä»¶ç»åã
Web UI éæä¸ª Trajectory è§å¾ï¼è½ææ¥æºè¿æ»¤è¿äºè®°å½ã对å Agent ç人æ¥è¯´ï¼è½ forkãè½ replayãè½è¯æµï¼æ¯"é»çè·ä¸æ¬¡"å¼é±å¾å¤ã
åã5 类人å³ç表ï¼ä½ å±äºåªä¸ç±»
ä¸é¢è¿å¼ æµç¨å¾æ¯ä¾æ®ä¸é¢ä¸èçæºå¶æ¨åºæ¥çï¼ä¸æ¯ææèè¢ãæ¯ä¸æ¡é½åé¾å°åé¢çæ¶æäºå®ãå çå¾ï¼åç表ã
| 身份 | å¼ä¸å¼å¾ä¸ | 便® |
|---|---|---|
| å Agent æ¡æ¶çå¼åè | å¼ºçæ¨è | æä»¶å + æ¶ç©ºå¯ç»åï¼ååè½è¡¨è¾¾æç¨³å®è¯ä¹åå ï¼å¯åæ¶èå®éªãç¬ç«æµè¯ãå®å ¨å¸è½½ |
| ç¨ AI 干活ç Maker | æ¨è | åç§æ¨¡å¼ï¼Standard/Code/Minimal/Creatorï¼+ èªæè½åï¼è¿è¡æ¶å®ä¹/å¯åèªå·±çæä»¶ï¼ï¼ä¸éé« |
| æ®éç¨æ·æ³"å¼ç®±å³ç¨" | è°¨æ | 宿¹æ 0.1.0-rc.5 æ¯ Developer Previewï¼æç¡®å"ä¼æç ´å ¼å®¹æ§çåæ´"ï¼å«å½ç¨³å®äº§åä¾èµ |
| ä¼ä¸/ç产ç¯å¢ | æè§æ | å䏿¯ rc é¢è§ï¼å¯è¯ä¼°çæ¯æ²ç®± fail-closedï¼Landlock æ¬å°ãWindows ACLãE2B è¿ç¨ï¼ï¼ä½ç¨³å®æ§æªå°ç产级 |
| å Agent è¯æµçç ç©¶è | æ¨è | append-only æ¥å¿ + model-visible=logged ä¸åéï¼Trajectory å¤©ç¶æ¯æå¯å¤ç°è¯æµ |
ä¸å¥è¯æ»ç»ï¼å®æå¼å¾"è¦æ¹ Harness æ¬èº«"ç人ä¸ï¼æä¸å¼å¾"åªæ³ç¨³å®ç¨ä¸ªå·¥å ·"ç人ç°å¨å°±æ¼ã
äºãæä»¶çæï¼è½åé¢å¾å ¨ï¼ä½å«ç¥å
宿¹ååº dsh çè½åé¢ï¼ModelsãToolsãSkillsãSessionsãSandboxesãStorageãLoopsãSchedulingãUIãæ¨¡ååç«¯æ¯æ DeepSeekãOpenAIãAnthropicãBedrockãVertexãAzureãCodexï¼ä»¥åä»»æ OpenAI å ¼å®¹ç«¯ç¹ãæ²ç®±æ PTY bashãæ¬å° full-accessãLandlock native ä¸ç§ã
å Agent æ¯ä¸ª Seamï¼Provider å¯ä»¥æ¯è¿ç¨å å Agentãä»ç¶ä¼è¯ forkãDSH SDK å§æ´¾ï¼çè³ç´æ¥æèµ·çå®ç Claude Code æ Codex å½å Agentã夿ºè½ä½ç¼æå¨ seam æ½è±¡ä¸åæäº"é Provider"çé®é¢ã
è¿äºæ¥èªå®æ¹ææ¡£ï¼è½åé¢ç¡®å®å¹¿ãä½è¦è¯å®è¯´ä¸å¥ï¼åå¾åºè½åä¸çäºç¨å¾é¡ºæï¼æ²ç®±ç¨³ä¸ç¨³ãProvider åæ¢ææ²¡æåï¼å¾ä½ 亲èªè·è¿æç¥éãæ¬æä¸å宿µè书ï¼åªç¡®è®¤æ¶æä¸å®ç»å°äºè¿äºå£åã
å ãä½ è¯¥ä¸è¯¥åï¼Capability Seam ç红å©
å¦æä½ å·²ç»å¨ç¨ Claude Code æ Codexï¼dsh çåç¹ä¸æ¯"åä¸ä¸ªè天æ¡"ï¼èæ¯æè¿è¡æ¶åæå¯ç»ååºç¡è®¾æ½ãæ ¸å¿æºå¶æ¯ Capability Seamï¼è¦æ¢æ¨¡å就注å ctx.llm éé
å¨ï¼è¦æ¢æ§è¡ç¯å¢å°±æ ctx.fs/ctx.shell æåè¿ç¨æ²ç®±ï¼BashãPTYãLSP ä¸èµ·æ¬èµ°ï¼ä¸ç¨ä¸ºæ¯ä¸ªå·¥å
·åä¸ç¨è¿ç¨çã
ä½åè¿æ¥è¯´ï¼å¦æä½ è¦çæ¯"ä»å¤©è£ 好æå¤©å¹²æ´»å«åºå¹ºè¾å"ï¼Developer Preview çç ´å ¼å®¹æ§è¦åæ¯è®¤ççãå®éåç°å¨è¯ä¼°ãå®éªãææºç 妿¶æï¼ä¸éåè¿ä¸ªå£åº¦å°±æ¼ç产ã
ä½ å±äºä¸é¢äºç±»éçåªä¸ç±»ï¼å¦æä½ å·²ç»å¨ç¨å«ç Harnessï¼æå ³å¿çç¹æ¯æ¨¡ååæ¢ææ¬è¿æ¯å¯å®¡è®¡æ§ï¼è¯è®ºåºè¯´ä¸ä¸ä½ çèº«ä»½ï¼æå¸®ä½ å¤æè¯¥ä¸è¯¥åãååªä¸å±ã
æ ç¾ï¼DeepSeek Harness,deepseek, agent, ai-engineering, juejin, 2026, æ¶æ
Aitishiku.com