SSD Nodes Learn Hosting plans →
คู่มือ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-08-23

5 ปลั๊กอิน DeepSeek Harness ที่ควรติดตั้งบน VPS

แนะนำ 5 ปลั๊กอินจำเป็นสำหรับ DeepSeek Harness บน VPS เพื่อควบคุมงบประมาณ จำกัดสิทธิ์การเข้าถึงเครื่องมือ สแกนการฉีดโค้ด เพิ่มหน่วยความจำถาวร และจัดการการเข้าถึงเครือข่าย LAN

ปลั๊กอิน DeepSeek Harness ใดที่ควรติดตั้ง

ปลั๊กอิน DeepSeek Harness คือโค้ดจากภายนอกที่ทำงานภายในเอเจนต์ของคุณ โดยใช้สิทธิ์ของเอเจนต์บนเครื่องที่คุณเป็นผู้จ่ายค่าเช่า รายการจากชุมชนมีมากกว่า 20 หมวดหมู่และมีรายการให้เลือกกว่าหนึ่งพันรายการ สำหรับการใช้งานบน Virtual Private Server (VPS) ที่เช่ามา คุณจำเป็นต้องใช้ 5 รายการดังนี้: dsh-budget สำหรับการจำกัดค่าใช้จ่าย, dsh-permission-rules สำหรับการควบคุมการเข้าถึงเครื่องมือ, dsh-defend สำหรับการสแกนการฉีดโค้ด (injection) และข้อมูลลับ, dsh-memory สำหรับข้อเท็จจริงที่คงอยู่ถาวรเกินกว่าหนึ่งเซสชัน และ dsh-web-lan-access ซึ่งควรใช้หลังจากที่คุณตัดสินใจได้แล้วว่าจะใช้วิธีการยืนยันตัวตนแบบใด

Harness ดังกล่าวคือ dsh ซึ่งเป็น agent harness แบบโอเพนซอร์สของ DeepSeek ที่ถูกสร้างขึ้นโดยให้ทุกอย่างเป็นปลั๊กอิน ไฟล์ README ของตัวมันเองระบุว่าเป็นรุ่น developer preview และมีการแจ้งเตือน THERE WILL BE COMPATIBILITY-BREAKING CHANGES ข้อเท็จจริงนี้เพียงข้อเดียวเป็นตัวกำหนดทุกทางเลือกด้านล่างนี้ ให้คุณตรึงเวอร์ชัน (pin) ของปลั๊กอินที่ติดตั้งไว้ คาดการณ์ว่าการอัปเกรดอาจทำให้ปลั๊กอินใช้งานไม่ได้ และจำกัดจำนวนปลั๊กอินให้เหลือน้อยพอที่คุณจะสามารถอ่านโค้ดทั้งหมดได้จริง หากคุณยังไม่ได้เริ่มใช้งาน Harness ให้เริ่มต้นที่ การติดตั้ง DeepSeek Harness บน VPS แล้วจึงกลับมาที่นี่

วิธีการติดตั้งปลั๊กอินของ dsh และตำแหน่งที่ไฟล์คอนฟิกถูกจัดเก็บ

dsh ประกอบร่างขึ้นจากปลั๊กอินของ Cordis ดังนั้นอินสแตนซ์ที่กำลังทำงานอยู่จึงเป็นโครงสร้างแบบต้นไม้ของปลั๊กอินมากกว่าจะเป็นโปรแกรมเดี่ยว เทมเพลตทั้งสองคือ web และ headless โดย $DSH_HOME จะมีค่าเริ่มต้นที่ ~/.dsh และโปรไฟล์จะถูกเก็บไว้ที่ $DSH_HOME/profiles/<name>/ ซึ่งภายในจะมี package.json, ไฟล์ manifest dsh.profile และ cordis.patch.yml ของตนเอง

dsh plugin --profile web list
dsh plugin --profile web add dsh-budget
dsh plugin --profile web remove dsh-budget

รูปแบบแหล่งที่มาที่รองรับมี 4 แบบ ได้แก่ ชื่อแพ็กเกจ npm ทั่วไป, ชื่อแบบ scoped เช่น @towzai/dsh-memory, การอ้างอิง GitHub เช่น github:PerryLink/dsh-budget#main และพาธในเครื่องที่ใช้ link: หรือ ./ แนะนำให้ใช้รูปแบบ GitHub เพราะคุณสามารถแทนที่ #main ด้วย commit hash เพื่อให้มั่นใจว่าจะได้รับโค้ดชุดเดิมในเดือนถัดไป

dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"

