4 points par ijustmaking 2026-02-24 | 3 commentaires | Partager sur WhatsApp

Steve Yegge parle, dans « Software Survival 3.0 », de la « compression d’insight » : Git ou Kubernetes condensent des décennies d’essais et d’erreurs, et les LLM ne peuvent pas les reproduire facilement. C’est en partant de l’idée que le saju-myeongri présente une situation similaire que ce projet a commencé.

Ce qui se passe quand on confie un saju à un LLM

Comme beaucoup le font aujourd’hui, si l’on injecte des données de saju dans un LLM, on obtient un résultat plausible. Le problème, c’est l’écart entre le « plausible » et le « juste ».

J’ai testé plusieurs modèles, dont GPT-5, GPT-4o, Claude et DeepSeek V3, en combinant structured output et few-shot. Des points d’erreur systématiques sont apparus. Par exemple, appliquer uniquement une logique d’équilibrage de type eokbu à un saju relevant du type jongganggyeok pour en déduire que le feu () est l’élément utile. Il était impossible d’empêcher complètement, par simple prompt, des jugements qui violent le principe classique « choknogangsin daeheung (觸怒強神 大凶) ».

Au-delà de cela, il y avait aussi une tendance à s’ancrer dans l’interprétation d’une école particulière et à déformer le texte original, ou à enjoliver excessivement une lecture défavorable, ou au contraire à amplifier l’anxiété. Confier le jugement de règles au pattern matching d’un LLM revenait à peu près au même type de problème que de demander de faire de l’arithmétique à un modèle de langage.

Le moteur Hojak : les règles en code, l’explication uniquement au LLM

J’ai donc conçu une architecture en couches.

Ho (虎) — moteur de règles. La logique de calcul du myeongri est implémentée en code. Après avoir défini, domaine par domaine, quel référentiel retenir parmi les interprétations divergentes des cinq grands textes classiques — Jeokcheonsu, Japyeongjinjeon, Gungtongbogam, Sammyeongtonghoe et Yeonhaejapyeong —, j’ai figé ces décisions dans le code.

Jak (鵲) — couche d’explication LLM. Le LLM n’est chargé que de transformer en langage naturel les données structurées calculées par le moteur.

Ce que le LLM avait du mal à reproduire, ce n’était pas le code, mais les critères de jugement affinés au fil de plusieurs millénaires.

Le moment où les limites du vibe coding sont apparues

Au départ, tout avançait bien. Le LLM a rapidement aidé pour l’analyse des textes classiques en chinois, la mise en ordre des différentes écoles et même une première ébauche du code de calcul astronomique. La limite est apparue là où les règles entraient en conflit d’une école à l’autre.

Par exemple, pour la détermination des structures de type gyeokguk, Jeokcheonsu examine d’abord la force ou la faiblesse du jour maître, tandis que Japyeongjinjeon regarde d’abord l’expression du mois. Pour un même saju, on obtenait des cas où le diagnostic s’inversait selon le texte de référence adopté, et cette hiérarchie des priorités n’était pas quelque chose que le LLM pouvait décider.

J’ai donc fini par devoir réunir et comparer directement les cinq textes de référence. Comme certaines versions étaient incomplètes ou comportaient des passages illisibles, j’ai dû croiser plusieurs éditions pour les valider. J’ai découvert au passage qu’il existait un effort important de conservation des classiques dans le cadre de projets publics, un travail qu’il aurait été difficile pour une seule personne d’assumer sans l’aide d’un LLM. J’ai pratiquement saturé la limite de Claude Max x20 pendant près de trois mois.

Un point intéressant est que, dans la plupart des cas, les erreurs de transmission du texte original venaient surtout des humains — les érudits. Selon la manière de lire « 旺者宜泄, 唯有情有力者可克 » dans Jeokcheonsu, l’embranchement algorithmique lui-même change. Sur ce point, le LLM s’est au contraire révélé utile pour croiser les traductions de plusieurs spécialistes et les annotations du texte original.

Précision temporelle : une minute peut changer le jugement

En myeongri, une différence d’une minute dans l’heure peut modifier un jugement essentiel. À la frontière entre l’heure du Rat (子時) et l’heure du Bœuf (丑時), si le pilier horaire change, la détermination de la structure elle-même peut être différente.

