DEV Community

Cover image for วิธีรันโมเดลใดก็ได้ใน DeepSeek Harness
Thanawat Wongchai
Thanawat Wongchai

Posted on Originally published at apidog.com

วิธีรันโมเดลใดก็ได้ใน DeepSeek Harness

ตั้งค่าโมเดลภายนอกใน DeepSeek Harness ด้วยผู้ให้บริการแบบกำหนดเอง

DeepSeek Harness (dsh) มาพร้อมโมเดลของ DeepSeek แต่ไม่ได้จำกัดให้ใช้เฉพาะโมเดลเหล่านั้น คุณสามารถกำหนดผู้ให้บริการโมเดลเป็นส่วนหนึ่งของการตั้งค่า โดยชี้ไปยังปลายทางที่เข้ากันได้กับ OpenAI และอ้างอิงข้อมูลรับรองผ่านตัวแปรสภาพแวดล้อม จากนั้นเซสชันของเอเจนต์จะทำงานบนโมเดลที่อยู่เบื้องหลัง URL นั้น ไม่ว่าจะเป็น Ollama ในเครื่อง เกตเวย์ภายในบริษัท Qwen ผ่าน DashScope หรือผู้ให้บริการอย่าง Anthropic และ OpenAI

ลองใช้ Apidog วันนี้

คู่มือนี้อธิบายบล็อกผู้ให้บริการทีละคีย์ พร้อมตัวอย่าง 3 รูปแบบ:

  1. โมเดลในเครื่องผ่าน Ollama
  2. ปลายทางที่เข้ากันได้กับ OpenAI ซึ่งโฮสต์อยู่ เช่น Qwen ผ่าน DashScope
  3. ผู้ให้บริการแค็ตตาล็อกที่มีอยู่ใน dsh

ข้อมูลอ้างอิงมาจาก คู่มือผู้ให้บริการ บน master branch ซึ่งดึงมาเมื่อวันที่ 20 สิงหาคม 2026

ข้อควรระวัง: dsh เป็นเวอร์ชันพรีวิวสำหรับนักพัฒนา และ README ระบุว่าอาจมีการเปลี่ยนแปลงที่ไม่เข้ากันได้ ตรวจสอบเอกสารให้ตรงกับเวอร์ชันที่ติดตั้งก่อนใช้งานจริง

หากยังไม่คุ้นเคยกับ Harness ให้เริ่มจากบทความ DeepSeek Harness คืออะไรและทำงานอย่างไร แล้วกลับมาดูการตั้งค่าผู้ให้บริการในบทความนี้

ทำไมต้องเปลี่ยนโมเดลใน agent harness

Agent harness ทำงานเป็นวงจร:

  1. โมเดลวางแผน
  2. เรียกใช้เครื่องมือ
  3. อ่านผลลัพธ์
  4. ทำซ้ำจนกว่างานจะเสร็จ

Harness เป็นเจ้าของวงจรนี้ ส่วนโมเดลเป็นเพียงองค์ประกอบที่เปลี่ยนได้ คุณอาจต้องเปลี่ยนโมเดลด้วยเหตุผลต่อไปนี้

ลดค่าใช้จ่าย

เซสชันเอเจนต์ใช้โทเค็นจำนวนมาก เพราะผลลัพธ์จากเครื่องมือจะถูกส่งกลับเข้าไปในบริบท การเปลี่ยนเซสชันปกติไปใช้โมเดลที่ราคาถูกกว่า เช่น DeepSeek V4-Flash แทน V4-Pro ช่วยลดค่าใช้จ่ายโดยไม่ต้องเปลี่ยนเวิร์กโฟลว์

ควบคุมตำแหน่งข้อมูล

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

พัฒนาในเครื่อง