เลเยอร์ต่างๆ จะถูกนำมาใช้ตามลำดับที่กำหนด: เริ่มจาก bundle แต่ละตัวตามลำดับที่ระบุไว้ในโปรไฟล์ ตามด้วย cordis.patch.yml ของโปรไฟล์, cordis.patch.yml ระดับโฮม และปิดท้ายด้วย --patch overlay ใดๆ ลำดับมีความสำคัญเนื่องจากเลเยอร์ที่อยู่หลังสามารถกำหนดค่าใหม่หรือยกเลิกสิ่งที่เลเยอร์ก่อนหน้าตั้งค่าไว้ได้ ดังนั้นหากปลั๊กอินดูเหมือนติดตั้งแล้วแต่ไม่ทำงาน ให้เปิดไฟล์ cordis.patch.yml ของโปรไฟล์แล้วตรวจสอบสองจุด: ตรวจสอบว่ามีบล็อก insert อยู่จริง และไม่มีเลเยอร์ที่อยู่ถัดไปสั่งปิดการทำงานของมัน

ณ วันที่ 17 สิงหาคม 2026 แพ็กเกจ npm @deepseek-ai/dsh อยู่ที่เวอร์ชัน 0.1.0-rc.7 ในขณะที่ปลั๊กอินทั้งหมดด้านล่างประกาศความเข้ากันได้กับ 0.1.0-rc.5 ถึง 0.1.0-rc.6 ช่องว่างนี้เป็นเรื่องปกติในระบบนิเวศนี้ และเป็นสาเหตุทั่วไปที่ทำให้ปลั๊กอินหยุดทำงาน เนื่องจากตัว harness มีการพัฒนาเร็วกว่าปลั๊กอินโดยรอบ ให้ทำการอัปเกรด harness อย่างตั้งใจ จากนั้นจึงทดสอบปลั๊กอินทีละตัว

ตรวจสอบปลั๊กอินก่อนที่คุณจะเชื่อถือ

ปลั๊กอิน dsh ไม่ได้ถูกแยกส่วน (sandboxed) ออกจากตัว harness โดยจะโหลดเข้าสู่ Cordis tree เดียวกัน ในกระบวนการ (process) เดียวกัน ภายใต้ผู้ใช้ระบบปฏิบัติการเดียวกัน อีกทั้งยังเข้าถึง credential ของโมเดลและ working tree เดียวกันได้ การติดตั้งปลั๊กอินจึงใกล้เคียงกับการรันสคริปต์ของผู้อื่นด้วย sudo มากกว่าการเพิ่มส่วนขยายของเบราว์เซอร์ นี่เป็นคำถามเรื่องความเชื่อถือแบบเดียวกับที่ ปลั๊กอินของ Claude Code ก่อให้เกิด และคำตอบก็เหมือนกัน คือต้องอ่านโค้ด หรือไม่ก็อย่าติดตั้งมัน

สิ่งที่ควรตรวจสอบ 4 ประการ ตามลำดับดังนี้:

  • จุดเชื่อมต่อ (extension points) ที่ปลั๊กอินใช้งาน tools/pre-execute หมายความว่าปลั๊กอินเห็นการเรียกใช้เครื่องมือ (tool call) ทุกครั้งและสามารถบล็อกได้ agent/pre-step หมายความว่าปลั๊กอินเห็นข้อความของคุณ webServer.tapIndex หมายความว่าปลั๊กอินเขียนหน้าเว็บที่ส่งไปยังเบราว์เซอร์ของคุณใหม่ ปลั๊กอินที่ไม่ได้เชื่อมต่อกับจุดเหล่านี้เลยแทบจะไม่สามารถทำอะไรได้ ในขณะที่ปลั๊กอินที่เชื่อมต่อกับจุดเหล่านี้ทั้งหมด คือ ขอบเขตความปลอดภัยของคุณ
  • การเชื่อมต่อเครือข่าย ค้นหาในซอร์สโค้ดด้วยคำว่า fetch, http และชื่อโฮสต์ (hostname) ใดๆ ที่ถูกกำหนดค่าไว้ตายตัว (hard-coded) เครื่องมือวัดค่าใช้จ่ายที่ส่งข้อมูลกลับไปยังเซิร์ฟเวอร์ภายนอก (phones home) กำลังส่งรูปแบบการใช้งานของคุณไปยังที่อื่น
  • การเข้าถึง credential สิ่งใดก็ตามที่เกี่ยวข้องกับ credentials.* หรือคีย์ของผู้ให้บริการ (provider key) จำเป็นต้องมีเหตุผลระบุไว้ใน README
  • ใบอนุญาตและวันที่คอมมิตล่าสุด ปลั๊กอินที่ไม่มีใบอนุญาตและไม่มีการอัปเดตมาหลายเดือนในระบบนิเวศที่มีการเปลี่ยนแปลงทุกสัปดาห์ ถือเป็นความเสี่ยง

จากนั้นให้ติดตั้งโดยระบุที่คอมมิต (commit) แทนการระบุที่ branch และอ่านบล็อกการแทรกโค้ดที่ตัวติดตั้งเขียนลงใน cordis.patch.yml บล็อกดังกล่าวจะระบุรหัสปลั๊กอิน (plugin id) และการตั้งค่าที่ปลั๊กอินลงทะเบียนไว้ ซึ่งเป็นคำอธิบายที่สั้นและตรงไปตรงมาที่สุดว่าคุณเพิ่งเพิ่มอะไรเข้าไปในระบบ พยายามเก็บคีย์ของผู้ให้บริการให้ห่างจากการเข้าถึงของปลั๊กอินในส่วนที่ harness อนุญาตให้ทำได้ ตามแนวทางของ การเก็บความลับให้ห่างจาก AI agents

