วิธีตั้งค่า dsh: เชื่อมต่อ API Key และ Ollama บน Linux
คู่มือการตั้งค่า dsh บน Linux ตั้งแต่การระบุตำแหน่งไฟล์ config.json และ secrets.json ไปจนถึงการเชื่อมต่อ DeepSeek API หรือ Ollama พร้อมคำอธิบายข้อมูลที่ถูกส่งออกจากเครื่อง
ตำแหน่งที่ 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) ของคุณเอง ซึ่งจะถูกนำไปใช้ทับการตั้งค่าเริ่มต้นสำหรับทุกโปรไฟล์
DeepSeek ได้ประกาศเปิดตัว harness นี้ในฐานะ developer preview ภายใต้สัญญาอนุญาต MIT เมื่อวันที่ 17 สิงหาคม 2026 และไฟล์ README ระบุว่าจะมีการเปลี่ยนแปลงที่ส่งผลต่อความเข้ากันได้ (compatibility-breaking changes) ชื่อฟิลด์และเส้นทางไฟล์ในคู่มือนี้ตรงกับเอกสารใน repository ณ เดือนสิงหาคม 2026 โปรดตรวจสอบข้อมูลเหล่านี้กับเอกสารของเวอร์ชันที่คุณติดตั้งก่อนที่จะคัดลอกการตั้งค่าจากคู่มือใดๆ รวมถึงคู่มือนี้ด้วย เนื่องจากซอฟต์แวร์รุ่น preview มักมีการเปลี่ยนชื่อเรียกต่างๆ ระหว่างการออกรุ่น (releases)
สิ่งที่จำเป็นขั้นต่ำสำหรับการเริ่มต้นใช้งาน
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 โดยโปรแกรมจะผูก (bind) เข้ากับ loopback address ซึ่งหมายความว่าพอร์ตดังกล่าวจะไม่สามารถเข้าถึงได้จากเครื่องอื่นแม้ว่า firewall ของคุณจะอนุญาตก็ตาม สำหรับการใช้งานบน VPS ให้ใช้วิธี forward ผ่าน SSH แทนการเปิดพอร์ต 3080 สู่สาธารณะ หาก URL ที่แสดงผลทำให้เกิดความสับสน เหตุผลที่ dsh เริ่มทำงานบน address นั้น จะอธิบายถึงสิ่งที่การผูกกับ loopback ป้องกันและสิ่งที่ไม่ได้ป้องกัน
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 การตั้งค่าไฟล์ข้อมูลรับรองให้กลุ่มอื่นหรือทุกคนสามารถอ่านได้ จะทำให้บัญชีผู้ใช้อื่นบนเครื่องสามารถเข้าถึงคีย์ของคุณได้
สำหรับการรันครั้งแรกโดยไม่ใช้เบราว์เซอร์ สามารถใช้เพียงคำสั่งเดียว
npx @deepseek-ai/dsh --profile headless "summarise the files in this directory"โปรไฟล์แบบ headless จะรันเพียงหนึ่งเซสชันและแสดงคำตอบสุดท้ายออกมา
ตัวแปรสภาพแวดล้อมหรือไฟล์คอนฟิกูเรชัน
มีสองวิธีในการระบุคีย์ให้กับ dsh ซึ่งไม่สามารถใช้แทนกันได้
ผู้ให้บริการในแคตตาล็อก (เช่น DeepSeek, Anthropic, OpenAI และรายการอื่นๆ ที่มีมาให้ในตัว) จะรับคีย์ผ่านหน้า Models โดยค่าจะถูกเก็บไว้ใน ~/.dsh/.credentials.yaml และการตั้งค่าของคุณจะเก็บเพียงการอ้างอิงถึงคีย์นั้นเท่านั้น Web UI จะไม่แสดงคีย์ให้เห็นอีกหลังจากที่คุณบันทึกแล้ว
ผู้ให้บริการแบบกำหนดเองสามารถระบุชื่อตัวแปรสภาพแวดล้อมแทนได้ โดยใช้ 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 ผ่าน custom provider ทำให้ทั้งสองเชื่อมต่อกันได้โดยตรงโดยไม่ต้องผ่านตัวกลาง ให้ตั้งค่าเซิร์ฟเวอร์โมเดลก่อน โดย การ self-host LLM ด้วย Ollama บน VPS จะครอบคลุมขั้นตอนการติดตั้งและการดึงโมเดล
ตรวจสอบว่า endpoint ตอบสนองก่อนที่จะเริ่มตั้งค่า dsh
ollama list
curl -s http://127.0.0.1:11434/v1/modelsollama list จะแสดง tag ที่ถูกต้องของทุกโมเดลที่คุณดึงมา ให้คัดลอกสตริงนั้นไว้ ส่วน curl จะส่งคืนรายการโมเดลในรูปแบบ JSON หากรายการว่างเปล่าแสดงว่า Ollama กำลังทำงานอยู่แต่ยังไม่ได้ดึงโมเดลใดๆ หากขึ้น Connection refused แสดงว่า Ollama ไม่ได้ทำงานอยู่ หรือไม่ได้เปิดฟังที่พอร์ต 11434
จากนั้นให้เพิ่ม provider โดย 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 ของกระบวนการ (process) แทนที่จะตรวจสอบ environment ของ terminal ส่วน UNKNOWN_MODEL หมายความว่า id ไม่ตรงกับโมเดลที่กำหนดค่าไว้ ให้เปรียบเทียบกับ ollama list ทีละตัวอักษร รวมถึง tag หลังเครื่องหมาย colon ด้วย สำหรับข้อผิดพลาด 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) และการยืนยันตัวตน: การจำกัดสิทธิ์การเข้าถึง Ollama endpoint ที่เปิดเผยต่อสาธารณะ
ข้อมูลที่ถูกส่งออกจากเครื่องในแต่ละโหมด
เมื่อใช้ 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) servers ที่คุณเชื่อมต่อไว้ ซึ่งมีรายละเอียดอยู่ใน การรัน MCP servers บน VPS, ปลั๊กอินก็จัดอยู่ในหมวดหมู่เดียวกันเนื่องจากการติดตั้งปลั๊กอินเป็นการรันโค้ดของผู้เขียนรายอื่นด้วยสิทธิ์ของ agent ของคุณ ดังนั้นจึงควร ตรวจสอบสิ่งที่ปลั๊กอินสามารถเข้าถึงได้ก่อนทำการติดตั้ง และสุดท้ายคือข้อมูล telemetry หากคุณเปิดใช้งาน
Telemetry จะถูกปิดไว้จนกว่าคุณจะเลือกเปิดใช้งาน DSH_TELEMETRY_MODE คือสวิตช์สำหรับให้ความยินยอม โดยค่าที่ไม่ได้ตั้งค่า, ว่างเปล่า หรือไม่เป็นที่รู้จักจะถูกตีความว่าเป็น DISABLED ในสถานะนี้ dsh จะไม่สร้าง OpenTelemetry (OTel) provider, processor หรือ exporter ดังนั้น profile ใหม่จะไม่มีการส่งคำขอ telemetry ผ่านเครือข่ายเลย FEEDBACK_ONLY คือการเลือกเปิดใช้งานการแชร์ session log ที่เกิดจาก feedback และ FULL จะอนุญาตให้มีการรายงานจาก launcher ข้อมูล session feed อาจส่งออกเนื้อหาของ session, ข้อมูลเครื่องมือ, prompt และ path ของ workspace ดังนั้นให้ถือว่า FULL คือการส่งงานของคุณไปยัง DeepSeek
สำหรับการหยุดการทำงานอย่างเด็ดขาดโดยไม่ต้องพึ่งพาการตั้งค่า string โหมดให้ถูกต้อง ให้ตั้งค่า DSH_TELEMETRY_DISABLED=1 ค่าใดๆ ที่ไม่ใช่ค่าว่างจะเป็นการปฏิเสธการใช้งาน (opt-out) ที่มีผลบังคับใช้ทันที และจะถูกอ่านก่อนที่การทำงานจะเริ่มขึ้น ดังนั้นโค้ดในโปรเจกต์จึงไม่สามารถเปิดใช้งานกลับมาใหม่ระหว่าง session ได้ ที่อยู่ของ collector เริ่มต้นคือ harness-telemetry.deepseeksvc.com ซึ่งเป็นชื่อที่มีประโยชน์ในการตรวจสอบเมื่อคุณอ่าน log ของ firewall ของคุณเอง
จงตรวจสอบแทนการเชื่อมั่นในการตั้งค่าเพียงอย่างเดียว ในขณะที่งานกำลังรันอยู่ ให้แสดงรายการการเชื่อมต่อขาออกที่ process นั้นถือครองอยู่
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อาจหลุดไปยัง public repository ได้เพียงแค่การทำgit addหากคุณเก็บ dotfiles ไว้ใน git ให้รันคำสั่งgit grep -I -n 'sk-'ใน repository นั้นก่อนทำการ push settings.yaml: ให้ใช้apiKeyEnvสำหรับผู้ให้บริการแบบกำหนดเอง เพื่อให้ไฟล์เก็บเพียงชื่อตัวแปรแทนที่จะเป็นข้อมูลลับ ไฟล์ตั้งค่ามักถูกคัดลอกไปวางในรายงานปัญหาหรือแชทสนับสนุน แต่ไฟล์ข้อมูลประจำตัวไม่ควรทำเช่นนั้น- ผลลัพธ์ของ
envและภาพหน้าจอของ terminal: ข้อมูลใดก็ตามที่แสดง environment ทั้งหมดออกมา จะแสดงรหัสผ่านติดไปด้วย - ข้อมูลสำรอง:
~/.dshเป็นสิ่งที่ควรสำรองข้อมูล แต่.credentials.yamlที่อยู่ภายในนั้นเป็นข้อมูลลับที่ใช้งานจริง ให้ยกเว้นไฟล์ดังกล่าวออกจากการสำรองข้อมูล หรือทำการเข้ารหัสไฟล์สำรองนั้น
กฎเหล่านี้ไม่ได้จำกัดอยู่เพียงแค่ dsh และ การเก็บข้อมูลลับไม่ให้ปะปนในไฟล์ Compose env ได้ครอบคลุมปัญหาเดียวกันนี้ในส่วนของ container บนเซิร์ฟเวอร์เดียวกัน
การใช้งานรุ่น Developer Preview
ให้ตรึงเวอร์ชันที่คุณทดสอบไว้ เนื่องจากรุ่นพรีวิวอาจมีการเปลี่ยนแปลงคีย์การตั้งค่าในรุ่นแพตช์ ซึ่งจะทำให้ผู้ให้บริการของคุณโหลดค่าไม่สำเร็จ หากการติดตั้งที่ตรึงเวอร์ชันไว้ปฏิเสธที่จะเริ่มทำงาน หรือ npx ยังคงส่งรุ่น build ที่คุณไม่ได้ร้องขอมาให้ ข้อผิดพลาดในการติดตั้งและเวอร์ชันที่เกิดจากรุ่นพรีวิว จะครอบคลุมถึงแคชของ npx และ npm ที่มาพร้อมกับ Node ของคุณ ให้เก็บ settings.yaml และ cordis.patch.yml ไว้ในระบบควบคุมเวอร์ชัน (version control) โดยยกเว้นไฟล์ข้อมูลประจำตัว (credentials) เพื่อให้คุณสามารถตรวจสอบการเปลี่ยนแปลงหลังจากการอัปเกรดได้
มีสองแฟล็กที่ช่วยได้เมื่อโปรไฟล์ทำงานไม่ถูกต้อง --dump-default-config จะแสดงการตั้งค่าเริ่มต้นที่รวมไว้แล้วโดยไม่ต้องเริ่มระบบ และ --dump-config จะแสดงการตั้งค่าที่รวมไว้สำหรับโปรไฟล์ของคุณในลักษณะเดียวกัน การเปรียบเทียบทั้งสองค่าจะแสดงให้เห็นว่าเลเยอร์แพตช์ของคุณเปลี่ยนแปลงอะไรไปบ้าง ซึ่งรวดเร็วกว่าการอ่านเลเยอร์ด้วยตนเอง
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 หากมีสิทธิ์การเข้าถึงที่กว้างกว่านั้น ผู้ให้บริการแบบกำหนดเองสามารถหลีกเลี่ยงการใช้ไฟล์นี้ได้โดยการระบุชื่อ 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 request ที่ส่งไปยังผู้ให้บริการรายนั้น แต่หากใช้ endpoint ในเครื่อง request ดังกล่าวจะวิ่งผ่าน 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 ของผู้ใช้อื่น หรือ process ที่เริ่มทำงานก่อนที่คุณจะ export ตัวแปรนั้น ให้ใส่ค่าดังกล่าวไว้ใน EnvironmentFile ที่มีโหมด 600 สำหรับ unit นั้น หรือ export ใน shell เดียวกันกับที่เริ่มการทำงานของ dsh ตรวจสอบค่าที่ process กำลังใช้งานจริงด้วย 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