MiniMax-M3.1-Flash and DeepSeek-V4.1-Flash-1017 are now live on CometAPI →
guide/งานวิจัย CometAPI

วิธีกำหนดค่า CometAPI ใน OpenCode

ตั้งค่า CometAPI ใน OpenCode พร้อมตัวอย่างการใช้งานกับ Claude, GPT และ DeepSeek รวมถึงคำสั่งสำหรับสลับโมเดล งานเขียนโค้ด และการแก้ไขปัญหา

CometAPI
Deon Goodwinทีมวิจัยโมเดล AI และ API
อัปเดตแล้ว Oct 22, 2026 10 นาทีในการอ่าน
วิธีกำหนดค่า CometAPI ใน OpenCode
ใช้รูปแบบนี้

เรียกใช้ API ครั้งแรก

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_COMETAPI_KEY",
    base_url="https://api.cometapi.com/v1",
)

response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[{"role": "user", "content": "Build this workflow."}],
)

print(response.choices[0].message.content)

TL;DR

กำหนดค่า CometAPI เพียงครั้งเดียวใน OpenCode แล้วเลือก Claude, GPT หรือ DeepSeek สำหรับงานเขียนโปรแกรมของคุณ คู่มือนี้ขยายความจาก คู่มือการผสาน CometAPI กับ OpenCode อย่างเป็นทางการ ไปสู่การตั้งค่าโปรเจ็กต์ครบถ้วน: ใช้คีย์ API ของ CometAPI เพียงชุดเดียว ไฟล์กำหนดค่าที่มีตัวอย่างโมเดล 3 รายการ คำสั่งสลับโมเดล และงาน JavaScript ขนาดเล็กพร้อมการตรวจสอบที่ทำซ้ำได้

Key Takeaways

  • การตั้งค่า OpenCode กับ CometAPI ต้องใช้ provider ID, API base URL, credential และ model ID
  • ใช้ {env:COMETAPI_KEY} เพื่อไม่ให้คีย์ API จริงถูกบันทึกใน opencode.json
  • ลงทะเบียนตัวอย่าง Claude, GPT และ DeepSeek ใน opencode.json ไฟล์เดียว ทั้งสามรายการใช้คีย์และ gateway ของ CometAPI ชุดเดียวกัน
  • สลับผู้ให้บริการ/โมเดลที่เลือกใน OpenCode ได้โดยไม่ต้องขอคีย์ของ Anthropic, OpenAI และ DeepSeek แยกกัน
  • ระวังตัวแปรสภาพแวดล้อมที่หายไป เส้นทาง API ไม่ตรงกัน และพรอมต์ขออนุมัติที่อาจดูเหมือนคำขอที่ค้างอยู่

What Is OpenCode and Why Use It with CometAPI?

OpenCode เป็นเอเย่นต์โค้ดดิ้งแบบโอเพนซอร์ซที่มีส่วนติดต่อผ่านเทอร์มินัล แอปเดสก์ท็อป และปลั๊กอิน IDE ภายในโปรเจ็กต์ มันสามารถอธิบายโค้ดเดิม วางแผนการเปลี่ยนแปลง แก้ไขไฟล์ และรันคำสั่งภายใต้สิทธิ์ที่กำหนดไว้ คู่มือนี้ใช้เวิร์กโฟลว์ผ่านเทอร์มินัล: มอบงานเขียนโปรแกรมเล็กๆ ให้เอเย่นต์ ตรวจทานการดำเนินการที่เสนอ และยืนยันไฟล์ผลลัพธ์ด้วยการทดสอบภายในเครื่อง ดู เอกสาร OpenCode อย่างเป็นทางการ เพื่อการติดตั้งและการใช้งาน

CometAPI ทำหน้าที่เป็นชั้นการเข้าถึงโมเดล เวิร์กโฟลว์ที่ใช้หลายโมเดลตามปกติต้องจัดการ credential การเรียกเก็บเงิน และการตั้งค่าการเชื่อมต่อข้ามผู้ให้บริการ การส่งต่อโมเดลที่รองรับผ่านบัญชี CometAPI เดียวมอบคีย์และ base URL ร่วมกันให้โปรเจ็กต์นี้ ขณะที่ OpenCode ดูแลรีโพและคำสั่งงาน วิธีนี้มีประโยชน์เมื่อเปรียบเทียบโมเดลบนงานเดียวกันหรือเปลี่ยนโมเดลที่เลือกโดยไม่ต้องจัดระเบียบโปรเจ็กต์ใหม่ เกตเวย์แบบรวมเป็นตัวเลือก: การเข้าถึงผู้ให้บริการโดยตรงอาจเหมาะสำหรับเวิร์กโฟลว์ผู้ให้บริการเดียวหรือข้อกำหนดตามสัญญาเฉพาะ ประโยชน์ที่นี่คือการเข้าถึงหลายผู้ให้บริการที่ง่ายขึ้น; อย่างไรก็ดี รูปแบบ API พฤติกรรมโมเดล และความเข้ากันได้ของเครื่องมือยังต้องตรวจสอบแยกต่างหาก

CometAPI รองรับ OpenAI-compatible Chat Completions และยังเปิดเผยรูปแบบ API อื่นๆ การผสานอย่างเป็นทางการเลือก adapter ให้กับแต่ละรูปแบบ ที่นี่ Claude Sonnet 5 ใช้ Messages, GPT-6.1 Sol ใช้ Responses และ DeepSeek V4.1 Flash ใช้ Chat Completions ตามตัวอย่างที่ลิงก์ด้านล่าง ทุกคำขอยังคงส่งไปยัง CometAPI ด้วยคีย์เดียวกัน ชื่อผู้ให้บริการและรูปแบบ API อธิบายสิ่งที่ต่างกัน; ไม่ควรสมมุติว่าโมเดลเดียวจะยอมรับทุกรูปแบบ

