needhelp
← Back to blog

DeepSeek Harness: เฟรมเวิร์คเอเจนต์โอเพ่นซอร์ส ที่ทุกอย่างเป็นปลั๊กอินจริงๆ

by needhelp
DeepSeek
AI Agents
Open Source
Cordis
Plugin Architecture

สแตคเอเจนต์ครบชุด วางลงบน GitHub แล้ว

DeepSeek วางตัวอย่างสำหรับนักพัฒนาของ DeepSeek Harness (dsh) เมื่อวันที่ 13 สิงหาคม 2026 ที่เก็บโค้ดอยู่ที่ deepseek-ai/deepseek-harness ถึงปลายวันมีดาว 1.6k ดาว, คอมมิต 12,293 ครั้ง และผู้ร่วมพัฒนา 19 คน — ตัวเลขพวกนี้บอกได้ชัดว่านี่ไม่ใช่โปรเจกต์สบายวันหยุด โค้ดเบส 97.1% เป็น TypeScript, 1.6% CSS และ 0.7% Python เวอร์ชันแพ็คเกจตอนเผยแพร่: 0.1.0-rc.5

หน้าแผงขายอยู่ที่ deepseek.com/harness และเอกสารสำหรับนักพัฒนาอยู่ที่ deepseek-harness.github.io/deepseek-harness

ใบอนุญาต MIT

ประโยคเดียวที่บอกทุกอย่าง

จาก README: “เอเจนต์ = โมเดล + Harness”

โมเดลคือจิตวิญญาณ Harness ช่วยให้เอเจนต์ เข้าใจสภาพแวดล้อม, ใช้เครื่องมือ และทำงานต่อเนื่องในสภาพแวดล้อมจริง ทัศนคติของ DeepSeek: ทุกความสามารถ — โมเดล, เครื่องมือ, ทักษะ, เซสชัน, ซานด์บ็อกซ์, สโตรเรจ, ลูป, ตารางเวลา และ UI — ล้วนเป็นปลั๊กอินที่สลับใช้ได้

นี่ไม่ใช่แค่สโลแกน มันถูกบังคับโดยสถาปัตยกรรม

Cordis: เคอร์เนลที่อยู่ใต้ทุกอย่าง

DeepSeek Harness สร้างขึ้นบน Cordis, เฟรมเวิร์คปลั๊กอินที่นำมาฝัง การออกแบบของ Cordis อธิบายไว้ในบทความชื่อ A Programming Paradigm for Spatiotemporal Composability

ทั้งเฟรมเวิร์คลดรูปเหลือ 5 แนวคิด:

  1. ปลั๊กอินคืออ็อบเจกต์ที่อิมพลีเมนต์ Service มันสามารถเป็นฟังก์ชันที่มี inject และ apply(ctx) ได้ หรือซับคลาส Service
  2. คอนเท็กซ์คือที่เก็บบริการ ปลั๊กอินจะอ้างสิทธิ์คีย์ที่คงที่ เช่น ctx.tools, ctx.llm หรือ ctx.sessions ปลั๊กอินอื่นจะค้นหาบริการด้วยคีย์ แทนที่จะอิมพอร์ตอิมพลีเมนต์เฉพาะเจาะจง
  3. ประกาศการพึ่งพาบริการผ่าน inject ปลั๊กอินที่ระบุบริการที่ต้องการจะรอจนกว่าบริการเหล่านั้นจะมีอยู่ ไม่ต้องจัดลำดับการเริ่มระบบด้วยตัวเอง
  4. Typed Events สำหรับการสื่อสาร โหมดส่ง 4 แบบ: emit (ส่งแล้วไม่รอ), waterfall (สไตล์มิดเดิลแวร์กับ next()), parallel (ทุกตัวฟังทำงานพร้อมกัน) และ serial (ตัวฟังทำงานตามลำดับพร้อมค่าที่คืนกลับ)
  5. การลงทะเบียนคือเอฟเฟกต์ที่ย้อนกลับได้ ส่วนของพร้อมป์ต์, สคีมาของเครื่องมือ, อะแดปเตอร์, ตัวฟัง — ทุกอย่างติดตั้งผ่าน ctx.effect() ดังนั้นการโหลดใหม่และการถอดจะคลี่คลายพวกมันได้อย่างคาดเดาได้