dsh-budget: ฉันจะหยุดไม่ให้เอเจนต์ทำงานตลอดทั้งคืนได้อย่างไร?

เอเจนต์บน VPS ทำงานโดยไม่มีผู้ดูแล ซึ่งเป็นจุดประสงค์ของการนำไปติดตั้งไว้ที่นั่น แต่ก็เป็นความเสี่ยงเช่นกัน dsh-budget จะวัดจำนวนโทเค็นและค่าใช้จ่ายโดยประมาณต่อโมเดล ต่อเซสชัน และต่อวัน พร้อมทั้งบังคับใช้เพดานค่าใช้จ่ายตามยอดรวมเหล่านั้น

dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"

ค่าเริ่มต้นนั้นค่อนข้างสูง: 10 USD ต่อเซสชัน, 50 ต่อวัน และ 500 ต่อเดือน ค่าเหล่านี้เหมาะสำหรับทีมที่มีงบประมาณสนับสนุน แต่สำหรับเซิร์ฟเวอร์ส่วนตัว ค่าเหล่านี้สูงเกินไปจนอาจทำให้ลูปที่ทำงานผิดพลาดทำงานจนจบก่อนที่เพดานจะถูกสั่งระงับ ดังนั้นควรปรับลดค่าเหล่านี้ตั้งแต่วันแรก

Chartdsh-budget default caps and a lower starting point for one small VPS (USD)
The data behind this chart
[
  {
    "label": "Per session",
    "plugin_default_usd": 10,
    "suggested_start_usd": 2
  },
  {
    "label": "Per day",
    "plugin_default_usd": 50,
    "suggested_start_usd": 5
  },
  {
    "label": "Per month",
    "plugin_default_usd": 500,
    "suggested_start_usd": 40
  }
]

ค่าที่แนะนำเป็นเพียงจุดเริ่มต้นสำหรับผู้ใช้งานหนึ่งคนบนเครื่องเดียว ไม่ใช่ตัวเลขมาตรฐานที่ตายตัว ให้ปรับเพิ่มขึ้นเมื่อคุณใช้งานจริงครบหนึ่งเดือนแล้วพบว่าจำเป็นต้องเพิ่ม เพดานรายเดือนที่ 40 USD พร้อมเพดานต่อเซสชันที่ 2 จะแจ้งเตือนอย่างชัดเจนและรวดเร็ว ซึ่งเป็นสิ่งที่คุณต้องการในขณะที่กำลังเรียนรู้พฤติกรรมการใช้ทรัพยากรของเครื่องมือนี้

- id: budget
  config:
    budgets:
      session: 2
      daily: 5
      monthly: 40
    warnRatio: 0.8
    overLimit: block

การตั้งค่าที่เปลี่ยนพฤติกรรมของเครื่องคือ overLimit ค่าเริ่มต้นคือ alert ซึ่งจะแสดงคำเตือนแต่ยังคงใช้จ่ายต่อไป ดังนั้นโดยค่าเริ่มต้นแล้วปลั๊กอินนี้จึงทำหน้าที่เป็นเพียงแดชบอร์ดเท่านั้น ให้ตั้งค่าเป็น block แล้วระบบจะปฏิเสธการเรียกใช้โมเดลเพิ่มเติมทันทีเมื่อถึงเพดานที่กำหนด ซึ่งหมายความว่างานที่ค้างคืนจะหยุดทำงานแทนที่จะเรียกเก็บเงินไปจนถึงเช้า degrade คือโหมดที่สาม: ระบบจะเปลี่ยนไปใช้โมเดลที่ราคาถูกกว่าจากแผนผัง degradation ซึ่งเหมาะสมเมื่องานจำเป็นต้องเสร็จสิ้นแต่ไม่ต้องการโมเดลที่มีประสิทธิภาพสูงสุด warnRatio มีค่าเริ่มต้นเป็น 0.8 ดังนั้นคุณจะได้รับแจ้งเตือนเมื่อถึง 80 เปอร์เซ็นต์ของเพดานที่กำหนด

