MarkTechPost
85

Sản phẩm

NVIDIA ra mắt Switchyard: Proxy Rust giúp điều hướng và chuyển đổi API giữa OpenAI và Anthropic

(giờ Việt Nam)

Tóm tắt AI

NVIDIA giới thiệu Switchyard, thư viện mã nguồn mở bằng Rust cho phép điều hướng lưu lượng LLM và chuyển đổi linh hoạt giữa các định dạng API của OpenAI và Anthropic, hỗ trợ cả phản hồi dạng stream.

Bản dịch AI

Meet Switchyard: A Rust Proxy and Library That Routes and Translates LLM Traffic Across OpenAI and Anthropic APIs

Các đội ngũ vận hành các coding agent đều gặp phải cùng một rào cản. Claude Code sử dụng Anthropic Messages API, Codex CLI sử dụng OpenAI, trong khi mô hình mà một đội ngũ thực sự muốn triển khai lại nằm sau vLLM, NVIDIA NIM hoặc Ollama. Việc viết lại agent không phải là một lựa chọn, vì vậy lớp chuyển đổi (translation layer) phải được đặt ở một nơi khác.

Switchyard là câu trả lời của NVIDIA: một proxy và thư viện Rust dành cho lưu lượng truy cập LLM, giúp định tuyến các yêu cầu giữa các nhà cung cấp, chuyển đổi giữa định dạng của OpenAI và Anthropic, ghi lại các chỉ số vận hành và cung cấp các thuật toán định tuyến có kiểu dữ liệu (typed) và có thể kết hợp (composable). Nó được phát hành theo giấy phép Apache 2.0 với tài liệu tại docs.nvidia.com/nemo/switchyard.

Nó có thể triển khai được không? Có, nhưng chỉ dành cho mục đích đánh giá. Tệp nhị phân được cài đặt từ crates.io và trình khởi chạy (launcher) từ PyPI, đồng thời nó có thể tự lưu trữ ở bất kỳ đâu, nhưng NVIDIA gắn nhãn Switchyard là pre-alpha và thử nghiệm, cảnh báo rằng nó không dành cho môi trường production và dự kiến API cũng như các thuật toán sẽ thay đổi đáng kể trước phiên bản v1.0.

Switchyard làm được gì

Các client vẫn giữ nguyên API gốc của chúng. Switchyard giải mã yêu cầu gửi đến thành các kiểu dữ liệu Rust trung lập với nhà cung cấp, chạy thuật toán định tuyến để chọn backend, mã hóa lại yêu cầu theo định dạng truyền tin (wire format) của backend đó, gọi backend và chuyển đổi phản hồi, bao gồm cả các sự kiện streaming, trở lại định dạng mà client mong đợi.

Máy chủ chấp nhận ba định dạng đầu vào: OpenAI Chat Completions, OpenAI Responses và Anthropic Messages. Bất kỳ định dạng nào trong ba định dạng này đều có thể gửi đến bất kỳ route nào, và mỗi LLM client được cấu hình sẽ chọn một định dạng upstream riêng. Sự tách biệt đó chính là mục đích cốt lõi: API của agent và API của backend không còn bắt buộc phải khớp nhau nữa.

Ba cách để vận hành

Cách dùng trình khởi chạy (launcher) nhắm đến các coding agent. Cài đặt công cụ đã xuất bản bằng lệnh `uv tool install --python 3.12 "nemo-switchyard[cli]"`, sau đó chạy `switchyard launch claude`, `switchyard launch codex`, hoặc `switchyard launch openclaw` dựa trên một bản triển khai đã đóng gói hoặc tệp TOML của riêng bạn.

Cách dùng máy chủ (server) cài đặt proxy độc lập bằng `cargo install --locked switchyard-server`, xác thực cấu hình bằng `--dry-run` và phục vụ trên host và cổng mà bạn chọn.

