การรวมโมเดลในระดับการผลิต: ภายใน OrcaRouter Fusion และ Routing DSL

การรวมโมเดลในระดับการผลิต: ภายใน OrcaRouter Fusion และ Routing DSL

วันที่เผยแพร่

กลับไปยังโพสต์ทั้งหมด

โมเดลชั้นนำสามตัวทำงานแบบขนาน ได้คำตอบเดียวกลับมา เรียกมันในบรรทัดเดียว — หรือเขียนของคุณเอง

TL;DR. Claude Fable 5 ถูกถอดออกจากรายการ คำตอบไม่ใช่โมเดลที่ใหญ่กว่า — แต่มันคือ แผง: รันโมเดลชั้นนำหลายตัวพร้อมกัน แล้วให้ผู้ตัดสินส่งคืนคำตอบที่แข็งแกร่งที่สุด OrcaRouter จัดส่งสิ่งนี้สองวิธี: เราเตอร์ orcarouter/fusion ในตัว คุณเรียกใช้เหมือนโมเดลอื่นๆ และ Routing DSL เพื่อสร้างระบบของคุณเอง นี่คือคู่มือภาคสนามสำหรับทั้งสอง — พร้อมสูตรคัดลอกและวาง, ผู้ตัดสินห้าประเภท (รวมถึง synthesize, ฟิวชัน Mixture-of-Agents), และวิธีนำไปใช้โดยไม่ต้องเสี่ยงกับ SLA ของคุณ


ส่วนที่ 1 — เรียกมันในบรรทัดเดียว: เราเตอร์ Fusion ในตัว

Fable 5 ถูกยกเลิกและจำกัดการใช้งาน ดังนั้นจึงไม่สามารถเรียกใช้ได้อย่างกว้างขวางอีกต่อไป Fusion สร้างระดับนั้นขึ้นมาใหม่จากโมเดลที่คุณ ได้ ยังเรียกใช้ — เราเตอร์แบบ drop‑in ที่เข้ากันได้กับ OpenAI ซึ่งรันแผงของโมเดลแนวหน้าแบบขนานและส่งคืนคำตอบที่แข็งแกร่งที่สุด สามระดับที่คัดสรรมีให้ในทุกเวิร์กสเปซ:

สามระดับ Fusion (องค์ประกอบแผง × หน้าต่างบริบท)


orcarouter/fusion

Claude Opus 4.8 + GPT-5.5 + Gemini 3.1 Pro

หน้าต่างบริบท: 1,000,000

เหมาะสำหรับ: Fable-5 ระดับ Max intelligence


orcarouter/fusion-mini

Claude Opus 4.8 + GPT-5.5

หน้าต่างบริบท: 1,000,000

เหมาะสำหรับ: การอนุมานที่สมดุลระดับ Fable-5


orcarouter/fusion-flash

Gemini 3.5 Flash + MiniMax M2.7 + GLM 5.1

กรอบบริบท: 200,000

เหมาะสำหรับ: ระดับ Fable-5 การอนุมานที่รวดเร็วและประหยัด

(หน้าต่างบริบท = สมาชิกแผงที่เล็กที่สุด — ข้อจำกัดที่ผูกพันต่อการกระจายสัญญาณ)


สิ่งเหล่านี้ไม่ใช่คำโปรยทางการตลาด; พวกมันคือ เราเตอร์ DSL ที่คอมไพล์ล่วงหน้า ที่ถูกจัดการจากส่วนกลาง นี่คือ จริง orcarouter/fusion โปรแกรม, ตามตัวอักษร:

version: 1
rules:
  - id: hard_panel
    when: task_class == "code" || task_class == "agent" || code_keyword_density >= 0.3 || has_tools || difficulty >= 0.3
    use:
      parallel:
        - { model: "anthropic/claude-opus-4.8" }
        - { model: "openai/gpt-5.5" }
        - { model: "google/gemini-3.1-pro-preview" }
      arbiter:
        strategy: best_of_n
        model: "anthropic/claude-opus-4.8"
        template: best_answer_v1
      max_latency_ms: 120000