การกำหนดค่าClaude Sonnet 5 API ใน CometAPIGPT-6.1 Sol API ใน CometAPIDeepSeek V4.1 Flash API ใน CometAPI
Model supplierAnthropicOpenAIDeepSeek
Model IDclaude-sonnet-5gpt-6.1-soldeepseek-v4.1-flash
OpenCode provider IDcometapi-messagescometapi-responsescometapi-chat
API format used hereMessagesResponses/ chatChat Completions
Adapter@ai-sdk/anthropic@ai-sdk/openai@ai-sdk/openai-compatible

What Do You Need Before Configuring CometAPI in OpenCode?

ใช้เทอร์มินัล, Node.js พร้อม npm, บัญชี CometAPI ที่มีสิทธิ์ API และยอดคงเหลือเพียงพอ และไดเรกทอรีโปรเจ็กต์สำหรับทิ้ง Bash ตัวอย่างใช้กับ macOS, Linux หรือ WSL; ตัวอย่าง PowerShell ที่ติดป้ายใช้ไวยากรณ์ของ Windows Node.js ต้องพร้อมใช้งานในเซสชันเดียวกันสำหรับการตรวจสอบ JavaScript ตอนท้ายของคู่มือนี้

เวิร์กทูธิสนี้ใช้สไตล์การกำหนดค่า OpenCode 1 เอกสารอย่างเป็นทางการ แยกความต่างระหว่าง OpenCode 1 กับ OpenCode 2; ทั้งสองใช้คำสั่ง opencode บันทึก opencode --version ก่อนเริ่ม และใช้เอกสารการกำหนดค่าสำหรับเวอร์ชันหลักนั้น เวิร์กโฟลว์ 3 โมเดลด้านล่างเป็นการเดินผสานพร้อมผลลัพธ์ที่คาดหวัง ไม่ได้อ้างว่าเป็นการทดสอบ end-to-end ที่เสร็จสมบูรณ์

บันทึก CLI, Node.js, npm, ระบบปฏิบัติการ และวันที่ทดสอบของคุณเมื่อรันตัวอย่าง การใช้ API จะถูกเรียกเก็บเงินกับบัญชี CometAPI ของคุณ คำสั่งด้านล่างเป็นการทำตามจริงพร้อมผลลัพธ์ที่คาดหวัง; ไม่มีการอ้างผลลัพธ์ที่สร้างโดยโมเดลหรือการรันผสาน 3 โมเดลสำเร็จ

node --versionnpm --versionopencode --version

How to Configure CometAPI in OpenCode Step by Step?

Step 1: Install OpenCode

ติดตั้งแพ็กเกจ npm อย่างเป็นทางการหากยังไม่มี OpenCode การติดตั้งแบบไม่ปักเวอร์ชันจะตามเวอร์ชันแพ็กเกจปัจจุบัน; บันทึกเวอร์ชันที่ติดตั้งก่อนใช้งานการกำหนดค่า หากต้องการทำซ้ำสภาพแวดล้อมของคู่มือแหล่งที่มา เวอร์ชัน CLI ที่ระบุคือ 1.18.16

ติดตั้ง OpenCode CLI และแสดงเวอร์ชัน

npm install -g opencode-aiopencode --version

เปิดเทอร์มินัลใหม่หากไม่พบ executable หลังติดตั้ง ดำเนินการต่อภายในไดเรกทอรีโปรเจ็กต์สำหรับทิ้งเพื่อให้งานเอเย่นต์แรกมีขอบเขตชัดเจน

สร้างและเข้าสู่ไดเรกทอรีโปรเจ็กต์

mkdir cometapi-opencode-democd cometapi-opencode-demo

Step 2: Create a CometAPI API Key

สร้างคีย์ API จาก บัญชี CometAPI ของคุณ และตั้งค่าในเทอร์มินัลเดียวกับที่ใช้เริ่ม OpenCode แทนที่ placeholder ในเครื่อง ห้ามคอมมิตคีย์ ห้ามวางในพรอมต์ หรือรวมไว้ในล็อกที่แชร์

ตัวแปรมีผลกับเชลล์ปัจจุบันและโปรเซสที่เปิดจากมัน ห้ามถ่ายภาพหน้าจอ token จริง การตรวจสอบต่อไปนี้จะรายงานว่ามีตัวแปรหรือไม่โดยไม่พิมพ์ค่า

ตั้งค่า CometAPI key สำหรับเซสชัน Bash ปัจจุบัน

export COMETAPI_KEY="YOUR_COMETAPI_KEY"

ตั้งค่า CometAPI key สำหรับเซสชัน PowerShell ปัจจุบัน

$env:COMETAPI_KEY = "YOUR_COMETAPI_KEY"test -n "$COMETAPI_KEY" && printf "COMETAPI_KEY is set\n" || printf "COMETAPI_KEY is missing\n"if ([string]::IsNullOrWhiteSpace($env:COMETAPI_KEY)) {  "COMETAPI_KEY is missing"} else {  "COMETAPI_KEY is set"}

Step 3: Create opencode.json

สร้าง opencode.json ที่รูทของโปรเจ็กต์ หรือใช้ ~/.config/opencode/opencode.json เพื่อให้รายการพร้อมใช้ข้ามโปรเจ็กต์ ไฟล์โปรเจ็กต์ทำให้บทความนี้เป็นแบบ self-contained ใช้ provider object เดียวที่มีสามรายการด้านล่าง; หากมี provider object อยู่แล้ว ให้ผสานรายการของมันแทนการสร้างคีย์ JSON ซ้ำ