โมเดล waterfall ของ Cordis เป็นมิดเดิลแวร์แบบรอบๆ ตัวฟังจะรับ (...args, next) เรียก next() เพื่อส่งต่อไปยังบริการถัดไป; คืนกลับโดยไม่เรียก next() เพื่อขัดจังหวะ สำหรับอีเวนต์การตัดสินใจเดียว การขัดจังหวะคือดีไซน์ — ตัวฟังนโยบายสามารถเป็นเจ้าของการตัดสินใจได้โดยตรง

ทุกอย่างเป็นปลั๊กอิน (จริงๆ)

รายการปลั๊กอินบน deepseek.com/harness บอกขอบเขตความสามารถทั้งหมด:

  • Models — แบ็กเอนด์ LLM (DeepSeek, OpenAI, Anthropic, Bedrock, Vertex, Azure, Codex รวมถึงเอนด์พอยต์ที่เข้ากันได้กับ OpenAI ใดๆ)
  • Tools — สิ่งที่โมเดลเรียกใช้ได้
  • Skills — ชุดพร้อมป์ต์และเครื่องมือที่นำกลับใช้ซ้ำได้
  • Sessions — การจัดการสถานะการสนทนา
  • Sandboxes — ที่ที่โค้ดรัน (PTY bash, แบ็กเอนด์โลคอล danger-full-access, ซานด์บ็อกซ์เนทีฟบน landlock)
  • Storage — การคงอยู่ของเซสชัน
  • Loops — ตรรกะการหมุนรอบของเอเจนต์
  • Scheduling — การกระจายงานให้ซับเอเจนต์และงาน
  • UI — Web UI ที่ให้บริการที่พอร์ต 3080 โดยค่าเริ่มต้น

นักพัฒนาสามารถเลือก สลับ หรือขยายสิ่งเหล่านี้ผ่านการกำหนดค่า — ไม่ต้องแก้ไขซอร์สโค้ดของ DeepSeek Harness เอง Plugin Config Catalog ถูกสร้างอัตโนมัติจากซอร์ส (scripts/gen-config-catalog.ts) และถูกตรวจสอบใหม่โดย CI ดังนั้นทุกฟิลด์ในบล็อก config: ของ cordis.yml จะตรงกับประเภทคอนฟิกที่ปลั๊กอินประกาศไว้อย่างตรงไปตรงมา

โหมดรันไทม์ 4 แบบ

เอกสารมาพร้อมพรีเซ็ต 4 ชุด แต่ละชุดจัดการเคสการใช้งานที่แตกต่างกัน

Standard Mode — เอเจนต์เขียนโค้ดครบถ้วน: แก้ไขไฟล์, เชลล์, ค้นหาไฟล์และเว็บ, ทักษะ, วางแผน, เป้าหมาย, ซับเอเจนต์และเวิร์กโฟลว์ นี่คือประสบการณ์ Web UI ค่าเริ่มต้น

Code Mode — ทุกอย่างใน Standard แต่เครื่องมือถูกเปิดเผยผ่าน Code Mode SDK ดังนั้นโมเดลสามารถรวมการทำงานหลายขั้นเป็นโปรแกรม TypeScript เดียวได้ โปรแกรมที่โมเดลสร้างขึ้นมาแทนการเรียกเครื่องมือหลายรอบ

Minimal Mode — แค่เครื่องมือสองอย่าง: เชลล์ bash ถาวรและ str_replace_editor นี่สำหรับการเปรียบเทียบโมเดลในสภาพแวดล้อมที่ตัดเทา ไม่มีทักษะ ไม่มีวางแผน ไม่มีซับเอเจนต์ — ความสามารถดิบๆ ของโมเดลกับโค้ดเบสจริง

Creator Mode — สร้างมาสำหรับเขียนพรีเซ็ตเอเจนต์แบบกำหนดเอง รวมทุกความสามารถของ Standard mode บวกกับการตรวจสอบรันไทม์, ทดลองปลั๊กอิน Cordis ในหน่วยความจำ และคำแนะนำการสร้างพรีเซ็ต นี่คือวิธีที่คุณสร้างโหมดที่หก หก เจ็ด

