AstroWay/api v2.217.2 · vi
tất cả hệ thống hoạt động bình thường

Cách chúng tôi kiểm soát độ chính xác: CI đối chiếu với swetest và NASA

Độ chính xác của một astro API rất dễ xuống cấp chỉ sau một lần refactor ephemeris. Chúng tôi phân tích cơ chế bảo vệ: một lõi Swiss Ephemeris chung cho ứng dụng và API, hàng trăm snapshot đóng băng trên các bản đồ sao chuẩn, và đối chiếu ba chiều mỗi PR với swetest CGI, Kerykeion, Prokerala và danh mục nhật nguyệt thực của NASA.

Độ chính xác là thứ mà người dùng lặng lẽ kiểm tra bạn trên Astrodienst. Nếu bản đồ sao cá nhân lệch một phút cung, lời phàn nàn sẽ đến rất nhanh. Và điều tệ nhất là độ chính xác rất dễ bị phá vỡ mà không ai nhận ra: chỉ một lần refactor trong code ephemeris là một nửa số endpoint âm thầm lệch đi vài giây cung.

Đây là cách chúng tôi ngăn điều đó xảy ra.

Vị trí các hành tinh được tính bằng Swiss Ephemeris. Điểm then chốt: ứng dụng của chúng tôi và API dùng chung một lõi tính toán, một codebase. Không có hai bản triển khai có thể lệch nhau, nên chẳng có gì để lệch.

Với các ngày nằm ngoài phạm vi chính của ephemeris, có một fallback giải tích (Moshier), kém chính xác hơn một chút nhưng không bị đứt gãy ở ranh giới. Một sự trung thực có chủ ý: chúng tôi không công bố phiên bản cụ thể của engine, vì phiên bản lõi thực tế thấp hơn bản upstream mới nhất, và ghi một con số ấn tượng sẽ là nói dối.

Mỗi endpoint tính toán có một bộ snapshot đóng băng: 873 fixture JSON tại thời điểm build này. Runner chạy endpoint trên các bản đồ sao chuẩn và so sánh từng byte (trong phạm vi dung sai) với fixture. Bất kỳ sai lệch nào về kinh độ hành tinh lớn hơn 5e-5° (0.18″) đều làm test thất bại.

Các bản đồ chuẩn được chọn để đánh vào các trường hợp biên, chứ không chỉ vào vùng trung tâm “dễ chịu”:

  • Monroe, Diana, Einstein, Bowie: bản đồ sao của các nhân vật lịch sử với dữ liệu sinh đã biết
  • vĩ độ vùng cực: nơi các hệ thống nhà bị suy biến
  • vùng xích đạo: nơi chúng hoạt động theo cách khác
  • Nam bán cầu: kiểm tra tính đối xứng gương

Chính các trường hợp biên mới bắt được những regression không thể thấy trên bản đồ sao của một người bình thường ở Kyiv.

Đối chiếu ba chiều với nguồn bên ngoài

Phần tiêu đề “Đối chiếu ba chiều với nguồn bên ngoài”

Snapshot chỉ bắt được regression so với chính nó. Để kiểm tra sự thật tuyệt đối, mỗi bản phát hành được đối chiếu với các nguồn độc lập:

Đối chiếu vớiKiểm tra gìSai lệch
swetest CGI (Astrodienst)kinh độ hành tinh, đỉnh nhà0.000″
Kerykeion (Python, pyswisseph)một bản triển khai SwEph độc lập< 0.2″
Prokerala (sidereal Lahiri)vị trí sidereal8-17″, khác biệt hệ thống ở công thức ayanamsa, không phải ở engine
NASA 5-Millennium Eclipse Catalogthời điểm và loại nhật nguyệt thực< 1 phút

Sai lệch với Prokerala không phải lỗi: đó là hai cách triển khai khác nhau của công thức Lahiri, và chúng tôi ghi rõ điều này thay vì che giấu. Với swetest, chuẩn mực của ngành, độ trôi bằng không.

Các đường astrocartography được kiểm tra hình học riêng: độ chính xác ở xích đạo tốt hơn 1.5 km.

Độ chính xác là một CI gate, không phải một lần kiểm tra đơn lẻ:

  • api-accuracy.yml: với mỗi PR vào code backend, chạy toàn bộ bộ snapshot cùng phép đối chiếu ba chiều. Test đỏ sẽ chặn merge.
  • check-eclipse-accuracy.yml: mỗi năm một lần đối chiếu nhật nguyệt thực với danh mục của NASA; sai lệch vượt ngưỡng sẽ tự động tạo issue.
  • check-sweph-updates.yml: hằng tuần theo dõi upstream Swiss Ephemeris; phiên bản mới sẽ tạo issue để review, không tự động merge (cập nhật engine ephemeris là việc quá nhạy cảm để tự động hóa).

Điều này mang lại gì cho người tích hợp

Phần tiêu đề “Điều này mang lại gì cho người tích hợp”

Cam kết rất đơn giản: vị trí hành tinh nằm trong phạm vi < 0.1 giây cung so với Swiss Ephemeris chuẩn, và giới hạn này được bảo vệ bằng tự động hóa, chứ không phải bằng một lời hứa trong README. Nếu một ngày có regression, nó sẽ làm hỏng CI của chúng tôi, chứ không xuất hiện trong lời phàn nàn của người dùng của bạn.

Phiên bản công khai của các con số này, cùng bảng sai lệch trên từng bản đồ sao cụ thể, có tại trang Độ chính xác.

MakSeong · AstroWay

Tôi làm AstroWay API: gói Swiss Ephemeris vào REST thuần và viết về những chi tiết nhàm chán nhưng thực sự quan trọng.

// xây dựng trên nền tảng này

Chính Swiss Ephemeris giống như trong Solar Fire - chỉ trong 4 dòng code.

Khóa API miễn phí không cần thẻ. 5.000 lượt gọi/tháng trước lần thanh toán đầu tiên.

Thêm từ blog tất cả bài viết →

Engineering 2026-07-15

Ba SDK chính thức: TypeScript, Python, PHP thay vì curl thô

HTTP thô hoạt động, nhưng client có kiểu dữ liệu tiết kiệm giờ: tự động hoàn thiện đường dẫn, kiểu yêu cầu và phản hồi, retry tích hợp cho 408/409/429/5xx và Stainless-style hệ thống lỗi. Xem xét ba SDK chính thức - @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist) - và cách chúng được tạo từ một OpenAPI contract.

Industry 2026-06-05

Free Astrology API: Which One Has the Best Free Tier in 2026?

A side-by-side of free tiers across the major astrology APIs - credits, request caps, card requirements - and how much you can actually build for free.

Engineering 2026-06-05

Horoscope API Tutorial: Build a Daily Horoscope Feature

Add daily, weekly and monthly horoscopes to your app via API - sign-based text vs transit-based personalization - with TypeScript and Python code.