สำหรับฟิลด์ที่ขัดแย้งกัน การกำหนดค่าของโปรเจ็กต์จะครอบการกำหนดค่าระดับ global; ฟิลด์ที่ไม่ขัดแย้งจะยังอยู่ ไฟล์ OPENCODE_CONFIG แบบกำหนดเองจะถูกโหลดระหว่าง global และโปรเจ็กต์ ตรวจสอบสายโซ่ลำดับความสำคัญที่มีเอกสารไว้หากมีการตั้งค่าที่จัดการหรือ inline อยู่ด้วย

บันทึกการกำหนดค่าครบถ้วนต่อไปนี้เป็น opencode.json ผู้ให้บริการแต่ละตัวอ่าน COMETAPI_KEY จาก environment ไม่ได้กำหนดโมเดลเริ่มต้นไว้โดยเจตนาเพื่อให้คุณเลือกหนึ่งในสามตัวอย่างอย่างชัดเจน

รุ่น Flash ทำให้ตัวอย่าง DeepSeek V4.1 ที่ร้องขอชัดเจน เก็บ GPT ไว้บน adapter Responses เพื่อใช้เครื่องมือ; คู่มือ CometAPI DeepSeek บันทึกเส้นทาง Chat Completions ที่ใช้ที่นี่ ตรวจสอบความพร้อมของโมเดลและสิทธิ์ในบัญชีของคุณก่อนรันตัวอย่าง

{  "$schema": "https://opencode.ai/config.json",  "provider": {    "cometapi-messages": {      "npm": "@ai-sdk/anthropic",      "name": "CometAPI Claude",      "options": {        "baseURL": "https://api.cometapi.com/v1",        "apiKey": "{env:COMETAPI_KEY}"      },      "models": {        "claude-sonnet-5": {          "name": "Claude Sonnet 5"        }      }    },    "cometapi-responses": {      "npm": "@ai-sdk/openai",      "name": "CometAPI GPT",      "options": {        "baseURL": "https://api.cometapi.com/v1",        "apiKey": "{env:COMETAPI_KEY}"      },      "models": {        "gpt-6.1-sol": {          "name": "GPT-6.1 Sol"        }      }    },    "cometapi-chat": {      "npm": "@ai-sdk/openai-compatible",      "name": "CometAPI DeepSeek",      "options": {        "baseURL": "https://api.cometapi.com/v1",        "apiKey": "{env:COMETAPI_KEY}"      },      "models": {        "deepseek-v4.1-flash": {          "name": "DeepSeek V4.1 Flash"        }      }    }  },  "permission": {    "edit": "ask",    "shell": "ask"  }}

baseURL ที่ถูกต้อง: https://api.cometapi.com/v1 baseURL ที่ไม่ถูกต้อง: https://api.cometapi.com/v1/chat/completions ตัว adapter จะเพิ่ม endpoint path เอง ผสานตัวอย่างเข้ากับ opencode.json ที่มีอยู่โดยไม่ลบการตั้งค่าอื่นที่ไม่เกี่ยวข้อง

การตั้งค่า edit และ shell จะขออนุมัติสำหรับการเปลี่ยนไฟล์และคำสั่งภายใต้ กฎสิทธิ์ปัจจุบันของ OpenCode รันตัวอย่างการเขียนโค้ดแบบโต้ตอบและตรวจสอบคำขอเหล่านั้น OpenCode ยังสืบทอดการเข้าถึงระบบปฏิบัติการของโปรเซสที่เปิดมัน; ใช้ไดเรกทอรีเพื่อการทิ้งสำหรับการฝึกครั้งนี้

Step 4: Check the Gateway Connection

การตั้งค่าและการตรวจสอบ Gemini แบบเลือกทำหลังจากการตรวจสอบการเชื่อมต่อ 3 โมเดลด้านล่าง

ตัวอย่าง HTTP ด้านล่างตรวจสอบรายการ DeepSeek Chat Completions โดยตรง เป็นวิธีที่มีประโยชน์ในการแยกการเชื่อมต่อ gateway ออกจาก OpenCode Claude และ GPT ใช้เส้นทาง adapter ที่เลือกในขั้นตอนถัดไป; การเปลี่ยน model ID ภายในคำขอ HTTP นี้จะไม่เปลี่ยนโปรโตคอลโดยอัตโนมัติ

ส่งคำขอ Chat Completions แบบน้อยที่สุดจาก Bash

curl --silent --show-error \  --output response.json \  --write-out "HTTP %{http_code}\n" \  https://api.cometapi.com/v1/chat/completions \  -H "Authorization: Bearer $COMETAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"model":"deepseek-v4.1-flash","messages":[{"role":"user","content":"Reply with a short greeting."}]}'

คำสั่งนี้ใช้ ตัวเลือก write-out และ output ของ curl เพื่อแยกสถานะ HTTP ออกจาก response.json การถ่ายโอนที่สำเร็จอาจยังมีข้อผิดพลาด HTTP ได้ ดังนั้นให้ตรวจสอบทั้งสถานะที่พิมพ์และเนื้อหา JSON วิธีนี้หลีกเลี่ยงการพึ่งพา --fail-with-body ซึ่งต้องการ curl 7.76.0 ขึ้นไป

ส่งคำขอเดียวกันจาก PowerShell โดยไม่มีการอ้าง JSON ที่เฉพาะเจาะจงของเชลล์

$body = @{  model = "deepseek-v4.1-flash"  messages = @(@{ role = "user"; content = "Reply with a short greeting." })} | ConvertTo-Json -Depth 4​$response = Invoke-WebRequest -UseBasicParsing -Method Post `  -Uri "https://api.cometapi.com/v1/chat/completions" `  -Headers @{ Authorization = "Bearer $env:COMETAPI_KEY" } `  -ContentType "application/json" `  -Body $body$response.Content | Set-Content -Encoding UTF8 response.json"HTTP $($response.StatusCode)"

