Thêm APIsRouter làm endpoint tùy chỉnh của LibreChat.

Updated 2026-07-29

LibreChat coi endpoint tương thích OpenAI tùy chỉnh là tính năng hạng nhất: một khối endpoints.custom trong librechat.yaml với một baseURL, một apiKey, và models.fetch đặt là true, và toàn bộ catalog xuất hiện trong bộ chọn model dưới một key.

Câu trả lời nhanh: một khối trong librechat.yaml.

Endpoint tùy chỉnh của LibreChat được cấu hình trong librechat.yaml dưới endpoints.custom, một mảng mà mỗi entry là một provider. Ba field quan trọng là name (nhãn trong bộ chọn endpoint), apiKey (nội suy biến môi trường dạng ${VARIABLE}, nên key nằm trong .env chứ không bao giờ trong YAML), và baseURL. Với APIsRouter, baseURL là https://api.apisrouter.com/v1, kèm /v1, vì LibreChat tự thêm các route path như /chat/completions vào bất kỳ base nào bạn cung cấp. Khối models quyết định những gì xuất hiện trong dropdown model. Đặt models.fetch là true và LibreChat truy vấn danh sách /v1/models của endpoint lúc khởi động, nên mọi id trong catalog chọn được mà không cần duy trì một danh sách viết tay. models.default vẫn bắt buộc phải là một mảng và đóng vai trò dự phòng hiển thị trước hoặc thay cho fetch. Đây là cấu hình upstream có tài liệu, không phải một bản vá: cấu trúc object endpoint tùy chỉnh trong tài liệu LibreChat định nghĩa mọi key dùng ở đây.

version: 1.2.1
endpoints:
  custom:
    - name: "APIsRouter"
      apiKey: "${APISROUTER_API_KEY}"
      baseURL: "https://api.apisrouter.com/v1"
      models:
        default: ["claude-sonnet-4-6"]
        fetch: true

Cách LibreChat định tuyến endpoint tùy chỉnh.

LibreChat (danny-avila trên GitHub, khoảng 41K sao) là giao diện tự host kiểu ChatGPT được triển khai rộng rãi nhất: đa người dùng, đa model, kèm tìm kiếm hội thoại, agent, xử lý file, và key theo từng người dùng. Khác với các client khóa cứng danh sách provider, mảng endpoints.custom của nó chấp nhận bất kỳ dịch vụ tương thích OpenAI nào, và một số provider nổi tiếng trong tài liệu được cấu hình chính xác qua cơ chế này. Khi một người dùng chọn một model từ endpoint tùy chỉnh, LibreChat gửi một request /v1/chat/completions chuẩn tới baseURL của endpoint đó với field model là một chuỗi thuần. Không có gì trong client quan tâm vendor nào huấn luyện model; chuỗi đó được chuyển tiếp nguyên trạng. Khi endpoint phía sau baseURL phục vụ nhiều vendor, một entry librechat.yaml đưa id Claude, GPT, Gemini, DeepSeek, và GLM vào cùng một dropdown, và một người dùng chuyển vendor giữa cuộc hội thoại theo cùng cách họ chuyển giữa hai biến thể GPT. Điều đó thu gọn cấu hình LibreChat đa provider thông thường. Thay vì một entry tùy chỉnh cho mỗi vendor, mỗi cái có key riêng trong .env và bề mặt thanh toán riêng, một entry với một key bao phủ cả catalog, và admin thấy usage theo từng model ở một chỗ thay vì đối soát nhiều dashboard.

Cài đặt đầy đủ: YAML, .env, và mount Docker.

Tạo librechat.yaml ở gốc project và đặt key trong .env. Tham chiếu ${APISROUTER_API_KEY} trong YAML được phân giải từ môi trường lúc khởi động, nên file config vẫn có thể commit được. Bước mà hầu hết lần cài đặt đầu tiên bỏ sót là điều đặc thù của Docker: container không thấy librechat.yaml của bạn cho tới khi bạn mount nó. Tài liệu yêu cầu bạn tạo docker-compose.override.yml với một bind mount từ ./librechat.yaml vào /app/librechat.yaml, sau đó tạo lại container. Chỉnh sửa YAML sau đó cũng cần restart, vì file được đọc lúc khởi động, không được theo dõi liên tục. Vài field không bắt buộc đáng đặt trên một entry gateway. titleConvo bật tiêu đề hội thoại tự động, và titleModel chọn model viết tiêu đề đó; mặc định có tài liệu của LibreChat cho titleModel là gpt-3.5-turbo, một id mà một endpoint không phải OpenAI có thể không phục vụ, nên hãy đặt tường minh thành một id nhanh trong catalog hoặc giá trị đặc biệt current_model. modelDisplayLabel điều khiển tên hiển thị trên tin nhắn của assistant. Và apiKey chấp nhận giá trị đặc biệt user_provided nếu bạn muốn mỗi người dùng tự dán key của họ thay vì dùng chung key server.