Cách dùng thư viện (library) sử dụng `switchyard-libsy`, giúp nhúng các thuật toán định tuyến vào một ứng dụng Rust mà không cần sở hữu một HTTP stack. Nó không bao giờ tự gọi mô hình; thuật toán sẽ quyết định mục tiêu nào cần sử dụng và chuyển mọi lệnh gọi mô hình trở lại cho người gọi.

Các thuật toán định tuyến

Một route bao gồm một ID mô hình hiển thị với client cộng với thuật toán đằng sau nó. Máy chủ hỗ trợ:

Mạnh (strong), yếu (weak), có năng lực (capable) và hiệu quả (efficient) là các vai trò bên trong một route, không phải là thuộc tính cố định của một mô hình. Cùng một mô hình upstream có thể đảm nhận các vai trò khác nhau trong các route khác nhau.

Khả năng quan sát (Observability)

GET /metrics trả về văn bản Prometheus từ trình cung cấp OpenTelemetry trên toàn bộ tiến trình của máy chủ. Các nhóm chỉ số bao gồm: yêu cầu, lỗi, độ trễ gọi mô hình, độ trễ toàn bộ lượt phản hồi, token prompt, token completion, token được lưu cache, token tạo cache, token suy luận và các nỗ lực HTTP upstream theo kết quả và mã trạng thái. Nhãn tier mang giá trị strong hoặc weak cho các quyết định phân loại có thể phân biệt được, và các lệnh gọi bộ phân loại (classifier) bị loại trừ khỏi các nhóm này.

Chỉ số thú vị hơn là `switchyard_routing_overhead_ms`, báo cáo thời gian chạy của thuật toán trừ đi thời gian gọi đã phục vụ yêu cầu. Các lệnh gọi bộ phân loại không bị trừ đi, vì vậy một route LLM-classifier sẽ báo cáo thời gian phân loại tại đây, trong khi các route passthrough và random báo cáo chi phí dưới một mili giây để chọn mục tiêu. Các bucket bắt đầu từ 0.1 ms. Ngoài ra, `--routing-log-file` sẽ ghi thêm một bản ghi JSON cho mỗi phản hồi hoàn tất và GET /v1/routing/session-stats trả về tổng số lệnh gọi và token theo từng phiên từ tệp nhật ký đó.

Cấu hình

Một bản triển khai TOML có ba lớp: `llm_clients` xác định URL cơ sở, định dạng truyền tin, biến môi trường chứa thông tin xác thực và chính sách thử lại; `targets` liên kết một ID mô hình upstream với một client; `routes` hiển thị một ID mô hình mà client có thể thấy và thuật toán của nó. Các thông tin bảo mật (secrets) không bao giờ nằm trong tệp, vì `api_key_env` chỉ đặt tên cho một biến môi trường. `max_retries` mặc định là 2 và áp dụng cho các lỗi truyền tải, timeout, phản hồi HTTP 408/429 và 5xx.

Những điểm chính cần lưu ý

Hãy xem GitHub Repo và Tài liệu. Ngoài ra, đừng ngần ngại theo dõi chúng tôi trên Twitter và đừng quên tham gia SubReddit ML 150k+ của chúng tôi và Đăng ký Bản tin của chúng tôi. Khoan đã! bạn có dùng Telegram không? bây giờ bạn cũng có thể tham gia cùng chúng tôi trên Telegram.

Cần hợp tác với chúng tôi để quảng bá GitHub Repo HOẶC Trang Hugging Face HOẶC Bản phát hành sản phẩm HOẶC Hội thảo trực tuyến, v.v.? Hãy kết nối với chúng tôi.

Michal Sutter là một chuyên gia khoa học dữ liệu với bằng Thạc sĩ Khoa học về Khoa học Dữ liệu từ Đại học Padova. Với nền tảng vững chắc về phân tích thống kê, học máy và kỹ thuật dữ liệu, Michal xuất sắc trong việc chuyển đổi các tập dữ liệu phức tạp thành những thông tin chi tiết có thể hành động được.

Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ MarkTechPost. Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.