ทุกรันติดตามได้

นี่คือจุดที่ Harness โดดเด่นจากเครื่องมือเอเจนต์ส่วนใหญ่ ทุกสิ่งที่โมเดลเห็นถูกบันทึกในบันทึกเซสชันแบบต่อเนื่อง:

  • พร้อมป์ต์ระบบ
  • เอาต์พุตการให้เหตุผล
  • การเรียกเครื่องมือและผลลัพธ์
  • การตัดสินใจตารางเวลาของซับเอเจนต์
  • ทุกการฉีดคอนเท็กซ์

Web UI มีมุมมอง Trajectory ที่คุณตรวจสอบบันทึกเหล่านี้กรองตามแหล่งที่มา กลับไปต่อ, แยกสาขา, ค้นหา และเล่นซ้ำ — ทั้งสี่อย่างทำงานกับสตรีมอีเวนต์เดียวกัน ไม่มีฐานข้อมูลเทรซแยก ไม่มีขั้นตอนส่งออก เซสชัน JSONL คือ แหล่งข้อมูลที่แท้จริง

สำหรับ Python SDK ไดเรกทอรีเซสชันเก็บ JSONL ที่ไม่บีบอัดซึ่งมีคำขอโมเดลที่ประกอบขึ้นและการเรียกเครื่องมือ ตัวอย่างที่ examples/jsonrpc-agent/minimal.py แสดงสิ่งนี้ตั้งแต่ต้นจนจบ

การกำหนดค่าโมเดล: DeepSeek + อะไรก็ได้

หน้าการกำหนดค่าโมเดล (Configure models) มี 3 ชั้น

DeepSeek Official เปิดการตั้งค่า → Models วางคีย์ API DeepSeek แล้วบันทึก คีย์เป็นแบบเขียนเท่านั้น หลังบันทึก UI จะได้รับตัวอธิบายที่ปกปิด ไม่ใช่ข้อความธรรมดา คีย์อยู่ใน \$DSH_HOME/.credentials.yaml; หน้าการตั้งค่าเก็บแค่การอ้างอิงข้อมูลรับรองเท่านั้น

Catalog providers คลิก “Add provider” เลือก Anthropic หรือ OpenAI วางคีย์ ผู้ให้บริการที่ใช้การตรวจสอบสิทธิ์เนทีฟ (Bedrock ผ่าน AWS creds + region, Vertex ผ่าน ADC project, Azure ผ่าน api-version, Codex ผ่าน OAuth) จะไม่ทำงานกับแค่ฟิลด์คีย์ API — แต่ละตัวต้องการเส้นทางการตรวจสอบสิทธิ์ของตัวเอง

Custom providers สำหรับเกตเวย์บริษัท, เซิร์ฟเวอร์โฮสต์เอง หรือผู้ให้บริการใดๆ ที่ไม่อยู่ในแคตตาล็อก ตั้ง Provider ID ตัวพิมพ์เล็ก (ถาวร — คำขอ เซสชันที่บันทึก ค่าเริ่มต้นโมเดล และการอ้างอิงข้อมูลรับรองทั้งหมดใช้มัน) URL ฐาน โปรโตคอล API ข้อมูลรับรอง และโมเดลอย่างน้อย 1 ตัว

โมเดลภาพต้องการขั้นตอนเพิ่มเติม เนื่องจากเอนด์พอยต์กำหนดเองไม่มีวิธีโฆษณาโหมดที่รองรับ ฟอร์มจึงไม่สามารถตรวจพบการรองรับวิชันอัตโนมัติได้ คุณเพิ่ม input: [text, image] ให้กับโมเดลใน \$DSH_HOME/settings.yaml ถ้าโมเดลกำหนดเองทั้งหมดของคุณรับภาพได้ ตั้งค่า defaultInput: [text, image] ครั้งเดียวที่ระดับผู้ให้บริการ แทนที่จะทำต่อโมเดล ฟิลด์ input เป็นการยืนยัน ไม่ใช่การตรวจสอบ — ถ้าคุณอ้างว่าโมเดลทำวิชันได้ แต่เอนด์พอยต์จริงๆ ไม่ได้ ผู้ให้บริการจะปฏิเสธคำขอ แทนที่จะเป็น Harness