version: 1.2.1
endpoints:
  custom:
    - name: "APIsRouter"
      apiKey: "${APISROUTER_API_KEY}"
      baseURL: "https://api.apisrouter.com/v1"
      models:
        default: ["claude-sonnet-4-6", "gpt-5.5", "deepseek-v4-pro"]
        fetch: true
      titleConvo: true
      titleModel: "claude-haiku-4-5-20251001"
      modelDisplayLabel: "APIsRouter"

Chọn model cho một workspace chat dùng chung.

Vì mọi model đều thanh toán qua cùng một key, vòng lặp thực tế cho một admin là theo dõi một tuần usage trong console, xem người dùng thực sự chọn model nào, và cắt gọn models.default cho khớp, giữ fetch bật để người dùng nâng cao vẫn với tới được toàn bộ danh sách.

  • Chat dùng hàng ngày cần một model tổng quát mạnh. claude-sonnet-4-6 và gpt-5.5 gánh vác các hội thoại dài, thảo luận file, và các lượt chạy agent mà không lo lắng model theo từng tin nhắn.
  • Câu hỏi ngắn tần suất cao là việc khối lượng lớn. claude-haiku-4-5-20251001 và gemini-3.5-flash trả lời nhanh và giữ một triển khai nhiều người dùng không dồn chi tiêu vào các lượt bỏ đi.
  • Sinh tiêu đề chạy trên mọi hội thoại. Trỏ titleModel vào một id nhanh; trả giá frontier để viết tiêu đề sáu từ là kiểu lãng phí âm thầm phổ biến nhất trong một triển khai LibreChat.
  • Đội nhóm đa ngôn ngữ nên thử deepseek-v4-pro và glm-5.2 trên hỗn hợp ngôn ngữ thực của họ; một dropdown đa vendor biến điều đó thành so sánh trong app thay vì phải cấu hình lại.
  • models.fetch nghĩa là các model mới trong catalog xuất hiện mà không cần đụng vào YAML, nên một model được thêm ở thượng nguồn có thể chọn được ngay lần danh sách làm mới tiếp theo.

Trả theo mức sử dụng · thấp hơn giá chính thức

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

Mô hìnhGiá chính thứcGiá của chúng tôi
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
Claude Haiku 4.5 20251001$1.00 / $5.00 per M$0.80 / $4.00 per M
GPT-5.5$5.00 / $30.00 per M$4.00 / $24.00 per M
Gemini 3.5 Flash$1.50 / $9.00 per M$1.20 / $7.20 per M
DeepSeek V4 Pro$0.43 / $0.87 per M$0.40 / $0.90 per M

Các lỗi thường gặp riêng của LibreChat.

Config âm thầm không tải là lỗi kinh điển, và gần như luôn do mount Docker. Không có bind mount docker-compose.override.yml, container chạy hoàn toàn không có librechat.yaml, endpoint tùy chỉnh không bao giờ xuất hiện trong bộ chọn, và không có gì báo lỗi. Xác nhận file tồn tại bên trong container trước khi debug bất cứ điều gì khác. Một apiKey đến nguyên văn dưới dạng ${APISROUTER_API_KEY} nghĩa là biến đó không có trong môi trường lúc server khởi động; việc nội suy xảy ra lúc khởi động từ .env, nên một key thêm vào sau đó cần restart container. Triệu chứng là một lỗi 401 với bearer token vô nghĩa. Một baseURL thiếu /v1 tạo ra lỗi 404 trên mọi request, vì LibreChat tự thêm /chat/completions vào base như đã cho. Lỗi ngược lại, dán một URL completions đầy đủ làm baseURL, thuộc về tùy chọn directEndpoint riêng biệt và không nên kết hợp với một entry thông thường. Một dropdown model trống với fetch tắt nghĩa là models.default bị thiếu hoặc rỗng; đây là một mảng bắt buộc. Với fetch bật, một dropdown trống thường nghĩa là chính lần fetch đã thất bại, quay lại vấn đề key hoặc baseURL. Và tiêu đề hội thoại lỗi trên một endpoint vốn đang hoạt động là do mặc định của titleModel trỏ vào một id gateway không phục vụ; hãy đặt nó tường minh.