มีข้อจำกัดที่ต้องทราบสองประการ ประการแรก ค่าใช้จ่ายจะถูกคำนวณจากราคาที่คุณระบุ: prices จะว่างเปล่าโดยค่าเริ่มต้น และ defaultPrice จะใช้ค่าสำรองที่ 1.0 USD ต่อล้านโทเค็นขาเข้า และ 3.0 ต่อล้านโทเค็นขาออก ให้กรอกตัวเลขจริงสำหรับโมเดลของคุณ มิฉะนั้นแดชบอร์ดจะเป็นเพียงการคาดเดาที่ดูเหมือนการวัดผล ประการที่สอง ปลั๊กอินจะรวบรวมข้อมูลในกระบวนการที่กำลังทำงานจากสตรีมเหตุการณ์ของเซสชัน ดังนั้นยอดรวมจะถูกรีเซ็ตเมื่อมีการรีสตาร์ทระบบ หากเกิด crash loop หรือมี supervisor ที่คอยรีสตาร์ท dsh เพดานรายวันก็จะถูกรีเซ็ตไปด้วย ให้ถือว่า dsh-budget เป็นเพียงมาตรการป้องกันงานของคุณเอง และควรตั้งค่าจำกัดการใช้จ่ายที่บัญชีผู้ให้บริการไว้เป็นเพดานสูงสุดที่แท้จริง ซึ่งเป็นประเด็นที่กว้างกว่าใน การควบคุมค่าใช้จ่ายของ AI agent บน VPS

ในการใช้งานประจำวัน คุณสามารถใช้ /budget เพื่อดูภาพรวม, /budget models เพื่อดูรายละเอียดแยกตามโมเดล และ /budget unblock <scope> เพื่อปลดล็อกเมื่อคุณตัดสินใจที่จะดำเนินการต่อ

dsh-permission-rules: which tool calls should never run?

dsh-permission-rules puts declarative rules on the tools/pre-execute waterfall, so a rule is evaluated before a tool runs. Three actions exist. allow passes the call through, deny blocks it and returns a reason the model can read, and ask routes it to the official approval seam.

dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#b30b4fb"

Rules live in .dsh/rules.yaml relative to the session working directory, with a global fallbackPath and optional searchUp to walk up toward the filesystem root. Matching covers tool-name globs, parameter key and value globs, workspace-relative path globs, agent selectors such as main or subagent, and network targets.

rules:
  - match: { tools: [bash], params: { command: "rm -rf*" } }
    action: deny
    reason: "No recursive deletes"
  - match: { tools: [edit, write], paths: ["**/.env*", "**/secrets/**"] }
    action: ask
    reason: "Secret files need confirmation"
  - match: { tools: ["mcp__*"] }
    action: ask
    reason: "MCP tools need confirmation"

Evaluation is first match wins, so a broad allow near the top quietly cancels every narrower rule under it. Write the denials first and the permissive rules last. The tool-name glob covers mcp__*, which is how you gate tools that came from a model context protocol (MCP) server rather than from the harness itself, and that matters as soon as you are running MCP servers on a VPS.

One behaviour to plan for: ask needs an answerer. On a headless profile nobody may be watching, so an ask rule can hold a run up until someone appears. Use deny for anything you would never approve, keep ask for the profile you sit in front of, and if you want approvals to work unattended you need a real answering path, which is the subject of gating AI agent actions with approvals.

dsh-defend: แล้วเรื่อง prompt injection และข้อมูลลับรั่วไหลล่ะ?

dsh-defend จะทำการสแกนที่จุดสำคัญ 3 จุด ได้แก่ ข้อความขาเข้าที่ agent/pre-step, อาร์กิวเมนต์ของเครื่องมือที่ tools/pre-execute ซึ่งรวมถึงระบบป้องกันการลบข้อมูลแบบทำลายล้าง และผลลัพธ์จากเครื่องมือที่ tools/post-execute จุดสุดท้ายนี้เป็นจุดที่น่าสนใจที่สุด เพราะเป็นจุดที่เนื้อหาซึ่งดึงมาจากหน้าเว็บจะถูกตรวจสอบก่อนที่โมเดลจะดำเนินการใดๆ กับเนื้อหานั้น

dsh plugin --profile web add "github:PerryLink/dsh-defend#7ba3427"

ค่าเริ่มต้นที่กำหนดมาจะเน้นความระมัดระวังมากกว่าความเข้มงวด โดยที่ detection.injectionAction, detection.jailbreakAction และ detection.secretAction จะถูกตั้งค่าเป็น ask ทั้งหมด ในขณะที่ detection.secretBlockCritical จะถูกตั้งค่าเป็น true ดังนั้นข้อมูลลับที่สำคัญจะถูกบล็อกไว้เสมอไม่ว่าการตั้งค่าอื่นๆ จะเป็นอย่างไร สำหรับเครื่องที่ไม่มีผู้ดูแล ให้เปลี่ยนการดำเนินการที่คุณให้ความสำคัญเป็น block เพราะการใช้ ask ในสถานการณ์ที่ไม่มีใครให้สอบถามนั้นไม่ใช่การตัดสินใจที่เหมาะสม

การออกแบบระบบตรวจสอบ (audit) ถือว่าทำได้ดี โดยเหตุการณ์ defend/detection จะบันทึกรหัสกฎ, ตระกูล, หมวดหมู่, ระดับความรุนแรง, การตัดสินใจ และข้อเท็จจริงในการสแกน แต่จะไม่บันทึกข้อความที่ตรวจพบ ส่วนข้อมูลลับจะถูกบันทึกเพียงแค่ประเภทเท่านั้น ดังนั้นการเปิดใช้งาน log การตรวจสอบจึงไม่เป็นการสร้างสำเนาของข้อมูลรับรองที่คุณพยายามปกป้องขึ้นมาใหม่

