使用指南

让 AI 解读命盘

排盘交给库、解读交给模型:怎么把 x-iztro 接进 AI 应用,以及几条踩过的坑。

适合:开发者 · 产品与决策者

别让模型自己排盘

这是最重要的一条。大模型算不准干支与安星 —— 它会给出看起来合理但错误的结果, 而且错得毫无规律,你没法从输出上看出来。

排盘是确定性计算,交给库;模型只负责解读。 这条分工是把斗数接进 AI 应用的整个前提。

最小接法

把盘转成文本,前面加上你的分析要求,一起发给模型:

from x_iztro import Astro

astro = Astro()
chart = astro.by_solar("2000-8-16", 2, "female")

system = "你是紫微斗数分析师。基于给定命盘作答,不要编造盘上没有的信息。"
user = f"""{astro.astrolabe_to_prompt(chart)}

{astro.horoscope_to_prompt(chart, "2025-1-1", 0)}

请分析这个人 2025 年的事业运势。"""

生成的文本长什么样、格式怎么读,见 AI Prompt 生成

做成工具调用

让模型自己决定什么时候排盘,比在应用里写死流程更灵活: 模型负责理解需求与解读,x-iztro 负责算准。一个最小的工具定义:

{
    "name": "cast_chart",
    "description": "紫微斗数排盘。给定阳历生日、时辰索引与性别,返回完整命盘的结构化描述。",
    "input_schema": {
        "type": "object",
        "properties": {
            "solar_date": {"type": "string", "description": "阳历生日,格式 YYYY-M-D"},
            "time_index": {"type": "integer", "minimum": 0, "maximum": 12,
                           "description": "时辰索引,0=早子时(00-01),12=晚子时(23-24)"},
            "gender": {"type": "string", "enum": ["male", "female"]},
        },
        "required": ["solar_date", "time_index", "gender"],
    },
}

实现里调 astrolabe_to_prompt 返回文本即可。 运限单独做一个工具(多收一个目标日期),让模型按需要取。

时辰索引要在工具描述里说清楚

用户说的「晚上 11 点」对应索引 12 而不是 0,模型不会自己知道。 把 0–12 的含义写进参数描述,或者干脆让工具收「出生时间 HH:MM」再由你换算。

用中文盘喂模型

排盘结果本身与盘面语言无关,但生成的 prompt 会跟着变。默认的中文盘就是最好的选择:

主流模型的中文命理术语能力都不差;而英文盘的星名走 iztro 的意译词表 (紫微 emperor、七杀 marshal),亮度退化成 [+3] 这类记号,四化写成 A/B/C/D, 这套写法与英文命理界的通行译法不同,模型未必认得。

确实需要英文输出时,做法是用中文盘喂模型、让模型用英文作答, 而不是换成英文盘。

判断逻辑用标识

如果你的应用要基于盘的内容做分支(例如「命宫有化忌时走另一套话术」), 用语言无关标识判断,不要匹配文本 —— 否则换一种盘面语言,所有分支都会静默失效。

soul = chart.palace("soulPalace")
if soul.has_mutagen("sihuaJi"):
    prompt_style = "谨慎"

别把模型的解读当计算结果

模型可能在解读里顺手「补」一些盘上没有的信息 —— 多出一颗星、把大限区间说错、把宫名记混。

如果解读要落进产品(写库、发推送、做决策), 凡是可以从盘上直接取的事实,都从盘上取,不要从模型的自然语言里回抽。 模型输出只当文字用。

让 AI 读这份文档

本站另有专供模型抓取的纯文本端点(llms.txt、单页 Markdown), 见给 AI 读的文档端点

本页目录