Ai định tuyến LibreChat qua một gateway.

  • Đội nhóm tự host một workspace chat dùng chung, muốn Claude, GPT, Gemini, và DeepSeek trong một dropdown mà không cần duy trì một entry endpoints.custom và một tài khoản vendor cho mỗi cái.
  • Admin vận hành triển khai đa người dùng cần một bề mặt usage duy nhất. Nhật ký theo từng key cho thấy đội nhóm thực sự dùng model nào, đã tính giá, không cần gộp nhiều dashboard vendor.
  • Người vận hành cấp key riêng cho từng phòng ban: cùng YAML, một key mỗi nhóm, và nhật ký usage trở thành báo cáo chi phí theo từng đội.
  • Hộ gia đình và nhóm nhỏ thay thế nhiều gói đăng ký chat bằng một endpoint đo lường theo lượng dùng, trả tiền theo token thay vì theo ghế ngồi.
  • Lập trình viên không có quyền truy cập thanh toán của một vendor nào đó. Truy cập dựa trên nạp tiền không yêu cầu thẻ loại bỏ sự phụ thuộc đăng ký theo từng provider.

Xác minh endpoint và debug tin nhắn đầu tiên.

Chứng minh phía gateway trước khi đụng vào LibreChat: liệt kê model với key của bạn, và xác nhận các id bạn đặt trong models.default xuất hiện. Nếu điều đó hoạt động, mọi triệu chứng còn lại nằm ở phía LibreChat. Sau đó khởi động stack và mở bộ chọn endpoint. Entry APIsRouter xuất hiện chứng minh YAML đã tải; danh sách model được điền chứng minh fetch và key; phản hồi đầu tiên chứng minh đường dẫn chat. Làm lần lượt ba việc đó theo thứ tự thay vì cùng lúc, vì mỗi việc có tập lỗi riêng biệt, lần lượt là mount, biến môi trường, và baseURL. Khi tin nhắn đã chạy, console APIsRouter hiển thị model theo từng request, số token, và chi phí. Một instance LibreChat dùng chung chính xác là kiểu triển khai nơi usage âm thầm dồn vào hai hoặc ba model, và nhật ký usage là cách bạn tìm ra đó là những model nào trước khi hóa đơn nói cho bạn biết.

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

Câu hỏi thường gặp

Tôi cấu hình endpoint tương thích OpenAI tùy chỉnh ở đâu trong LibreChat?

Trong librechat.yaml dưới endpoints.custom, một mảng entry provider với name, apiKey, baseURL, và một khối models. Trên bản cài Docker, file phải được bind-mount vào container qua docker-compose.override.yml, nếu không nó bị bỏ qua một cách âm thầm.

baseURL có nên bao gồm /v1 không?

Có, với APIsRouter: https://api.apisrouter.com/v1. LibreChat tự thêm các route path như /chat/completions vào base như đã cho, nên thiếu /v1 sẽ gây lỗi 404 trên mọi request.

Một endpoint LibreChat có thể phục vụ model Claude, GPT, và DeepSeek cùng lúc không?

Có. LibreChat chuyển tiếp id model đã chọn như một chuỗi thuần tới baseURL của endpoint. Khi endpoint phục vụ nhiều vendor, một entry endpoints.custom đưa toàn bộ id của chúng vào cùng một dropdown, và models.fetch giữ danh sách đó luôn cập nhật tự động.

Vì sao endpoint tùy chỉnh của tôi bị thiếu trong bộ chọn?

YAML chưa tải. Trên Docker, nguyên nhân thường gặp là thiếu bind mount cho librechat.yaml; container chạy không có file và không báo lỗi gì. Xác nhận file tồn tại bên trong container, sau đó restart, vì config được đọc lúc khởi động.

Vì sao tiêu đề hội thoại lỗi trong khi chat vẫn hoạt động?

titleConvo dùng titleModel, mặc định có tài liệu là gpt-3.5-turbo, một id endpoint của bạn có thể không phục vụ. Đặt titleModel tường minh thành một id nhanh trong catalog như claude-haiku-4-5-20251001, hoặc thành giá trị đặc biệt current_model.

Mỗi người dùng có thể tự dùng key riêng thay vì dùng chung key server không?

Có. Đặt apiKey thành giá trị đặc biệt user_provided và LibreChat sẽ hỏi mỗi người dùng một key, lưu theo từng người. Điều đó hợp với key gateway, vì một key mỗi người dùng biến nhật ký usage thành view chi phí theo từng cá nhân.