โปรดทำความเข้าใจให้ชัดเจนว่าสิ่งนี้ช่วยคุณได้อย่างไร การตรวจจับนั้นอิงตามกฎ และไฟล์ README ได้ระบุไว้อย่างชัดเจนว่าการใช้ถ้อยคำแบบใหม่หรือการโจมตีหลายขั้นตอนอาจหลุดรอดการตรวจสอบไปได้ ระบบนี้ช่วยลดอัตราการโจมตีที่ชัดเจนได้ แต่ไม่ได้ทำให้เอเจนต์มีความปลอดภัยเพียงพอที่จะนำไปใช้กับเนื้อหาที่ไม่น่าเชื่อถือ ดังนั้นคุณยังคงต้องรักษาการตั้งค่าสิทธิ์การเข้าถึงที่อยู่เบื้องล่างไว้เช่นเดิม

dsh-memory: เอเจนต์จำอะไรได้บ้างในวันพรุ่งนี้?

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

ตัวที่ผมแนะนำสำหรับเซิร์ฟเวอร์ขนาดเล็กคือรุ่นที่ใช้ SQLite มันจะลงทะเบียนเป็น memory โดยเก็บข้อมูลไว้ในไฟล์เดียวที่ $DSH_HOME/memory/memory.db ซึ่งใช้ร่วมกันได้ทุกโปรไฟล์ และเปิดใช้งาน memory_write, memory_search และ memory_forget การค้นหาจะเป็นแบบใช้คำสำคัญ (keyword-based) บนข้อความและแท็กที่จัดเก็บไว้ โดยไม่มีบริการ embedding, ไม่ต้องใช้ API key และไม่มีกระบวนการทำงานเบื้องหลังเพิ่มเติม

dsh plugin --profile web add "github:ben7am1n/dsh-memory#def7c6a"

การตั้งค่าที่คุณต้องปรับแต่งมีเพียงเล็กน้อย ได้แก่ path สำหรับไฟล์ฐานข้อมูล, promptRecentCount (ค่าเริ่มต้นคือ 10) สำหรับจำนวนหน่วยความจำที่ไม่ได้ปักหมุดที่จะถูกแทรกเข้าไป และ promptMaxChars (ค่าเริ่มต้นคือ 2000) สำหรับงบประมาณในการเรนเดอร์ ทั้งนี้มันต้องอาศัย node:sqlite ซึ่ง Node 22 และ 24 ยังคงระบุว่าเป็นฟีเจอร์ทดลอง ดังนั้นการอัปเกรด Node เป็นสิ่งที่ควรทดสอบก่อนใช้งานจริง ไม่ควรทึกทักเอาเองว่าใช้งานได้ทันที

นี่คือสิ่งที่หน่วยความจำส่งผลต่อเครื่องของคุณจริงๆ: หน่วยความจำที่ถูกแทรกจะเข้าไปอยู่ใน system prompt ในทุกรอบการสนทนา งบประมาณ 2000 ตัวอักษรหมายถึงการเพิ่ม input tokens อีกหลายร้อยตัวในทุกคำขออย่างต่อเนื่อง ซึ่งนั่นหมายถึงค่าใช้จ่ายที่เพิ่มขึ้นจริง และเป็นเหตุผลว่าทำไม dsh-budget จึงควรติดตั้งบนเครื่องก่อน dsh-memory ให้คอยดูแล promptMaxChars ให้กระชับและหมั่นลบข้อมูลที่ไม่จำเป็นออกด้วย memory_forget แทนที่จะปล่อยให้ไฟล์ขยายขนาดขึ้นเรื่อยๆ

รุ่นทางเลือกจะเก็บหน่วยความจำไว้ในไฟล์ YAML และทำการค้นหาแบบ embedding พร้อมการแทรก prompt อัตโนมัติ โดยติดตั้งด้วย dsh plugin --profile web add github:towzai/dsh-memory รุ่นนี้จำเป็นต้องมีอินสแตนซ์ ollama ในเครื่องและโมเดล embedding ซึ่งค่าเริ่มต้นคือ qwen3-embedding:0.6b และสามารถแทนที่ได้ด้วย DSH_MEMORY_EMBED_MODEL การเรียกคืนข้อมูลเชิงความหมาย (semantic recall) ทำได้ดีกว่าการใช้คำสำคัญ แต่นั่นหมายถึงต้องมีบริการที่สองและชุดน้ำหนักโมเดล (model weights) ที่ต้องทำงานอยู่บนเซิร์ฟเวอร์เดียวกัน ซึ่งสำหรับแผนบริการขนาดเล็กถือเป็นการดึงทรัพยากร RAM ไปจากงานหลักที่คุณเช่าเซิร์ฟเวอร์มาทำ ให้เลือกใช้รุ่นนี้ก็ต่อเมื่อคุณมี RAM เหลือเฟือเท่านั้น ข้อแลกเปลี่ยนทั่วไประหว่างคุณภาพการเรียกคืนข้อมูลและทรัพยากรที่ใช้ถูกอธิบายไว้ใน หน่วยความจำในเครื่องสำหรับเอเจนต์