เมื่อเกิดข้อผิดพลาด HTTP PowerShell อาจยกเว้นข้อยกเว้นก่อนสองบรรทัดสุดท้ายจะรัน เก็บสถานะและรายละเอียดข้อผิดพลาดแบบปิดบังจากความล้มเหล่านั้น; อย่าบันทึกว่าเป็นการตอบกลับที่สำเร็จ

ผลลัพธ์ที่คาดหวังสำหรับคำขอ DeepSeek: HTTP 200 และข้อความไม่ว่างใน choices[0].message.content ตรวจสอบไฟล์ response.json ที่บันทึกไว้แทนที่จะยอมรับเพียง HTTP 200 การเพิ่มเติมต่อไปนี้แสดงรูปทรงของการตอบกลับและวิธีตรวจสอบทั้งสามเส้นทางที่กำหนดไว้ ตัวอย่างมีจุดประสงค์เพื่อประกอบ; เวอร์ชันนี้ไม่อ้างผลการทดสอบ CometAPI แบบ live คำขอแบบข้อความล้วนไม่ได้ตรวจสอบการสตรีมหรือการเรียกใช้เครื่องมือ

ตัวอย่างรูปทรงการตอบกลับ DeepSeek: คำทักทาย ค่า usage และฟิลด์อื่นขึ้นอยู่กับคำขอจริง JSON ต่อไปนี้ถูกย่อโดยเจตนา ไม่ใช่การตอบกลับ API ที่จับมา

{"choices":[{"message":{"role":"assistant","content":"Hello!"}}]}

หลังจากคำขอ HTTP สำเร็จจริง บรรทัดสถานะควรเป็น HTTP 200 และ response.json ควรมีข้อความ assistant ที่ไม่ว่าง เก็บสถานะและเนื้อหาจริงสำหรับการรันของคุณเอง; อย่าคัดลอกตัวอย่างนี้เป็นหลักฐานทดสอบ

Step 5: Switch Between Claude, GPT, and DeepSeek

คำสั่งในขั้นตอนนี้ควรคืนตัวบ่งชี้ของ assistant ที่ร้องขอ ตัวอย่างข้อความ assistant โดยละแบนเนอร์เทอร์มินัล เวลา และเมทาดาตา:

Claude:   CLAUDE_READYGPT:      GPT_READYDeepSeek: DEEPSEEK_READY

บรรทัดเหล่านี้แสดงเฉพาะเนื้อหาที่คาดไว้ ไม่ใช่ทรานสคริปต์เทอร์มินัล บันทึกผลลัพธ์จริงและสถานะออกของโปรเซสสำหรับผู้ให้บริการแต่ละตัว; ตัวบ่งชี้ที่หายไปหรือคำขอที่ล้มเหลวต้องตรวจสอบ

เริ่มในไดเรกทอรีที่มี opencode.json แสดงรายการโมเดลสำหรับแต่ละผู้ให้บริการที่กำหนด แล้วทำคำขอข้อความสั้นๆ ไปยังแต่ละรายการ คำสั่งเหล่านี้จะเปลี่ยนโมเดลและ adapter ที่เลือก; คีย์และ base URL ของ CometAPI ยังคงเดิม

ใช้คำสั่งเหล่านี้เพื่อตรวจสอบว่าทั้งสามรายการมองเห็นได้และสามารถคืนข้อความได้

opencode models cometapi-messagesopencode models cometapi-responsesopencode models cometapi-chat​opencode run --model cometapi-messages/claude-sonnet-5 "Reply exactly with: CLAUDE_READY"opencode run --model cometapi-responses/gpt-6.1-sol "Reply exactly with: GPT_READY"opencode run --model cometapi-chat/deepseek-v4.1-flash "Reply exactly with: DEEPSEEK_READY"

สำหรับการสลับแบบโต้ตอบ ให้เริ่ม opencode, เข้าสู่ /models และเลือก CometAPI Claude, CometAPI GPT หรือ CometAPI DeepSeek OpenCode จะใช้คู่ provider/model ของรายการนั้น คุณไม่ต้องการบัญชีผู้ให้บริการสามบัญชีหรือคีย์สามชุด ด้วยการกำหนดค่าแบบอิง environment นี้ อย่าใช้ /connect เพื่อให้ credential ชุดที่สอง; ต้องแก้ไข COMETAPI_KEY ที่ขาดไปในเชลล์ที่เปิดโปรเซส

ผลลัพธ์ที่คาดหวัง: แต่ละคำขอสั้นๆ คืนตัวบ่งชี้ที่ร้องขอ บันทึกผลจริงสำหรับแต่ละโมเดล รายการโมเดลที่มองเห็นยืนยันการลงทะเบียน; การตอบกลับข้อความสำเร็จยืนยันเส้นทางคำขอ เพียงอย่างใดอย่างหนึ่งไม่พิสูจน์ว่าเครื่องมือไฟล์ใช้งานได้

Gemini ใช้ผู้ให้บริการและโปรโตคอลแยกต่างหาก เก็บรายการ Claude, GPT และ DeepSeek ข้างต้นไว้; ผสานรายการต่อไปนี้เข้า provider object ที่มีอยู่ base URL ด้านล่างเป็นไปตามการกำหนดค่า CometAPI ที่ผู้ตรวจให้ ยืนยันเส้นทางปัจจุบันและการเข้าถึงโมเดลในบัญชี CometAPI ของคุณก่อนใช้งาน

ตัว adapter ของ Google รองรับ baseURL แบบกำหนดเองและส่ง apiKey ผ่าน x-goog-api-key ดู เอกสารอ้างอิงผู้ให้บริการ AI SDK Google อย่างเป็นทางการ นี่เป็นการยืนยันการตั้งค่า adapter; ไม่ได้พิสูจน์ว่าโมเดล Gemini เฉพาะเปิดใช้งานบน gateway ของ CometAPI