การแก้ไขปัญหาอธิบายไว้โดยตรงในเอกสาร:

  • MISSING_CREDENTIAL → เก็บคีย์ผู้ให้บริการผ่านหน้า Models หรือส่งออกตัวแปรสภาพแวดล้อมที่อ้างอิง
  • UNKNOWN_MODEL → เลือกโมเดลที่กำหนดค่าไว้ หรือเพิ่มโมเดลที่ขาดหายไปให้กับผู้ให้บริการกำหนดเอง
  • “Get available models returns 401” → ตรวจสอบคีย์ การค้นพบโมเดลเรียกเอนด์พอยต์ GET /models ที่เข้ากันได้กับ OpenAI ถ้าบริการของคุณไม่เปิดเผยมัน ให้ป้อนโมเดลด้วยตัวเอง
  • “Image rejected before send” → โมเดลไม่ได้ประกาศโหมด image เพิ่ม input: [text, image]
  • “Provider rejects a request with an image” → โมเดลอ้างว่ามีความสามารถวิชัน แต่เอนด์พอยต์จริงๆ ไม่มี ลบ image ออกจากรายการแล้วเริ่มเซสชันใหม่ (ภาพเก่าจะยังคงอยู่ในบันทึกเซสชันและจะส่งคำขอเดิมซ้ำไปเรื่อย)

เริ่มต้นใช้งาน: 3 เส้นทาง

เส้นทาง 1: npx @deepseek-ai/dsh web

ติดตั้ง Node.js รันคำสั่งเดียว Web UI เริ่มทำงานที่ http://127.0.0.1:3080 แค่นั้น ไม่ต้องโคลน ไม่ต้องบิลด์ ไม่ต้อง pnpm

Terminal window
npx @deepseek-ai/dsh web

จากนั้น: การตั้งค่า → Models → วางคีย์ API DeepSeek เลือกเวิร์กสเปซ (ไดเรกทอรีที่เรียก dsh ใช้งานได้เลย) เริ่มเซสชัน:

สรุปรีโปนี้แล้วระบุแพ็คเกจหลักๆ

เอเจนต์จะอ่านและแก้ไขไฟล์เวิร์กสเปซ รันคำสั่ง มอบหมายงาน และดูแลแผน การทำงานใดๆ ที่ต้องได้รับการอนุมัติตามนโยบายสิทธิ์ที่ใช้งานจะโปปอัปไดอะล็อกใน Web UI ก่อนจะดำเนินการ

เส้นทาง 2: โคลนและบิลด์จากซอร์ส

Terminal window
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web

เส้นทาง 3: Python SDK

ข้อกำหนด: Python 3.10+, Linux x64 / Linux arm64 / macOS 14+ บน arm64, เอนด์พอยต์ที่เข้ากันได้กับ DeepSeek

Terminal window
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
python -m venv .venv
. .venv/bin/activate
python -m pip install deepseek-harness-sdk

ตั้งค่าข้อมูลรับรอง:

8000/v1
export DEEPSEEK_API_KEY=sk-your-key-here
# Optional:
# export DSH_MODEL=deepseek-v4-flash
# export DSH_SYSTEM_PROMPT='You are a helpful software engineer assistant.'

รันงานกับเวิร์กสเปซที่แยกออกมา:

Terminal window
python examples/jsonrpc-agent/minimal.py \
--workspace /absolute/path/to/workspace \
--session-root /absolute/path/to/sessions \
--session-id example-001 \
"ตรวจสอบรีโปแล้วแก้ไขเทสต์ที่ล้มเหลว"

สำหรับโค้ดของคุณเอง เอนทรีพอยต์ของ SDK คือ DeepSeekHarness ในฐานะคอนเท็กซ์แมเนเจอร์:

