เอกสาร BazaarLink
BazaarLink เป็นเกตเวย์ API AI รวมสำหรับไต้หวัน — ให้เข้าถึงโมเดลหลายร้อยตัวจาก OpenAI, Anthropic, Google, Meta และอื่นๆ ผ่าน API endpoint เดียวที่รองรับ OpenAI
Read https://bazaarlink.ai/skill.md and follow the instructions to integrate BazaarLink into your app.ราคา
BazaarLink การใช้โมเดลราคาที่ส่วนเพิ่มเป็นศูนย์ (เหมือนกับราคาปลีกอย่างเป็นทางการของผู้ให้บริการแต่ละราย) ค่าธรรมเนียมแพลตฟอร์มจะถูกเรียกเก็บจากการเติมเงิน (เงินฝาก): ค่าธรรมเนียมการทำธุรกรรม 10% บวก 5% ไต้หวัน VAT บนช่อง TWD เรียกเก็บเงินเป็น USD พร้อมด้วยใบเสนอราคา TWD และใบแจ้งหนี้แบบอิเล็กทรอนิกส์ การเติมเงินแบบบริการตนเองแบบจ่ายตามการใช้งาน รัฐวิสาหกิจอาจจัดให้มีการเรียกเก็บเงินรายเดือน (Net-30, ต่อรองได้)
วิธีการทำงาน
- ปริมาณการใช้ (เดบิต): การโทร API แต่ละครั้งจะถูกเรียกเก็บเงินตามการใช้โทเค็นจริงตามราคาปลีก USD อย่างเป็นทางการของผู้ให้บริการ โดยหักออกจากยอดคงเหลือของคุณ — เพิ่มเป็นศูนย์ และไม่มีค่าธรรมเนียมเพิ่มเติมสำหรับการบริโภค
- การเติมเงิน (ฝากเงิน): TWD จะถูกแปลงเป็น USD ตามอัตราการขายแบบเรียลไทม์และเพิ่มไปยังยอดคงเหลือของคุณ ค่าธรรมเนียมการทำธุรกรรม 10% จะถูกเรียกเก็บจากการเติมเงิน
- • บัตรเครดิต: มีค่าธรรมเนียมเพิ่มเติมจำนวน US$0.60; มีการออกใบเสร็จรับเงิน
- • ช่องทาง TWD: 5% ไต้หวัน VAT ถูกเพิ่ม และมีการออกใบแจ้งหนี้แบบรวมอิเล็กทรอนิกส์ของไต้หวัน
- • การโอนเงินผ่านธนาคาร: สำหรับการเติมเงินขนาดใหญ่หรือการเติมเงินระดับองค์กร โปรดติดต่อเราเพื่อจัดเตรียมการโอนเงินและออกใบแจ้งหนี้แบบกำหนดเอง
- การออกใบแจ้งหนี้: รองรับใบแจ้งหนี้แบบรวมทางอิเล็กทรอนิกส์สำหรับเวิร์กโฟลว์ค่าใช้จ่ายของไต้หวัน บริษัทที่ต้องการจัดซื้อจัดจ้างหรือเรียกเก็บเงินรายเดือนสามารถจัดเตรียมเงื่อนไของค์กรได้ (Net-30, ต่อรองได้)
เกี่ยวกับอัตราแลกเปลี่ยน
การแปลงเงินตราต่างประเทศใช้อัตราเรียลไทม์ การเรียกเก็บเงินรายเดือนจะใช้อัตรา ณ เวลาที่เรียกเก็บเงิน (ใบแจ้งยอด) ในขณะที่การเติมเงินแบบเติมเงินจะแปลงเป็นอัตราการเติมเงิน อัตราและการประทับเวลาจะยังคงอยู่กับบันทึกการเรียกเก็บเงิน
การคุ้มครองค่าบริการเมื่อคำขอล้มเหลว
หากคำขอไปยัง upstream ล้มเหลวโดยไม่มีข้อมูล usage ที่นำไปคิดค่าบริการได้ BazaarLink จะคืนยอดที่สำรองไว้ทั้งหมดโดยอัตโนมัติ แม้ stream จะเริ่มแล้วก่อนเกิดข้อผิดพลาด คำขอครั้งนั้นยังมีค่าใช้จ่าย 0 ดอลลาร์สหรัฐ
- เชื่อมต่อ upstream ไม่ได้ คำขอถูกปฏิเสธ หรือไม่มีผลลัพธ์ที่ใช้งานได้
- stream หยุดก่อนรับข้อมูล usage สุดท้าย แม้จะส่งเนื้อหาบางส่วนแล้ว
- response ไม่มี usage หรือมีเพียง usage object ว่างที่ค่าทั้งหมดเป็น 0
0 output tokens ไม่ได้หมายความว่าฟรีเสมอไป
หากคำขอเสร็จสมบูรณ์ตามปกติและผู้ให้บริการส่ง usage ที่ถูกต้อง BazaarLink จะคิดค่าบริการตาม usage นั้น อย่าตัดสินว่าฟรีจาก output tokens เพียงอย่างเดียว เพราะแม้ output tokens จะเป็น 0 ก็ยังอาจมีค่า input tokens หรือต้นทุน upstream ที่รายงานอย่างถูกต้อง โปรดตรวจสอบ usage.cost หรือบันทึก Activity สำหรับยอดสุดท้าย
เริ่มต้นอย่างรวดเร็ว
สามวิธีในการเชื่อมต่อ
เริ่มต้นภายใน 5 นาที BazaarLink รองรับ OpenAI SDK อย่างเต็มรูปแบบ — เพียงเปลี่ยน
Base URL
https://bazaarlink.ai/api/v1ใช้ OpenAI SDK
BazaarLink รองรับ OpenAI SDK อย่างเต็มรูปแบบ เพียงเปลี่ยน base URL และคีย์ API — โค้ดอื่นทั้งหมดเหมือนเดิม
sk-bl-.✗ gpt-4.1 claude-sonnet-4.6 gemini-2.5-flash
ใช้คีย์ของคุณเอง (BYOK)
ผูกคีย์ API ของผู้ให้บริการ upstream ของคุณเอง (อินเทอร์เฟซที่เข้ากันได้กับ OpenAI หรือ Anthropic) เข้ากับบัญชีส่วนตัวหรือองค์กร — คำขอที่เข้าเงื่อนไขจะเชื่อมต่อ upstream ผ่านคีย์ของคุณโดยตรง เลือกโหมด fallback ได้ทั้งแบบ seamless และ strict คีย์ส่วนตัวจัดการที่แท็บ BYOK ในหน้าคีย์ ส่วนองค์กรจัดการในตั้งค่าองค์กร ไปที่การตั้งค่า BYOK →
การกรองเนื้อหา
การป้องกันเนื้อหาแบบสองทางสำหรับทราฟฟิก API ของคุณ: คำขอที่ตรวจพบ prompt injection จะถูกบล็อก (400) และข้อมูลอ่อนไหวในคำขอหรือการตอบกลับ (คีย์ API หมายเลขบัตร เลขบัตรประชาชน ฯลฯ) จะถูกปิดบังโดยอัตโนมัติ กฎและรายการยกเว้นปรับแต่งได้ พร้อมสถิติการใช้งาน ไปที่การตั้งค่าตัวกรองเนื้อหา →
ย้ายจาก OpenRouter
API ของ BazaarLink เข้ากันได้กับ OpenRouter — การเชื่อมต่อส่วนใหญ่เปลี่ยนแค่สองค่า: base URL เป็น https://bazaarlink.ai/api/v1 และคีย์ API เป็นคีย์ BazaarLink ที่ขึ้นต้นด้วย sk-bl-
- ฐาน URL: https://openrouter.ai/api/v1 → https://bazaarlink.ai/api/v1
- คีย์ API: sk-or-... → sk-bl-... (สร้างได้ที่ /keys)
- Model ID: ใช้รูปแบบ provider/model เดียวกัน (เช่น anthropic/claude-sonnet-4.6) ดูแคตตาล็อกทั้งหมดที่ GET /api/v1/models
- fallback ผ่าน models[], การตั้งค่า routing ผู้ให้บริการ, streaming, tool calling และ structured outputs ใช้รูปแบบคำขอเดียวกัน
การยืนยันตัวตน
คำขอ API ทั้งหมดต้องมี Authorization header พร้อมคีย์ API ของคุณ
Authorization: Bearer sk-bl-YOUR_API_KEYรับคีย์ API จาก แดชบอร์ด เก็บคีย์ให้ปลอดภัย — อย่าเปิดเผยในโค้ดฝั่งไคลเอนต์
Header เสริม
หลักการ
BazaarLink ออกแบบตามหลักการหลักสามข้อ:
1. อินเทอร์เฟซรวม
API เดียว SDK เดียว โมเดลหลายร้อยตัว สลับระหว่าง OpenAI, Anthropic, Google Gemini, Meta Llama และอื่นๆ โดยไม่ต้องเปลี่ยนโค้ด — เพียงเปลี่ยน model ID
2. การปรับราคาให้เหมาะสม
BazaarLink กำหนดเส้นทางไปยังผู้ให้บริการที่คุ้มค่าที่สุดสำหรับโมเดลที่คุณเลือกโดยอัตโนมัติ คุณจ่ายเฉพาะที่ใช้ เรียกเก็บเป็น USD พร้อมการออกใบกำกับภาษีเต็มรูปแบบ
3. ความพร้อมใช้งานสูง
การสำรองอัตโนมัติหมายความว่าถ้าผู้ให้บริการล่ม คำขอของคุณจะถูกส่งไปยังเส้นทางสำรองอย่างราบรื่น ไม่ต้องเปลี่ยนโค้ด ไม่มีเวลาหยุดทำงาน
มัลติโมดัล
BazaarLink รองรับอินพุตหลายรูปแบบ — ส่งรูปภาพ เสียง และไฟล์ข้างข้อความไปยังโมเดลที่รองรับ เนื้อหาจะถูกส่งผ่านไปยังผู้ให้บริการอัปสตรีม
รูปแบบที่รองรับ
ตัวอย่าง:
กำลังส่งภาพ
ใช้รูปแบบอาร์เรย์เนื้อหาที่มีส่วน image_url รูปแบบที่รองรับ: PNG, JPEG, WebP และ GIF (รวมถึงภาพเคลื่อนไหว) คุณสามารถรวมรูปภาพหลายรูปไว้ในข้อความเดียว โดยแต่ละภาพเป็นส่วน image_url แยกกัน:
ขีดจำกัด
BazaarLink มีขีดจำกัดสองแบบที่แยกจากกัน: ขีดจำกัดอัตราสำหรับจำนวนคำขอต่อนาที และขีดจำกัดเครดิตสำหรับค่าใช้จ่ายของบัญชี หากเกินขีดจำกัดอัตราจะได้รับ HTTP 429 หากเครดิตหมดจะได้รับ HTTP 402
ขีดจำกัดอัตรา
Rate ขีดจำกัดต่อผู้ใช้ (ไม่ใช่ต่อคีย์) วัดเป็นคำขอต่อนาที (RPM) ไม่มีขีดจำกัดรายวัน ระดับจะถูกกำหนดโดยอัตโนมัติตามยอดเครดิตในบัญชีของคุณ
เมื่อเกินขีดจำกัดอัตรา คุณจะได้รับการตอบกลับ 429 พร้อมส่วนหัว Retry-After ใช้ Exponential Backoff เมื่อลองส่งคำขออีกครั้ง
ส่วนหัวการตอบสนอง
ทุก response ที่สำเร็จจะมี rate limit headers สำหรับให้ client ติดตามได้:
X-RateLimit-Limit: 200 # Max requests per minute for your tier
X-RateLimit-Remaining: 198 # Remaining requests in current window
X-RateLimit-Reset: 1740000060 # Unix timestamp when the window resets
X-Request-Id: chatcmpl-abc123 # Unique request ID for debuggingขีดจำกัดเครดิต
การตอบกลับ 402 หมายความว่ายอดคงเหลือในบัญชีหรือเพดานการใช้จ่ายของคีย์ลดลงเหลือศูนย์ ไม่ใช่เพราะคุณส่งคำขอเร็วเกินไป การตอบกลับนี้จะไม่มี rate limit headers และหากถึงขีดจำกัดระหว่างการ stream คุณจะได้รับ SSE error event แทนการเปลี่ยนสถานะ HTTP
เบรกฉุกเฉินส่วนตัว
วงเงินค่าใช้จ่าย USD คงที่ 1 นาทีและ 1 ชั่วโมง ที่ใช้กับ API Key ทั้งหมดของคุณ เมื่อถึงขีดจำกัดของช่วงเวลา คำขอใหม่จะได้รับ HTTP 429 และ window จะรีเซ็ตอัตโนมัติตามรอบเวลา
การสร้างภาพ
สร้างภาพผ่าน /v1/chat/completions ด้วย modalities:["image"] หรือ /v1/images/generations ที่เข้ากันได้กับ OpenAI DALL·E
curl -N https://bazaarlink.ai/api/v1/chat/completions \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"openai/gpt-5.4-image-2","messages":[{"role":"user","content":"a red cat on a sofa"}],"modalities":["image","text"],"stream":true}'โฟลว์แบบเต็ม (สตรีมมิ่ง, แก้ไขภาพ, โปรโตคอล SSE, รายการโมเดล) ดูที่ API Reference →
การสร้างวิดีโอ
โฟลว์ 3 ขั้นตอนแบบ async (submit → poll → content) การสร้างวิดีโอใช้เวลา 30 วินาทีถึง 5 นาที
curl https://bazaarlink.ai/api/v1/videos \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"alibaba/wan2.7-t2v","prompt":"a bird flying over mountains","duration":3}'
# → 202 { "id": "vjob_xxx", "status": "pending" }โฟลว์แบบเต็ม (polling, ดาวน์โหลด, ประเภทงาน, ข้อควรระวัง) ดูที่ API Reference →
PDF อินพุต
ส่งเอกสาร PDF โดยตรงในข้อความไปยังโมเดลที่รองรับ PDF แบบเนทีฟ (เช่น Claude, Gemini) BazaarLink จะส่งไฟล์ตรงไปยังโมเดล — คิดเป็น input tokens ปกติ ไม่มีค่าใช้จ่ายหรือขั้นตอนประมวลผลเพิ่มเติม
รูปแบบที่รองรับ
- PDF เอกสาร (ข้อความ รูปภาพ ตาราง สแกนแล้ว) ข้อมูลที่เข้ารหัส
- Base64 URL (`data:application/pdf;base64,...`)
- เอกสารหลายหน้า
- เฉพาะ PDF ที่ไม่มีรหัสผ่าน
อินพุตวิดีโอ
ส่งไฟล์วิดีโอไปยังโมเดลที่รองรับอินพุตวิดีโอเพื่อวิเคราะห์ สร้างคำบรรยาย หรือตอบคำถามเกี่ยวกับฉากและเหตุการณ์ ใช้ได้ทั้ง URL โดยตรงหรือ base64 data URI — URL มีประสิทธิภาพกว่าสำหรับวิดีโอที่เข้าถึงได้สาธารณะ ส่วน base64 ใช้สำหรับไฟล์ในเครื่องหรือวิดีโอส่วนตัว
รูปแบบที่รองรับ
MP4 (H.264)MPEGMOVWebMการจัดการคีย์ API
Management คีย์ได้รับการออกแบบมาเพื่อการจัดการคีย์แบบเป็นโปรแกรม พวกเขาสามารถสร้าง แสดงรายการ อัปเดต ปิดใช้งาน และลบคีย์ API มาตรฐานได้ แต่ไม่สามารถทำการเรียกโมเดล AI ได้
การสร้างคีย์การจัดการ
ไปที่Management API หน้าคีย์แล้วคลิก "สร้าง" — เป็นหน้าแยกต่างหากจากคีย์ API มาตรฐานของคุณ ไม่ใช่ตัวเลือกประเภทในหน้าเดียวกัน
List คีย์
สร้างคีย์ย่อย
Update Key
เพิกถอนคีย์
DELETE https://bazaarlink.ai/api/v1/keys/:id
Authorization: Bearer sk-bl-YOUR_MGMT_KEY
# Returns 204 No Content on successQuery ยอดคงเหลือ
การใช้งานแบบสอบถาม
GET https://bazaarlink.ai/api/v1/usage?period=month
Authorization: Bearer sk-bl-YOUR_MGMT_KEY
# period: day | week | month | yearการระบุแหล่งที่มาของแอป
ระบุแอปพลิเคชันของคุณในส่วนหัวของคำขอเพื่อเปิดใช้งานการติดตามการใช้งาน การเปิดเผยแดชบอร์ด และการวิเคราะห์แบบละเอียด
ส่วนหัวที่มีอยู่
| Header | Description |
|---|---|
| HTTP-Referer | URL เว็บไซต์ของคุณ สำหรับการติดตามการใช้งานและการวิเคราะห์ (ไม่บังคับ) |
| X-Title | ชื่อแอปของคุณ แสดงในแดชบอร์ด (ไม่บังคับ) |
รหัสข้อผิดพลาด
Error รูปแบบการตอบสนอง
ปลายทางการอนุมานโมเดลจะส่งคืนซองข้อผิดพลาดที่เข้ากันได้กับ OpenAI โดยฟิลด์ type อาจแตกต่างหรือถูกละไว้ได้ โปรดใช้สถานะ HTTP และ error.code ในตรรกะโปรแกรมแทนการแยกวิเคราะห์ข้อความ
{
"error": {
"message": "Insufficient credits. Please top up to continue.",
"type": "invalid_request_error",
"code": "insufficient_credits"
}
}HTTP สถานะและข้อผิดพลาดรหัส
Before streaming, the HTTP status identifies the broad failure class. error.code is either that number or a stable string for a specific remedy. Prefer the string code when present, otherwise use the HTTP status.
รหัสการเรียกเก็บเงินที่เครื่องอ่านได้
A 402 can represent different controls. Use these stable codes to choose the correct action.
Stable error.code catalog
These string codes are emitted by public inference and media paths. Branch on the string code when present; the HTTP status remains the broad failure class.
อัตราจำกัด งบประมาณ และเบรกฉุกเฉิน
These controls can reject an otherwise valid request and require different recovery actions.
Compatibility note: rate-limit and emergency-brake paths currently emit numeric error.code values. Use HTTP status, Retry-After, and the documented response message.
สถานะทรัพยากรวิดีโอและสื่อ
Video validation commonly returns numeric code 400. Missing jobs return 404, retired models 410, unfinished video content 409, and invalid video byte ranges 416.
ลองนโยบายอีกครั้ง
Retry only failures that may recover without changing the request. Honor Retry-After or use exponential backoff with jitter. Do not stack SDK and manual retries.
การจัดการข้อผิดพลาด
รูปแบบข้อผิดพลาด Streaming
Errors ที่เกิดขึ้นก่อนที่จะสตรีมโทเค็นใดๆ จะส่งกลับการตอบสนองข้อผิดพลาด HTTP มาตรฐานพร้อมเนื้อหา JSON
After a stream starts, the HTTP response is already 200. Parse each SSE data frame and treat a top-level error or choices[0].finish_reason === "error" as a failed, incomplete response.
หากสตรีมล้มเหลวกลางทาง BazaarLink จะส่ง event SSE สุดท้ายที่มีอ็อบเจ็กต์ error ระดับบนสุด ตามด้วย data: [DONE] ส่วน chunk ที่ถูกส่งต่อจาก upstream บางรายแบบไม่แก้ไข อาจใส่ข้อผิดพลาดไว้ที่ choice แทน (choices[0].finish_reason === "error") — ให้รองรับทั้งสองแบบ
เครื่องมือเรียก
Tool calling (หรือที่เรียกว่า function calling) ช่วยให้โมเดลเรียกใช้ฟังก์ชันภายนอกที่คุณกำหนด โมเดลจะตัดสินใจเมื่อจะเรียกเครื่องมือและสร้างอาร์กิวเมนต์ที่มีโครงสร้าง — โค้ดของคุณเรียกใช้ฟังก์ชันและส่งผลลัพธ์กลับเพื่อดำเนินการสนทนาต่อ
โมเดลที่รองรับ
โมเดลแนวหน้าส่วนใหญ่รองรับ tool calling ต่อไปนี้เป็นตัวเลือกยอดนิยม:
การกำหนดเครื่องมือ
แต่ละเครื่องมือเป็นออบเจ็กต์ JSON ที่อธิบายฟังก์ชันที่โมเดลสามารถเรียกใช้ ฟิลด์ parameters ใช้ JSON Schema
ตัวเลือก tool_choice
ขั้นตอนเต็ม
Tool calling เป็นกระบวนการหลายรอบ: (1) ส่งคำขอพร้อมเครื่องมือ → (2) โมเดลส่งคืน tool_calls → (3) เรียกใช้ฟังก์ชัน → (4) ส่งผลลัพธ์กลับ → (5) โมเดลสร้างการตอบกลับสุดท้าย
การเรียกเครื่องมือแบบขนาน
โมเดลบางตัวสามารถเรียกเครื่องมือหลายตัวในการตอบกลับเดียว จัดการแต่ละ tool call และส่งคืนผลลัพธ์ทั้งหมด:
Tool Calls ระหว่างสตรีมมิง
เมื่อสตรีมมิง tool calls จะมาเป็น delta บางส่วนที่จัดทำดัชนีตามตำแหน่ง — สะสมสตริงอาร์กิวเมนต์ของแต่ละ delta ตามดัชนีจนกว่า finish_reason จะกลายเป็น "tool_calls" ซึ่งบ่งบอกว่าการเรียกเสร็จสมบูรณ์แล้ว
ลูป Agent แบบง่าย
รูปแบบทั่วไปที่เรียกโมเดลต่อไปตราบใดที่โมเดลยังคงร้องขอเครื่องมือ และหยุดเมื่อโมเดลส่งคืนคำตอบสุดท้าย — ใช้ max_iterations เพื่อป้องกันการวนซ้ำไม่สิ้นสุด
แนวทางปฏิบัติที่ดีที่สุดในการกำหนดฟังก์ชัน
- ใช้ชื่อที่เจาะจงและสื่อความหมาย — get_weather_forecast แทนที่จะเป็นแค่ weather
- เขียนคำอธิบายให้ชัดเจนว่าฟังก์ชันทำอะไรและควรใช้เมื่อไร — โมเดลอาศัยข้อความนี้เพียงอย่างเดียวในการตัดสินใจว่าจะเรียกหรือไม่
- จำกัดค่าด้วย enum เท่าที่ทำได้ และใส่ตัวอย่างในคำอธิบายเพื่อลดโอกาสที่อาร์กิวเมนต์จะผิดรูปแบบ
- ทำเครื่องหมาย required เฉพาะฟิลด์ที่จำเป็นจริง ๆ เท่านั้น ฟิลด์ที่เป็นทางเลือกควรละเว้นได้จริง
เอาต์พุตที่มีโครงสร้าง
บังคับให้โมเดลส่งคืน JSON ที่ถูกต้องตาม schema จำเป็นสำหรับการสร้างแอปพลิเคชันที่เชื่อถือได้ที่แยกวิเคราะห์เอาต์พุตโมเดลด้วยโปรแกรม
วิธีที่ 1: response_format (JSON Schema)
เพื่อบังคับให้เป็นไปตาม JSON Schema อย่างเคร่งครัด:
เคล็ดลับ
- ใช้ชื่อ property ที่ชัดเจนและอธิบายได้ — โมเดลใช้เป็นบริบท
- เพิ่ม descriptions ให้กับ schema properties เพื่อแนะนำโมเดล
- ตั้ง strict: true เพื่อรับประกันการเป็นไปตาม schema (อาจเพิ่มเวลาแฝงเล็กน้อย)
- ทำ schema ให้เรียบง่าย — schema ที่ซ้อนกันลึกอาจลดคุณภาพเอาต์พุต
- ทดสอบกับโมเดลต่างๆ — บางตัวจัดการ schema ที่ซับซ้อนได้ดีกว่าตัวอื่น
เครื่องช่วยเติมล่วงหน้า
เพิ่มข้อความ assistant ที่ยังไม่สมบูรณ์เป็นรายการสุดท้าย เพื่อขอให้สร้างต่อบนเส้นทางโมเดลที่รองรับ
การแปลงข้อความ
แปลงข้อความให้พอดีกับขีดจำกัดบริบทของโมเดลโดยอัตโนมัติ เมื่อข้อความของคุณเกินหน้าต่างบริบทของโมเดล การแปลงจะย่อการสนทนาอย่างชาญฉลาดโดยลบข้อความออกจากตรงกลาง
การใช้งาน
ประเภทการแปลง
พฤติกรรมเริ่มต้น
โมเดลที่มีบริบท ≤8k จะเปิดใช้งานตรงกลางออกโดยอัตโนมัติ สำหรับโมเดลบริบทที่ใหญ่ขึ้น ให้เลือกอย่างชัดเจน โมเดล Anthropic Claude ยังบังคับใช้ขีดจำกัด 1,000 ข้อความโดยอัตโนมัติ โดยไม่คำนึงถึงการตั้งค่าการแปลง
Zero การเก็บรักษาข้อมูล
BazaarLink จะไม่จัดเก็บเนื้อหาข้อความของคุณตามค่าเริ่มต้น หน้านี้อธิบายวิธีจัดการข้อมูลของคุณ เหมาะสำหรับแอปพลิเคชันที่ประมวลผลข้อมูลที่ละเอียดอ่อน
การจัดการข้อมูลปัจจุบัน
- เนื้อหาข้อความ: ไม่ได้จัดเก็บตามค่าเริ่มต้น จะถูกละทิ้งจากหน่วยความจำหลังการประมวลผล
- ข้อมูลเมตาการเรียกเก็บเงิน: จำนวนโทเค็น การประทับเวลา รหัสโมเดล
- Usage บันทึก: ขอสถิติเท่านั้น ไม่มีเนื้อหาข้อความ
- การส่งต่ออัปสตรีม: ข้อความที่ส่งต่อไปยังผู้ให้บริการอัปสตรีม — ขึ้นอยู่กับนโยบายความเป็นส่วนตัว
การแคชพร้อมท์
Prompt caching จะนำโทเค็นพร้อมต์ที่คำนวณไว้ก่อนหน้านี้กลับมาใช้ใหม่ ซึ่งช่วยลดต้นทุนและเวลาในการตอบสนองได้อย่างมาก โดยเฉพาะอย่างยิ่งสำหรับแอปพลิเคชันที่มีพร้อมต์ของระบบขนาดใหญ่และซ้ำกัน
วิธีการทำงาน
การต้องตั้งค่าหรือไม่ขึ้นอยู่กับผู้ให้บริการ โมเดลตระกูล OpenAI จะแคช prefix ของ prompt ที่ยาวและซ้ำโดยอัตโนมัติ — ไม่ต้องแก้ไข request โมเดล Claude (Anthropic) จะแคชก็ต่อเมื่อ request มี cache_control breakpoint อย่างชัดเจนเท่านั้น BazaarLink ไม่ได้เพิ่มสิ่งนี้ให้คุณ ดังนั้น request ของ Claude ที่ไม่มี marker จะไม่ถูกแคชเลย BazaarLink ส่งต่อ cache marker ที่คุณส่งมาโดยไม่เปลี่ยนแปลง และรายงานจำนวนโทเค็นที่อ่าน/เขียนแคชจริงในการตอบกลับ usage
โทเค็นเหตุผล
แบบจำลองเหตุผล (เช่น DeepSeek R1, ซีรีส์ o1) คิดแบบภายในก่อนที่จะสร้างคำตอบสุดท้าย โทเค็นภายในเหล่านี้เรียกว่าโทเค็นการให้เหตุผล และจะเรียกเก็บเงินแยกต่างหาก
การอ่านโทเค็นการใช้เหตุผลจากการตอบกลับ
การควบคุมโหมดการคิด
บางรุ่นรองรับการสลับโหมด "การคิด" โหมดการคิดจะสร้างโทเค็นการให้เหตุผลภายในก่อนที่จะสร้างคำตอบสุดท้าย ซึ่งจะช่วยปรับปรุงคุณภาพโดยเสียโทเค็นมากขึ้น
| โมเดลครอบครัว | พารามิเตอร์ | ค่าเริ่มต้น |
|---|---|---|
| qwen3-* | enable_thinking: boolean | false (ค่าเริ่มต้นของแพลตฟอร์ม) |
| openai/o1, o3, o4-mini | reasoning_effort: "low" | "medium" | "high" | medium |
| deepseek/deepseek-r1 | — | เปิดใช้งานเสมอ (ไม่สามารถปิดใช้งานได้) |
ออบเจ็กต์การให้เหตุผลแบบรวม (รูปแบบใหม่)
BazaarLink ยังสนับสนุนอ็อบเจ็กต์การให้เหตุผลแบบรวม ซึ่งใช้ได้กับตระกูลโมเดลทั้งหมดด้วย API เดียวที่สอดคล้องกัน:
| ฟิลด์ | ค่า | ใช้กับ |
|---|---|---|
| reasoning.effort | "xhigh" | "high" | "medium" | "low" | "none" | OpenAI o-series, Grok |
| reasoning.max_tokens | integer | Anthropic Claude, Gemini |
| reasoning.exclude | boolean | ซ่อนการคิดจากการตอบรับ (แบบจำลองยังคงให้เหตุผล) |
เวลาแฝงและประสิทธิภาพ
การเพิ่มประสิทธิภาพ AI API เวลาตอบสนองเป็นสิ่งสำคัญสำหรับประสบการณ์ของผู้ใช้ ด้านล่างนี้คือปัจจัยสำคัญที่ส่งผลต่อเวลาแฝงในสถาปัตยกรรม BazaarLink และแนวทางปฏิบัติที่ดีที่สุดในการปรับให้เหมาะสม
ปัจจัยที่ส่งผลต่อเวลาในการตอบสนอง
- ขนาดโมเดล: โมเดลขนาดใหญ่ (70B+) โดยทั่วไปจะสร้างช้ากว่า
- โหลดของผู้ให้บริการ: แตกต่างกันไปตามผู้ให้บริการและเวลาของวัน
- Token จำนวน: max_tokens ที่สูงขึ้นหมายถึงเวลาดำเนินการเสร็จสิ้นนานขึ้น
- การสตรีมกับการไม่สตรีม: สตรีม: true มอบโทเค็นแรกเร็วขึ้น
- ความยาวของบริบท: บริบทที่ยาวมากจะทำให้เวลาก่อนการประมวลผลเพิ่มขึ้น
เคล็ดลับการเพิ่มประสิทธิภาพ
- ต้องการสตรีมมิง (สตรีม: จริง) เพื่อปรับปรุงการรับรู้เวลาแฝง
- ใช้ตัวแปร :nitro เพื่อเลือกผู้ให้บริการที่มีปริมาณงานสูง
- เลือกรุ่นที่เล็กกว่า (flash/mini/haiku) สำหรับสถานการณ์ที่ไวต่อความหน่วง
- Use provider.sort: "latency" เพื่อเลือกผู้ให้บริการที่มีความหน่วงต่ำที่สุดโดยอัตโนมัติ
- เปิดใช้งานการแคชพร้อมท์เพื่อลดเวลาแฝงสำหรับคำขอซ้ำ
การเพิ่มประสิทธิภาพเวลาทำงาน
BazaarLink เพิ่มความพร้อมใช้งานของ API ให้สูงสุดผ่านหลายเลเยอร์: การเฟลโอเวอร์อัตโนมัติ เซอร์กิตเบรกเกอร์ และการตรวจสอบสถานภาพของผู้ให้บริการ
กลไกความพร้อมใช้งาน
- Circuit breaker: ตรวจจับอัตโนมัติและแยกผู้ให้บริการที่ล้มเหลว
- การเฟลโอเวอร์อัตโนมัติ: สลับไปยังผู้ให้บริการสำรองข้อมูลได้อย่างราบรื่น โดยไม่จำเป็นต้องเปลี่ยนโค้ด
- การตรวจสอบสภาพของผู้ให้บริการ: ติดตามอัตราข้อผิดพลาดและเวลาแฝงต่อผู้ให้บริการอย่างต่อเนื่อง
- ตรรกะการลองใหม่: ข้อผิดพลาดชั่วคราว (5xx) จะถูกลองใหม่โดยอัตโนมัติ
เซอร์กิตเบรกเกอร์
ราวกันตก
เพิ่มกลไกความปลอดภัยของเนื้อหาให้กับคำขอ API ของคุณ เพื่อกรองเนื้อหาที่เป็นอันตรายและบังคับใช้นโยบายการปฏิบัติตามข้อกำหนด BazaarLink มี guardrail กรองเนื้อหาที่ปรับแต่งได้เฉพาะระดับองค์กร (Organization) เท่านั้นในขณะนี้ คีย์ API ส่วนบุคคล (ที่ไม่ใช่ขององค์กร) ไม่มีการตั้งค่าที่เทียบเท่า — ความปลอดภัยของเนื้อหาขึ้นอยู่กับระบบความปลอดภัยในตัวของผู้ให้บริการโมเดลต้นทางแต่ละรายทั้งหมด
ฟีเจอร์ที่วางแผนไว้ (ยังไม่มีทั้งคีย์ส่วนบุคคลและองค์กร)
พฤติกรรมปัจจุบัน
คีย์ API ส่วนบุคคล: ผู้ให้บริการต้นทางทุกรายมีระบบความปลอดภัยเนื้อหาของตนเอง การตอบกลับของโมเดลที่กระตุ้นตัวกรองเนื้อหาจะส่งคืนพร้อม finish_reason: "content_filter" และ BazaarLink จะไม่กรองเพิ่มเติม คีย์ API องค์กร: org_admin สามารถตั้งค่ากฎที่กำหนดเอง (บล็อก/ปกปิด/บันทึก) ได้ที่ "Content Filter Guardrails" ซึ่งจะถูกใช้ก่อนที่ข้อความจะไปถึงโมเดล
เคอร์เซอร์ IDE บูรณาการ
ตั้ง BazaarLink เป็น Override URL ของ OpenAI ใน Cursor. ตั้งค่าพร้อมแปลง Responses API อัตโนมัติ, normalize รูปแบบ tool, และ prefix bz- สำหรับโมเดล Claude.
ตั้งค่าด่วน
ใน Cursor เปิด Settings → Models แล้ว:
- ตั้ง Override OpenAI Base URL เป็น https://bazaarlink.ai/v1
- ตั้ง Override OpenAI API Key เป็นคีย์ BazaarLink sk-bl-... ของคุณ
- เพิ่มชื่อโมเดลที่ต้องการ — ดูด้านล่างสำหรับ Claude (prefix bz-).
Prefix bz- (สำหรับโมเดล Claude)
การตรวจสอบฝั่งไคลเอนต์ของ Cursor จะเปลี่ยนเส้นทางชื่อโมเดลที่ขึ้นต้นด้วย claude- ผ่านการเชื่อมต่อ Anthropic ของ Cursor เอง โดยข้าม Override URL ของคุณ หากต้องการให้ Cursor ส่งคำขอไปยัง BazaarLink ให้เพิ่ม prefix bz- ที่ชื่อโมเดล เซิร์ฟเวอร์จะลบ prefix และ resolve ส่วนที่เหลือผ่าน alias map
ตัวแปรจุดและขีดกลางถูก normalize: bz-claude-sonnet-4.6 และ bz-claude-sonnet-4-6 ทั้งคู่แปลงเป็นโมเดลเดียวกัน
CURSOR_MODEL_MAP env var (override โดยผู้ดูแล)
สำหรับการติดตั้ง BazaarLink แบบโฮสต์เอง ตั้งค่า env var นี้เพื่อแมปชื่อโมเดลฝั่ง Cursor ใหม่ไปยัง canonical id ของแคตตาล็อก:
CURSOR_MODEL_MAP=gpt-claude-sonnet:anthropic/claude-sonnet-4.6,gpt-opus:anthropic/claude-opus-4.7ตอนนี้ gpt-claude-sonnet ที่พิมพ์ใน Cursor จะถูก map เป็น anthropic/claude-sonnet-4.6 ฝั่งเซิร์ฟเวอร์ มีประโยชน์เมื่อคุณต้องการให้ Cursor คิดว่าโมเดลเป็นตระกูล GPT (เพื่อ route ผ่าน Override URL) ในขณะที่จริงๆ คุณให้บริการ Claude
สิ่งที่เกิดขึ้นโดยอัตโนมัติ
เมื่อคำขอมาถึง /api/v1/chat/completions, BazaarLink จะใช้การแปลงความเข้ากันได้เหล่านี้อย่างโปร่งใส — คุณไม่ต้องทำอะไรในฝั่ง client:
- ตรวจจับ Responses API body อัตโนมัติ — ถ้า body มี input แทน messages จะแปลงเป็นรูปแบบ Chat Completions (Cursor ส่งรูปแบบ Responses API สำหรับโมเดลตระกูล GPT)
- ครอบ flat tool definitions — Cursor Agent ส่ง { name, description, parameters } โดยไม่มี function wrapper เราครอบให้เพื่อไม่ให้ Anthropic ปฏิเสธว่า Tool '' not found in provided tools
- บังคับให้ tool_choice ที่ไม่ถูกต้องเป็นรูปแบบที่ถูกต้อง — Cursor ส่ง { type: "auto" } (รูปแบบอ็อบเจกต์ ไม่มี function) ข้อกำหนด OpenAI ต้องการรูปแบบสตริงสำหรับ auto/none/required เราจึงบังคับแปลง
- ตัดฟิลด์เฉพาะ OpenAI เมื่อ route ไปยังผู้ให้บริการที่ไม่ใช่ OpenAI — parallel_tool_calls, logprobs, top_logprobs, logit_bias, service_tier, user ถูกลบก่อนส่งต่อ (มิฉะนั้น Anthropic จะคืน 400)
- Map max_output_tokens → max_tokens และตัดฟิลด์เฉพาะ Responses-API (previous_response_id, truncation, background, store) ฟิลด์ reasoning ถูกเก็บไว้สำหรับ body Chat-Completions ดั้งเดิม
โหมด Cursor Agent
การเรียกใช้ทูลทำงานผ่านโฟลว์ tool-call ของ Chat Completions มาตรฐาน Cursor ส่ง tools (Shell, Read, Write, Grep ฯลฯ) พร้อม tool_choice: "auto"; BazaarLink ส่งต่อไปยังผู้ให้บริการที่คุณเลือก ซึ่งตัดสินใจว่าจะเรียกใช้ทูลหรือไม่ การเรียกใช้ทูลส่งกลับเป็น tool_calls deltas มาตรฐานของ OpenAI; Cursor ดำเนินการในเครื่องและสนทนาต่อ ทำงานเหมือนกันไม่ว่าคุณจะเลือก gpt-4o (OpenAI ดั้งเดิม) หรือ bz-claude-sonnet-4.6
การกำหนดเส้นทางโมเดล
BazaarLink ใช้รูปแบบ provider/model-name เพื่อกำหนดเส้นทางคำขอไปยังผู้ให้บริการ upstream ที่ถูกต้อง ให้คุณเข้าถึงโมเดลหลักผ่าน API endpoint เดียว
รูปแบบ Model ID
{provider}/{model-name}
# Examples
openai/gpt-5.4-mini
anthropic/claude-sonnet-4.6
google/gemini-3-flash-preview
deepseek/deepseek-v3.2ลำดับความสำคัญการกำหนดเส้นทาง
เมื่อคุณส่งคำขอ BazaarLink จะแก้ไขผู้ให้บริการ upstream ตามลำดับนี้:
- จับคู่แน่นอน — ค้นหาเส้นทางโมเดลที่ตรงกับ model ID เต็ม
- Wildcard ผู้ให้บริการ — สำรองไปยังเส้นทาง provider/* (เช่น openai/*)
- Wildcard ทั่วไป — สำรองไปยังเส้นทาง * wildcard
- คีย์ผู้ให้บริการเริ่มต้น — ใช้เฉพาะโมเดลที่อยู่ในแค็ตตาล็อก โดยเลือกคีย์ที่เปิดใช้งานและกำหนดเป็นค่าเริ่มต้น
เรียกดูโมเดลที่พร้อมใช้งานทั้งหมดบน หน้าโมเดล
เราเตอร์อัตโนมัติ
Auto Router v3 scores the request into one of 14 task tiers, then uses the current primary and fallback chain configured for that tier. Paid and free tables are managed separately in the admin console.
- auto — ตารางเส้นทางแบบชำระเงิน แบบจำลองที่แก้ไขสำเร็จจะถูกเรียกเก็บเงินตามราคาที่เผยแพร่
- auto:free — ตารางเส้นทางฟรี การโทรภายในโควต้าฟรีมีค่าใช้จ่าย $0; หลังจากโควต้า บัญชีที่ได้รับทุนอาจเปลี่ยนไปใช้การกำหนดเส้นทางอัตโนมัติแบบชำระเงิน เว้นแต่จะปิดใช้ทางเลือกแบบชำระเงิน
วิธีใช้
ตั้งค่าโมเดลเป็น "auto" (ชำระเงิน) หรือ "auto:free" (ฟรี) เพื่อเปิดใช้งานการกำหนดเส้นทางอัตโนมัติ:
curl https://bazaarlink.ai/api/v1/chat/completions \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"auto","messages":[{"role":"user","content":"Review this TypeScript function"}]}'วิธีที่ v3 เลือกระดับ
General tiers are simple, standard, complex and reasoning. Specialized tiers are coding, vision, image, video, data, search, social, email, calendar and trading. Low-confidence boundary results are promoted one level.
- Tier การให้คะแนน: ข้อความ เครื่องมือ ความยาว คำสำคัญ และสัญญาณโครงสร้าง เลือกหนึ่งใน 14 ระดับ
- การแทนที่แบบยาก: วิสัยทัศน์ การใช้เหตุผลอย่างเป็นทางการ และงานเฉพาะทาง สามารถเลือกระดับได้โดยตรง
- Route lookup: reads the current primary and up to five fallbacks; a disabled tier returns 503
- Execution: tries the primary, then the configured fallback chain in order
- การติดตามการตอบสนอง: โมเดลที่ได้รับการแก้ไขแล้วจะถูกส่งกลับในส่วนเนื้อหาการตอบสนองและส่วนหัว X-Auto-Resolved-Model
ตารางรุ่นปัจจุบัน
These tables use the same live configuration as inference and admin. Primary models, fallback order and enabled state can change without a deployment.
auto
auto:free
บางโมเดลมีระดับใช้งานฟรีแบบจำกัดอัตรา สิทธิ์ใช้ฟรีถูกกำหนดต่อโมเดลโดยแพลตฟอร์ม — เรียกใช้ด้วย ID โมเดลปกติได้เลย ส่วนต่อท้าย :free เป็นเพียงชื่อแทนเสริม (เติมให้โมเดลเสียเงินไม่ทำให้ฟรี)
รุ่นต่างๆ
เพิ่มคำต่อท้ายให้กับรหัสโมเดลใดๆ เพื่อเปลี่ยนพฤติกรรมการกำหนดเส้นทาง BazaarLink รองรับ 7 ประเภทตัวแปร ขณะนี้รองรับตัวแปรรุ่น
รหัสรุ่นอิสระ
ตัวแปรเหล่านี้มีอยู่เป็นรุ่นที่แยกจากกันโดยมีราคาและความสามารถของตัวเอง BazaarLink ลองใช้ ID โมเดลแบบเต็ม (พร้อมส่วนต่อท้าย) ก่อน จากนั้นจึงถอยกลับไปเป็นโมเดลพื้นฐาน
:free
:extended
:thinking
:exactoทางลัดการกำหนดเส้นทาง
ส่วนต่อท้ายเหล่านี้แก้ไขการเลือกผู้ให้บริการโดยไม่ต้องเปลี่ยนเอกลักษณ์ของโมเดล ส่วนต่อท้ายจะถูกถอดออกก่อนเส้นทางที่ตรงกัน
:floor # lowest listed input price first
:nitro # throughput-oriented shortcut
:online # enable web-search routingพฤติกรรมของผู้ให้บริการหลายราย
สำหรับอัปสตรีมที่รองรับตัวแปรต่างๆ ส่วนต่อท้ายจะถูกส่งผ่านตามที่เป็น สำหรับผู้ให้บริการโดยตรง (เช่น direct OpenAI, Fireworks) ส่วนต่อท้ายจะถูกตัดออก และ BazaarLink จะจัดการการกำหนดเส้นทางในเครื่อง
โมเดลฟรี
บางโมเดลมีระดับใช้งานฟรีแบบจำกัดอัตรา สิทธิ์ใช้ฟรีถูกกำหนดต่อโมเดลโดยแพลตฟอร์ม — เรียกใช้ด้วย ID โมเดลปกติได้เลย ส่วนต่อท้าย :free เป็นเพียงชื่อแทนเสริม (เติมให้โมเดลเสียเงินไม่ทำให้ฟรี)
- เรียกใช้ ID โมเดลปกติ (เช่น deepseek/deepseek-v4-flash) คำขอภายในโควตาฟรีจะได้รับบริการฟรีโดยอัตโนมัติ
- การใช้งานฟรีถูกจำกัดต่อผู้ใช้ด้วยจำนวนคำขอต่อนาทีและเพดานรายวัน ขีดจำกัดปรับตามระดับบัญชี (ไม่มีเครดิต / มีเครดิต)
- เมื่อเกินโควตาฟรีและมีเครดิต คำขอจะดำเนินต่อในระดับเสียเงินตามราคาที่แสดงโดยอัตโนมัติ ส่ง X-Free-Fallback: false เพื่อปิดการสลับอัตโนมัติและรับ 429 แทน หากไม่มีเครดิต คำขอที่เกินโควตาจะได้ 429
- GET /api/v1/models แสดงรายการ :free สำหรับทุกโมเดลที่มีระดับฟรี ส่วน auto:free จะกำหนดเส้นทางไปยังโมเดลฟรีเสมอ
โมเดลที่มีโควตาฟรีตอนนี้
เรียกใช้ ID โมเดลเหล่านี้ได้โดยตรงเพื่อใช้โควตาฟรี รายการอาจเปลี่ยนแปลง แนะนำให้ดึงรายการล่าสุดผ่าน API
deepseek/deepseek-v4-flashขีดจำกัดโควตาฟรี
งบต่อวันของคุณ = งบคำขอต่อวันด้านบน × ตัวคูณระดับบัญชี โดยนับแยกแต่ละโมเดลฟรี ส่วน auto:free ยังมีเพดานคู่ขนานต่อ IP อีกชั้น โมเดลแต่ละตัวอาจถูกตั้งขีดจำกัดเข้มหรือผ่อนกว่านี้ ค่าที่ใช้จริงแสดงในบล็อก "โควตาฟรี" บนหน้าโมเดล
หลังใช้โควตาฟรีหมด
เมื่อโควตาหมด หากบัญชีมียอดเงินคงเหลือ คำขอจะดำเนินต่อโดยอัตโนมัติที่ราคาคิดเงินของโมเดลนั้น (บริการไม่สะดุด) และคิดเงินเหมือนการเรียกแบบเสียเงินทั่วไป หากต้องการให้ล้มเหลวแทนการถูกคิดเงิน ให้ส่งเฮดเดอร์ X-Free-Fallback: false หรือปิดการสลับอัตโนมัติในตั้งค่าคีย์ แล้วระบบจะคืน 429 แทน หากไม่มียอดเงิน คำขอที่เกินโควตาจะคืน 429 เสมอ
# Return 429 instead of switching to paid routing
-H "X-Free-Fallback: false"การจัดการองค์กร
BazaarLink organizations use a three-tier architecture: Organization → Team → Member. Credits are stored at the org level; each Team and member can have a monthly spend cap. API requests check member → team → org credits in sequence.
ระบบงบประมาณสามชั้น
On every API request, three budget layers are checked in order. Exceeding any layer returns HTTP 429:
- Member งบประมาณรายเดือน (OrgMember.monthlyBudget)
- งบประมาณรายเดือนของทีม (Team.monthlyBudget)
- ยอดเครดิตองค์กร (Organization.credits)
รายงานการใช้งาน
The Reports page in the org portal provides monthly spend analytics across four dimensions:
- ภาพรวม: การใช้จ่ายทั้งหมด อัตรามาร์จิ้น แผนภูมิแนวโน้มรายวัน
- ตามทีม: การใช้จ่ายต่อทีม, ส่วนแบ่ง %, การแยกย่อยแบบจำลอง, การใช้งบประมาณ
- By Model: การใช้จ่ายต่อโมเดล, ราคาเฉลี่ย ($/1M tokens)
- By Member: การใช้จ่ายต่อสมาชิก — org_admin เท่านั้น
มุมมองทั้งหมดรองรับการส่งออก CSV ด้วยคำนำหน้า BOM สำหรับความเข้ากันได้ของ Excel โดยตรง
สร้างและจัดการองค์กร
- Go to Settings → Organizations → Create New Organization
- Create Teams in the org portal (optional: cost center code and monthly budget)
- Invite members by email, assign a role and Team
- Issue API keys for members — usage is automatically tagged to the correct Team / member
- View the Reports page for monthly spend broken down by Team, Model, or Member
- ดูหน้ารายงานการใช้จ่ายรายเดือนโดยแยกตามทีม รุ่น หรือสมาชิก
บทบาทสมาชิก
องค์กรสามารถจัดการอะไรได้อีก?
นอกเหนือจากสมาชิกและทีมงานแล้ว พื้นที่การจัดการองค์กรยังจัดให้มี:
- API keys and model restrictions
- Content filtering before text reaches a model
- Allowed Models by organization, team, member, or key
- Monthly budgets and spend emergency brakes
- Reports, billing, change logs, and security logs
- Education sessions and quotas for eligible organizations
- แผนสถาบัน: องค์กรการศึกษาสามารถจัดการเซสชันและโควต้าของนักเรียนเพิ่มเติมได้
การกรองเนื้อหา
Organization-owned rules inspect text before it reaches a model. An org_admin can enable, edit, and test them in Settings.
- block: reject with HTTP 403
- redact: replace matches with [REDACTED]
- flag: send unchanged and record an audit event
- Built-in sensitive-data and prompt-injection templates plus custom keyword or regex rules
- Up to 100 safety-checked rules with a test preview
การจัดการ API (v1)
The /api/v1/orgs/ endpoints accept both Bearer management key (sk-bl-...) and session cookie, enabling server-to-server org management without a browser session.
องค์กร
/api/v1/orgsแสดงรายการ organization ทั้งหมดที่ผู้เรียกเป็นสมาชิก พร้อม role และ joinedAt
/api/v1/orgs/:orgIdดูรายละเอียด org รวมถึงจำนวน team และจำนวน member
curl https://bazaarlink.ai/api/v1/orgs \
-H "Authorization: Bearer sk-bl-YOUR_MANAGEMENT_KEY"ทีม
/api/v1/orgs/:orgId/teamsแสดงรายการ team พร้อมจำนวนสมาชิก เรียงตามชื่อ
/api/v1/orgs/:orgId/teams/api/v1/orgs/:orgId/teams/:teamIdอัปเดตบางส่วน — ส่งเฉพาะ field ที่ต้องการเปลี่ยน
/api/v1/orgs/:orgId/teams/:teamId# Create a team
curl https://bazaarlink.ai/api/v1/orgs/{orgId}/teams \
-X POST \
-H "Authorization: Bearer sk-bl-YOUR_MANAGEMENT_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Engineering", "costCenterCode": "ENG-001", "monthlyBudget": 500}'สมาชิก
/api/v1/orgs/:orgId/membersแสดงรายการสมาชิกทั้งหมดพร้อมข้อมูล user (id/name/email) และ team แบบ nested
/api/v1/orgs/:orgId/members404 หากที่อยู่อีเมลไม่มีบัญชี BazaarLink 409 ถ้าเป็นสมาชิกอยู่แล้ว. บทบาทเริ่มต้น: สมาชิก
/api/v1/orgs/:orgId/members/:memberIdอัปเดตบางส่วนของ role, teamId หรือ monthlyBudget
/api/v1/orgs/:orgId/members/:memberIdส่งคืน 400 หากเป้าหมายคือ org_admin สุดท้าย
Reports API
Query monthly spend data programmatically. Accessible to org_admin and billing_viewer. Accepts both web session and Bearer management key.
Query params: year (default current), month (default current, 1–12).
ตารางอ้างอิง Error Response
โมเดลที่อนุญาต (Whitelist)
จำกัดว่าองค์กร ทีม หรือสมาชิกแต่ละคนสามารถเรียกโมเดลใดได้บ้าง เหมาะสำหรับบล็อกโมเดลที่มีค่าใช้จ่ายสูงหรือยังไม่ผ่านการตรวจสอบ บังคับใช้มาตรฐานโมเดล หรือจำกัดทีมให้ใช้เฉพาะ provider เดียว
หลักการทำงาน
- สามชั้นที่เป็นอิสระจากกัน — Organization, Team, Member — แต่ละชั้นมี list ของตัวเอง (String[] ใน database)
- เมื่อทั้งสามชั้นว่างหมด ทุกโมเดลจะถูกอนุญาต (พฤติกรรมเริ่มต้น)
- เมื่อมีอย่างน้อยหนึ่งชั้นที่ไม่ว่าง list ที่มีผลคือ intersection ของชั้นที่ไม่ว่าง — โมเดลต้องผ่านทุกชั้นที่ถูกจำกัดจึงจะใช้ได้
- การเปลี่ยนแปลงมีผลภายในไม่กี่วินาที (cache 60 วินาทีใน memory + 5 นาทีใน Redis ทั้งคู่ถูกล้างเมื่อมีการอัปเดต)
รูปแบบ pattern
- Exact match — เช่น openai/gpt-4o (ตรงกับโมเดลนี้เท่านั้น)
- Provider wildcard — เช่น openai/* (ทุกโมเดลภายใต้ prefix openai/)
- ตัวพิมพ์เล็กเท่านั้น สูงสุด 200 entry ต่อ list, 100 ตัวอักษรต่อ entry
ที่จัดการ
Org Portal → Allowed Models org_admin แก้ list ของ org / team / member ได้ทั้งหมด team_admin แก้ทีมของตนเองและสมาชิกในทีมนั้นได้
Error response เมื่อถูกบล็อก
การเรียกโมเดลที่ไม่อนุญาตจะได้ HTTP 403 พร้อม body แบบนี้:
การจัดการ API
ทุก endpoint รองรับ Web Session หรือ Bearer Management Key (sk-bl-...) PATCH จะแทนที่ list ทั้งหมด ส่ง [] เพื่อล้างค่า
Circuit Breaker (สวิตช์ฆ่าการใช้จ่าย)
ระบบ spend cap แบบ dual-window ที่จะบล็อก request ถัดไปเมื่อค่าใช้จ่าย upstream พุ่งสูงผิดปกติ ออกแบบมาเพื่อจำกัด script ที่ run หลุด, infinite loop, หรือ key ที่ถูกขโมยไปใช้ ก่อนที่จะเสียเงินจริง
หลักการทำงาน
- มี window คงที่สองช่วงที่ track ใน Redis ต่อ scope: ค่าใช้จ่าย upstream (USD) ใน 1 นาที และ 1 ชั่วโมง
- ถ้าช่วงใดช่วงหนึ่งถึง threshold, request ถัดไปทั้งหมดใน scope นั้นจะถูกปฏิเสธจนกว่า window จะรีเซ็ต
- ค่า default: $5 / นาที, $20 / ชั่วโมง, เปิดใช้งานโดย default
- Counter อยู่ใน Redis พร้อม TTL — recovery เป็นแบบอัตโนมัติ ไม่ต้อง reset เองสำหรับ trip ระดับ org/team/member
Scopes (member override team override org)
แต่ละชั้นตั้ง threshold ของตนเองได้ ลำดับการ resolve คือ member → team → org → platform default — ค่าแรกที่ไม่ใช่ null ชนะในแต่ละ field (cbEnabled, cbMinuteUsd, cbHourlyUsd)
- ระดับ Org — มีผลกับทุก key ภายใต้ organization ตั้งค่าใน Org Portal → Circuit Breaker
- ระดับ Team — มีผลกับทุก key ที่ tag กับทีมนั้น Override org สำหรับ key เหล่านั้น
- ระดับ Member — มีผลเฉพาะ key ที่ tag กับ member นั้น Override ทั้ง team และ org
พฤติกรรมเมื่อ trip
เมื่อ trip request จะ fail ทันที (ไม่มีการเรียก upstream) Response เป็น HTTP 429 พร้อม body แบบนี้:
บันทึกการตรวจสอบ
ทุก trip event และทุกการเปลี่ยน config จะถูกบันทึก:
- Trip events — action org.cb.tripped / team.cb.tripped / org_member.cb.tripped Dedup เป็น 1 entry ต่อ scope+window ต่อชั่วโมง เพื่อไม่ให้ trip ที่ค้างนาน flood log
- Config changes — action org.cb.update / team.cb.update / org_member.cb.update บันทึกค่าก่อน/หลัง พร้อม actor
การจัดการ API
Org admin อ่านและอัปเดต settings ผ่าน API ได้ ทุก endpoint รองรับ Web Session หรือ Bearer Management Key (sk-bl-...) ส่ง field กลุ่มใดก็ได้ใน PATCH body; null จะล้าง field และ fallback ไปยังชั้นแม่
API การหมุนปุ่ม
การหมุนคีย์ API เป็นประจำเป็นวิธีปฏิบัติที่ดีที่สุดด้านความปลอดภัย BazaarLink รองรับการหมุนเวียนคีย์แบบ Zero-downtime — สร้างคีย์ใหม่ก่อน จากนั้นจึงย้าย จากนั้นเพิกถอนคีย์เก่า คุณสามารถเพิกถอนคีย์
ขั้นตอนการหมุน
- สร้างคีย์ API ใหม่
- อัปเดตแอปพลิเคชันหรือตัวแปรสภาพแวดล้อมของคุณให้ใช้คีย์ใหม่
- ตรวจสอบว่าคีย์ใหม่ทำงานอย่างถูกต้อง
- ปิดการใช้งานหรือลบคีย์เก่า
ส่งออกกิจกรรม
ดาวน์โหลดประวัติการใช้งาน API ทั้งหมดของคุณเป็น CSV สำหรับการตรวจสอบทางการเงิน การวิเคราะห์ต้นทุน หรือการรายงานการปฏิบัติตามข้อกำหนด
CSV ส่งออก
เข้าสู่ระบบและไปที่หน้าบันทึก คลิกปุ่มส่งออก CSV ที่มุมขวาบนเพื่อดาวน์โหลดประวัติทั้งหมดของคุณเป็นไฟล์ CSV ไม่จำเป็นต้องโทร API
CSV คอลัมน์
JSON การใช้งาน API
สำหรับการเข้าถึงแบบเป็นโปรแกรม ให้ค้นหาสถิติรวมที่จัดกลุ่มตามช่วงเวลา รุ่น หรือคีย์:
การบัญชีการใช้งาน
สืบค้นสถิติการใช้งานโดยละเอียดผ่าน API รวมถึงการใช้โทเค็น การวิเคราะห์ต้นทุน และประวัติคำขอ
การอ้างอิงฟิลด์การตอบสนอง
| Field | Type | Description |
|---|---|---|
| model | string | Model ID used (e.g., openai/gpt-4o) |
| provider | string | Upstream provider name |
| prompt_tokens | number | Input tokens consumed |
| completion_tokens | number | Output tokens generated |
| total_tokens | number | Total tokens (prompt + completion) |
| reasoning_tokens | number | Reasoning tokens (for thinking models) |
| cached_tokens | number | Prompt tokens served from cache |
| cost | number | Total cost in USD credits |
| duration_ms | number | End-to-end latency in milliseconds |
| throughput | number | Generation speed in tokens/sec |
| finish_reason | string | stop | length | content_filter | error |
| status | number | HTTP status code from upstream |
| app_name | string | null | Application name (X-Title header) |
| key_name | string | API key name used for the request |
แผนสถาบัน
Institution Plan ช่วยให้สถาบันใดก็ตาม (โรงเรียน บริษัท การประชุม หน่วยงานรัฐ ฯลฯ) ออก session token อายุสั้นให้สมาชิกจาก key ระดับองค์กรเพียงตัวเดียว สมาชิกไม่จำเป็นต้องสร้างบัญชีบนแพลตฟอร์ม องค์กรเป็นผู้ควบคุมว่าสมาชิกคนใดสามารถขอ token ได้โดยอิงจากโดเมนอีเมล (เช่น nthu.edu.tw) การใช้งานทั้งหมดจะถูกเรียกเก็บเงินจากบัญชีขององค์กร หน้านี้ใช้สถานการณ์การศึกษาเป็นตัวอย่าง — กลไกเดียวกันใช้ได้กับสถาบันใดก็ตามที่ต้องการการเข้าถึงชั่วคราวระยะสั้นสำหรับผู้ใช้หลายคน
ภาพรวมสถาปัตยกรรม
- รหัสสถาบัน — ขึ้นต้นด้วย sk-edu- สร้างโดย org_admin บนหน้า keys ขององค์กร ไม่สามารถใช้เป็น Bearer token เรียก API โดยตรง — การเรียกตรงจะได้ 403
- โทเค็นเซสชันสมาชิก — ขึ้นต้นด้วย edu-sess- นักเรียนได้รับหลังจากยืนยันอีเมล อายุการใช้งานเริ่มต้น 24 ชั่วโมง สามารถเพิกถอนได้โดย admin ขององค์กร
- โดเมนที่อนุญาต — องค์กรกำหนดว่าโดเมนอีเมลใดบ้าง (จับคู่แบบตรงตัว ไม่มีการ bypass ด้วย suffix) ที่สามารถขอ session ได้
- Usage การแสดงที่มา — คำขอจากนักเรียนทั้งหมดถูกเรียกเก็บเงินจากบัญชีขององค์กร สามารถดูการใช้งานต่อ session และต่ออีเมลได้ในแดชบอร์ดขององค์กร
ขั้นที่ 1 — Platform admin ตั้งประเภทองค์กรเป็น Education
จาก sales@bazaarlink.ai / support@bazaarlink.ai ค้นหาองค์กรเป้าหมาย สลับไปแท็บ "Org Type" เลือก Education และตั้งโดเมนอีเมลที่อนุญาต:
ขั้นที่ 2 — Org admin สร้าง Institution Key
บนหน้า API Keys ขององค์กร เลือก "Education" เป็นประเภท key เมื่อสร้าง key ใหม่ ระบบจะสร้าง key รูปแบบ sk-edu-... และแสดงเพียงครั้งเดียว — บันทึกไว้และส่งต่อให้นักเรียนขององค์กรนั้นผ่านช่องทางทางการของคุณ
ขั้นที่ 3 — นักเรียนขอรหัสยืนยัน
นักเรียนเข้าไปที่ /access และกรอก edu key + อีเมลโรงเรียน หรือเรียก API โดยตรง:
/api/edu/request-codeขั้นที่ 4 — นักเรียนส่งรหัสเพื่อแลกเป็น session token
/api/edu/verifyขั้นที่ 5 — ใช้ session token เรียก API
ใช้ token รูปแบบ edu-sess-... เป็น Bearer token เพื่อเรียก endpoint ใด ๆ ของ chat / completions / embeddings:
curl -X POST https://bazaarlink.ai/api/v1/chat/completions \
-H "Authorization: Bearer edu-sess-827d11a1ec67d175cfd4f67f929261f4" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-haiku-4.5",
"messages": [{"role": "user", "content": "Hello"}]
}'403 — Education keys cannot be used directly. Visit /access to exchange for a session.นี่คือ reverse gate ที่ตั้งใจให้เป็นเช่นนั้น — ป้องกันไม่ให้โรงเรียนรั่ว key อายุยาวให้กับนักเรียนรายบุคคล
แดชบอร์ดองค์กร — การติดตามและการเพิกถอน
องค์กรประเภท Education จะได้รับแท็บ Education ใน side nav ซึ่งให้บริการ:
- การตั้งค่า — ปรับโดเมนที่อนุญาต, TTL, จำนวน session สูงสุดต่ออีเมลต่อ key และโควต้าต่อ session ทั้งจำนวน request / token / USD
- เซสชัน — แสดงรายการ session ที่ยัง active / หมดอายุ / ถูกเพิกถอนทั้งหมด กรองตามอีเมล เพิกถอน session แต่ละรายการได้
- สถิติการใช้งาน — จำนวนการเรียกต่อ session การบริโภค token และค่าใช้จ่ายสะสม
ความปลอดภัยและขีดจำกัด
| รายการ | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|
| เซสชัน TTL | 24 ชั่วโมง | อายุการใช้งานของ session token; session ที่หมดอายุต้องยืนยันใหม่ |
| รหัสยืนยัน TTL | 15 นาที | อายุการใช้งานของรหัสยืนยันทางอีเมล |
| ความยาวรหัสยืนยัน | 6 หลัก | เก็บเป็น hash แบบ HMAC-SHA256 ใน Redis ไม่เก็บแบบ plaintext |
| Guess ขีดจำกัด | 5 ครั้ง | เกินจากนี้รหัสจะถูกยกเลิกทันที |
| คูลดาวน์รหัสคำขอ | 60 วินาที | ช่วงเวลาขั้นต่ำระหว่างการขอซ้ำสำหรับ (key, email) เดียวกัน |
| Per-IP ขีดจำกัดอัตรา | 10 / 15 นาที | ป้องกัน spam |
| อัตราจำกัดต่อคีย์ | 100 / ชั่วโมง | ป้องกันการส่งอีเมลจำนวนมาก |
| สูงสุดเซสชันต่ออีเมล | 5 | ปรับได้ใน eduConfig; ป้องกันไม่ให้กล่องอีเมลเดียวกักตุน token |
| การเผยแพร่การเพิกถอน | ≤ 60 วินาที | TTL ของ cache L1/L2; หลังจากเพิกถอนใน DB จะใช้เวลาไม่เกิน 60 วินาทีในการกระจายไปยังทุก node |
การเรียกเก็บเงินและการระบุการใช้งาน
คำขอทั้งหมดที่ทำผ่าน session token จะถูกเรียกเก็บ 100% จากองค์กรที่เป็นเจ้าของ edu key ซึ่งสอดคล้องกับวิธีที่ผู้ให้บริการต้นทาง (OpenAI / Anthropic / ฯลฯ) เรียกเก็บเงิน (ต่อ token) แดชบอร์ดขององค์กรรองรับการ drill-down ตาม session ตามอีเมล และตาม key
รายงานคำติชม
ช่วยเราปรับปรุง BazaarLink โดยการรายงานปัญหา ข้อบกพร่อง หรือข้อเสนอแนะ เราติดตามทุกช่องทางข้อเสนอแนะอย่างกระตือรือร้น
วิธีการรายงาน
สิ่งที่ต้องรวม
- Request ID (จากฟิลด์รหัสการตอบกลับ)
- รุ่นที่ใช้และส่งพารามิเตอร์แล้ว
- Expected เทียบกับพฤติกรรมจริง
- การประทับเวลาและความถี่ของปัญหา
- Error ข้อความหรือรหัสสถานะ HTTP