TH ▾
รับคีย์ API

SDK API DeepSeek: ใช้ OpenAI SDK และเปลี่ยนเอนด์พอยต์

ไม่จำเป็นต้องติดตั้งไคลเอนต์พิเศษสำหรับการตั้งค่า SDK API DeepSeek: API สไตล์ DeepSeek ใช้รูปแบบ OpenAI ดังนั้น OpenAI SDK จึงทำงานได้พร้อม Base URL ที่แตกต่างกัน ข้อเท็จจริงนี้ยังช่วยให้คุณเปลี่ยนเอนด์พอยต์อื่นได้โดยเปลี่ยนค่าสามค่า

อัปเดต

บล็อกตัวเชื่อมต่อหนึ่งตัวป้อนไปยังเซิร์ฟเวอร์หลายตัว แสดงการเปลี่ยนเอนด์พอยต์ด้วย SDK เดียวกัน

ประเด็นสำคัญ

  • OpenAI Python และ Node SDKs ทำงานกับเอนด์พอยต์ที่เข้ากันได้กับ OpenAI ได้; คุณเปลี่ยน base URL, key และชื่อโมเดล
  • เก็บค่าทั้งสามนี้ไว้ในตัวแปรสภาพแวดล้อม (environment variables) เพื่อให้การเปลี่ยนเอนด์พอยต์ไม่ต้องแก้ไขโค้ด
  • การสลับใช้งานปลอดภัยสำหรับแชทธรรมดา สตรีมมิง และการเรียกใช้เครื่องมือ แต่ควรทดสอบฟีเจอร์เฉพาะของโมเดลก่อนนำไปใช้งานจริง
  • สำหรับเอนด์พอยต์นี้ ให้ใช้ https://api.deepseekapi.top/v1 และ model id คือ uncensored

ทำไม SDK ของ OpenAI จึงเป็น SDK ของ DeepSeek API

เมื่อผู้คนค้นหา DeepSeek API SDK พวกเขาคาดหวังแพ็กเกจที่มีชื่อผู้ผลิตบนนั้น ในทางปฏิบัติ เอกสารของ DeepSeek เองอธิบายการเรียกใช้ API ผ่าน OpenAI SDK ด้วย base URL ที่แตกต่างกัน เนื่องจาก API ปฏิบัติตามรูปแบบคำขอและคำตอบของ OpenAI ตรวจสอบเอกสารปัจจุบันของพวกเขาสำหรับ base URL และชื่อโมเดลที่ถูกต้อง; พวกเขาเป็นผู้เชี่ยวชาญในเรื่องบริการของพวกเขา

ผลลัพธ์ที่ได้คือประโยชน์อย่างมาก โค้ดที่เขียนโดยใช้ไลบรารีไคลเอนต์ของ OpenAI สามารถสื่อสารกับเซิร์ฟเวอร์ใดๆ ที่รองรับเอนด์พอยต์เดียวกัน ซึ่งในกรณีนี้คือ POST /v1/chat/completions, POST /v1/responses และ GET /v1/models การเปลี่ยนผู้ให้บริการจึงเป็นการเปลี่ยนแปลงการกำหนดค่า ไม่ใช่การเขียนโค้ดใหม่ บทความนี้แสดงรูปแบบการใช้งานใน Python, Node และ curl รวมถึงโครงสร้างที่ทำให้การสลับใช้งานทำได้ง่าย

การตั้งค่า Python

ติดตั้งแพ็กเกจทางการและชี้ไปยังเอนด์พอยต์:

pip install openai
from openai import OpenAI

client = OpenAI(
    base_url="https://api.deepseekapi.top/v1",
    api_key="YOUR_KEY",
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise technical assistant."},
        {"role": "user", "content": "Explain idempotency in two sentences."},
    ],
)
print(resp.choices[0].message.content)
print(resp.usage)

รับคีย์ API จาก หน้าคีย์ API ผู้ใช้ใหม่สามารถรับเครดิตทดลองใช้ฟรีมูลค่า $0.50 ได้เพียงคลิกเดียวโดยไม่ต้องใช้บัตรเครดิต บทความ DeepSeek API Python ให้รายละเอียดเพิ่มเติมเกี่ยวกับภาษาโปรแกรมนี้ รวมถึงการจัดการข้อผิดพลาด