การใช้โมเดลขนาดเล็กในเครื่องช่วยให้ทดสอบปลั๊กอินและพฤติกรรมของเอเจนต์ได้โดยไม่ต้องเสียค่า API หรือพึ่งพาเครือข่าย เมื่อเวิร์กโฟลว์พร้อมใช้งานจริงจึงค่อยสลับกลับไปใช้โมเดลที่มีความสามารถสูงกว่า

สถาปัตยกรรมของ dsh ออกแบบให้ทุกส่วนเป็นปลั๊กอิน อะแดปเตอร์โมเดลก็เช่นกัน เส้นทางผู้ให้บริการเป็นของปลั๊กอิน dsh-llm-pi-ai ซึ่งระบุไว้ใน แค็ตตาล็อกการกำหนดค่าปลั๊กอิน ว่าเป็น “เส้นทางผู้ให้บริการที่อินสแตนซ์นี้เป็นเจ้าของ”

ในมุมของผู้ใช้ สิ่งที่ต้องตั้งค่าคือบล็อก YAML เดียว

บล็อกผู้ให้บริการทีละคีย์

ผู้ให้บริการแบบกำหนดเองอยู่ในไฟล์:

$DSH_HOME/settings.yaml
Enter fullscreen mode Exit fullscreen mode

นอกจากนี้ยังสร้างผ่าน 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]
Enter fullscreen mode Exit fullscreen mode

ความหมายของแต่ละคีย์มีดังนี้:

  • 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
Enter fullscreen mode Exit fullscreen mode

หากปลายทางรองรับเส้นทางนี้ dsh จะดึงรายการโมเดลให้โดยอัตโนมัติ

คีย์ API จริงอยู่ที่ไหน

ข้อมูลลับจะถูกเก็บแบบเขียนอย่างเดียวใน:

$DSH_HOME/.credentials.yaml
Enter fullscreen mode Exit fullscreen mode

หลังจากบันทึกคีย์ผ่าน UI แล้ว dsh จะแสดงเพียงตัวอธิบายที่ถูกปิดบัง ค่าจริงจะไม่ถูกแสดงอีก

ไฟล์ settings.yaml จะเก็บเพียงการอ้างอิง เช่น:

  • ชื่อตัวแปรใน apiKeyEnv
  • ตัวอธิบายข้อมูลรับรอง

ดังนั้นสามารถ commit หรือแชร์ settings.yaml ได้โดยไม่ใส่ API key ลงไป และยังหมุนเวียนคีย์ได้โดยไม่ต้องแก้การตั้งค่าผู้ให้บริการ

สูตรที่ 1: รันโมเดลในเครื่องผ่าน Ollama

Ollama เปิดเผย API ที่เข้ากันได้กับ OpenAI ที่:

http://localhost:11434/v1
Enter fullscreen mode Exit fullscreen mode

รายละเอียดอยู่ใน คู่มือ 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
Enter fullscreen mode Exit fullscreen mode

เอกสาร dsh ไม่ได้แสดงตัวอย่าง Ollama โดยตรง ตัวอย่างนี้ใช้ schema ของผู้ให้บริการแบบกำหนดเองร่วมกับปลายทาง OpenAI-compatible ที่ Ollama บันทึกไว้ ควรทดสอบกับการติดตั้งของคุณก่อนใช้งานภายใน

ตรวจสอบ Ollama ก่อนเชื่อมต่อ dsh

Ollama ในเครื่องไม่จำเป็นต้องใช้ API key แต่ schema ของผู้ให้บริการต้องมีการอ้างอิงข้อมูลรับรอง ให้ตั้งค่าตัวแปรจำลอง:

export OLLAMA_API_KEY=ollama
Enter fullscreen mode Exit fullscreen mode

จากนั้นตรวจสอบขั้นตอนต่อไปนี้:

  1. ดาวน์โหลดโมเดล:
   ollama pull gpt-oss:20b
Enter fullscreen mode Exit fullscreen mode
  1. ตรวจสอบชื่อโมเดล:
   ollama list
