i-ching / dev-doc /INTERFACE.md
wanggang
feat: 周易算卦系统 — 铜钱法占卜 + AI 流式解读
7782617

I-Ching — 接口契约

技术栈

  • Backend: Python FastAPI
  • Frontend: HTML + CSS + Vanilla JS (单页应用)
  • Test: pytest

API 接口

POST /api/divine

发起一次算卦

Request Body:

{
  "question": "string (可选,用户的问题)"
}

Response:

{
  "hexagram": {
    "number": 1,
    "name": "乾",
    "symbol": "☰☰",
    "lines": [9, 9, 9, 9, 9, 9],
    "upper_trigram": "乾",
    "lower_trigram": "乾"
  },
  "judgment": "元亨利贞。",
  "interpretation": "乾卦象征天...",
  "changing_lines": [1, 3],
  "changed_hexagram": {
    "number": 44,
    "name": "姤",
    "symbol": "☰☴"
  },
  "lines_text": ["初九:潜龙勿用。", ...],
  "question": "string"
}

GET /api/hexagrams

获取64卦列表

Response:

[
  {"number": 1, "name": "乾", "symbol": "䷀", "judgment": "元亨利贞。"},
  ...
]

GET /api/hexagrams/{number}

获取单个卦的详细信息

数据模型

@dataclass
class Trigram:
    name: str       # 乾/坤/震/巽/坎/离/艮/兑
    symbol: str     # ☰☷☳☴☵☲☶☱
    nature: str     # 天/地/雷/风/水/火/山/泽

@dataclass
class Hexagram:
    number: int          # 1-64
    name: str            # 卦名
    symbol: str          # Unicode 卦符
    upper_trigram: str   # 上卦
    lower_trigram: str   # 下卦
    judgment: str        # 卦辞
    image: str           # 象辞
    lines: list[str]     # 六爻爻辞

@dataclass
class DivinationResult:
    hexagram: Hexagram
    lines: list[int]           # 每爻的值 6/7/8/9
    changing_lines: list[int]  # 动爻位置
    changed_hexagram: Hexagram | None  # 变卦
    question: str

铜钱摇卦算法

  • 模拟投掷三枚铜钱,6次
  • 正面(字)=3,反面(花)=2
  • 三枚之和: 6=老阴(变), 7=少阳, 8=少阴, 9=老阳(变)
  • 从初爻(底)到上爻(顶)依次排列
  • 老阴(6)和老阳(9)为动爻,会产生变卦