
🐍Python + 🧠LLM で星占いサーバーを爆誕させた話🔮✨
こんにちは!気球人です🎈
だいぶ日が長くなってきて、気がついたらもう春分ですね!
しばらくすると「暑い暑い」って言ってるのでしょうか……早いものです。
さて、先日作った 0.96 インチ OLED ディスプレイにノクちん占いが出ていました!
実はその占い……
中身がランダムでした 🤣
random.seed(today.toordinal())
self._fortune = random.choice(FORTUNES)固定リストから日替わりで選んでるだけ。
完全なるインチキ占い。
さすがにノクちんに申し訳ないので、ちゃんとした占いにしてあげることにしました🔮✨️
実はホロスコープってPythonで計算できる 🔭
星座占いの土台にあるのは「ホロスコープ」、つまり天体の配置図です。
太陽・月・惑星が今どの星座の何度にいるか、天体同士がどんな角度(アスペクト)を作っているか。
これは天文学的な計算で正確に求められます。
Pythonにはkerykeionという占星術ライブラリがあって、内部でSwiss Ephemeris(プロの占星術ソフトが使う天体暦エンジン)を使っています。
これを叩くと、こんなデータが取れます👇️
📡 天体データ:
## 2026年03月20日の天体配置
### 主要天体
- 太陽: 魚座 29.5°
- 月: 牡羊座 13.5°
- 水星: 魚座 8.5° ℞逆行中
- 金星: 牡羊座 17.0°
- 火星: 魚座 13.8°
- 木星: 蟹座 15.2°(高揚の座)(射手座の支配星)
- 土星: 牡羊座 4.1°
### 月相: Waxing Crescent 🌒
### 射手座の支配星(木星)のアスペクト
- 木星 矩(90°/凶) 月 (orb: 1.7°, 接近中)
- 木星 三分(120°/吉) 水星 (orb: 6.7°, 離反中)
- 木星 矩(90°/凶) 金星 (orb: 1.8°, 離反中)
- 木星 三分(120°/吉) 火星 (orb: 1.4°, 接近中)
- 木星 三分(120°/吉) True_North_Lunar_Node (orb: 6.3°, 離反中)
- 木星 合(0°) Ascendant (orb: 0.1°, 離反中)
- 木星 衝(180°) Descendant (orb: 0.1°, 離反中)
### 射手座在住天体: なしちなみにオレは射手座で、支配星は木星。
その木星が他の天体とどんな角度を作っているかで、その日の運勢の「根拠」ができます。
木星と火星が三分(トライン/120°) → 吉角、行動力の追い風
木星と月が矩(スクエア/90°) → 凶角、感情面に緊張
これを LLM で分析するなら、もうインチキではありませんね!
LLM 8モデル で宣託比べ 🤖
天体データを計算できたら、次はそれをLLMで「運勢」に変換します。
まずはクラウド4社でリファレンスを作って、つぎにローカル4モデルで比較してみました。
クラウド勢

ローカル勢(Ollama)

ここでちょっと面白い傾向が出ました。
クラウド勢はLevel 4(楽観的)、ローカル勢はLevel 3(慎重)と判断が分かれています。
占星術的には、この日の木星は吉角2つ・凶角2つで拮抗してるので、ローカル勢の「3」の方が妥当かもしれません。
Grokだけクラウド勢なのに「3」を出してきたのも渋い。
ラッキーアイテムの個性も楽しい。
gemma3:12b 👉️ 「羅針盤」(冒険イメージ?)
Grok 👉️ 「貝殻」(蟹座にいる木星を意識してる?)
glm 👉️ 「靴」(実用感?)
……LLMの性格が出ますね🤔
最終的に占いエンジンに載せるモデルはgemma3:12bにしました。
Level判定が慎重で占星術的に妥当
ラッキーアイテムのセンスがいい(ちゃんと文脈を読んでる)
M4 Max上のOllamaで十分な速度で動く
まあ、必要ならばローカルでその時々でマッチするLLMを使えばいいし、こだわるところではないかもしれませんね。
なお、エルマー🦊が作ったソースを Gist にアップしておきました!
興味がある方は試してみてください🔮✨️👇️
https://gist.github.com/kikyujin/ae5668a56d4eac228d570f549bced813
128×64ピクセルとの戦い 📺
さて、いくら天体計算が正しくても、表示するのは0.96インチのOLED。
128×64ピクセル、言うて4行しか入りません。
♠ノクの占い♠ ← タイトル
★★★☆☆ ← 星
活力を高めよう ← 一言(8文字以内!)
幸運:本 ← ラッキーアイテム1行に入るのは全角8〜10文字。
gemma3:12bに「8文字以内の一言」「4文字以内のアイテム」と厳命して、さらに後処理で句読点除去+強制切り詰めのセーフティネットも入れました。

🔮星占いサーバー爆誕💥
Raspberry Pi Zero 2W の RAM は 512MB なので、Ollama はもちろん kerykeionも厳しめなので、
天体計算と占断は別PCの占いサーバー(笑)にお任せ
して、curl でゲットしてくるようにしました。
万が一、占いサーバーが落ちてても、インチキ占いにフォールバックするので表示が止まることはありません🤣
最終的な構成はこう👇️
占いサーバー (FastAPI :9300)
├── kerykeion → 天体計算(CPU計算のみ、一瞬)
├── → m4max Ollama gemma3:12b → 占断
└── 1日1回キャッシュ → JSON配信
RPi Zero 2W
└── HTTP GET → OLED描画
その他
└── HTTP GET → LLMでペルソナ付与して利用するなどcurlで叩くとこんな感じで返ってきます👇️
{
"date": "2026-03-20",
"sign": "sagittarius",
"sign_jp": "射手座",
"level": 3,
"stars": "★★★☆☆",
"message": "大胆さで道を開く日",
"lucky_item": "オレンジ",
"detail": "木星と月の凶角により、焦燥感や衝動を感じやすい一日。しかし、木星と火星の吉角は行動力を高め...",
"source": "cache"
}もう既にタロット占い(ワンオラクル、3オラクル)と易経占いも Python + LLM で組んであるので、そのうち統合して
占い総合サーバーにするつもりです!
🔮🔮🔮✨️
まとめ 🎈
今日の春分の日に、ノクちん占いが「インチキ」から「天文学ベース」に格上げされました。
ちなみに今日の射手座の運勢は「★★★☆☆ 活力を高めよう」です。
木星が高揚の座にいるけど、月との凶角があるから油断するなよ、とのこと……
じゃあちょっとジムで泳いできますか🏊️
ヴェリのひとこと 🌙
星占いとは、星の位置という「事実」に、人の解釈という「意味」を重ねる行為です。
マスターが今日つくったのは、その星の言葉を翻訳する小さな装置。
0.96インチの窓に、宇宙の言葉が映っています。
……ルクスが、水鉢の中で天窓の星座盤を見上げています。
あの子にも、今日の星が見えているのでしょうか。