{  "provider": {    "cometapi-gemini": {      "npm": "@ai-sdk/google",      "name": "CometAPI Gemini",      "options": {        "baseURL": "https://api.cometapi.com/v1beta",        "apiKey": "{env:COMETAPI_KEY}"      },      "models": {        "YOUR_GEMINI_MODEL_ID": {          "name": "CometAPI Gemini (account-selected model)"        }      }    }  }}

แทนที่ YOUR_GEMINI_MODEL_ID ทั้งในคีย์ JSON และคำสั่งด้านล่างด้วย model ID ของ Gemini ที่เปิดใช้งานสำหรับบัญชี CometAPI ของคุณ นี่เป็น placeholder ไม่ใช่ model ID จริง ผสานรายการผู้ให้บริการนี้โดยไม่ทำให้คีย์ provider ระดับบนซ้ำ และเริ่ม OpenCode จากเชลล์เดียวกันที่ตั้งค่า COMETAPI_KEY ไว้

opencode models cometapi-geminiopencode run --model cometapi-gemini/YOUR_GEMINI_MODEL_ID "Reply exactly with: GEMINI_READY"

ข้อความ assistant ที่คาดหวัง: GEMINI_READY รายการโมเดลที่แสดงยืนยันการลงทะเบียนในเครื่อง; การได้รับตัวบ่งชี้ยืนยันคำขอข้อความ บันทึกการตอบกลับจริงและสถานะออก เพื่อยืนยันเครื่องมือโค้ดดิ้ง ให้เปิด opencode --model cometapi-gemini/YOUR_GEMINI_MODEL_ID ในไดเรกทอรีใหม่สำหรับทิ้ง และทำซ้ำงาน greet.cjs/check.cjs ด้านล่าง ความสำเร็จของข้อความเพียงอย่างเดียวไม่ยืนยันการสตรีม การแก้ไข หรือการเรียกใช้เครื่องมือ

How Do You Run a Coding Task with Claude, GPT, and DeepSeek?

ใช้งานเดียวกันสำหรับแต่ละโมเดล: สร้างฟังก์ชันทักทาย เพิ่ม assertion และรันมัน เก็บไดเรกทอรีใหม่สามชุดเพื่อที่โมเดลที่สองจะไม่สามารถนำไฟล์ที่โมเดลแรกสร้างไว้มาใช้ต่อได้ ตรวจสอบเวิร์กโฟลว์การผสานโดยไม่ทำให้บทความกลายเป็นการจัดอันดับประสิทธิภาพ

บันทึก prepare-runs.cjs ไว้ข้าง opencode.json แล้วรันหนึ่งครั้ง มันจะสร้างไดเรกทอรีใหม่สามรายการและคัดลอกเฉพาะการกำหนดค่าที่ใช้ร่วมกัน มันจะหยุดหากมีไดเรกทอรีเป้าหมายใดๆ อยู่แล้ว เพื่อป้องกันงานเดิมถูกทับ

const fs = require("node:fs");const path = require("node:path");const root = __dirname;const names = ["claude-demo", "gpt-demo", "deepseek-demo"];const config = path.join(root, "opencode.json");if (!fs.existsSync(config)) throw new Error("Missing opencode.json");for (const name of names) {  if (fs.existsSync(path.join(root, name))) {    throw new Error(`Directory already exists: ${name}`);  }}for (const name of names) {  const dir = path.join(root, name);  fs.mkdirSync(dir);  fs.copyFileSync(config, path.join(dir, "opencode.json"));}node prepare-runs.cjscd claude-demoopencode --model cometapi-messages/claude-sonnet-5# After exiting OpenCode:cd ..cd gpt-demoopencode --model cometapi-responses/gpt-6.1-sol# After exiting OpenCode:cd ..cd deepseek-demoopencode --model cometapi-chat/deepseek-v4.1-flash# After exiting OpenCode:cd ..

รันหนึ่งเซสชันต่อครั้ง โดยเริ่มจากไดเรกทอรีแม่ของโปรเจ็กต์ ออกจากเซสชันก่อนขยับไปยังตัวอย่างถัดไป ในแต่ละเซสชัน ส่งงานเดียวกันด้านล่างและตรวจทานการแก้ไขและคำสั่งที่เสนอ Node.js ต้องพร้อมใช้กับโปรเซสที่เปิด OpenCode

ขอให้เอเย่นต์สร้างและตรวจสอบฟังก์ชัน JavaScript ขนาดเล็ก

Create greet.cjs in this directory.Export a function named greet(name) that returns "Hello, " + name + "!".Create check.cjs using node:assert/strict.Assert that greet("Ada") equals "Hello, Ada!".Run node check.cjs and report its actual exit status.Do not modify opencode.json or unrelated files.

ผลลัพธ์ที่คาดหวัง: เอเย่นต์ขออนุมัติตามการตั้งค่า สร้างไฟล์ทั้งสอง และทำ node check.cjs สำเร็จด้วย exit status 0 บันทึกสิ่งที่เกิดขึ้นจริง ตรวจสอบไฟล์และรันการตรวจสอบด้วยตัวเอง; การกล่าวอ้างด้วยร้อยแก้วว่า “สำเร็จ” ไม่เพียงพอ หากการเรียกใช้เครื่องมือถูกปฏิเสธหรือผิดรูป ตรวจสอบความเข้ากันได้ของเส้นทางแยกจากคำขออนุมัติที่ค้างอยู่

Reference Files and Local Verification

