วิธีตั้งค่า dsh: API keys, models และ endpoints บน Linux
เรียนรู้วิธีตั้งค่า dsh บน Linux ตั้งแต่การใส่ DeepSeek API key ไปจนถึงการเชื่อมต่อ Ollama endpoint พร้อมรายละเอียดไฟล์ config และข้อมูลที่ถูกส่งออกจากเครื่องของคุณอย่างชัดเจน
ตำแหน่งที่ dsh เก็บการตั้งค่า
dsh (DeepSeek Harness) เก็บการตั้งค่าไว้ในไดเรกทอรีเดียวคือ $DSH_HOME ซึ่งโดยปกติจะอยู่ที่ ~/.dsh ข้อมูลใดก็ตามที่คุณตั้งค่าผ่าน Web UI จะถูกบันทึกไว้ที่นั่นในรูปแบบไฟล์ข้อความธรรมดา หากคุณคัดลอกไดเรกทอรีดังกล่าวไปยังเซิร์ฟเวอร์อื่น เครื่องใหม่จะทำงานเหมือนกับเครื่องเดิมทุกประการ
มี 4 เส้นทางหลักที่คุณจะต้องใช้งาน:
~/.dsh/settings.yamlเก็บการตั้งค่าที่เขียนขึ้นเองและที่สร้างจาก UI รวมถึงเส้นทางของผู้ให้บริการ (provider) และโมเดล (model) ของคุณ~/.dsh/.credentials.yamlเก็บข้อมูลลับ (secrets) โดยการตั้งค่าจะเก็บเพียงการอ้างอิงถึงข้อมูลประจำตัวเท่านั้น ดังนั้นค่าของคีย์จะถูกเก็บไว้ในไฟล์นี้~/.dsh/profiles/เก็บโปรไฟล์ที่ตั้งชื่อไว้ และ~/.dsh/storages/เก็บเซสชันที่บันทึกไว้~/.dsh/cordis.patch.ymlคือเลเยอร์สำหรับการแก้ไข (patch layer) ของคุณเอง ซึ่งจะถูกนำไปใช้ทับการตั้งค่ามาตรฐานสำหรับทุกโปรไฟล์
DeepSeek ได้ประกาศเปิดตัว harness นี้ในฐานะ developer preview ภายใต้สัญญาอนุญาต MIT เมื่อวันที่ 17 สิงหาคม 2026 และไฟล์ README ระบุว่าจะมีการเปลี่ยนแปลงที่ส่งผลต่อความเข้ากันได้ (compatibility-breaking changes) ชื่อฟิลด์และเส้นทางในคู่มือนี้ตรงกับเอกสารใน repository ณ เดือนสิงหาคม 2026 โปรดตรวจสอบข้อมูลกับเอกสารของเวอร์ชันที่คุณติดตั้งก่อนที่จะคัดลอกการตั้งค่าจากคู่มือใดๆ รวมถึงคู่มือนี้ด้วย เนื่องจากเวอร์ชัน preview อาจมีการเปลี่ยนชื่อสิ่งต่างๆ ระหว่างการปล่อย release ใหม่
ข้อกำหนดขั้นต่ำที่จำเป็นสำหรับการเริ่มต้นใช้งาน
dsh ต้องการ Node.js เวอร์ชัน 22.19 ขึ้นไปในสายการพัฒนา 22 หรือเวอร์ชัน 24 ขึ้นไป โดย Node 23 จะไม่อยู่ในกลุ่มที่รองรับ ให้ตรวจสอบเวอร์ชันก่อนเสมอ เพราะความไม่เข้ากันของเวอร์ชันจะทำให้โปรแกรมล้มเหลวตั้งแต่เริ่มทำงาน และข้อความแสดงข้อผิดพลาดอาจทำให้เข้าใจผิดว่าเป็นแพ็กเกจที่เสียหาย
node -v
npx @deepseek-ai/dsh webnpx จะดาวน์โหลดแพ็กเกจจาก npm registry และเริ่มการทำงานของ Web UI บน http://127.0.0.1:3080 โดยโปรแกรมจะผูกกับ loopback address ซึ่งหมายความว่าพอร์ตนี้จะไม่สามารถเข้าถึงได้จากเครื่องอื่นแม้ว่า firewall ของคุณจะอนุญาตก็ตาม สำหรับการใช้งานบน VPS ให้ใช้วิธี forward พอร์ตผ่าน SSH แทนการเปิดพอร์ต 3080 สู่สาธารณะ
ssh -N -L 3080:127.0.0.1:3080 you@your-serverเปิด http://127.0.0.1:3080 บนแล็ปท็อปของคุณ จากนั้นไปที่เมนู Settings และ Models ในการ์ด DeepSeek จะมีช่องสำหรับใส่ API key ให้คัดลอกคีย์จาก platform.deepseek.com มาวางแล้วบันทึก เส้นทางของโมเดลจะพร้อมใช้งานทันทีโดยไม่ต้องรีสตาร์ท เนื่องจากเซิร์ฟเวอร์ที่ทำงานอยู่จะจัดเก็บข้อมูลรับรองและตรวจสอบการอ้างอิงแบบเรียลไทม์ เนื้อหา การเข้าถึง dsh Web UI บนเซิร์ฟเวอร์ระยะไกล จะครอบคลุมเรื่องการทำ tunnel และการใช้ reverse proxy ส่วน การติดตั้ง DeepSeek Harness บน VPS จะครอบคลุมการเตรียมเซิร์ฟเวอร์ตามที่คู่มือนี้กำหนดไว้
หลังจากบันทึกแล้ว ให้ตรวจสอบสิ่งที่แอปพลิเคชันสร้างขึ้น
ls -la ~/.dsh
stat -c '%a %n' ~/.dsh/.credentials.yamlคุณควรจะเห็น settings.yaml, .credentials.yaml และ profiles/ หาก stat แสดงโหมดอื่นที่ไม่ใช่ 600 ให้รันคำสั่ง chmod 600 ~/.dsh/.credentials.yaml การปล่อยให้ไฟล์ credentials มีสิทธิ์อ่านได้โดยกลุ่มหรือทุกคนในระบบ จะทำให้บัญชีผู้ใช้อื่นบนเครื่องสามารถเข้าถึงคีย์ของคุณได้
สำหรับการรันครั้งแรกโดยไม่ใช้เบราว์เซอร์ สามารถใช้คำสั่งเดียวได้ดังนี้
npx @deepseek-ai/dsh --profile headless "summarise the files in this directory"โปรไฟล์แบบ headless จะรันเพียงหนึ่งเซสชันและแสดงคำตอบสุดท้ายออกมา
ตัวแปรสภาพแวดล้อมหรือไฟล์คอนฟิกูเรชัน
มีสองวิธีในการระบุคีย์ให้กับ dsh ซึ่งไม่สามารถใช้แทนกันได้
ผู้ให้บริการแคตตาล็อก (เช่น DeepSeek, Anthropic, OpenAI และรายการอื่นๆ ที่มีมาให้ในตัว) จะรับคีย์ผ่านหน้า Models โดยค่าจะถูกเก็บไว้ใน ~/.dsh/.credentials.yaml และการตั้งค่าของคุณจะเก็บเพียงการอ้างอิงถึงคีย์นั้นไว้เท่านั้น Web UI จะไม่แสดงคีย์ดังกล่าวอีกหลังจากที่คุณบันทึกแล้ว
ผู้ให้บริการแบบกำหนดเอง (custom provider) สามารถระบุชื่อตัวแปรสภาพแวดล้อมแทนได้ โดยใช้ apiKeyEnv ซึ่งเป็นรูปแบบที่เอกสารระบุไว้สำหรับ ~/.dsh/settings.yaml
llm-pi-ai:
providers:
my-gateway:
apiKeyEnv: GATEWAY_API_KEY
api: openai-completions
baseURL: https://gateway.example/v1
models:
- id: legacy-chat
- id: vision-preview
input: [text, image]ให้เพิ่มผู้ให้บริการผ่าน Web UI ก่อน จากนั้นเปิด ~/.dsh/settings.yaml แล้วคัดลอกโครงสร้างที่ไฟล์นั้นเขียนไว้ ในระหว่างช่วง developer preview โครงสร้างแบบซ้อน (nesting) เป็นส่วนที่มีโอกาสเปลี่ยนแปลงได้มากที่สุด และไฟล์ที่แอปเพิ่งเขียนขึ้นมาจะเป็นเวอร์ชันล่าสุดเสมอ
apiKeyEnv จะถูกอ่านจากสภาพแวดล้อมของกระบวนการ dsh ไม่ใช่จาก login shell ของคุณ คีย์ที่ถูก export ไว้ในเซสชันแบบโต้ตอบ (interactive session) จะไม่ปรากฏให้เห็นใน systemd unit ดังนั้นคอนฟิกูเรชันเดียวกันที่ทำงานได้เมื่อคุณพิมพ์ dsh web ด้วยตนเอง จะส่งผลลัพธ์เป็น MISSING_CREDENTIAL เมื่อทำงานภายใต้ service ดังนั้นคุณควรสร้างไฟล์แยกต่างหากให้กับ unit นั้น
[Service]
EnvironmentFile=/etc/dsh/dsh.envให้เก็บไฟล์ดังกล่าวไว้ที่โหมด 600 โดยกำหนดให้ผู้ใช้ที่รัน service เป็นเจ้าของไฟล์
การเลือกโมเดลและ ID ที่ไม่สามารถเปลี่ยนชื่อได้
ผู้ให้บริการที่กำหนดค่าไว้ทั้งหมดจะปรากฏในตัวเลือกโมเดล การเลือกโมเดลจะทำให้โมเดลนั้นกลายเป็นค่าเริ่มต้นสำหรับเซสชันใหม่ ส่วนเซสชันที่มีอยู่เดิมจะยังคงบันทึกโมเดลที่ใช้ไว้ ดังนั้นการสลับโมเดลจะไม่ส่งผลต่อการเขียนทับบทสนทนาเก่า
Provider ID เป็นค่าถาวร คำขอ, เซสชันที่บันทึกไว้, ค่าเริ่มต้นของโมเดล และการอ้างอิงข้อมูลประจำตัวทั้งหมดจะชี้ไปยัง ID นี้ จึงไม่มีปุ่มสำหรับเปลี่ยนชื่อ การเปลี่ยน ID หมายถึงการสร้างผู้ให้บริการรายใหม่และลบรายเก่าทิ้ง ควรเลือกชื่อที่คุณสามารถใช้งานได้ในระยะยาว เช่น local-ollama แทนที่จะเป็น test2
โมเดลจะรองรับเฉพาะข้อความเว้นแต่คุณจะระบุเป็นอย่างอื่น ให้เพิ่ม input: [text, image] ลงในรายการโมเดลเพื่อประกาศการรองรับรูปภาพ หรือตั้งค่า defaultInput ที่ระดับ route เพื่อเป็นค่าสำรองสำหรับโมเดลที่ไม่มีระบุไว้ในแคตตาล็อก เส้นทาง chat-completions ของ DeepSeek รองรับเฉพาะข้อความและไม่สามารถกำหนดค่าเป็นอย่างอื่นได้ ดังนั้นรูปภาพที่แนบไปยังเส้นทางดังกล่าวจะถูกปฏิเสธก่อนที่จะมีการส่งข้อมูลใดๆ ออกไป
ชี้ dsh ไปยัง endpoint ในเครื่องเพื่อให้โค้ดของคุณทำงานอยู่บนเซิร์ฟเวอร์เดิม
Ollama ให้บริการ API ที่รองรับมาตรฐาน OpenAI บน http://127.0.0.1:11434/v1 โดย dsh สามารถสื่อสารกับ base URL ใดๆ ที่รองรับมาตรฐาน OpenAI ผ่านตัวให้บริการแบบกำหนดเอง ทำให้ทั้งสองเชื่อมต่อกันได้โดยตรงโดยไม่ต้องมีตัวกลาง ให้ตั้งค่าเซิร์ฟเวอร์โมเดลก่อน โดย การ self-host LLM ด้วย Ollama บน VPS จะครอบคลุมขั้นตอนการติดตั้งและการดึงโมเดล
ตรวจสอบให้แน่ใจว่า endpoint ตอบสนองก่อนที่จะเริ่มใช้งาน dsh
ollama list
curl -s http://127.0.0.1:11434/v1/modelsollama list จะแสดงแท็กที่ถูกต้องของทุกโมเดลที่คุณดึงมา ให้คัดลอกสตริงนั้นไว้ ส่วน curl จะส่งคืนรายการโมเดลในรูปแบบ JSON หากรายการว่างเปล่าหมายความว่า Ollama กำลังทำงานอยู่แต่ยังไม่ได้ดึงโมเดลใดๆ หากขึ้น Connection refused หมายความว่า Ollama ไม่ได้ทำงานอยู่ หรือไม่ได้ฟังพอร์ต 11434
จากนั้นให้เพิ่มตัวให้บริการ Ollama ต้องการฟิลด์ API key แต่จะเพิกเฉยต่อค่าที่ใส่ ดังนั้นสตริงใดๆ ที่ไม่ว่างเปล่าสามารถใช้ได้
llm-pi-ai:
providers:
local-ollama:
apiKeyEnv: OLLAMA_API_KEY
api: openai-completions
baseURL: http://127.0.0.1:11434/v1
models:
- id: <the exact tag printed by ollama list>ส่งออกตัวแปร (export) เพื่อให้กระบวนการของ dsh มองเห็นตัวแปรดังกล่าว
sudo install -d -m 700 /etc/dsh
printf 'OLLAMA_API_KEY=ollama\n' | sudo tee /etc/dsh/dsh.env
sudo chmod 600 /etc/dsh/dsh.envความล้มเหลว 3 ประการต่อไปนี้ครอบคลุมเกือบทุกปัญหาที่อาจเกิดขึ้น MISSING_CREDENTIAL หมายความว่า dsh ไม่สามารถอ่านตัวแปรที่ระบุโดย apiKeyEnv ได้ ให้ตรวจสอบ environment ของกระบวนการนั้น ไม่ใช่ environment ของเทอร์มินัลของคุณ UNKNOWN_MODEL หมายความว่า id ไม่ตรงกับโมเดลที่กำหนดค่าไว้ ให้เปรียบเทียบกับ ollama list ทีละตัวอักษร รวมถึงแท็กหลังเครื่องหมายโคลอนด้วย หากเกิดข้อผิดพลาด 401 ขณะดึงรายการโมเดล แสดงว่าเกิดจากการค้นหาโมเดล (model discovery) ซึ่งจะเรียก GET /models บน base URL ของคุณ หาก endpoint ไม่รองรับ path ดังกล่าว คุณจำเป็นต้องพิมพ์ชื่อโมเดลด้วยตนเอง
อีกหนึ่งจุดที่มักพลาดคือ base URL อย่าลืมใส่ /v1 ต่อท้าย มิฉะนั้นคำขอจะส่งไปยัง path ที่ Ollama ไม่รองรับ ทำให้ได้รับข้อผิดพลาด 404 และโมเดลจะไม่ทำงาน ส่วนต่อท้ายนี้เป็นส่วนหนึ่งของอินเทอร์เฟซที่รองรับ OpenAI ไม่ใช่แค่ส่วนตกแต่ง
หาก Ollama ทำงานบนเครื่องอื่น ที่อยู่ของเครื่องนั้นจะกลายเป็น base URL และ prompt ของคุณจะถูกส่งผ่านเครือข่ายในรูปแบบข้อความธรรมดา (cleartext) ผ่าน HTTP ปกติ ควรเก็บไว้บนโฮสต์เดียวกัน หรือวางไว้หลัง TLS (transport layer security) และการยืนยันตัวตน: การจำกัดสิทธิ์ endpoint ของ Ollama ที่เปิดเผยสู่สาธารณะ
สิ่งที่ถูกส่งออกจากเครื่องในแต่ละโหมด
เมื่อใช้ DeepSeek key ทุกคำขอจะถูกส่งไปยัง API ของ DeepSeek คำขอดังกล่าวจะประกอบด้วย prompt ของคุณ, เนื้อหาของไฟล์ที่ agent อ่านเพื่อตอบคำถาม, ผลลัพธ์ของคำสั่งที่ agent เรียกใช้ และผลลัพธ์จากเครื่องมือใดๆ ที่ agent เลือกนำมาใช้ ซอร์สโค้ดของคุณจะอยู่ใน payload นั้นเสมอหาก agent มีการเปิดไฟล์ นี่คือลักษณะการทำงานของ hosted model และเป็นเหตุผลที่คุณควรพิจารณาว่าคุณเริ่มการทำงานของ agent ในไดเรกทอรีใด
หากใช้ผู้ให้บริการ catalog รายอื่นหรือ gateway ของบริษัท payload เดียวกันจะถูกส่งไปยังผู้ให้บริการรายนั้นแทน โดย base URL จะระบุปลายทางไว้อย่างชัดเจน
ในกรณีของ local endpoint คำขอโมเดลจะถูกส่งไปยัง 127.0.0.1:11434 และคงอยู่ภายในเครื่องเท่านั้น ไม่มีส่วนใดของโค้ดคุณที่ถูกส่งไปยังผู้ให้บริการโมเดล อย่างไรก็ตาม ยังมีข้อมูล 3 ส่วนที่อาจมีการรับส่งผ่านเครือข่าย: npx จะดาวน์โหลดแพ็กเกจจาก npm registry, เครื่องมือใดๆ ที่ agent เรียกใช้สามารถเข้าถึงอินเทอร์เน็ตได้ด้วยตัวเอง รวมถึงเซิร์ฟเวอร์ MCP (model context protocol) ที่คุณเชื่อมต่อไว้ ซึ่งอธิบายรายละเอียดไว้ใน การรันเซิร์ฟเวอร์ MCP บน VPS และสุดท้ายคือ telemetry หากคุณเปิดใช้งาน
Telemetry จะถูกปิดไว้จนกว่าคุณจะเลือกเปิดใช้งาน DSH_TELEMETRY_MODE คือสวิตช์สำหรับให้ความยินยอม โดยค่าที่ไม่ได้ตั้งค่า, ว่างเปล่า หรือไม่เป็นที่รู้จัก จะถูกตีความว่าเป็น DISABLED ในสถานะนี้ dsh จะไม่สร้าง OpenTelemetry (OTel) provider, processor หรือ exporter ดังนั้น profile ใหม่จะไม่มีการส่งคำขอเครือข่ายสำหรับ telemetry เลย FEEDBACK_ONLY คือการเลือกเปิดใช้งานการแชร์ log ของเซสชันที่เกิดจาก feedback ส่วน FULL จะอนุญาตให้มีการรายงานจาก launcher ข้อมูล session feed อาจส่งออกเนื้อหาของเซสชัน, ข้อมูลเครื่องมือ, prompt และ path ของ workspace ดังนั้นให้ถือว่า FULL คือการส่งงานของคุณไปยัง DeepSeek
สำหรับการหยุดการทำงานแบบเด็ดขาดที่ไม่ขึ้นอยู่กับการตั้งค่า string ของโหมด ให้ตั้งค่า DSH_TELEMETRY_DISABLED=1 ค่าใดๆ ที่ไม่ว่างเปล่าถือเป็นการปฏิเสธการใช้งาน (opt-out) ที่มีผลบังคับใช้ และระบบจะอ่านค่านี้ก่อนเริ่มการทำงาน ดังนั้นโค้ดในโปรเจกต์จะไม่สามารถเปิดใช้งานกลับมาได้ในระหว่างเซสชัน ที่อยู่ของ collector เริ่มต้นคือ harness-telemetry.deepseeksvc.com ซึ่งเป็นชื่อที่มีประโยชน์ในการตรวจสอบเมื่อคุณอ่าน log ของ firewall ของคุณเอง
จงตรวจสอบแทนการเชื่อมั่นในการตั้งค่าเพียงอย่างเดียว ในขณะที่งานกำลังรันอยู่ ให้แสดงรายการการเชื่อมต่อขาออกที่กระบวนการนั้นถือครองอยู่
sudo ss -tnp | grep -i nodeในโหมด local-model คุณควรเห็นการเชื่อมต่อแบบ loopback ไปยัง 11434 และต้องไม่มีการเชื่อมต่อกับที่อยู่สาธารณะใดๆ หากพบสิ่งอื่นนอกเหนือจากนี้ ควรตรวจสอบให้แน่ชัดก่อนดำเนินการต่อ สิ่งที่ coding agent ส่งกลับบ้าน จะอธิบายการตรวจสอบแบบเดียวกันกับเครื่องมืออื่นและอธิบายวิธีอ่านผลลัพธ์
สถานที่ที่ไม่ควรเก็บข้อมูลความลับ
- ประวัติการใช้งาน Shell:
export DEEPSEEK_API_KEY=sk-...จะถูกบันทึกไว้ใน~/.bash_historyในรูปแบบข้อความธรรมดา และจะยังคงอยู่ที่นั่นนานหลังจากที่คุณเปลี่ยนกุญแจแล้ว ให้เว้นวรรคหน้าคำสั่งเมื่อตั้งค่าHISTCONTROL=ignorespaceไว้ หรือข้ามการใช้ shell แล้วเขียนค่าลงในไฟล์โดยตรงด้วยสิทธิ์ 600 - ไฟล์ dotfiles ที่ถูก commit: กุญแจที่อยู่ใน
~/.bashrcหรือ~/.zshrcอาจหลุดไปยัง repository สาธารณะได้ด้วยการสั่งgit addเพียงครั้งเดียว หากคุณเก็บ dotfiles ไว้ใน git ให้รันgit grep -I -n 'sk-'ใน repository นั้นก่อนทำการ push settings.yaml: ให้ใช้apiKeyEnvสำหรับผู้ให้บริการแบบกำหนดเอง เพื่อให้ไฟล์เก็บเพียงชื่อตัวแปรแทนที่จะเป็นข้อมูลความลับ ไฟล์ตั้งค่ามักถูกคัดลอกไปวางในรายงานปัญหาหรือแชทสนับสนุน แต่ไฟล์ข้อมูลประจำตัวไม่ควรทำเช่นนั้น- ผลลัพธ์ของ
envและภาพหน้าจอของ terminal: ทุกสิ่งที่แสดง environment ทั้งหมดออกมาจะแสดงกุญแจออกมาด้วย - การสำรองข้อมูล:
~/.dshเป็นสิ่งที่ควรสำรองข้อมูล แต่.credentials.yamlที่อยู่ภายในนั้นเป็นข้อมูลความลับที่ใช้งานจริง ให้ยกเว้นไฟล์ดังกล่าวหรือเข้ารหัสไฟล์สำรองข้อมูลนั้น
กฎเหล่านี้ไม่ได้จำกัดอยู่แค่ dsh และ การเก็บข้อมูลความลับไว้นอกไฟล์ env ของ Compose ได้ครอบคลุมปัญหาเดียวกันในฝั่ง container ของเซิร์ฟเวอร์เดียวกัน
การใช้งานรุ่น Developer Preview
ให้ล็อกเวอร์ชันที่คุณทดสอบไว้ เนื่องจากรุ่น Preview อาจมีการเปลี่ยนแปลงคีย์การตั้งค่าในรุ่น Patch ซึ่งจะทำให้ Provider ของคุณโหลดค่าไม่สำเร็จ เก็บไฟล์ settings.yaml และ cordis.patch.yml ไว้ในระบบ Version Control โดยยกเว้นไฟล์ Credentials ไว้ เพื่อให้คุณสามารถตรวจสอบการเปลี่ยนแปลงได้หลังจากการอัปเกรด
มีแฟล็ก 2 ตัวที่ช่วยได้เมื่อโปรไฟล์ทำงานไม่ถูกต้อง --dump-default-config จะแสดงการตั้งค่าเริ่มต้นที่รวมไว้แล้วโดยไม่ต้องบูตระบบ และ --dump-config จะแสดงการตั้งค่าที่รวมไว้สำหรับโปรไฟล์ของคุณในลักษณะเดียวกัน การเปรียบเทียบทั้งสองค่าจะแสดงให้เห็นว่าเลเยอร์ Patch ของคุณเปลี่ยนแปลงอะไรไปบ้าง ซึ่งทำได้รวดเร็วกว่าการอ่านเลเยอร์ด้วยตนเอง
dsh --profile web --dump-configเมื่อเกิดปัญหาหลังจากการอัปเกรด ให้รันคำสั่งดังกล่าวเป็นอันดับแรก คีย์ที่ถูกย้ายตำแหน่งระหว่างรุ่นจะปรากฏเป็นกิ่ง (branch) ที่หายไปในข้อมูลที่แสดงออกมา และการแก้ไขทำได้เพียงแค่การแก้ไขบรรทัดเดียว แทนที่จะต้องติดตั้งใหม่ทั้งหมด
FAQ
dsh เก็บ DeepSeek API key ของฉันไว้ที่ไหน?
เก็บไว้ใน $DSH_HOME/.credentials.yaml ซึ่งโดยปกติคือ ~/.dsh/.credentials.yaml เว้นแต่คุณจะกำหนด DSH_HOME ด้วยตนเอง หน้า Models จะเขียนคีย์ลงในไฟล์ดังกล่าว และการตั้งค่าของคุณจะเก็บเพียงการอ้างอิงถึงคีย์นั้นไว้เท่านั้น ดังนั้นข้อมูลลับจะถูกเก็บไว้ในไฟล์เดียว ตรวจสอบโหมดของไฟล์ด้วย stat -c '%a %n' ~/.dsh/.credentials.yaml และตั้งค่าเป็น 600 หากโหมดเดิมมีสิทธิ์เข้าถึงที่กว้างกว่านั้น ผู้ให้บริการแบบกำหนดเอง (custom provider) สามารถหลีกเลี่ยงการใช้ไฟล์นี้ได้โดยการระบุชื่อ environment variable ด้วย apiKeyEnv
ฉันจะตั้งค่าให้ dsh ใช้โมเดลภายในเครื่องแทน DeepSeek API ได้อย่างไร?
ให้เพิ่ม custom provider โดยระบุ base URL เป็น endpoint ภายในเครื่องที่รองรับ OpenAI สำหรับ Ollama ให้ใช้ http://127.0.0.1:11434/v1 พร้อมด้วย api: openai-completions และชื่อโมเดล id ที่คัดลอกมาจาก ollama list อย่างถูกต้อง Ollama ต้องการค่า API key แต่จะเพิกเฉยต่อค่านั้น ดังนั้นคุณสามารถใส่สตริงใดก็ได้ที่ไม่ว่างเปล่า ตรวจสอบว่า endpoint ตอบสนองด้วย curl -s http://127.0.0.1:11434/v1/models ก่อนที่จะแก้ไขไฟล์ config ของ dsh เพราะ endpoint ที่ใช้งานไม่ได้และ config ที่ผิดพลาดมักจะแสดงข้อผิดพลาดที่คล้ายคลึงกัน
dsh ส่งโค้ดของฉันไปที่อื่นโดยค่าเริ่มต้นหรือไม่?
หากใช้โมเดลแบบ hosted คำตอบคือใช่ prompt และเนื้อหาของไฟล์ที่ agent อ่านจะถูกรวมอยู่ในคำขอ API ที่ส่งไปยังผู้ให้บริการรายนั้น หากใช้ endpoint ภายในเครื่อง คำขอจะถูกส่งผ่าน loopback และคงอยู่ภายในเครื่องเท่านั้น ส่วน telemetry เป็นข้อมูลแยกต่างหากและถูกปิดไว้โดยค่าเริ่มต้น โดย DSH_TELEMETRY_MODE จะมีค่าเป็น DISABLED เมื่อไม่ได้ตั้งค่า และในสถานะนี้จะไม่มีการสร้าง exporter ขึ้นมา ให้ตั้งค่า DSH_TELEMETRY_DISABLED=1 หากต้องการเลือกไม่เข้าร่วม (opt-out) ซึ่งระบบจะอ่านค่านี้ก่อนเริ่มการทำงาน
ทำไม dsh ถึงแจ้งเตือน MISSING_CREDENTIAL ทั้งที่ฉันตั้งค่าตัวแปรไว้แล้ว?
เนื่องจาก dsh อ่านตัวแปรที่ระบุโดย apiKeyEnv จาก environment ของกระบวนการ (process) ของตัวมันเอง ตัวแปรที่ export ใน shell ของคุณจะไม่ส่งผลไปยัง systemd service, session ของผู้ใช้อื่น หรือกระบวนการที่เริ่มทำงานก่อนที่คุณจะ export ตัวแปรนั้น ให้ใส่ค่าดังกล่าวไว้ใน EnvironmentFile ที่มีโหมด 600 สำหรับ unit นั้น หรือ export ตัวแปรใน shell เดียวกันกับที่เริ่มการทำงานของ dsh ตรวจสอบว่ากระบวนการที่กำลังทำงานอยู่มีค่าตัวแปรใดด้วย sudo tr '\0' '\n' < /proc/$(pgrep -f dsh | head -1)/environ
dsh ต้องการ Node.js เวอร์ชันใด?
Node.js 22.19 หรือใหม่กว่าในสาย 22 หรือเวอร์ชัน 24 ขึ้นไป ส่วน Node 23 อยู่นอกเหนือช่วงที่รองรับ ให้รัน node -v ก่อนดำเนินการอื่นใด เพราะความล้มเหลวในการเริ่มต้นเนื่องจาก runtime ที่ไม่รองรับอาจดูเหมือนการติดตั้งที่เสียหาย และทำให้ผู้ใช้พยายามติดตั้งแพ็กเกจใหม่แทนที่จะแก้ไขที่ตัว runtime