from pathlib import Path
from deepseek_harness import DeepSeekHarness
config = Path("examples/jsonrpc-agent/minimal.cordis.yml").resolve()
workspace = Path("/absolute/path/to/workspace").resolve()
sessions = Path("/absolute/path/to/sessions").resolve()
with DeepSeekHarness(
provider="deepseek-official",
model="deepseek-v4-flash",
max_tokens=49_152,
cwd=str(workspace),
session_root=str(sessions),
cordis=str(config),
) as harness:
result = harness.run(
"ตรวจสอบรีโปแล้วแก้ไขเทสต์ที่ล้มเหลว",
session_id="example-001",
)
print(result.final_response)

DeepSeekHarness จะเริ่มรันไทม์ที่รวมมาอย่างขี้เกียจและนำกลับใช้ซ้ำจนกว่าบล็อก with จะจบลง ใช้ ID เซสชันเดิมเพื่อรักษากระบวนการ Bash (ไดเรกทอรีทำงาน ตัวแปรสภาพแวดล้อม ฟังก์ชันเชลล์) ใช้ ID เซสชันใหม่สำหรับงานที่อิสระ

องค์ประกอบ minimal ของ jsonrpc-agent ถูกออกแบบให้เบาเจาะจง: มีแค่ bash ถาวรและ str_replace_editor เป็นเครื่องมือที่เผชิญหน้ากับโมเดล Bash timeout 300 วินาที ขีดจำกัดเอาต์พุตของเอดิเตอร์ 16,000 ตัวอักษร การบีบอัดคอนเท็กซ์ถูกปิดใช้งาน ระบบไฟล์ใช้แบ็กเอนด์โลคอลดิบ — พาธของเอดิเตอร์สามารถเข้าถึงทุกสิ่งที่กระบวนการรันไทม์เห็นได้ เอกสารเตือนอย่างชัดเจน: “รันมันเฉพาะในเช็คเอาต์หรือคอนเทนเนอร์ที่ใช้แล้วทิ้งเท่านั้น” แบ็กเอนด์ PTY ถาวรยังต้องใช้พื้นฐานเทอร์มินัล POSIX ด้วย — ไม่มีการรองรับ Windows สำหรับองค์ประกอบนี้

เขียนปลั๊กอินแรกของคุณ

บทเรียน: ปลั๊กอินแรกของคุณ ปลั๊กอินคือโมดูล TypeScript ที่เอ็กซ์พอร์ตฟังก์ชัน apply:

import type { Context } from '@deepseek-ai/cordis'
export const name = 'hello-plugin'
export function apply(ctx: Context) {
console.log('[hello-plugin] plugin loaded!')
}

ลงทะเบียนมันในแพตช์ cordis.yml:

- insert:
- id: hello
name: '/absolute/path/to/deepseek-harness/scratch-plugin/src/my-plugin.ts'

บูตด้วยโอเวอร์เลย์:

Terminal window
pnpm dsh web --patch ./scratch-plugin/cordis.yml

การล้างข้อมูลอัตโนมัติคือฟีเจอร์เด็ด ทุกสิ่งที่ลงทะเบียนผ่าน ctx — ตัวฟังอีเวนต์ เครื่องมือ ไทเมอร์ — จะถูกล้างเมื่อปลั๊กอินถูกยกเลิกการโหลด ไม่ต้อง removeListener หรือ clearInterval ด้วยตัวเอง สำหรับการล้างข้อมูลอย่างชัดเจน (การเชื่อมต่อเครือข่าย) ให้คืนค่า disposer จาก ctx.effect()

การพึ่งพาถูกประกาศด้วย inject:

export const name = 'my-tool-plugin'
export const inject = ['tools']
export function apply(ctx: Context) {
// ctx.tools is ready here
}

Cordis จะรอบริการที่ต้องการทุกตัวก่อนจะโหลดปลั๊กอิน

มีรูปแบบปลั๊กอิน 3 แบบ: ฟังก์ชัน (ข้างต้น), อ็อบเจกต์ที่มี apply และคลาสที่สืบทอดจาก Service ใช้รูปแบบคลาสเมื่อปลั๊กอินตัวเองให้บริการแก่ปลั๊กอินอื่นที่จะใช้บริโภค

เขียนเครื่องมือแรกของคุณ

บทเรียน: สร้างเครื่องมือ ใช้ defineTool จาก @deepseek-ai/dsh-tools:

import type { Context } from '@deepseek-ai/cordis'
import { defineTool } from '@deepseek-ai/dsh-tools'
export const name = 'greet-tool'
export const inject = ['tools']
export function apply(ctx: Context) {
ctx.tools.register(defineTool({
name: 'greet',
description: 'Greet someone by name.',
parameters: {
name: {
type: 'string',
required: true,
description: 'The name to greet',
},
},
output: {
schema: { type: 'string' },
render: (_args, value) => [{ type: 'text', text: value }],
},
async execute(args) {
return `Hello, ${args.name}!`
},
}))
}

defineTool จะอนุมานและตรวจสอบ args จาก parameters execute คืนค่าแคนนนิคอลที่ประกาศโดย output.schema output.render แปลงค่าแคนนนิคอลนั้นเป็นเนื้อหาที่เผชิญหน้ากับโมเดล หลังจากรีสตาร์ทด้วยแพตช์แล้ว ถาม Web UI: “ใช้เครื่องมือ greet ทักทาย Ada” โมเดลจะเรียก greet และได้รับ Hello, Ada!

ขั้นตอนต่อไปจากบทเรียนคือ การกำหนดค่าปลั๊กอิน, เอกสารอ้างอิงการสร้างเครื่องมือ (สคีมาที่ซ้อนกัน, ค่าแคนนนิคอล, งานเบื้องหลัง, ฮุคนโยบาย, Code Mode, การ์ด UI) และ การเลเยอร์ความสามารถ (การแบ่งแพ็กเกจ Service Definition → Service Provider → Consumer)

โหมดเอนทรี CLI

คำสั่ง @deepseek-ai/dsh คือตัวเปิดใช้งานผลิตภัณฑ์ มีเอนทรีพอยต์ 4 แบบ:

คำสั่ง วัตถุประสงค์
dsh --profile <name> บูตโปรไฟล์ที่ระบุชื่อภายใต้ \$DSH_HOME/profiles/<name>
dsh --profile headless "job" รันเซสชันที่คงอยู่ใหม่ครั้งเดียว พิมพ์คำตอบสุดท้าย แล้วจบ
dsh web นามแฝงของ --profile web
dsh plugin --profile <name> <pnpm args> จัดการปลั๊กอินของโปรไฟล์โดยส่งต่อไปยัง pnpm

ไดเรกทอรีที่เรียกใช้คือรากเวิร์กสเปซค่าเริ่มต้น โปรไฟล์ web และ headless จะเริ่มต้นอัตโนมัติจากเทมเพลต์ที่มาพร้อมบนการใช้งานครั้งแรก โปรไฟล์อื่นๆ ทุกตัวต้องถูกสร้างผ่าน dsh plugin

ฟล็กตัวเปิดใช้งานมาที่อันดับแรก โทเค็นแรกที่ตัวเปิดใช้งานไม่รู้จักจะกลายเป็นอาร์กิวเมนต์ของแอป ตัวอย่าง: dsh --profile web --port 8080 จะส่ง --port 8080 ไปยังเว็บแอป ไม่ใช่ตัวเปิดใช้งาน

ไดเรกทอรีโปรไฟล์เก็บ package.json (การพึ่งพาปลั๊กอินนอกต้นไม้ บวกกับแมนิเฟสต์โปรไฟล์ dsh.profile ที่มีรายการ bundles ที่เรียงลำดับ) และ cordis.patch.yml (เลเยอร์แพตช์ของผู้ใช้เอง) ลำดับการประกอบบนรากที่ว่างคือ: แพตช์ของแต่ละบันเดิลตามลำดับ dsh.profile.bundlescordis.patch.yml ของโปรไฟล์ → \$DSH_HOME/cordis.patch.yml ระดับโฮม → โอเวอร์เลย์ --patch ใช้ --dump-default-config และ --dump-config เพื่อตรวจสอบต้นไม้ที่ประกอบขึ้นโดยไม่ต้องบูตมัน

ปลั๊กอินชุมชนและนิเวศวิทยา