ไฟล์ต่อไปนี้เป็นการอิมพลีเมนต์อ้างอิงของงานที่ร้องขอ เขียนขึ้นโดยตรงสำหรับคู่มือนี้; ไม่ได้ถูกนำเสนอว่าเป็นสิ่งประดิษฐ์ที่สร้างโดยโมเดล การจับคู่พฤติกรรมที่สังเกตได้ของมันคือเงื่อนไขการยอมรับสำหรับการรันเอเย่นต์ของคุณ

function greet(name) {  return "Hello, " + name + "!";}​module.exports = { greet };const assert = require("node:assert/strict");const { greet } = require("./greet.cjs");​assert.equal(greet("Ada"), "Hello, Ada!");node check.cjsprintf "exit=%s\n" "$?"node check.cjs"exit=$LASTEXITCODE"

การตรวจสอบอ้างอิงภายในเครื่อง: Windows, Node.js v24.19.0, 22 ตุลาคม 2026; node check.cjs คืน exit status 0 โดยไม่มี standard output นี่ตรวจเฉพาะสองไฟล์อ้างอิง ไม่ยืนยันการติดตั้ง OpenCode การเข้าถึง CometAPI พรอมต์ขออนุมัติ หรือการเรียกใช้เครื่องมือของโมเดล

Runรายการโมเดลที่เลือกสิ่งที่ต้องบันทึก
Claudecometapi-messages/claude-sonnet-5การตอบกลับ ไฟล์ที่สร้าง คำขออนุมัติ โค้ดออกของการทดสอบ
GPTcometapi-responses/gpt-6.1-solการตอบกลับ ไฟล์ที่สร้าง คำขออนุมัติ โค้ดออกของการทดสอบ
DeepSeekcometapi-chat/deepseek-v4.1-flashการตอบกลับ ไฟล์ที่สร้าง คำขออนุมัติ โค้ดออกของการทดสอบ

เก็บบันทึกผลหนึ่งชุดต่อโมเดล: ผู้ให้บริการ/โมเดลที่เลือก มีการตอบกลับหรือไม่ มีการสร้าง greet.cjs และ check.cjs หรือไม่ มีคำขออนุมัติหรือไม่ และ exit code ของ node check.cjs บันทึกความล้มเหลวเป็นความล้มเหลว; อย่าคาดเดาว่าผ่านจากอิมพลีเมนต์อ้างอิง

Protect Credentials and Verify Reliability

เก็บ COMETAPI_KEY ไว้ในตัวแปรสภาพแวดล้อมแทนการใส่ไว้ในไฟล์กำหนดค่าหรือบันทึกที่แชร์ เปิดการอนุมัติสำหรับการแก้ไขไฟล์และคำสั่ง และทดสอบการกำหนดค่าใหม่ในโปรเจ็กต์สำหรับทิ้ง

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

CometAPI ทำให้การสลับระหว่างโมเดลง่ายขึ้น แต่ OpenCode ไม่ได้จัดหา failover ข้ามโมเดลโดยอัตโนมัติผ่านการกำหนดค่านี้ หากโมเดลหนึ่งไม่พร้อมใช้งาน ให้เลือกโมเดลที่ผ่านการยืนยันอีกตัวหนึ่งด้วยตนเองและทำการตรวจรับซ้ำ

How much does it cost to use Opencode with CometAPI?

Prices for CometAPI, and how is billing structured

CometAPI คิดค่าบริการแบบจ่ายตามการใช้งานโดยไม่มีค่าบริการรายเดือน คิดเฉพาะการใช้งาน API จริง อัตราของโมเดลอย่างเป็นทางการโดยทั่วไปต่ำกว่าราคามาตรฐานของผู้ให้บริการ 20% และมีส่วนลดตามปริมาณเพิ่มเติม นักพัฒนาสามารถเข้าถึง Claude, GPT, DeepSeek และโมเดลอื่นๆ ผ่านบัญชีเดียว โดยชำระเงินตามการใช้โทเค็นของโมเดลที่เลือก ตรวจสอบ หน้าราคา CometAPI สำหรับอัตราปัจจุบัน

สำหรับคำขอที่ไม่มีการแคชหรือค่าธรรมเนียมเพิ่มเติม:

Cost = (Input tokens × Input rate + Output tokens × Output rate) / 1,000,000

ตัวอย่าง เช่น ที่อัตราสมมุติ $1/M โทเค็นอินพุต และ $4/M โทเค็นเอาต์พุต การใช้ 20,000 อินพุตและ 2,000 เอาต์พุตมีค่าใช้จ่าย $0.028 เหล่านี้เป็นอัตราสาธิต ไม่ใช่ราคาจริงของโมเดล

บันทึกการใช้โทเค็น ค่าธรรมเนียม API รวม เวลาในการดำเนินการ และผลการทดสอบสำหรับแต่ละงาน เพื่อลดค่าใช้จ่าย จำกัดคอนเท็กซ์ที่ไม่จำเป็น ใช้พรอมต์ให้กระชับ หลีกเลี่ยงการส่งคอนเท็กซ์รีโพขนาดใหญ่ซ้ำๆ ลดคำขอล้มเหลวซ้ำ และเลือกโมเดลที่มีต้นทุนต่ำกว่าเมื่อให้คุณภาพเทียบเท่า

OpenCode API Cost Optimization Strategies