dsh-web-lan-access: ควรให้เว็บ UI ฟังการเชื่อมต่อภายนอก loopback หรือไม่?

npx @deepseek-ai/dsh web ให้บริการอินเทอร์เฟซบน 127.0.0.1:3080 เบราว์เซอร์จะเปิดเผย crypto.randomUUID() เฉพาะในบริบทที่ปลอดภัยเท่านั้น ดังนั้นการโหลดหน้าเดียวกันผ่าน HTTP ธรรมดาจากเครื่องอื่นจึงล้มเหลว dsh-web-lan-access แก้ไขปัญหานี้โดยใช้ webServer.tapIndex เพื่อแทรก polyfill ขนาดเล็ก และเปลี่ยนการผูก (binding) ของเซิร์ฟเวอร์ไปที่ 0.0.0.0

โปรดอ่านคำเตือนของเครื่องมือก่อนติดตั้ง การผูกไว้ที่ 0.0.0.0 จะทำให้เอเจนต์เข้าถึงได้โดยไม่ต้องมีการยืนยันตัวตนจากทุกคนที่อยู่ในเครือข่ายท้องถิ่น (LAN) เดียวกัน และหากเป็นเซิร์ฟเวอร์ที่มี IP สาธารณะ นั่นหมายถึงทุกคนบนอินเทอร์เน็ต รายการเมธอดที่มีความละเอียดอ่อนจำนวนหนึ่ง (settings.*, credentials.*, llm.discoverModels) จะถูกจำกัดไว้ที่ loopback เท่านั้นและจะส่งค่า 403 กลับมาหากเรียกจากแหล่งที่มาภายนอก ซึ่งช่วยจำกัดความเสียหาย แต่วิธีนี้ไม่ได้ป้องกันปัญหาทั้งหมด เนื่องจากพื้นผิวการโจมตี (tool-calling surface) ยังคงเปิดอยู่สำหรับใครก็ตามที่พบพอร์ตดังกล่าว

โดยส่วนใหญ่แล้ว คุณไม่จำเป็นต้องใช้ปลั๊กอินนี้เลย ให้ใช้วิธี forward พอร์ตผ่าน SSH แทน

ssh -N -L 3080:127.0.0.1:3080 you@your-server

จากนั้นเปิด http://127.0.0.1:3080 ในเบราว์เซอร์บนเครื่องของคุณ ตัว harness จะยังคงฟังการเชื่อมต่อเฉพาะบน loopback เท่านั้น จึงไม่มีข้อมูลใดถูกเปิดเผย และเนื่องจากเบราว์เซอร์ถือว่า 127.0.0.1 เป็นแหล่งที่มาที่ปลอดภัย crypto.randomUUID() จึงใช้งานได้โดยไม่ต้องใช้ polyfill คำสั่งเดียวจบ ไม่ต้องใช้ปลั๊กอิน และไม่สร้างพื้นผิวการโจมตีใหม่

ให้ติดตั้งปลั๊กอินเฉพาะเมื่อการทำ forward ไม่สามารถตอบโจทย์ได้ เช่น เมื่อโทรศัพท์ที่อยู่ในเครือข่ายเดียวกันจำเป็นต้องเข้าถึง UI หากคุณจำเป็นต้องติดตั้ง ให้ผูกไว้หลังอินเทอร์เฟซเครือข่ายส่วนตัว (private network interface) พร้อมตั้งค่ากฎไฟร์วอลล์ที่อนุญาตเฉพาะอินเทอร์เฟซนั้น และระบุชื่อที่คุณจะใช้ภายใต้ trustedHosts ในรายการ web-runtime สำหรับการเข้าถึงแบบหลายผู้ใช้ที่แท้จริง ให้ใช้ dsh-passwords ซึ่งจะเพิ่มสิทธิ์ระดับผู้ใช้ย่อย (subuser), โควตาโทเค็นรายชั่วโมงและโควตาเวลาใช้งานรายวันต่อผู้ใช้ย่อย, การจัดการใบรับรอง TLS (transport layer security) อัตโนมัติผ่าน Let's Encrypt และบันทึกการตรวจสอบ (audit log) ที่เข้ารหัส ให้พิจารณาว่ามันเป็นแพลตฟอร์มมากกว่าปลั๊กอิน เพราะมันต้องการพอร์ต 80 และ 443 มีตัวติดตั้งของตัวเอง และวิธีติดตั้งแบบรวดเร็วตามเอกสารคือการส่ง shell script จากเครือข่ายเข้าสู่ bash โดยตรง แนะนำให้ใช้ npm install -g dsh-passwords ตามด้วย dsh-passwords install เพื่อให้โค้ดถูกบันทึกลงดิสก์ ซึ่งคุณสามารถตรวจสอบได้ก่อนที่จะสั่งรัน

