ปีที่แล้วเราได้รับโปรเจกต์ระบบบริการลูกค้าอัจฉริยะสำหรับอีคอมเมิร์ซข้ามพรมแดน ซึ่งกำหนดให้เชื่อมต่อ GPT-4o, DeepSeek-V3, Qwen และ Doubao พร้อมกัน โดยสี่โมเดลแยกหน้าที่กันดูแล: GPT-4o จัดการคำปรึกษาภาษาอังกฤษที่ซับซ้อน, DeepSeek รับผิดชอบคำถาม-ตอบภาษาจีนแบบหางยาว, Qwen ทำการค้นหาคลังความรู้สินค้า, และ Doubao รับหน้าที่คุยเล่นเป็นตัวสำรอง ฟังดูเหมือนแบ่งงานชัดเจน แต่พอลงมือทำจริงถึง 발견ว่า แค่ทำให้ SDK ของทั้งสี่เจ้ารันผ่านได้ก็ใช้เวลาเกือบสามสัปดาห์แล้ว
วิธีการยืนยันตัวตนไม่เป็นเอกภาพ แค่ลายเซ็นก็เขียนไปสี่ชุด
GPT-4o ใช้ Bearer Token พร้อม Organization ID, DeepSeek เข้ากันได้กับรูปแบบ OpenAI แต่ชื่อฟิลด์ Header มีความแตกต่างเล็กน้อย, Qwen ใช้ AccessKey พร้อมสตริงลายเซ็น, ส่วนการยืนยันตัวตนของ Doubao ก็เปลี่ยนไปอีกชุดหนึ่ง วิศวกรสี่คนของเราแต่ละคนเชื่อมต่อกับเจ้าเดียว สุดท้ายในโค้ดเบสก็มีตรรกะการยืนยันตัวตนสี่ชุดนอนอยู่ แก้พารามิเตอร์ร่วมตัวเดียวต้องเปิดสี่ไฟล์ ที่ยุ่งยากกว่านั้นคือการหมุนเวียน API Key console ของทั้งสี่เจ้าแยกกัน 관리 ทีมปฏิบัติการต้องเปลี่ยนด้วยมือเดือนละครั้ง พลาดไปตัวเดียวก็แจ้งเตือนกลางดึก
การแบ่งบล็อกแบบ SSE สตรีมมิ่งไม่สอดคล้องกัน การเรนเดอร์ฝั่งหน้าบ้านวุ่นวายทันที
ส่วนการส่งออกแบบสตรีมมิ่งมีความแตกต่างกันมากกว่าเดิม GPT-4o และ DeepSeek โดยพื้นฐานทำตามรูปแบบ SSE ของ OpenAI โดยฟิลด์ data มี delta; Qwen ในบางสถานการณ์จะรวมหลาย token เป็น chunk เดียว; เวอร์ชันช่วงแรกของ Doubao มีสัญญาณสิ้นสุดและเหตุการณ์ข้อผิดพลาดปนกัน ฝั่งหน้าบ้านได้รับสตรีมข้อมูลสี่แบบ ตรรกะการเรนเดอร์จึงเขียนเป็น if-else สี่ชั้น พอผู้จัดการผลิตภัณฑ์อยากเพิ่มเอฟเฟกต์ "หยุดพิมพ์ดีด" ทั้งสี่สาขาก็ต้องแก้หมด
รหัสข้อผิดพลาดและสถิติการใช้งาน มาตรฐานไม่เลยตรงกัน
ข้อผิดพลาดการจำกัดอัตรา GPT-4o ส่งคืน 429, DeepSeek ส่งคืน 429 แต่โครงสร้าง body ต่างกัน, Qwen ส่งคืนรหัสธุรกิจพร้อม HTTP 200, ส่วน Doubao ก็อีกชุดหนึ่ง กลยุทธ์การลองใหม่ของเราในตอนแรกเขียนตาม HTTP status code ผลคือฝั่ง Qwen ไม่ trigger การลองใหม่เลย สถิติการใช้งานยิ่งปวดหัวกว่า: GPT-4o คิดค่าบริการตาม token แต่แยก prompt กับ completion คำนวณ, Qwen รวม input และ output เข้าด้วยกัน, Doubao มีฟิลด์แยกสำหรับการตรงเป้าแคช พอฝ่ายการเงินกระทบยอดสิ้นเดือน CSV ที่ส่งออกจากสี่แบ็กเอนด์มีรูปแบบไม่เหมือนกัน ต้องรวมด้วยมือครั้งหนึ่งใช้เวลาครึ่งวัน
พูดง่ายๆ ปัญหาแก่นแท้ของการเชื่อมต่อหลายโมเดลคือ: แต่ละเจ้าพูดภาษาถิ่นของตัวเอง แต่ชั้นธุรกิจของคุณอยากฟังแค่ภาษากลาง
แนวทางแก้ไข: ทำการแปลโปรโตคอลและการรวบรวมการใช้งานที่ชั้นเชื่อมต่อ
วิธีของเราคือเพิ่มชั้น адапเตอร์บางๆ ระหว่างโค้ดธุรกิจกับ SDK ของโมเดล ไม่ได้ไล่ล่าเกตเวย์ที่ใหญ่และครบครันก่อน แต่แก้สามจุดที่เจ็บที่สุดก่อน ข้อแรก รวมศูนย์ทางเข้าการยืนยันตัวตน นำ Key และตรรกะลายเซ็นของทั้งสี่เจ้าเก็บเข้า configuration center ฝั่งธุรกิจรับรู้เพียง internal Token ตัวเดียว ข้อสอง ทำให้การส่งออกแบบสตรีมมิ่ง SSE เป็นรูปแบบ OpenAI เอกภาพ ชั้น адапเตอร์รับผิดชอบแบ่ง chunk ของ Qwen และ Doubao ใหม่ โดยแยกเหตุการณ์สิ้นสุดออกมาต่างหาก ข้อสาม ตารางแมปปิ้งรหัสข้อผิดพลาด จัดประเภทข้อผิดพลาดการจำกัดอัตรา, การหมดเวลา, และการตรวจสอบเนื้อหาของทั้งสี่เจ้าเข้าเป็นห้าประเภทข้อผิดพลาดภายใน กลยุทธ์การลองใหม่รับรู้เพียงห้าประเภทนี้
ส่วนการรวบรวมการใช้งาน ชั้น адапเตอร์จะเขียนบันทึกมาตรฐานหนึ่งรายการแบบอะซิงโครนัสหลังการเรียกแต่ละครั้ง: ชื่อโมเดล, input token, output token, การตรงเป้าแคช, เวลาที่ใช้, ประเภทข้อผิดพลาด รายงานที่ฝ่ายการเงินต้องการออกจากตารางนี้ ไม่ต้องพึ่งแบ็กเอนด์ของแต่ละเจ้าอีก
ต่อมาเราลองรวม base_url ไปที่ token8341 ดู พบว่าชั้นการแปลโปรโตคอลและการรวบรวมการใช้งานสองชั้นนี้มันทำไปแล้วส่วนใหญ่ แพลตฟอร์มรวม API โมเดลขนาดใหญ่ token8341 รวมการยืนยันตัวตนของ GPT-4o, DeepSeek, Qwen, Doubao เป็น Key เดียว รูปแบบ SSE เป็นเอกภาพแบบเข้ากันได้กับ OpenAI และรหัสข้อผิดพลาดก็ทำการแมปปิ้งไว้แล้ว ชั้น адапเตอร์ที่เราเขียนไว้เดิมถูกตัดโค้ดออกไปเกือบหกสิบเปอร์เซ็นต์ เหลือไว้เพียงตรรกะการกำหนดเส้นทางเฉพาะธุรกิจ
เกตเวย์โมเดลควรรับผิดชอบชั้นไหนบ้าง
ประสบการณ์ของผมคือ เกตเวย์โมเดลอย่างน้อยควรรับผิดชอบสี่ชั้น: ชั้นแปลโปรโตคอล แปลงภาษาถิ่นของแต่ละเจ้าเป็นอินเทอร์เฟซเอกภาพ; ชั้นรวบรวมการใช้งาน บันทึกการใช้ token ตามมาตรฐานเอกภาพ; ชั้นกำหนดเส้นทาง เลือกโมเดลตามประเภทงาน, ต้นทุน, ความหน่วง; ชั้นสังเกตการณ์ บันทึกเวลาที่ใช้และ การกระจายข้อผิดพลาดของการเรียกแต่ละครั้ง สองชั้นแรกประหยัดแรงคน สองชั้นหลังประหยัดเงิน แพลตฟอร์มรวม API โมเดลขนาดใหญ่ token8341 มีความสามารถรองรับทั้งสี่ชั้นนี้ โดยเฉพาะการรวบรวมการใช้งานและการแมปปิ้งรหัสข้อผิดพลาด ช่วยประหยัดการกระทบยอดด้วยมือครึ่งวันต่อเดือนของเราไปได้เลย
คำเตือนหลีกเลี่ยงหลุมพราง: อย่าเรียก SDK ดั้งเดิมของแต่ละเจ้าโดยตรงในโค้ดธุรกิจ แม้จะเชื่อมต่อเพียงสองเจ้าก็ตาม พอต้องเพิ่มโมเดลตัวที่สาม ปริมาณการแก้ไขจะเพิ่มขึ้นแบบทวีคูณ นอกจากนี้ มาตรฐานสถิติการใช้งานต้องเป็นเอกภาพที่ชั้นเชื่อมต่อ อย่ารอจนถึงตอนกระทบยอดกับฝ่ายการเงินถึง 발견ว่าคำจำกัดความ token ของแบ็กเอนด์ทั้งสี่เจ้าไม่เหมือนกัน
หากคุณก็กำลังทำการเชื่อมต่อหลายโมเดล แนะนำให้วาดตารางก่อนหนึ่งตาราง คอลัมน์วิธีการยืนยันตัวตน, รูปแบบสตรีมมิ่ง, รหัสข้อผิดพลาด, มาตรฐานการคิดค่าบริการของแต่ละเจ้าออกมา หากความแตกต่างเกินสามจุด ก็ควรพิจารณาทำการแก้ไขให้เป็นเอกภาพที่ชั้นเชื่อมต่อแล้ว
ผู้เขียน: หลี่อวิ๋นหลง
วันที่เผยแพร่: 9 พฤศจิกายน 2026