ค่าสามค่าที่คุณต้องการ
ไคลเอนต์ที่เข้ากันได้กับ OpenAI ทุกตัวต้องการสิ่งเดียวกันสามอย่าง นี่คือสิ่งเหล่านั้นสำหรับบริการนี้
| การตั้งค่า | ค่า |
|---|---|
| URL พื้นฐาน | https://api.getcodexapi.com/v1 |
| คีย์ API | คีย์ของคุณจาก หน้าคีย์ API |
| โมเดล | uncensored |
คีย์จะถูกส่งเป็น Authorization: Bearer YOUR_KEY เอนด์พอยต์สองจุดที่คุณสามารถเรียกใช้ได้คือ POST /v1/chat/completions และ GET /v1/models นี่คือบริการอิสระที่รันโมเดลแบบเปิดน้ำหนักหนึ่งตัว ไม่ใช่ Codex ของ OpenAI ดังนั้นอย่าวางเอนด์พอยต์ของ OpenAI หรือคีย์ของ OpenAI ลงในการตั้งค่าเดียวกัน
ตรวจสอบการเชื่อมต่อด้วย curl
ก่อนแก้ไขการตั้งค่าแอปใดๆ ให้ยืนยันว่าคีย์และ URL ทำงานได้จากเทอร์มินัล การแสดงรายการโมเดลเป็นการตรวจสอบที่ประหยัดที่สุด เนื่องจากไม่ต้องการพรอมต์:
curl https://api.getcodexapi.com/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
คุณควรได้รับรายการ JSON ที่รวมโมเดล uncensored ไว้ด้วย จากนั้นส่งการสร้างข้อความจริงหนึ่งรายการ:
curl https://api.getcodexapi.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Say hello in five words."}]
}'
หากการเรียกทั้งสองทำงานได้ ปัญหาในการล้มเหลวใดๆ ในภายหลังคือในการตั้งค่าไคลเอนต์ของคุณ ไม่ใช่บริการ ส่วนหัวของคำตอบรวมถึง X-Request-Id ซึ่งมีประโยชน์ในการเก็บไว้หากคุณต้องการติดตามการเรียกเฉพาะ และ X-Balance-USD ซึ่งแสดงเครดิตคงเหลือของคุณ
Python กับ SDK ของ OpenAI
แพ็กเกจ openai แบบทางการรับ Base URL ในคอนสตรัคเตอร์ไคลเอนต์ ไม่มีอะไรเกี่ยวกับการเขียนโค้ดของคุณเปลี่ยนแปลง
from openai import OpenAI
client = OpenAI(
base_url="https://api.getcodexapi.com/v1",
api_key="YOUR_API_KEY",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain what a base URL is in two sentences."},
],
)
print(resp.choices[0].message.content)
หากคุณต้องการเก็บการตั้งค่าออกจากโค้ด SDK ยังอ่าน OPENAI_BASE_URL และ OPENAI_API_KEY จากสภาพแวดล้อม:
export OPENAI_BASE_URL="https://api.getcodexapi.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"
เมื่อตั้งค่าเหล่านั้นแล้ว OpenAI() โดยไม่มีอาร์กิวเมนต์จะดึงค่าเหล่านั้นมา นี่คือสิ่งที่มีประโยชน์เพราะเครื่องมือของบุคคลที่สามจำนวนมากที่สร้างบน SDK สืบทอดตัวแปรเดียวกันโดยไม่ต้องมีการเปลี่ยนแปลงโค้ด
Node.js
SDK ของ JavaScript ใช้ชื่อตัวเลือกเดียวกัน เขียนว่า baseURL
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.getcodexapi.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Write a haiku about version control." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
สตรีมมิงจะกลับมาเป็นเหตุการณ์ที่ส่งจากเซิร์ฟเวอร์ด้วย stream: true และการใช้งานจะถูกรวมไว้ที่ส่วนท้าย โปรดทราบว่าคำขอแบบสตรีมจะครอบครองสล็อต concurrency (การทำงานพร้อมกัน)ของคุณหนึ่งสล็อตจนกว่าสตรีมจะเสร็จสิ้น ดังนั้นสตรีมที่คุณทิ้งโดยไม่ปิดจะยังคงนับรวมในขีดจำกัด
แอปที่มีหน้าจอการตั้งค่า
เครื่องมือเดสก์ท็อปและโปรแกรมแก้ไขมักติดป้ายชื่อฟิลด์ด้วยหนึ่งในสามวิธี: "Base URL", "API Base" หรือ "เอนด์พอยต์ที่เข้ากันได้กับ OpenAI" ทั้งหมดต้องการสตริงเดียวกัน หมายเหตุไม่กี่ข้อที่ช่วยประหยัดเวลา:
- เลือกประเภทผู้ให้บริการ OpenAI หรือ "custom OpenAI-compatible" ไม่ใช่ประเภทเฉพาะของผู้ขาย
- พิมพ์ชื่อโมเดลด้วยตนเองหากแอปมีกล่องข้อความแบบฟรีเท็กซ์
uncensoredคือ ID ที่ถูกต้อง - หากแอปมีปุ่ม "ทดสอบการเชื่อมต่อ" ปุ่มนั้นมักจะเรียกดูรายการโมเดล ซึ่ง API นี้รองรับ
- แอปพลิเคชันบางตัวแคชรายการโมเดลจากผู้ให้บริการรุ่นก่อนหน้า หากเมนูแบบเลื่อนลงแสดงผลไม่ถูกต้อง ให้ลบรายการเก่าออกแล้วเพิ่มรายการใหม่
ดูตัวอย่างการใช้งานในโปรแกรมแก้ไขข้อความเฉพาะจากคู่มือการเชื่อมต่อ Cursor หรือดูภาพรวมที่หน้า API สำหรับเขียนโค้ด เอกสารอ้างอิงพารามิเตอร์เต็มรูปแบบอยู่ใน เอกสาร API
เมื่อการเชื่อมต่อทำงานได้แล้ว ให้บันทึกค่าที่ถูกต้องไว้ที่ที่คุณสามารถเข้าถึงได้อีกครั้ง: URL, ชื่อโมเดล และวันที่สร้างคีย์ ทีมงานมักเสียเวลาหนึ่งชั่วโมงในการแก้ไขค่าที่เก็บไว้ในไฟล์การตั้งค่าซึ่งยังใช้ค่าเก่าอยู่ การใช้ไฟล์ตัวอย่างที่แชร์กันใน repository เพียงไฟล์เดียว โดยใส่ค่าแทนที่คีย์จริง จะช่วยป้องกันปัญหานี้ได้
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
URL มีค่าเป็น /v1/v1
ไคลเอนต์บางตัวเพิ่ม /v1 เข้าไปเอง หากคำขอของคุณล้มเหลวและบันทึกไคลเอนต์แสดงเส้นทางที่มี /v1/v1/chat/completions ให้ลบ /v1 ออกจาก base URL ที่คุณป้อนเข้าไป ในทางกลับกัน ไคลเอนต์ที่ไม่เพิ่มค่านี้จำเป็นต้องมีในค่าตั้งค่าของคุณ บันทึกเส้นทางของคำขอจะช่วยยืนยันคำตอบได้ทันที
คุณใส่ endpoint เต็มลงใน base URL
base URL จะหยุดที่ /v1 อย่าป้อน /chat/completions ตรงนั้น SDK จะเพิ่มเส้นทางสำหรับแต่ละการเรียกใช้
เครื่องหมายทับท้ายหรือการพิมพ์ผิดในโฮสต์
SDK ส่วนใหญ่รองรับเครื่องหมายทับท้าย แต่เครื่องมือรุ่นเก่าบางตัวสร้างเส้นทางโดยการต่อข้อความธรรมดาและทำให้มีเครื่องหมายทับสองครั้ง ให้ลบออกหากคุณเห็นการตอบกลับ 404 ที่ผิดปกติ
คีย์ผิด หรือคีย์ของบริการอื่น
คีย์ OpenAI จะไม่ทำงานที่นี่ และคีย์ของเราจะไม่ทำงานที่นั่น ข้อผิดพลาดการตรวจสอบสิทธิ์เกือบทุกครั้งเกิดจากปัญหาการคัดลอกและวาง เช่น ตัวอักษรหายหรือมีช่องว่างที่ท้ายคีย์
ทำงานใน curl ได้แต่ไม่ทำงานในแอปของคุณ
หาก curl สำเร็จแต่แอปพลิเคชันล้มเหลวด้วย URL และคีย์เดียวกัน ความแตกต่างอยู่ที่สภาพแวดล้อม ให้ตรวจสอบว่าแอปพลิเคชันทำงานอยู่เบื้องหลังพร็อกซีหรือภายในคอนเทนเนอร์ที่ไม่มีสิทธิ์เข้าถึงเครือข่ายภายนอก อ่านค่าตัวแปรสภาพแวดล้อมรุ่นเก่าเช่น OPENAI_BASE_URL ที่เหลืออยู่จากโปรเจกต์อื่นหรือไม่ และไฟล์การตั้งค่ามีค่าที่ทับค่าที่คุณกำหนดในโค้ดหรือไม่ การพิมพ์ URL สุดท้ายที่ไคลเอนต์จะเรียกใช้ก่อนทำคำขอจะช่วยแก้ไขกรณีส่วนใหญ่ได้ภายในหนึ่งนาที
HTTP 429
นั่นหมายถึงคุณชนขีดจำกัดแล้ว รหัสข้อผิดพลาด rate_limited คือ ขีดจำกัดอัตรา (คำขอต่อนาที) และ concurrency คือ จำนวนคำขอพร้อมกันที่เกินขีดจำกัด คีย์แบบเต็มอนุญาตให้ทำคำขอพร้อมกัน 8 คำขอและ 300 คำขอต่อนาที; คีย์ทดลองใช้ทำพร้อมกัน 2 คำขอและ 60 คำขอต่อนาที เมื่อระบบรับภาระชั่วคราว คุณยังได้รับ 429 พร้อมหัวข้อความ Retry-After: 5 ดังนั้นให้รอ 5 วินาทีแล้วลองอีกครั้ง
LangChain และการเก็บ URL ไว้ในที่เดียว
เฟรมเวิร์กที่สร้างบนไคลเอนต์ OpenAI ใช้ค่าเดียวกัน ในการผสานรวม OpenAI ของ LangChain อาร์กิวเมนต์มีชื่อดังนี้:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="uncensored",
base_url="https://api.getcodexapi.com/v1",
api_key="YOUR_API_KEY",
)
print(llm.invoke("Name three uses of a base URL.").content)
ไม่ว่าจะเป็นเฟรมเวิร์กใด อย่ากระจาย URL ไปทั่วโค้ดของคุณ ให้เก็บไว้ในตัวแปรสภาพแวดล้อมหรือไฟล์การตั้งค่าเพียงไฟล์เดียวและอ่านค่าจากที่นั่น วิธีนี้ทำให้การเปลี่ยนระหว่างคีย์ทดสอบและคีย์การผลิต หรือเปลี่ยนเครื่องคอมพิวเตอร์ เพียงแค่แก้ไขบรรทัดเดียว นอกจากนี้ยังช่วยไม่ให้คีย์อยู่ใน repository ของคุณ: เก็บคีย์ในตัวแปรสภาพแวดล้อมหรือตัวจัดการความลับ อย่าเก็บในไฟล์ที่คอมมิต
หากคุณกำลังมองหาเอนด์พอยต์ของ OpenAI สำหรับผลิตภัณฑ์ Codex ของพวกเขาเอง นี่ไม่ใช่เอนด์พอยต์นั้น Base URL และวิธีการตรวจสอบสิทธิ์ของพวกเขามีเอกสารโดย OpenAI ดังนั้นให้ติดตามเอกสารปัจจุบันของพวกเขาสำหรับส่วนนั้น ที่อยู่บนหน้านี้เป็นบริการอิสระและยอมรับเฉพาะคีย์ที่ออกที่นี่เท่านั้น
สิ่งที่คุณสามารถส่งได้เมื่อเชื่อมต่อแล้ว
เอนด์พอยต์นี้รองรับการสตรีมมิง การเรียกใช้ฟังก์ชัน (tools, tool_choice, โดยส่งผลลัพธ์กลับเป็นข้อความ role: "tool") และโหมด JSON ผ่าน response_format: {"type": "json_object"} พารามิเตอร์ temperature, top_p, stop, seed และค่าปรับจะถูกส่งผ่านไปยังเซิร์ฟเวอร์ หน้าต่างบริบทคือ 100,000 โทเคนสําหรับพรอมต์และการสร้างข้อความรวมกัน และบอดี้ของคำขอสูงสุดคือ 8 MB
เป็นเพียงข้อความเท่านั้น ไม่มีฟีเจอร์สร้างภาพหรือเสียง ไม่มี embeddings และไม่มี fine-tuning ดังนั้นฟีเจอร์ไคลเอนต์ที่พึ่งพาฟีเจอร์เหล่านั้นจะไม่ทำงานกับ base URL นี้ การใช้งานคิดเงินตามโทเคนที่อัตรา $0.15 ต่อ 1M input และ $0.50 ต่อ 1M output; หน้า ราคา มีตัวอย่างการใช้งานที่ใช้งานได้