ติดแท็กรีโปปลั๊กอินของคุณด้วย dsh-plugin บน GitHub เพื่อให้คนค้นพบได้ ไซต์ทางการลิงก์ไปยังหน้าแท็ปนั้นโดยตรง มันยังมี ชุมชน Discord DeepSeek Harness สำหรับการสนทนา

โปรเจกต์ใช้ GitHub Discussions สำหรับความคิดเห็นและรายงานบั๊ก เอกสารลิงก์ไปยัง CONTRIBUTING.md สำหรับเวิร์กโฟลว์การพัฒนา, architecture.md สำหรับการออกแบบระบบ และ AGENTS.md สำหรับข้อกำหนดการเขียนโค้ดเฉพาะเอเจนต์

Developer Preview — ใช่ มันจะพังแน่

README ใส่คำนี้ไว้ตัวพิมพ์ใหญ่ทั้งหมด: “จะมีการเปลี่ยนแปลงที่ทำลายความเข้ากันได้แน่นอน”

ปลั๊กอินหลักและ API ยังพัฒนาอยู่หน้าแผงขายบอกโดยตรง: “DeepSeek Harness ยังคงอยู่ใน developer preview และยังคงถูกทดสอบโดยนักพัฒนาที่สร้างฮาร์เนสเอเจนต์”

ถ้าคุณกำลังสร้างบนมัน ให้ปักหมุดคอมมิตฮาช ให้ปลั๊กอินของคุณบางเทียบกับแคตตาล็อกคอนฟิก และคาดหวังว่าจะต้องทดสอบใหม่ทุกครั้งที่ rc bump การล้างข้อมูลอัตโนมัติและการฉีดการพึ่งพาของปลั๊กอินทำให้การทดสอบใหม่ไม่เจ็บปวดเท่าเฟรมเวิร์คแบบโมโนลิธิก แต่ “developer preview” หมายถึงสิ่งที่มันพูดอย่างตรงไปตรงมา

อะไรที่ทำให้มันแตกต่าง

เฟรมเวิร์คเอเจนต์ส่วนใหญ่ทุกวันนี้เริ่มต้นด้วยลูปหมุนรอบ แล้วค่อยติดความสามารถในการขยายทีหลัง Harness กลับกัน: ความสามารถในการขยาย คือ เฟรมเวิร์ค และลูปหมุนรอบแค่ปลั๊กอินอีกตัวหนึ่ง ผลลัพธ์ที่สังเกตเห็นได้คือสามสิ่งที่คุณมักไม่ได้รับในแพ็คเกจเดียว:

  • สลับอะไรก็ได้โดยไม่ต้อง fork ไม่ชอบระบบเครื่องมือในตัว? เปลี่ยนมันได้ ต้องการเลเยอร์การกำหนดเส้นทาง LLM อื่น? สลับผู้ให้บริการได้ ทุกอย่างแก้ไขผ่านคีย์บริการของ Cordis
  • ความสามารถติดตามตามค่าเริ่มต้น บันทึกแบบต่อเนื่องไม่ใช่แอดออนสังเกตการณ์ มัน คือ วิธีที่เซสชันทำงาน การกลับไปต่อ แยกสาขา ค้นหา และเล่นซ้ำทั้งหมดใช้สตรีมเดียวกัน
  • พรีเซ็ตที่ประกอบได้ ไม่ใช่ฟีเจอร์แฟล็ก โหมด 4 แบบ (Standard / Code / Minimal / Creator) แค่ชั้นแพตช์ชุดบันเดิลปลั๊กอินที่เรียงลำดับ คุณสามารถวางชั้นพรีเซ็ตของคุณเองบนได้ด้วย YAML แทนที่จะเป็นโค้ด

ว่าแนวทางนี้จะชนะเหนือ SDK แบบโมโนลิธิกหรือไม่ ขึ้นอยู่กับว่านิเวศปลั๊กอินจะสร้างเครื่องมือและผู้ให้บริการจากบุคคลที่สามมากพอที่จะทำให้เรื่องสลับ/ประกอบใหม่เป็นจริงได้หรือไม่ ด้วยดาว 1.6k และคอมมิต 12k ในวันแรก โมเมนตัมชัดเจนว่ามีอยู่

เอกสารอ้างอิง

Share this page