วิธีการลบปลั๊กอินอย่างหมดจด

การถอนการติดตั้งมีสองขั้นตอน ซึ่งผู้ใช้มักข้ามขั้นตอนที่สองไป

dsh plugin --profile web remove dsh-budget
dsh plugin --profile web list

list ไม่ควรแสดงปลั๊กอินนั้นอีกต่อไป จากนั้นให้เปิด $DSH_HOME/profiles/web/cordis.patch.yml แล้วลบ insert block ที่เหลืออยู่ซึ่งระบุชื่อปลั๊กอินนั้นทิ้ง เนื่องจากรายการดังกล่าวเป็นตัวโหลดปลั๊กอินเข้าสู่โครงสร้างต้นไม้ (tree) ให้รีสตาร์ท harness เพื่อให้ระบบสร้างโครงสร้างต้นไม้ขึ้นใหม่ เพราะปลั๊กอินที่ถูกโหลดไปแล้วจะยังคงทำงานอยู่จนกว่าคุณจะรีสตาร์ท สุดท้ายโปรดจำไว้ว่าข้อมูลจะยังคงอยู่แม้โค้ดจะถูกลบไปแล้ว $DSH_HOME/memory/memory.db และ .dsh/rules.yaml จะยังคงอยู่หลังการถอนการติดตั้ง ให้คุณลบไฟล์เหล่านี้ด้วยตนเองหากเป้าหมายของคุณคือการลบข้อมูลทิ้งทั้งหมด

สิ่งที่ฉันอ่านและช่วงเวลาที่อ่าน

การอ้างอิงทั้งหมดในที่นี้คือ commit ไม่ใช่ branch เนื่องจาก main จะเป็นโค้ดที่แตกต่างออกไปเมื่อคุณอ่านเนื้อหานี้ ฉันอ่านข้อมูลทั้งหมดเมื่อวันที่ 17 สิงหาคม 2026 และตัว harness เองอยู่ที่ 0.1.0-rc.7 บน npm ในวันนั้น

commit ที่แน่นอนซึ่งอยู่เบื้องหลังรายการคัดสรรนี้
  • รายการปลั๊กอินของชุมชน ที่ f2918fb, 17 สิงหาคม 2026 ลิงก์ไว้เพียงครั้งเดียวตามวัตถุประสงค์ นี่เป็นเพียงสารบัญ และสารบัญไม่ใช่คำแนะนำ
  • dsh-budget ที่ 461d478, 17 สิงหาคม 2026 สัญญาอนุญาต Apache 2.0 ระบุ dsh 0.1.0-rc.6, Node 22.19 หรือ 24 ขึ้นไป
  • dsh-permission-rules ที่ b30b4fb, 17 สิงหาคม 2026 สัญญาอนุญาต Apache 2.0 ระบุ dsh 0.1.0-rc.5 ถึง 0.1.0-rc.6
  • dsh-defend ที่ 7ba3427, 17 สิงหาคม 2026 สัญญาอนุญาต Apache 2.0 ระบุ dsh 0.1.0-rc.6
  • dsh-memory ที่ def7c6a, 13 สิงหาคม 2026 สัญญาอนุญาต MIT สร้างด้วย SQLite
  • dsh-web-lan-access ที่ e27e909, 16 สิงหาคม 2026 สัญญาอนุญาต MIT

โปรดตรวจสอบค่าที่ระบุ (pin) เหล่านั้นอีกครั้งก่อนที่คุณจะคัดลอกคำสั่งไปใช้ ในระบบนิเวศที่เป็น developer-preview หมายเลขเวอร์ชันที่ระบุวันที่กำกับไว้เป็นสิ่งเดียวที่มีความหมายชัดเจน

FAQ

ฉันควรติดตั้ง DeepSeek Harness plugin ตัวใดก่อนบน VPS?

ให้ติดตั้ง dsh-budget และ dsh-permission-rules ก่อนเป็นอันดับแรก การกำหนดงบประมาณด้วย overLimit: block จะช่วยป้องกันไม่ให้การรันแบบอัตโนมัติใช้ทรัพยากรจนหมดทั้งคืน และไฟล์ .dsh/rules.yaml จะช่วยยับยั้งการเรียกใช้เครื่องมือที่คุณไม่อนุมัติ เพิ่ม dsh-defend เมื่อเอเจนต์เริ่มอ่านข้อมูลจากเว็บสาธารณะ และใช้ dsh-memory เมื่อคุณพบว่าตนเองต้องคัดลอกบริบทเดิมซ้ำๆ ในทุกเซสชัน สำหรับธีมและสถานะต่างๆ ให้ข้ามไปก่อน เพราะเป็นการเพิ่มโค้ดที่รันด้วยสิทธิ์ของเอเจนต์โดยไม่ได้เปลี่ยนการทำงานของเครื่อง

