ตั้งค่าโมเดลภายนอกใน DeepSeek Harness ด้วยผู้ให้บริการแบบกำหนดเอง
DeepSeek Harness (dsh) มาพร้อมโมเดลของ DeepSeek แต่ไม่ได้จำกัดให้ใช้เฉพาะโมเดลเหล่านั้น คุณสามารถกำหนดผู้ให้บริการโมเดลเป็นส่วนหนึ่งของการตั้งค่า โดยชี้ไปยังปลายทางที่เข้ากันได้กับ OpenAI และอ้างอิงข้อมูลรับรองผ่านตัวแปรสภาพแวดล้อม จากนั้นเซสชันของเอเจนต์จะทำงานบนโมเดลที่อยู่เบื้องหลัง URL นั้น ไม่ว่าจะเป็น Ollama ในเครื่อง เกตเวย์ภายในบริษัท Qwen ผ่าน DashScope หรือผู้ให้บริการอย่าง Anthropic และ OpenAI
คู่มือนี้อธิบายบล็อกผู้ให้บริการทีละคีย์ พร้อมตัวอย่าง 3 รูปแบบ:
- โมเดลในเครื่องผ่าน Ollama
- ปลายทางที่เข้ากันได้กับ OpenAI ซึ่งโฮสต์อยู่ เช่น Qwen ผ่าน DashScope
- ผู้ให้บริการแค็ตตาล็อกที่มีอยู่ใน dsh
ข้อมูลอ้างอิงมาจาก คู่มือผู้ให้บริการ บน master branch ซึ่งดึงมาเมื่อวันที่ 20 สิงหาคม 2026
ข้อควรระวัง: dsh เป็นเวอร์ชันพรีวิวสำหรับนักพัฒนา และ README ระบุว่าอาจมีการเปลี่ยนแปลงที่ไม่เข้ากันได้ ตรวจสอบเอกสารให้ตรงกับเวอร์ชันที่ติดตั้งก่อนใช้งานจริง
หากยังไม่คุ้นเคยกับ Harness ให้เริ่มจากบทความ DeepSeek Harness คืออะไรและทำงานอย่างไร แล้วกลับมาดูการตั้งค่าผู้ให้บริการในบทความนี้
ทำไมต้องเปลี่ยนโมเดลใน agent harness
Agent harness ทำงานเป็นวงจร:
- โมเดลวางแผน
- เรียกใช้เครื่องมือ
- อ่านผลลัพธ์
- ทำซ้ำจนกว่างานจะเสร็จ
Harness เป็นเจ้าของวงจรนี้ ส่วนโมเดลเป็นเพียงองค์ประกอบที่เปลี่ยนได้ คุณอาจต้องเปลี่ยนโมเดลด้วยเหตุผลต่อไปนี้
ลดค่าใช้จ่าย
เซสชันเอเจนต์ใช้โทเค็นจำนวนมาก เพราะผลลัพธ์จากเครื่องมือจะถูกส่งกลับเข้าไปในบริบท การเปลี่ยนเซสชันปกติไปใช้โมเดลที่ราคาถูกกว่า เช่น DeepSeek V4-Flash แทน V4-Pro ช่วยลดค่าใช้จ่ายโดยไม่ต้องเปลี่ยนเวิร์กโฟลว์
ควบคุมตำแหน่งข้อมูล
หากโค้ดไม่ควรออกนอกระบบ การชี้ผู้ให้บริการไปยังโมเดลที่ทำงานบนฮาร์ดแวร์ของคุณเองจะทำให้พรอมต์ เนื้อหาไฟล์ และผลลัพธ์จากเครื่องมือไม่ต้องข้ามเครือข่าย
พัฒนาในเครื่อง
การใช้โมเดลขนาดเล็กในเครื่องช่วยให้ทดสอบปลั๊กอินและพฤติกรรมของเอเจนต์ได้โดยไม่ต้องเสียค่า API หรือพึ่งพาเครือข่าย เมื่อเวิร์กโฟลว์พร้อมใช้งานจริงจึงค่อยสลับกลับไปใช้โมเดลที่มีความสามารถสูงกว่า
สถาปัตยกรรมของ dsh ออกแบบให้ทุกส่วนเป็นปลั๊กอิน อะแดปเตอร์โมเดลก็เช่นกัน เส้นทางผู้ให้บริการเป็นของปลั๊กอิน dsh-llm-pi-ai ซึ่งระบุไว้ใน แค็ตตาล็อกการกำหนดค่าปลั๊กอิน ว่าเป็น “เส้นทางผู้ให้บริการที่อินสแตนซ์นี้เป็นเจ้าของ”
ในมุมของผู้ใช้ สิ่งที่ต้องตั้งค่าคือบล็อก YAML เดียว
บล็อกผู้ให้บริการทีละคีย์
ผู้ให้บริการแบบกำหนดเองอยู่ในไฟล์:
$DSH_HOME/settings.yaml
นอกจากนี้ยังสร้างผ่าน UI ได้จาก Settings → Models
ตัวอย่างจากเอกสารอย่างเป็นทางการ:
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]
ความหมายของแต่ละคีย์มีดังนี้:
-
my-gatewayคือ ID ของผู้ให้บริการ ควรเลือกชื่อที่ใช้ต่อเนื่องได้ เพราะเป็นตัวระบุถาวร ส่วนชื่อที่แสดงใน UI ตั้งค่าแยกต่างหาก -
apiKeyEnvคือชื่อตัวแปรสภาพแวดล้อมที่เก็บ API key ไฟล์การตั้งค่าจะเก็บเฉพาะชื่ออ้างอิง ไม่เก็บข้อมูลลับ -
apiระบุโปรโตคอลการสื่อสาร ค่าopenai-completionsใช้กับปลายทางที่เข้ากันได้กับ OpenAI -
baseURLคือ root URL ที่ Harness ใช้ส่งคำขอ -
modelsคือรายการโมเดลที่ให้บริการ แต่ละรายการต้องมีidและค่านี้ต้องตรงกับ ID ที่ปลายทางคาดหวัง -
inputระบุชนิดอินพุตของโมเดล โมเดลแบบกำหนดเองเป็นข้อความเท่านั้นโดยค่าเริ่มต้น หากรองรับรูปภาพให้ประกาศอย่างชัดเจน เช่นinput: [text, image] -
defaultInputใช้กำหนดค่าเริ่มต้นให้ทุกโมเดลในผู้ให้บริการ โดยinputระดับโมเดลจะมีลำดับความสำคัญสูงกว่า -
compatใช้ตั้งค่าความเข้ากันได้สำหรับปลายทางที่ทำงานต่างจาก OpenAI มาตรฐาน เช่น:-
supportsDeveloperRole: falseหากแบ็กเอนด์ไม่รองรับบทบาทdeveloper -
maxTokensField: max_tokensหากแบ็กเอนด์ใช้ชื่อฟิลด์แบบเก่า
-
compat ตั้งค่าได้ทั้งระดับเส้นทางและระดับโมเดล
เมื่อเพิ่มผู้ให้บริการผ่าน UI ตัวเลือก Fetch available models จะเรียก:
GET /models
หากปลายทางรองรับเส้นทางนี้ dsh จะดึงรายการโมเดลให้โดยอัตโนมัติ
คีย์ API จริงอยู่ที่ไหน
ข้อมูลลับจะถูกเก็บแบบเขียนอย่างเดียวใน:
$DSH_HOME/.credentials.yaml
หลังจากบันทึกคีย์ผ่าน UI แล้ว dsh จะแสดงเพียงตัวอธิบายที่ถูกปิดบัง ค่าจริงจะไม่ถูกแสดงอีก
ไฟล์ settings.yaml จะเก็บเพียงการอ้างอิง เช่น:
- ชื่อตัวแปรใน
apiKeyEnv - ตัวอธิบายข้อมูลรับรอง
ดังนั้นสามารถ commit หรือแชร์ settings.yaml ได้โดยไม่ใส่ API key ลงไป และยังหมุนเวียนคีย์ได้โดยไม่ต้องแก้การตั้งค่าผู้ให้บริการ
สูตรที่ 1: รันโมเดลในเครื่องผ่าน Ollama
Ollama เปิดเผย API ที่เข้ากันได้กับ OpenAI ที่:
http://localhost:11434/v1
รายละเอียดอยู่ใน คู่มือ OpenAI compatibility ของ Ollama
เนื่องจาก dsh ใช้โปรโตคอล openai-completions จึงสามารถแมปกับ Ollama ได้ดังนี้:
llm-pi-ai:
providers:
ollama-local:
apiKeyEnv: OLLAMA_API_KEY
api: openai-completions
baseURL: http://localhost:11434/v1
models:
- id: gpt-oss:20b
- id: qwen3
เอกสาร dsh ไม่ได้แสดงตัวอย่าง Ollama โดยตรง ตัวอย่างนี้ใช้ schema ของผู้ให้บริการแบบกำหนดเองร่วมกับปลายทาง OpenAI-compatible ที่ Ollama บันทึกไว้ ควรทดสอบกับการติดตั้งของคุณก่อนใช้งานภายใน
ตรวจสอบ Ollama ก่อนเชื่อมต่อ dsh
Ollama ในเครื่องไม่จำเป็นต้องใช้ API key แต่ schema ของผู้ให้บริการต้องมีการอ้างอิงข้อมูลรับรอง ให้ตั้งค่าตัวแปรจำลอง:
export OLLAMA_API_KEY=ollama
จากนั้นตรวจสอบขั้นตอนต่อไปนี้:
- ดาวน์โหลดโมเดล:
ollama pull gpt-oss:20b
- ตรวจสอบชื่อโมเดล:
ollama list
ค่า id ใน YAML ต้องตรงกับแท็กของ Ollama ทุกตัวอักษร
- ตรวจสอบ API:
curl http://localhost:11434/v1/models
คุณยังสามารถเรียก http://localhost:11434/v1/models ผ่าน Apidog ได้ หากได้รับรายการโมเดล แสดงว่า base URL ถูกต้องและเซิร์ฟเวอร์ทำงานอยู่
สำหรับการตั้งค่า Ollama เพิ่มเติม ดูบทความ วิธีรัน GPT-OSS โดยใช้ Ollama รูปแบบเดียวกันสามารถใช้กับโมเดลโอเพนเวตอื่น เช่น Kimi K3 หากฮาร์ดแวร์รองรับ
โมเดลขนาดเล็กในเครื่องเหมาะกับการทดสอบวงจรของเอเจนต์ แต่การวางแผนและการเรียกใช้เครื่องมืออาจด้อยกว่าโมเดลระดับแนวหน้า จึงเหมาะกับการพัฒนาปลั๊กอินมากกว่างานจริงที่มีความซับซ้อน
สูตรที่ 2: ปลายทาง OpenAI-compatible ที่โฮสต์อยู่
ตัวอย่างนี้ใช้ Qwen ผ่าน Alibaba Cloud Model Studio หรือ DashScope ซึ่งมี เอกสาร OpenAI compatibility และรองรับปลายทาง:
/compatible-mode/v1
สำหรับภูมิภาคสิงคโปร์ URL มีรูปแบบดังนี้:
https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1
การตรวจสอบสิทธิ์ใช้ตัวแปร:
DASHSCOPE_API_KEY
ตัวอย่างการตั้งค่า dsh:
llm-pi-ai:
providers:
qwen-dashscope:
apiKeyEnv: DASHSCOPE_API_KEY
api: openai-completions
baseURL: https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1
models:
- id: qwen3-max
ก่อนใช้งาน ให้เปลี่ยน {WorkspaceId} เป็น workspace domain จริงจากคอนโซล Model Studio และตรวจสอบ ID โมเดลจากรายการของผู้ให้บริการ
อ่านข้อมูลเพิ่มเติมได้จาก คู่มือ API ของ Qwen 3.8
รูปแบบเดียวกันนี้ใช้กับผู้ให้บริการที่มีเอกสาร OpenAI compatibility เช่น:
- Kimi API ของ Moonshot
- OpenRouter
- vLLM
- เกตเวย์ภายในบริษัท
โดยทั่วไปค่าที่ต้องเปลี่ยนมีเพียง:
baseURL- ชื่อตัวแปรสภาพแวดล้อม
- ID โมเดล
หากเคยตั้งค่า โมเดลโอเพนซอร์สใน Codex แนวคิดจะคล้ายกัน โดยบล็อก YAML ของ dsh ทำหน้าที่ใกล้เคียงกับ model_providers ของ Codex
แก้ปัญหาเฉพาะปลายทางที่โฮสต์
หากผู้ให้บริการปฏิเสธคำขอเกี่ยวกับบทบาทหรือฟิลด์โทเค็น ให้ตรวจสอบ compat:
llm-pi-ai:
providers:
qwen-dashscope:
apiKeyEnv: DASHSCOPE_API_KEY
api: openai-completions
baseURL: https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1
compat:
supportsDeveloperRole: false
maxTokensField: max_tokens
models:
- id: qwen3-max
หากโมเดลรองรับรูปภาพ ต้องประกาศด้วย:
models:
- id: vision-model
input: [text, image]
สูตรที่ 3: ผู้ให้บริการแค็ตตาล็อกในตัว
ไม่จำเป็นต้องสร้างบล็อกแบบกำหนดเองสำหรับผู้ให้บริการคลาวด์หลัก dsh มีผู้ให้บริการแค็ตตาล็อกสำหรับ:
- DeepSeek
- Anthropic
- OpenAI
การตั้งค่าส่วนใหญ่คือการเพิ่ม API key ส่วนผู้ให้บริการบางรายการมีวิธีตรวจสอบสิทธิ์เฉพาะของตัวเอง เช่น:
- Bedrock ใช้ข้อมูลรับรอง AWS
- Vertex ต้องใช้โปรเจกต์ ADC
- Azure ต้องระบุ
api-version - Codex ใช้ OAuth
ผู้ให้บริการแค็ตตาล็อกเหมาะเมื่อคุณต้องการใช้ Claude หรือ GPT กับ Harness โดยไม่ต้องเขียน provider block เอง และเป็นเส้นทางหลักสำหรับ DeepSeek V4-Pro ซึ่งเปิดตัว API ในเดือนสิงหาคม 2026 พร้อมกับ Harness รายละเอียดอยู่ที่ api-docs.deepseek.com
ใช้ผู้ให้บริการแบบกำหนดเองเมื่อปลายทางไม่อยู่ในแค็ตตาล็อก เช่น:
- โมเดลในเครื่อง
- เกตเวย์ภายใน
- ผู้ให้บริการระดับภูมิภาค
- ตัวรวบรวมที่เข้ากันได้กับ OpenAI
การเลือกโมเดลและสิ่งที่เซสชันจดจำ
การเพิ่มผู้ให้บริการทำให้โมเดลพร้อมใช้งาน ส่วนการเลือกโมเดลจาก Settings → Models จะกำหนดค่าเริ่มต้นสำหรับเซสชันใหม่
มีพฤติกรรมสำคัญ 2 ข้อ:
เซสชันเดิมใช้โมเดลเดิมต่อไป
เซสชันจะบันทึกโมเดลที่ใช้ตอนเริ่มต้น การเปลี่ยนค่าเริ่มต้นจึงไม่เปลี่ยนเซสชันที่กำลังทำงานอยู่ลบผู้ให้บริการที่เป็นค่าเริ่มต้นไม่ได้โดยไม่มีการเลือกใหม่
หากลบผู้ให้บริการที่เป็นเจ้าของค่าเริ่มต้นปัจจุบัน composer จะบล็อกอินพุตจนกว่าจะเลือกโมเดลใหม่
การปักหมุดโมเดลต่อเซสชันช่วยให้ทดสอบซ้ำและเปรียบเทียบผลลัพธ์ได้อย่างถูกต้อง เช่น เมื่อเปรียบเทียบ dsh กับ Harness อื่นในบทความ DeepSeek Harness vs Claude Code ประวัติของแต่ละเซสชันจะสะท้อนโมเดลเดียว ไม่ใช่การสลับโมเดลระหว่างทาง
แก้ปัญหาความล้มเหลวที่พบบ่อย
baseURL ผิดหรือเข้าถึงไม่ได้
ตรวจสอบว่า URL มี path ตรงตามที่ผู้ให้บริการกำหนด:
- OpenAI-compatible ทั่วไป:
/v1 - DashScope:
/compatible-mode/v1
ทดสอบด้วย:
curl "$BASE_URL/models" \
-H "Authorization: Bearer $API_KEY"
หรือเรียกผ่าน ดาวน์โหลด Apidog โดยใช้ header เดียวกับที่ Harness ส่ง:
Authorization: Bearer <API_KEY>
ตรวจสอบ status code และ response body โดยตรง แทนการดูเฉพาะข้อความผิดพลาดที่ Harness ห่อหุ้มไว้
หากกำลังพัฒนาแบบออฟไลน์หรือผู้ให้บริการไม่เสถียร คุณสามารถจำลอง endpoint ต่อไปนี้ใน Apidog ได้:
/models/chat/completions
จากนั้นชี้ baseURL ไปยัง mock server ระหว่างพัฒนา
ตัวแปรสภาพแวดล้อมหายไปหรือว่างเปล่า
apiKeyEnv เป็นเพียงชื่อของตัวแปร ไม่ได้สร้างตัวแปรให้เอง หากไม่มีตัวแปรใน environment ที่ dsh ทำงาน คำขอจะไม่มีการตรวจสอบสิทธิ์และอาจได้ 401
ตรวจสอบใน context เดียวกับที่เปิด dsh web:
echo "$GATEWAY_API_KEY"
โปรเซสที่เปิดจาก GUI หรือตัวจัดการบริการอาจไม่ได้รับ shell profile เดียวกับ terminal ของคุณ
รูปแบบอินพุตไม่ตรงกัน
หากแนบรูปภาพแล้วโมเดลไม่เห็นไฟล์ หรือคำขอเกิดข้อผิดพลาด ให้ประกาศความสามารถของโมเดล:
models:
- id: vision-preview
input: [text, image]
หากโมเดลทั้งหมดของ provider รองรับรูปภาพ สามารถใช้ defaultInput ระดับเส้นทางแทนได้
ความแตกต่างของโปรโตคอล
ข้อผิดพลาดเกี่ยวกับบทบาทที่ไม่รองรับหรือพารามิเตอร์จำนวนโทเค็นมักแก้ได้ด้วย:
compat:
supportsDeveloperRole: false
maxTokensField: max_tokens
เคยทำงานได้ แต่ตอนนี้ใช้งานไม่ได้
dsh เป็นเวอร์ชันพรีวิวสำหรับนักพัฒนา ควรทำดังนี้:
- ปักหมุดเวอร์ชันที่ติดตั้ง
- อ่าน release notes ก่อนอัปเกรด
- ตรวจสอบ schema การตั้งค่าอีกครั้ง
- อ้างอิง repo deepseek-harness เป็นแหล่งข้อมูลหลัก
นอกจากนี้ ผู้ให้บริการโมเดลเป็นเพียงส่วนหนึ่งของการปรับแต่งเอเจนต์ อีกส่วนคือเครื่องมือที่เอเจนต์เรียกใช้ได้ คุณสามารถเชื่อมต่อเวิร์กโฟลว์ API ได้โดยตรง ดูรายละเอียดจากบทความ การใช้ Apidog CLI ภายใน DeepSeek Harness
คำถามที่พบบ่อย
DeepSeek Harness รองรับ Ollama อย่างเป็นทางการหรือไม่?
เอกสารผู้ให้บริการอย่างเป็นทางการไม่ได้กล่าวถึง Ollama โดยตรง สิ่งที่ dsh รองรับคือปลายทางที่ใช้โปรโตคอล openai-completions และ Ollama มี API ที่เข้ากันได้กับ OpenAI ที่:
http://localhost:11434/v1
ตัวอย่าง Ollama ในบทความนี้จึงเป็นการนำ schema ของผู้ให้บริการแบบกำหนดเองมาใช้กับปลายทางที่ Ollama บันทึกไว้ ควรทดสอบกับการติดตั้งจริง เนื่องจาก dsh เป็นเวอร์ชันพรีวิวและ schema อาจเปลี่ยนแปลงได้
dsh เก็บ API key ไว้ที่ไหน?
เก็บไว้แบบเขียนอย่างเดียวใน:
$DSH_HOME/.credentials.yaml
หลังบันทึกผ่าน UI จะเห็นเพียงตัวอธิบายที่ถูกปิดบัง ส่วน settings.yaml จะเก็บเฉพาะการอ้างอิง เช่น apiKeyEnv ไม่มี API key แบบข้อความธรรมดาในไฟล์กำหนดค่าผู้ให้บริการ
สามารถใช้โมเดลต่างกันในแต่ละเซสชันได้หรือไม่?
ได้ การเลือกโมเดลกำหนดค่าเริ่มต้นสำหรับเซสชันใหม่เท่านั้น เซสชันเดิมจะใช้โมเดลที่เริ่มต้นมาด้วย
คุณจึงสามารถใช้ DeepSeek V4-Flash สำหรับงานทั่วไป เปลี่ยนค่าเริ่มต้นเป็นโมเดลที่มีความสามารถสูงขึ้นเมื่อต้องแก้ปัญหาซับซ้อน และเซสชันก่อนหน้าจะไม่ถูกเปลี่ยนแปลง
ปลายทางแบบกำหนดเองคืนข้อผิดพลาด แต่คำขอเดียวกันใน curl ใช้งานได้ ต้องทำอย่างไร?
เปรียบเทียบ payload ที่ Harness ส่งกับคำขอใน curl โดยเฉพาะ:
- บทบาท
developer - ชื่อฟิลด์จำกัดจำนวนโทเค็น
- รูปแบบอินพุต
หากแบ็กเอนด์ไม่รองรับบทบาทหรือฟิลด์แบบใหม่ ให้ตั้งค่า:
compat:
supportsDeveloperRole: false
maxTokensField: max_tokens
การทำซ้ำคำขอของ Harness ใน API client จะช่วยระบุฟิลด์ที่ปลายทางไม่รองรับได้รวดเร็วขึ้น
Top comments (0)