เพื่อลดค่าใช้จ่ายของ OpenCode โดยไม่กระทบคุณภาพการเขียนโค้ด ให้โฟกัสที่การเลือกโมเดล ประสิทธิภาพโทเค็น และการหลีกเลี่ยงคำขอ API ที่ไม่จำเป็น

  • เลือกโมเดลที่เหมาะสม: ใช้โมเดลที่มีต้นทุนต่ำกว่า เช่น DeepSeek สำหรับงานประจำ ขณะที่เก็บ Claude หรือ GPT ไว้สำหรับการดีบัก การรีแฟคเตอร์ และการให้เหตุผลที่ซับซ้อน
  • ลดการใช้โทเค็น: ทำพรอมต์ให้กระชับ ให้เฉพาะไฟล์โปรเจ็กต์ที่เกี่ยวข้อง และหลีกเลี่ยงการส่งบริบทของรีโพขนาดใหญ่ซ้ำแล้วซ้ำอีก
  • ใช้การแคชพรอมต์: ใช้คุณสมบัติแคชที่รองรับสำหรับบริบทที่ทำซ้ำ เช่น คำแนะนำโปรเจ็กต์และอ้างอิงโค้ด เพื่อลดต้นทุนอินพุต
  • หลีกเลี่ยงการลองใหม่ที่ไม่จำเป็น: แก้ไขการกำหนดค่าและการยืนยันตัวตนให้ถูกต้องก่อนลองใหม่ และตรวจทานผลลัพธ์ก่อนหน้าเพื่อหลีกเลี่ยงงานซ้ำ
  • ติดตามการใช้จริง: ติดตามการใช้โทเค็น ค่า API และความสำเร็จของงานผ่าน CometAPI เปรียบเทียบค่าใช้จ่ายต่อ “งานสำเร็จ” มากกว่าราคาโทเค็นเพียงอย่างเดียว

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

How Can You Extend the CometAPI Configuration?

หากต้องการเพิ่มโมเดลอื่น ให้ใส่ model ID ของมันภายใต้ผู้ให้บริการที่รองรับรูปแบบ API นั้น หรือเพิ่มรายการผู้ให้บริการใหม่พร้อม adapter ที่ต้องการ จากนั้นเลือกผู้ให้บริการ/โมเดลนั้นผ่าน /models เก็บ credential ไว้ใน COMETAPI_KEY และคงรายการที่มีอยู่เพื่อให้การสลับยังเป็นเพียงการเลือก

คู่มืออย่างเป็นทางการครอบคลุมรูปแบบ API สี่แบบ รวมถึง Gemini บทความนี้ใช้รายการสามตัวที่จำเป็นสำหรับ Claude, GPT และ DeepSeek หากโมเดลหลายตัวที่เลือกสนับสนุน Chat Completions พวกมันสามารถใช้แผนที่ models ของ cometapi-chat ร่วมกันได้ อย่าย้ายเส้นทางที่เฉพาะ Responses หรือ Messages เข้าแผนที่นั้นเพียงเพื่อจะลดจำนวนรายการ

เลือก adapter ตามเส้นทางที่คุณตั้งใจจะเรียก และเลือกโมเดลตามงานเขียนโปรแกรม การเปลี่ยนผู้ให้บริการไม่ต้องใช้คีย์ CometAPI ใหม่; การเปลี่ยนรูปแบบ API ต้องใช้ adapter ที่กำหนดค่าให้ตรงกัน

How to Troubleshoot CometAPI in OpenCode?

ตามลำดับขั้นที่ล้มเหลวแรก: คำขอ HTTP → ผู้ให้บริการ OpenCode → เครื่องมือไฟล์ ถ้า HTTP ล้มเหลว ตรวจสอบ credential การเข้าถึงโมเดล และรายละเอียด endpoint หาก HTTP ใช้ได้แต่ OpenCode ล้มเหลว ตรวจสอบการกำหนดค่าและสภาพแวดล้อมที่เปิดใช้ หากการตรวจข้อความทั้งสองใช้ได้แต่การทำงานกับไฟล์ล้มเหลว ตรวจสอบสิทธิ์และความเข้ากันได้ของการเรียกใช้เครื่องมือ

อาการตรวจแรกการดำเนินการถัดไปคำสั่ง/หลักฐานสำหรับวินิจฉัย
401 responseค่า key และส่วนหัว Authorizationตั้งคีย์ในเทอร์มินัลปัจจุบัน; ตรวจสอบช่องว่างโดยไม่ตั้งใจตรวจสอบการมีอยู่ของตัวแปรโดยไม่พิมพ์คีย์; เก็บสถานะ HTTP และข้อผิดพลาดแบบปิดบัง
403 หรือข้อจำกัดบัญชีเนื้อความ error และสิทธิ์บัญชียืนยันการเข้าถึงโมเดลและสถานะบัญชีใน CometAPIบันทึกการตอบกลับ error แบบปิดบังและยืนยันการเข้าถึงบัญชี
404 responseโฮสต์ เส้นทาง endpoint และ model IDเปรียบเทียบคำขอกับเอกสารของ API ของโมเดลที่เลือกเปรียบเทียบ response.json กับโมเดลและ endpoint ที่ร้องขอ
โมเดลไม่แสดงใน OpenCodeไดเรกทอรีโปรเจ็กต์และการกำหนดค่าผู้ให้บริการตรวจสอบ JSON ถูกต้องและชื่อผู้ให้บริการ/โมเดลตรงกัน; รีสตาร์ตหลังแก้ไขรัน opencode models cometapi-chat, opencode models cometapi-messages, และ opencode models cometapi-responses; บันทึก opencode --version
ข้อความใช้ได้ เครื่องมือล้มเหลวการตอบกลับเครื่องมือและความเข้ากันได้ของ adapterยืนยันว่ารองรับเส้นทาง; แยกแยะระหว่างการเรียกเครื่องมือที่ถูกปฏิเสธกับพรอมต์ขออนุมัติเปรียบเทียบคำขอข้อความสั้นกับการทำงานเครื่องมือที่ล้มเหลว; เก็บ error
คำสั่งรอการอนุมัติเซสชันแบบโต้ตอบและการตั้งค่าสิทธิ์ทบทวนและอนุมัติการกระทำที่ตั้งใจไว้; อย่าถือว่าคำขอที่ค้างเป็นการหยุดทำงานของ APIใช้เซสชันแบบโต้ตอบ; บันทึกการกระทำที่ร้องขอและผลการอนุมัติ
429 หรือข้อผิดพลาดชั่วคราวรายละเอียด error และขีดจำกัดการใช้งานลดความพร้อมกันของคำขอ; ปฏิบัติตามคำแนะนำการลองใหม่แทนการลองใหม่ซ้ำๆเก็บสถานะ HTTP และคำแนะนำการลองใหม่; ลดความพร้อมกัน