dsh plugin ถูกแยกส่วน (sandbox) ออกจาก harness หรือไม่?

ไม่ถูกแยกส่วน ปลั๊กอินจะโหลดเข้าสู่ Cordis tree เดียวกับ harness ในกระบวนการ (process) เดียวกัน ภายใต้ผู้ใช้ระบบปฏิบัติการเดียวกัน ด้วย credential ของโมเดลชุดเดียวกัน และทำงานบน working tree เดียวกัน ปลั๊กอินที่เชื่อมต่อกับ tools/pre-execute จะเห็นและสามารถบล็อกการเรียกใช้เครื่องมือทุกอย่างได้ ส่วนปลั๊กอินที่เชื่อมต่อกับ agent/pre-step จะเห็นข้อความของคุณ ดังนั้นควรตรวจสอบซอร์สโค้ด ตรวจสอบไลเซนส์และวันที่คอมมิตล่าสุด และติดตั้งโดยระบุ commit แทนการระบุ branch เพื่อป้องกันไม่ให้โค้ดถูกเปลี่ยนแปลงโดยที่คุณไม่ทราบ

dsh-budget จะหยุดการทำงานของเอเจนต์จริงๆ หรือแค่แจ้งเตือน?

ขึ้นอยู่กับการตั้งค่า overLimit ค่าเริ่มต้นคือ alert ซึ่งจะแจ้งเตือนที่ warnRatio แต่ยังคงให้ใช้งานต่อไปได้ ส่วน block จะปฏิเสธการเรียกใช้โมเดลเพิ่มเติมเมื่อถึงขีดจำกัด และ /budget unblock <scope> จะปลดล็อกเมื่อคุณเลือกที่จะดำเนินการต่อ ส่วน degrade จะสลับไปใช้โมเดลที่ราคาถูกกว่าจากแผนผัง degradation มีข้อจำกัดที่สำคัญคือ ยอดรวมจะถูกคำนวณในกระบวนการที่กำลังรันอยู่จาก session event stream ดังนั้นการรีสตาร์ท harness จะทำให้ยอดรวมถูกรีเซ็ต และการรีสตาร์ทแบบวนซ้ำจะทำให้ขีดจำกัดรายวันใช้งานไม่ได้ผล ควรตั้งค่าขีดจำกัดการใช้จ่ายที่บัญชีผู้ให้บริการไว้เป็นเพดานที่แท้จริง

ฉันจะลบ dsh plugin ออกอย่างถาวรได้อย่างไร?

ให้รันคำสั่ง dsh plugin --profile web remove <package-name> ยืนยันด้วย dsh plugin --profile web list จากนั้นเปิดไฟล์ $DSH_HOME/profiles/web/cordis.patch.yml แล้วลบ insert block ที่เหลืออยู่ของปลั๊กอินนั้นออก เพราะรายการดังกล่าวคือสิ่งที่โหลดปลั๊กอินขึ้นมา จากนั้นรีสตาร์ท harness เพื่อให้ปลั๊กอิน tree ถูกสร้างใหม่ ข้อมูลที่เขียนโดยปลั๊กอินจะยังคงอยู่บนดิสก์: ทั้ง $DSH_HOME/memory/memory.db และ .dsh/rules.yaml จะยังคงอยู่หลังการถอนการติดตั้งจนกว่าคุณจะลบออกด้วยตนเอง

การเปิดเผย dsh web UI ผ่านเครือข่ายมีความปลอดภัยหรือไม่?

ไม่ปลอดภัยหากทำเพียงลำพัง dsh web จะฟังการเชื่อมต่อที่ 127.0.0.1:3080 และ dsh-web-lan-access จะเปลี่ยนการผูก (binding) นั้นไปที่ 0.0.0.0 ไฟล์ README ของตัวมันเองระบุว่าการทำเช่นนี้จะทำให้เอเจนต์สามารถเข้าถึงได้โดยไม่มีการตรวจสอบสิทธิ์จากทุกคนในเครือข่ายเดียวกัน และหากเป็น public IP ก็หมายถึงการเข้าถึงได้จากอินเทอร์เน็ต วิธีการบางอย่าง (settings.*, credentials.*, llm.discoverModels) จะถูกตรึงไว้ที่ loopback และส่งค่า 403 กลับเมื่อมีการเรียกจากภายนอก ซึ่งช่วยลดความเสียหายแต่ไม่ได้หยุดการเข้าถึงโดยสิ้นเชิง ควรใช้ SSH port forward, ssh -N -L 3080:127.0.0.1:3080 you@your-server หรือวางพอร์ตไว้หลัง private network interface ร่วมกับกฎของไฟร์วอลล์ และเพิ่มการตรวจสอบสิทธิ์ที่แท้จริงก่อนที่จะอนุญาตให้เข้าถึงจากภายนอกได้