Enter fullscreen mode Exit fullscreen mode

ค่า id ใน YAML ต้องตรงกับแท็กของ Ollama ทุกตัวอักษร

  1. ตรวจสอบ API:
   curl http://localhost:11434/v1/models
Enter fullscreen mode Exit fullscreen mode

คุณยังสามารถเรียก 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
Enter fullscreen mode Exit fullscreen mode

สำหรับภูมิภาคสิงคโปร์ URL มีรูปแบบดังนี้:

https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1
Enter fullscreen mode Exit fullscreen mode

การตรวจสอบสิทธิ์ใช้ตัวแปร:

DASHSCOPE_API_KEY
Enter fullscreen mode Exit fullscreen mode

ตัวอย่างการตั้งค่า 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
Enter fullscreen mode Exit fullscreen mode

ก่อนใช้งาน ให้เปลี่ยน {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
Enter fullscreen mode Exit fullscreen mode

หากโมเดลรองรับรูปภาพ ต้องประกาศด้วย:

models:
  - id: vision-model
    input: [text, image]
Enter fullscreen mode Exit fullscreen mode

สูตรที่ 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 ข้อ:

  1. เซสชันเดิมใช้โมเดลเดิมต่อไป

    เซสชันจะบันทึกโมเดลที่ใช้ตอนเริ่มต้น การเปลี่ยนค่าเริ่มต้นจึงไม่เปลี่ยนเซสชันที่กำลังทำงานอยู่

  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"
Enter fullscreen mode Exit fullscreen mode

หรือเรียกผ่าน ดาวน์โหลด Apidog โดยใช้ header เดียวกับที่ Harness ส่ง:

Authorization: Bearer <API_KEY>
Enter fullscreen mode Exit fullscreen mode

ตรวจสอบ status code และ response body โดยตรง แทนการดูเฉพาะข้อความผิดพลาดที่ Harness ห่อหุ้มไว้

หากกำลังพัฒนาแบบออฟไลน์หรือผู้ให้บริการไม่เสถียร คุณสามารถจำลอง endpoint ต่อไปนี้ใน Apidog ได้:

  • /models
  • /chat/completions

จากนั้นชี้ baseURL ไปยัง mock server ระหว่างพัฒนา

ตัวแปรสภาพแวดล้อมหายไปหรือว่างเปล่า

apiKeyEnv เป็นเพียงชื่อของตัวแปร ไม่ได้สร้างตัวแปรให้เอง หากไม่มีตัวแปรใน environment ที่ dsh ทำงาน คำขอจะไม่มีการตรวจสอบสิทธิ์และอาจได้ 401

ตรวจสอบใน context เดียวกับที่เปิด dsh web:

echo "$GATEWAY_API_KEY"
Enter fullscreen mode Exit fullscreen mode

โปรเซสที่เปิดจาก GUI หรือตัวจัดการบริการอาจไม่ได้รับ shell profile เดียวกับ terminal ของคุณ

รูปแบบอินพุตไม่ตรงกัน

หากแนบรูปภาพแล้วโมเดลไม่เห็นไฟล์ หรือคำขอเกิดข้อผิดพลาด ให้ประกาศความสามารถของโมเดล:

models:
  - id: vision-preview
    input: [text, image]
Enter fullscreen mode Exit fullscreen mode

หากโมเดลทั้งหมดของ provider รองรับรูปภาพ สามารถใช้ defaultInput ระดับเส้นทางแทนได้

ความแตกต่างของโปรโตคอล

ข้อผิดพลาดเกี่ยวกับบทบาทที่ไม่รองรับหรือพารามิเตอร์จำนวนโทเค็นมักแก้ได้ด้วย:

compat:
  supportsDeveloperRole: false
  maxTokensField: max_tokens
Enter fullscreen mode Exit fullscreen mode

เคยทำงานได้ แต่ตอนนี้ใช้งานไม่ได้

dsh เป็นเวอร์ชันพรีวิวสำหรับนักพัฒนา ควรทำดังนี้:

  1. ปักหมุดเวอร์ชันที่ติดตั้ง
  2. อ่าน release notes ก่อนอัปเกรด
  3. ตรวจสอบ schema การตั้งค่าอีกครั้ง
  4. อ้างอิง repo deepseek-harness เป็นแหล่งข้อมูลหลัก

นอกจากนี้ ผู้ให้บริการโมเดลเป็นเพียงส่วนหนึ่งของการปรับแต่งเอเจนต์ อีกส่วนคือเครื่องมือที่เอเจนต์เรียกใช้ได้ คุณสามารถเชื่อมต่อเวิร์กโฟลว์ API ได้โดยตรง ดูรายละเอียดจากบทความ การใช้ Apidog CLI ภายใน DeepSeek Harness

คำถามที่พบบ่อย

DeepSeek Harness รองรับ Ollama อย่างเป็นทางการหรือไม่?

เอกสารผู้ให้บริการอย่างเป็นทางการไม่ได้กล่าวถึง Ollama โดยตรง สิ่งที่ dsh รองรับคือปลายทางที่ใช้โปรโตคอล openai-completions และ Ollama มี API ที่เข้ากันได้กับ OpenAI ที่:

http://localhost:11434/v1
Enter fullscreen mode Exit fullscreen mode

ตัวอย่าง Ollama ในบทความนี้จึงเป็นการนำ schema ของผู้ให้บริการแบบกำหนดเองมาใช้กับปลายทางที่ Ollama บันทึกไว้ ควรทดสอบกับการติดตั้งจริง เนื่องจาก dsh เป็นเวอร์ชันพรีวิวและ schema อาจเปลี่ยนแปลงได้

dsh เก็บ API key ไว้ที่ไหน?

เก็บไว้แบบเขียนอย่างเดียวใน:

$DSH_HOME/.credentials.yaml
Enter fullscreen mode Exit fullscreen mode

หลังบันทึกผ่าน UI จะเห็นเพียงตัวอธิบายที่ถูกปิดบัง ส่วน settings.yaml จะเก็บเฉพาะการอ้างอิง เช่น apiKeyEnv ไม่มี API key แบบข้อความธรรมดาในไฟล์กำหนดค่าผู้ให้บริการ

สามารถใช้โมเดลต่างกันในแต่ละเซสชันได้หรือไม่?

ได้ การเลือกโมเดลกำหนดค่าเริ่มต้นสำหรับเซสชันใหม่เท่านั้น เซสชันเดิมจะใช้โมเดลที่เริ่มต้นมาด้วย

คุณจึงสามารถใช้ DeepSeek V4-Flash สำหรับงานทั่วไป เปลี่ยนค่าเริ่มต้นเป็นโมเดลที่มีความสามารถสูงขึ้นเมื่อต้องแก้ปัญหาซับซ้อน และเซสชันก่อนหน้าจะไม่ถูกเปลี่ยนแปลง

ปลายทางแบบกำหนดเองคืนข้อผิดพลาด แต่คำขอเดียวกันใน curl ใช้งานได้ ต้องทำอย่างไร?

เปรียบเทียบ payload ที่ Harness ส่งกับคำขอใน curl โดยเฉพาะ:

  • บทบาท developer
  • ชื่อฟิลด์จำกัดจำนวนโทเค็น
  • รูปแบบอินพุต

หากแบ็กเอนด์ไม่รองรับบทบาทหรือฟิลด์แบบใหม่ ให้ตั้งค่า:

compat:
  supportsDeveloperRole: false
  maxTokensField: max_tokens
Enter fullscreen mode Exit fullscreen mode

การทำซ้ำคำขอของ Harness ใน API client จะช่วยระบุฟิลด์ที่ปลายทางไม่รองรับได้รวดเร็วขึ้น

Top comments (0)