เมื่อแบ่งปันปัญหา ให้รวมเวอร์ชัน OpenCode ระบบปฏิบัติการ model ID เส้นทาง endpoint และข้อความ error แบบปิดบัง ไม่รวมคีย์ API และเนื้อหาส่วนตัวของรีโพ เก็บคำขอที่เล็กที่สุดที่ทำให้เกิดปัญหาเพื่อให้สามารถตรวจสอบความล้มเหลวของการกำหนดค่าและเครื่องมือได้แยกจากกัน

FAQ

Why does OpenCode lose my CometAPI key in a new terminal?

คำสั่ง export และ PowerShell ข้างต้นตั้งค่าตัวแปรสภาพแวดล้อมสำหรับเซสชันปัจจุบันและโปรเซสลูก เทอร์มินัลที่เปิดแยกต่างหากหรือเอดิเตอร์ที่รันอยู่แล้วอาจไม่ได้รับมรดกตัวแปร ตั้งคีย์ในสภาพแวดล้อมที่เปิด OpenCode และรีสตาร์ตโปรเซสนั้น สำหรับการตั้งค่าถาวร ใช้ตัวจัดการ credential ของสภาพแวดล้อมแทนการฝังความลับไว้ในไฟล์รีโพ

Does OpenCode load COMETAPI_KEY from a .env file automatically?

นิพจน์ {env:COMETAPI_KEY} อ่านจากสภาพแวดล้อมของโปรเซส เพียงแค่สร้างไฟล์ .env ไม่ได้ยืนยันว่าตัวแปรถูกโหลด ใช้เชลล์ของคุณหรือเครื่องมือโหลดสภาพแวดล้อมที่กำหนดไว้อย่างชัดเจนก่อนเริ่ม OpenCode วินิจฉัยค่าเว้นว่างที่โปรเซสที่เปิดใช้งานแทนที่จะถือว่าผู้ให้บริการไม่พร้อมใช้งาน

Can a global OpenCode configuration change this project setup?

OpenCode ผสานการกำหนดค่าแทนการแทนที่ไฟล์ก่อนหน้าทั้งหมด ไฟล์โปรเจ็กต์จะครอบฟิลด์ที่ทับซ้อนในไฟล์ global ขณะที่การตั้งค่า global อื่นที่ไม่เกี่ยวข้องยังอยู่ ไฟล์ OPENCODE_CONFIG แบบกำหนดเองจะถูกโหลดระหว่างสองไฟล์ หากพฤติกรรมแตกต่างข้ามรีโพ ให้เปรียบเทียบแหล่งเหล่านี้และการตั้งค่าที่จัดการหรือ inline แทนที่จะถือว่าไฟล์ท้องถิ่นเป็นอินพุตเดียว

Does refreshing the OpenCode model list enable CometAPI access?

ไม่ ตัวเลือกรีเฟรชโมเดลจะอัปเดตแคช models.dev; มันไม่ได้ให้สิทธิ์เข้าถึงบัญชีหรือพิสูจน์ว่า endpoint ยอมรับ model ID รายการที่กำหนดเองอาจมองเห็นได้ก่อนคำขอสำเร็จ ใช้คำขอจริงเพื่อตรวจเส้นทางและตรวจสอบการจำกัดการเข้าถึงในบัญชี CometAPI

Why does curl work while OpenCode cannot call CometAPI?

สองโปรเซสอาจโหลด credential ต่างกัน ใช้ model ID ต่างกัน หรือส่งรูปทรงคำขอต่างกัน ก่อนอื่นให้รันพรอมต์ข้อความสั้นจากเทอร์มินัลเดียวกับคำขอ HTTP ที่สำเร็จ จากนั้นเปรียบเทียบ base URL ของผู้ให้บริการ adapter และโมเดลที่เลือก หากข้อความง่ายใช้ได้แต่ภารกิจเอเย่นต์ล้มเหลว เก็บ error ที่เกี่ยวกับเครื่องมือแยกต่างหาก; การเชื่อมต่อ HTTP เพียงอย่างเดียวไม่แสดงความเข้ากันได้ของเครื่องมือ

Conclusion

ตอนนี้คุณมี opencode.json เดียวที่มีตัวอย่าง Claude, GPT และ DeepSeek คีย์ CometAPI ร่วมกัน และคำสั่งสำหรับสลับโมเดลที่ใช้งาน ใช้คำขอข้อความสั้นเพื่อตรวจการเข้าถึง แล้วรันงานสร้างไฟล์เดียวกันในไดเรกทอรีแยกเพื่อยืนยันเวิร์กโฟลว์การเขียนโค้ด เก็บผลลัพธ์ที่สังเกตได้พร้อมรายละเอียดสภาพแวดล้อมของคุณก่อนนำการตั้งค่านี้ไปใช้กับรีโพที่ใหญ่ขึ้น

เรียนรู้ต่อ

เชื่อมโยงบทความนี้กับการตัดสินใจถัดไป

ดูทุกหัวข้อ
เผยแพร่เมื่อ Oct 22, 2026
อัปเดตล่าสุด Oct 22, 2026
0 ครั้งที่ดู
ตรวจสอบความชัดเจน การอ้างอิงแหล่งที่มา และคำศัพท์ API ปัจจุบันแล้ว

อ่านเพิ่มเติม