default:
  delegate: balanced


สองตัวเลือกการออกแบบที่ควรค่าแก่การกล่าวถึง:

มันจะกระจายเฉพาะในงานจริงเท่านั้นเกท when: จะเปิดใช้งานแผงสำหรับพรอมต์ที่เกี่ยวกับโค้ด, เอเจนต์, การใช้เครื่องมือ, โค้ดหนาแน่น, หรือความยากสูง (difficulty >= 0.3); ส่วนอื่นๆ ทั้งหมดจะตกไปที่ค่าเริ่มต้นแบบสมดุลของเวิร์กสเปซ คุณจะจ่ายราคาแผงเฉพาะในจุดที่มันช่วยได้เท่านั้น ไม่ใช่กับ "สวัสดี"

ผู้พิพากษาให้คำตอบที่แท้จริงแบบตรงตามต้นฉบับ best_of_n เรียกใช้ผู้พิพากษา LLM (ในที่นี้คือ Opus 4.8 กับเทมเพลต best_answer_v1) ที่ เลือกผู้สมัครที่แข็งแกร่งที่สุดเพียงคนเดียวและส่งมอบตามที่เป็น — ไม่เคยเป็นการผสมที่เจือจาง ผลลัพธ์คือคำตอบของโมเดลจริงเสมอ


ส่วนที่ 2 — เลือก vs. รวม: best_of_n และ synthesize arbiter

The Fusion routers select. But OrcaRouter also ships a fuse strategy — synthesize, the Mixture-of-Agents pattern added in the routing engine (service/dispatch_parallel/synthesize.go). The difference is the whole game:

เอกสารแนบ 2 — เลือกเทียบกับรวม

best_of_n (SELECT)                         synthesize (FUSE)
 ┌─ Opus 4.8  ─┐                            ┌─ Opus 4.8  ─┐
 ├─ GPT-5.5   ─┼─► judge picks leg k        ├─ GPT-5.5   ─┼─► aggregator LLM writes
 └─ Gemini    ─┘   └─► serve leg k verbatim └─ Gemini    ─┘   ONE new fused answer
   output = a real model's answer             output = a new answer better than any leg

สูตรสำหรับฟิวชั่นที่แท้จริง:

use:
  parallel:
    - { model: "anthropic/claude-opus-4.8" }
    - { model: "openai/gpt-5.5" }
    - { model: "google/gemini-3.1-pro-preview" }
  arbiter:
    strategy: synthesize
    model: "anthropic/claude-opus-4.8"   # aggregator: fuses candidates into one new answer
    template: synthesize_v1


ข้อควรระวังอย่างตรงไปตรงมา:

- การคิดค่าบริการเป็น N+1 — ทุกเลกจะถูกคิดค่าบริการ รวมถึง aggregator เป็นสายเรียกเพิ่มเติม

- OpenAI รูปแบบแชทเฉพาะใน V1 — ตัวรวบรวมส่งออกการตอบกลับแชทแบบ OpenAI; Claude/Gemini เนทีฟ ไคลเอนต์ลดระดับลงเป็น serve-first-successful (legs still billed).

ตัวรวบรวมต้องอยู่ในชุดผู้สมัครที่ได้รับอนุญาตของเราเตอร์ มิฉะนั้นจะเสื่อมประสิทธิภาพ

เมื่อใดควรใช้แบบไหน: best_of_n เมื่อคำตอบของโมเดลเดียวน่าจะ ทั้งหมด ถูกต้อง (code, factual Q&A) — คุณต้องการคำตอบที่สะอาดและเป็นจริง ใช้ synthesize เมื่อคำตอบเป็น ส่วนเสริมกัน (research, analysis, long-form) และการรวมจุดแข็งนั้นดีกว่าการใช้เพียงอย่างเดียว


ส่วนที่ 3 — สร้างของคุณเอง: คู่มือ Routing DSL

ไม่ต้องการแผงที่จัดสรรไว้ใช่ไหม? เริ่มจาก "Claude Fable 5 Level" templates ใน Routing DSL editor (พวกมันมาพร้อมกับทุกพื้นที่ทำงานและเหมือนกับ Fusion routers) แล้วปรับแต่งเอง มีรูปแบบการคัดลอกและวาง 6 แบบ:

1 — โค้ดที่ทำงานจริง → กระจายออก, ให้ การทดสอบ เลือกผู้ชนะ:

- id: hard_code
  when: task_class == "code" && difficulty > 0.6
  use:
    parallel:
      - { model: "anthropic/claude-opus-4.8", thinking_budget_tokens: 16000 }
      - { model: "openai/gpt-5.5", reasoning_effort: high }
      - { model: "google/gemini-3.1-pro-preview" }
    arbiter: { strategy: tests_pass }

tests_pass เป็นสิ่งที่อิงตามการดำเนินการ — มันให้บริการแก่ผู้สมัครที่ผ่านการทดสอบของคุณ โดยไม่จำเป็นต้องมีผู้ตัดสิน LLM

2 — หยุดจ่ายเกินสำหรับ prompt ง่ายๆ → ประตูความยาก (รูปแบบ Fusion, โมเดลของคุณ):

- id: easy
  when: difficulty < 0.3
  use: { delegate: cheapest }
- id: hard
  when: difficulty >= 0.3
  use:
    parallel:
      - { model: "anthropic/claude-opus-4.8" }
      - { model: "openai/gpt-5.5" }
    arbiter: { strategy: best_of_n, model: "anthropic/claude-opus-4.8", template: best_answer_v1 }

3 — รักษาการทำงานของเอเจนต์ที่ยาวนานให้อยู่ในราง → ยกระดับเฉพาะเมื่อมันเริ่มสั่นคลอน:

- id: agent
  when: task_class == "agent" && agent_state.consecutive_errors == 0
  use: { model: "anthropic/claude-sonnet-4.6", affinity_ttl: "5m" }
  on_low_confidence:
    signals: [next_turn_test_failed, self_doubt]
    use: { model: "anthropic/claude-opus-4.8", thinking_budget_tokens: 24000 }

4 — ทำให้ผลลัพธ์ที่ไม่เสถียรมีความแน่นอน → โหวต, เลื่อนระดับเมื่อมีการแตกแยก:

- id: extract
  when: task_class == "rag"
  use:
    parallel:
      - { model: "anthropic/claude-opus-4.8" }
      - { model: "openai/gpt-5.5" }
      - { model: "google/gemini-3.1-pro-preview" }
    arbiter: { strategy: majority }
    on_disagreement: { model: "anthropic/claude-opus-4.8", thinking_budget_tokens: 32000 }

5 — เอาชนะ tail latency และปัญหาขัดข้องของผู้ให้บริการ → แข่งขัน, ให้บริการผู้ตอบกลับรายแรก:

- id: race
  when: request.stream == true && difficulty < 0.5
  use:
    parallel:
      - { model: "google/gemini-3.5-flash" }
      - { model: "minimax/minimax-m2.7" }
      - { model: "z-ai/glm-5.1" }
    arbiter: { strategy: first }

6 — ปรับใช้โดยไม่เดิมพันกับ SLA → shadow (ประเมินควบคู่ไปกับทราฟฟิกจริง, บันทึกสิ่งที่มัน จะ เลือก + ส่วนต่างต้นทุน, ให้บริการการเลือกจริง) → canary % (dsl_canary_pct 5 → 25 → 100, crypto-random ต่อคำขอ). ย้ายตามความคลาดเคลื่อนที่วัดได้, ย้อนกลับทันที.


เอกสารสรุป: ผู้ชี้ขาดห้าคน

เศรษฐศาสตร์และความซื่อสัตย์

การกระจายตามระดับความยากทำให้ค่าใช้จ่ายคงที่ (เพื่อเป็นตัวอย่าง; ต้นทุน = คณิตศาสตร์ราคาโทเค็นจริง) — ต้นทุนผสม = easy_share × cheap + hard_share × panel:

ภาระงานที่ง่าย 70% ทำงานแผงเต็มในราคาหนึ่งในสามของค่าใช้จ่ายแผงทั้งหมด.