Độ 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.
Một lõi cho hai môi trường
Phần tiêu đề “Một lõi cho hai môi trường”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.
Snapshot đóng băng
Phần tiêu đề “Snapshot đóng băng”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ới | Kiể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í sidereal | 8-17″, khác biệt hệ thống ở công thức ayanamsa, không phải ở engine |
| NASA 5-Millennium Eclipse Catalog | thờ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.
Những gì chạy trên mỗi PR
Phần tiêu đề “Những gì chạy trên mỗi PR”Độ 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.
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.