Le moteur Hojak combine une équation du temps en série de Fourier basée sur NASA/JPL (précision de ±13 secondes), une détection mondiale du DST fondée sur IANA tzdata et une base de données de longitude couvrant plus de 163 400 villes. Pour la Corée, il prend en compte quatre changements de longitude standard depuis 1908 ainsi que douze années d’historique d’heure d’été.

Découvrir dans les archives officielles de l’Observatoire royal de Joseon (Seoun-gwanji) la même formule de correction par longitude que celle utilisée dans le code actuel a été, personnellement, une expérience marquante.

État de la validation

Le calcul des termes solaires correspond à 100 % aux données officielles du KASI (Korea Astronomy and Space Science Institute) sur la période 2000–2050. L’équation du temps atteint une précision de ±13 secondes sur la base de NASA/JPL Horizons. Les sinsal correspondent à 100 % au calendrier de référence en se fondant sur les douze sinsal orthodoxes (d’après Sammyeongtonghoe), tandis que les gwiinsal et les sals spéciaux sont classés en trois niveaux — orthodox / disputed / reference — après validation croisée avec les textes classiques.

Stack technique

Le moteur repose sur Python FastAPI + PostgreSQL + SQLAlchemy 2.0(async), et le front sur Next.js 15 + React 19 + TypeScript + Tailwind CSS. Pour l’IA, un ensemble de modèles via OpenRouter (GPT-4o, Claude, DeepSeek V3) n’est utilisé que pour la couche d’explication. Le déploiement se fait sur Fly.io (Blue-Green) + Vercel, et les paiements via Toss Payments + PayPal.

Le système génère actuellement des rapports structurés d’une ampleur de plus de 30 000 caractères pour l’analyse du saju-palja et de plus de 20 000 caractères pour l’analyse annuelle, et les données de naissance sont stockées de manière chiffrée.

Pour conclure

Il existe des points de vue variés sur la validité prédictive du myeongri. Ce projet s’est moins concentré sur ce débat que sur une question d’ingénierie : « si l’on choisit d’utiliser ce système, calculons-le de manière cohérente et exacte, conformément à son intention ».

Le projet a commencé légèrement, dans un esprit de vibe coding, mais m’a finalement conduit à analyser les cinq ouvrages classiques de référence et jusqu’au code NASA/JPL de l’équation du temps. Pour reprendre l’expression de Yegge, la densité d’insight compressée dans ce domaine était bien plus élevée que je ne l’avais imaginé.

👉 1fate.ai/p/GEEK2026

Les questions techniques et les retours sont les bienvenus.

3 commentaires

 
khris 2026-02-26

Le grand cycle de chance n’a pas l’air très favorable, donc c’est un peu triste... En général, l’ordre du destin est heure, jour, mois, année, mais dans ce service c’est l’inverse, ce qui m’a un peu dérouté. S’il n’y a pas d’intention particulière derrière cela, que diriez-vous de passer à l’ordre habituel ?

 
ijustmaking 2026-02-27

Comme vous l’aviez signalé, j’ai immédiatement remis l’ordre en année-mois-jour-heure. J’étais occupé par d’autres tâches, donc je n’ai pu regrouper le déploiement que maintenant. Merci.

Après analyse, j’ai constaté que les personnes déjà intéressées par le saju adhéraient effectivement plus profondément au contenu et utilisaient aussi le service plus longtemps. Au départ, vouloir changer l’ordre dans l’idée de le rendre « facile d’accès même pour les personnes qui ne connaissent pas le saju » était une erreur de jugement. Grâce à vos retours, j’ai pu rectifier la direction. Merci encore.

 
ijustmaking 2026-02-26

Vous avez raison concernant l’ordre du tableau. Au départ, je l’avais disposé dans l’ordre chronologique (année-mois-jour-heure) afin que les personnes peu familières avec le saju puissent vérifier intuitivement leur date et heure de naissance, mais il semble que bien plus de personnes que prévu soient déjà habituées à l’agencement du saju, ce qui a au contraire créé de la confusion.

Même dans les textes classiques, l’ordre standard est heure-jour-mois-année, donc je vais sérieusement envisager de le modifier. C’était un retour absolument nécessaire,
merci pour votre retour !

Par ailleurs, vous disiez traverser une période de grand cycle peu facile ; en myeongri, le grand cycle correspond à la tendance de fond, et il existe en son sein des variations annuelles (歲運). Même au cours d’un grand cycle difficile, il arrive forcément un moment où l’on rencontre le yongsin ; j’espère que vous saurez bien saisir cette opportunité lorsqu’elle se présentera.