การตั้งค่า Node.js

npm install openai
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.deepseekapi.top/v1",
  apiKey: process.env.API_KEY,
});

const stream = await client.chat.completions.create({
  model: "uncensored",
  stream: true,
  messages: [{ role: "user", content: "List four uses of a message queue." }],
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

รูปแบบเหมือนกัน: base URL, key, model การสตรีมส่ง Server-Sent Events และไลบรารีเปลี่ยนมันเป็น async iterator การเรียกใช้เครื่องมือปฏิบัติตามสคีมาเดียวกับ API ที่เข้ากันได้กับ OpenAI: ส่ง tools, อ่าน streamed tool_calls, และส่งผลลัพธ์กลับเป็นข้อความ role: "tool"

ทำให้เอนด์พอยต์สามารถสลับได้

อย่า hard-code ค่าสามค่า อ่านจาก environment variables และห่อการสร้าง client ในฟังก์ชันหนึ่ง จากนั้นการย้ายจากเอนด์พอยต์หนึ่งไปอีกอันหนึ่งหมายถึงการแก้ไขไฟล์ .env ไม่ใช่ source code

import os
from openai import OpenAI

def make_client():
    return OpenAI(
        base_url=os.environ.get("LLM_BASE_URL", "https://api.deepseekapi.top/v1"),
        api_key=os.environ["LLM_API_KEY"],
    )

MODEL = os.environ.get("LLM_MODEL", "uncensored")

def ask(prompt: str) -> str:
    r = make_client().chat.completions.create(
        model=MODEL,
        messages=[{"role": "user", "content": prompt}],
        temperature=0.7,
    )
    return r.choices[0].message.content

ตอนนี้ผู้ให้บริการรายอื่นต้องการเพียงตัวแปรสภาพแวดล้อมสามตัว SDK ทางการยังอ่านค่า OPENAI_API_BASE และ OPENAI_API_KEY ในบางเวอร์ชัน แต่การใช้ตัวแปรที่ชัดเจนจะช่วยให้เข้าใจง่ายและหลีกเลี่ยงปัญหาเมื่อคุณเรียกใช้ผู้ให้บริการหลายรายพร้อมกัน

หากคุณใช้ TypeScript หรือภาษาอื่น แนวคิดเหมือนกัน: ฟังก์ชัน factory หนึ่งตัว, ตัวแปรสามตัว, ไม่มีชื่อ provider กระจายอยู่ใน codebase ข้อผิดพลาดทั่วไปคือการปล่อยให้ชื่อ vendor รั่วไหลเข้าไปในชื่อฟังก์ชัน, ข้อความ log และชื่อตัวแปร ซึ่งทำให้การสลับในภายหลังยากขึ้นโดยไม่จำเป็น ตั้งชื่อตามงาน (ask, summarise) แทนที่จะเป็น provider

เก็บการทดสอบขนาดเล็กที่ส่งพรอมต์คงที่หนึ่งค่าผ่าน ask() และตรวจสอบว่ามีคำตอบที่ไม่เป็นค่าว่าง รันการทดสอบนี้หลังจากเปลี่ยนเอนด์พอยต์ทุกครั้ง; มันจะจับข้อผิดพลาดของ URL และคีย์ API ได้ภายในไม่กี่วินาที

สิ่งที่คงเดิมและสิ่งที่เปลี่ยนแปลงเมื่อคุณสลับ

รายการคงเดิมอาจเปลี่ยนแปลง
รูปแบบคำขอข้อความ, บทบาท, อุณหภูมิ, top_p, stopพารามิเตอร์เสริมที่ผู้ให้บริการรายหนึ่งไม่รองรับ
สตรีมมิงSSE พร้อม data chunksตำแหน่งที่ข้อมูลการใช้งานปรากฏในสตรีม
การเรียกใช้เครื่องมือเครื่องมือ, tool_choice, tool_callsความสามารถของโมเดลในการปฏิบัติตามสคีมา
ชื่อโมเดลฟิลด์ที่จำเป็นค่าเอง: ที่นี่คือ uncensored
หน้าต่างบริบทพรอมต์รวมกับการสร้างผลลัพธ์ขนาด: 100,000 โทเคน ที่นี่
พฤติกรรมรูปแบบแชทสไตล์ จุดแข็ง และพฤติกรรมการปฏิเสธ

แถวสุดท้ายคือสิ่งที่ทำให้ผู้คนตกใจ เอนด์พอยต์เข้ากันได้ในระดับโปรโตคอล ไม่ใช่ในระดับพฤติกรรม ผู้ให้บริการสองรายสามารถยอมรับคำขอที่เหมือนกันและให้คำตอบที่แตกต่างกันมาก โมเดลที่นี่คือโมเดล open-weight model เดียวจากผู้ให้บริการอิสระ ซึ่งปรับแต่งเพื่อตอบโดยไม่มีการปฏิเสธเนื้อหาสำหรับการใช้งานผู้ใหญ่ที่ถูกต้องตามกฎหมาย และไม่ใช่ API อย่างเป็นทางการของ DeepSeek หรือแล็บอื่น ๆ ทดสอบ prompt ที่คุณปรับแต่งสำหรับโมเดลอื่นอีกครั้ง

ฟีเจอร์ที่เอนด์พอยต์นี้มีและไม่มี

  • รองรับ: chat completions, Responses format, การแสดงรายการโมเดล, streaming, tool calling, JSON mode (response_format พร้อม json_object), และการส่งผ่าน temperature, top_p, stop, seed และ penalties
  • ไม่ให้บริการ: การสร้างภาพ เสียง หรือวิดีโอ, embeddings, fine-tuning
  • ข้อจำกัด: หน้าต่างบริบท 100,000 โทเคน, ขนาดสูงสุดของ body 8 MB, คำขอพร้อมกัน 8 คำขอ และ 300 คำขอต่อนาทีบนคีย์เต็ม (2 และ 60 บนคีย์ทดลอง)
  • ข้อผิดพลาด: HTTP 429 พร้อมโค้ด rate_limited หรือ concurrency และเฮดเดอร์ Retry-After: 5 เมื่อเกิดโอเวอร์โหลดชั่วคราว

หากโค้ดของคุณเรียกใช้เอนด์พอยต์ embeddings คุณจะต้องใช้โปรไวเดอร์อื่นสำหรับส่วนนั้นและสามารถเก็บ chat ไว้ที่นี่ได้ การแบ่งตามงานเป็นสาเหตุทั่วไปของรูปแบบตัวแปรสภาพแวดล้อมข้างต้น

รายการตรวจสอบการย้าย

เมื่อคุณเปลี่ยนเอนด์พอยต์หนึ่งเป็นอีกเอนด์พอยต์หนึ่งในโปรเจกต์ที่มีอยู่ ให้ทำงานผ่านรายการสั้นๆ แทนที่จะเปลี่ยนทุกอย่างพร้อมกัน

  1. พิสูจน์เอนด์พอยต์ ส่งคำขอหนึ่งคำขอด้วย curl และยืนยันว่าคุณได้รับข้อความกลับ เรียกใช้ GET /v1/models และตรวจสอบว่า id uncensored ถูกแสดงรายการ
  2. เปลี่ยนค่าสามค่า Base URL, คีย์ API, ชื่อโมเดล เท่านั้น ไม่ต้องแตะพรอมต์
  3. รันการทดสอบที่มีอยู่ของคุณ หากคุณมีการทดสอบการถดถอยของพรอมต์ ให้รันแล้วบันทึกว่ารายการใดล้มเหลว ความล้มเหลวมักเป็นพฤติกรรม เช่น รูปแบบผลลัพธ์ที่แตกต่าง ไม่ใช่ข้อผิดพลาดโปรโตคอล
  4. ตรวจสอบพารามิเตอร์ ลบตัวเลือกที่เอนด์พอยต์ไม่ต้องการออก เก็บ temperature, top_p, stop และ seed ไว้หากคุณใช้งาน
  5. ทดสอบสตรีมมิงและเครื่องมือแยกกัน บั๊กของสตรีมมิงมักซ่อนอยู่ในโค้ดไคลเอนต์ที่สมมติเลย์เอาต์ของข้อมูลแบบเฉพาะเจาะจง การเรียกใช้เครื่องมือต้องการสคีมาที่โมเดลปฏิบัติตามได้ดี ดังนั้นให้ทดสอบด้วยฟังก์ชันจริงของคุณ
  6. วัดต้นทุนและเวลาแฝงบนการจราจรจริง เปรียบเทียบคำขอหนึ่งวัน ไม่ใช่พรอมต์เดียว

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

จัดการการเรียกซ้ำและตรวจสอบการใช้งาน

SDK จะลองเรียกใหม่สำหรับข้อผิดพลาดบางรายการโดยค่าเริ่มต้น แต่คุณควรจัดการ 429 ด้วยตนเอง เนื่องจากขีดจำกัดความพร้อมใช้งานจริงในสภาพแวดล้อมการผลิต จับข้อยกเว้นขีดจำกัดอัตรา รอจำนวนวินาทีใน Retry-After (5 วินาทีเมื่อโหลดสูง) แล้วลองเรียกใหม่อีกครั้ง คำขอที่ล้มเหลวจะไม่คิดเงิน ดังนั้นการเรียกซ้ำจึงปลอดภัยสำหรับเครดิตของคุณ

บันทึก usage.prompt_tokens และ usage.completion_tokens ในทุกการเรียก การกำหนดราคาคือ $0.15 ต่อ 1M input tokens และ $0.50 ต่อ 1M output tokens ดังนั้นการเรียกที่มี 2,000 input และ 600 output tokens มีค่าใช้จ่าย 2,000 × $0.15 / 1M + 600 × $0.50 / 1M = $0.0003 + $0.0003 = $0.0006 ส่วนหัวของคำตอบยังรวมถึง X-Balance-USD สำหรับเครดิตที่เหลือ ดู หน้ากำหนดราคา สำหรับการเติมเงินและโบนัส และ เอกสาร สำหรับรายการพารามิเตอร์เต็มรูปแบบ

โปรแกรมแก้ไขและเครื่องมืออื่นๆ

ค่าทั้งสามนี้ถูกส่งต่อไปยังเครื่องมือใดๆ ที่มีค่ากำหนดผู้ให้บริการที่เข้ากันได้กับ OpenAI บทความเกี่ยวกับ การใช้ API รูปแบบ DeepSeek ใน Cursor อธิบายขั้นตอนการใช้งานโปรแกรมแก้ไขดังกล่าว ในเครื่องมือแต่ละรายการ ชื่อฟิลด์จะแตกต่างกันเล็กน้อย แต่คุณจะต้องกรอก base URL ที่ลงท้ายด้วย /v1 คีย์ และชื่อโมเดล

ถาม-ตอบ

มี SDK ทางการของ DeepSeek ที่ฉันต้องติดตั้งหรือไม่?

คุณไม่จำเป็นต้องใช้แพ็กเกจเฉพาะผู้ขาย DeepSeek เอกสารระบุว่าใช้ SDK ของ OpenAI พร้อม base URL ที่แตกต่างกัน; ตรวจสอบเอกสารของพวกเขาสำหรับรายละเอียดล่าสุด

ฉันต้องเปลี่ยนค่าสามค่าใดเพื่อใช้เอนด์พอยต์นี้?

base URL (https://api.deepseekapi.top/v1), คีย์ API ของคุณ และ model id uncensored

โค้ด OpenAI ที่มีอยู่จะทำงานได้โดยไม่เปลี่ยนแปลงหรือไม่?

แชท สตรีมมิง โหมด JSON และการเรียกใช้เครื่องมือใช้รูปแบบเดียวกัน ดังนั้นส่วนใหญ่ใช่ Embeddings รูปภาพ และเสียงยังไม่มีการให้บริการ และคำตอบแตกต่างกันเนื่องจากโมเดลแตกต่างกัน

SDK ส่งคีย์ได้อย่างถูกต้องหรือไม่?

ใช่ มันส่ง Authorization: Bearer พร้อมคีย์ของคุณโดยอัตโนมัติ

คีย์ของคุณอยู่ห่างแค่การกรอกแบบฟอร์มเดียว

สร้างบัญชี คัดลอกคีย์ และเปลี่ยน base URL นั่นคือการตั้งค่าทั้งหมด

รับคีย์ API