# 语义化文本（to_text） (/zh/docs/guide/guides/to-text)

把一张盘、一段运限或一个宫位投影成自然语言文本，喂大模型或直接给人读。



*适合：所有人。这是这个库最直接的用法*

一张盘在 x-iztro 里有三种投影：`to_json` / DTO 是给机器的结构化形态，
译文字段是给界面的展示形态，**to\_text 是给语言和人的自然语言形态** ——
盘面事实的完整文字描述，喂给大模型是它最常见的用途之一，但它本身不是提示词，
不含任何指令。手工拼接这段描述既繁琐又容易漏字段，所以每个可解读的对象都自带 to\_text。

| 入口                 | 内容                                          |
| ------------------ | ------------------------------------------- |
| 星盘 `to_text`       | 本命盘：基本信息 + 十二宫的干支、大限、小限虚岁、四组十二神、三组星耀 + 格局命中 |
| 运限 `to_text`       | 运限：大限、小限、流年、流月、流日、流时，各层四化、流耀与格局             |
| 宫位 `to_text`       | 单个宫位，与本命盘文本中该宫的段落一致                         |
| 三方四正 `to_text`     | 本宫、对宫、财帛位、官禄位四宫合看                           |
| `patterns_to_text` | 格局命中列表单独成文，本命与运限视角皆可                        |

全部按**盘面语言**生成：中文盘出中文，英文盘出英文。

## 用法 [#用法]

```python
chart = astro.by_solar("2000-8-16", 2, "female")
h = chart.horoscope("2025-1-1", 0)

text = f"{chart.to_text()}\n{h.to_text()}"   # str(chart) / str(h) 等价
```

```rust
let chart = by_solar("2000-8-16", 2, Gender::Female, true, Language::ZhCN, Config::default())?;
let h = chart.horoscope("2025-1-1", 0)?;

let text = format!("{}\n{}", chart.to_text(), h.to_text());
```

```go
chart, _ := iztro.BySolar("2000-8-16", 2, iztro.GenderFemale, true, iztro.LanguageZhCN, nil)
h, _ := chart.Horoscope("2025-1-1", 0)

natal, _ := chart.ToText()
fortune, _ := h.ToText()
```

更细粒度的入口：

```python
chart.palace("命宫").to_text()                 # 单宫
chart.surrounded_palaces("命宫").to_text()      # 三方四正
chart.patterns_to_text()                        # 本命格局
h.patterns_to_text("yearly")                    # 流年视角格局
```

```go
chart.PalaceToText(iztro.PalaceTarget{Key: iztro.PalaceSoul})
chart.SurroundedPalacesToText(iztro.PalaceTarget{Key: iztro.PalaceSoul})
chart.PatternsToText(nil)
h.PatternsToText(iztro.ScopeYearly, nil)
```

Rust 侧对应 `PalaceRef::to_text()`、`SurroundedPalaces::to_text(lang)` 与
`text` 模块的自由函数（`astrolabe_to_text` / `horoscope_to_text` /
`palace_to_text` / `surrounded_palaces_to_text` / `patterns_to_text`），
便捷方法按排盘语言输出，自由函数可指定语言。三语言输出逐字一致。

## 本命盘文本长什么样 [#本命盘文本长什么样]

下面是 2000-8-16 寅时 女这张盘的完整开头、前三宫与结尾的格局节：

```text
=== 基本信息 ===
性别: 女
阳历: 2000-8-16
农历: 二〇〇〇年七月十七
干支: 庚辰 甲申 丙午 庚寅
时辰: 寅时 (03:00~05:00)
星座: 狮子座
生肖: 龙
命宫地支: 午
身宫地支: 戌
命主: 破军
身主: 文昌
五行局: 木三局
生年四化: 太阳禄, 武曲权, 太阴科, 天同忌

=== 十二宫 ===

--- 财帛 ---
天干地支: 戊寅
大限: 43-52
小限虚岁: 9, 21, 33, 45, 57, 69, 81, 93, 105, 117
十二神: 绝, 飞廉, 吊客, 岁驿
主星: 武曲(得)[权], 天相(庙)
辅星: 天马
杂耀: 解神, 三台, 天寿, 天巫, 天厨, 阴煞, 天哭

--- 夫妻 [来因] ---
天干地支: 庚辰
大限: 23-32
小限虚岁: 7, 19, 31, 43, 55, 67, 79, 91, 103, 115
十二神: 死, 将军, 岁建, 华盖
主星: 七杀(庙)
辅星: 右弼, 火星(陷)
杂耀: 封诰, 华盖

--- 官禄 [身宫] ---
天干地支: 丙戌
大限: 83-92
小限虚岁: 1, 13, 25, 37, 49, 61, 73, 85, 97, 109
十二神: 沐浴, 伏兵, 大耗, 月煞
主星: 廉贞(利), 天府(庙)
辅星: 左辅
杂耀: 天才, 天虚

（中间八宫从略）

=== 格局 ===
- 府相朝垣(命宫): 天府(庙), 天相(庙)
```

十二宫按盘上位置顺序输出，不是按宫名顺序。末尾的「格局」节列出
[格局引擎](/zh/docs/guide/concepts/patterns)在本命盘上的全部命中，
每条一行：格局名、命中宫、构成星耀。

## 运限文本长什么样 [#运限文本长什么样]

目标日期 2025-1-1 早子时：

```text
=== 运限 ===
目标日期: 2025-1-1 / 二〇二四年腊月初二

--- 大限 ---
大限命宫: 本命夫妻 (庚辰)
  大限四化: 太阳禄, 武曲权, 太阴科, 天同忌
  大限格局: 杀破狼(命宫), 风云际会(命宫)
  夫妻 (财帛):
    主星: 武曲(得)[权], 天相(庙)
    辅星: 天马
    流耀: 运马
  兄弟 (子女):
    主星: 太阳(庙)[禄], 天梁(庙)
    流耀: 运曲
  ...

小限命宫: 本命官禄 (虚岁 25)
  小限宫名: 官禄, 仆役, 迁移, 疾厄, 财帛, 子女, 夫妻, 兄弟, 命宫, 父母, 福德, 田宅
  小限四化: 天同禄, 天机权, 文昌科, 廉贞忌
  主星: 廉贞(利), 天府(庙)
  辅星: 左辅
  杂耀: 天才, 天虚

--- 流年 ---
流年命宫: 本命夫妻 (甲辰)
  流年四化: 廉贞禄, 破军权, 武曲科, 太阳忌
  流年格局: 杀破狼(命宫), 禄马交驰(夫妻), 禄马佩印(夫妻), 昌曲夹命(命宫) [破格], 文星暗拱(命宫)
  夫妻 (财帛):
    主星: 武曲(得)[权], 天相(庙)
    辅星: 天马
    流耀: 流禄, 流马
    十二神: 吊客, 岁驿
  ...

流月命宫: 本命仆役 (丁丑)
  流月宫名: 田宅, 官禄, 仆役, 迁移, 疾厄, 财帛, 子女, 夫妻, 兄弟, 命宫, 父母, 福德
  流月四化: 太阴禄, 天同权, 天机科, 巨门忌
  流月流耀: 月鸾(田宅), 月曲(迁移), 月陀(迁移), 月禄(疾厄), 月羊(财帛), 月喜(子女), 月钺(夫妻), 月昌(夫妻), 月魁(命宫), 月马(命宫)
  流月格局: 机月同梁(命宫), 日照雷门(官禄), 日月并明(命宫), ...

流日命宫: 本命迁移 (庚午)
  流日宫名: 福德, 田宅, 官禄, 仆役, 迁移, 疾厄, 财帛, 子女, 夫妻, 兄弟, 命宫, 父母
  流日四化: 太阳禄, 武曲权, 太阴科, 天同忌
  流日流耀: 日曲(田宅), 日喜(田宅), 日钺(疾厄), 日陀(疾厄), 日禄(财帛), 日马(财帛), 日羊(子女), 日鸾(子女), 日昌(兄弟), 日魁(父母)
  流日格局: 火贪(命宫), 铃贪(命宫), 杀破狼(命宫), ...

流时命宫: 本命迁移 (丙子)
  流时宫名: 福德, 田宅, 官禄, 仆役, 迁移, 疾厄, 财帛, 子女, 夫妻, 兄弟, 命宫, 父母
  流时四化: 天同禄, 天机权, 文昌科, 廉贞忌
  流时流耀: 时马(福德), 时鸾(田宅), 时陀(官禄), 时禄(仆役), 时曲(迁移), 时羊(迁移), 时昌(财帛), 时钺(子女), 时喜(子女), 时魁(兄弟)
  流时格局: 火贪(命宫), 铃贪(命宫), 杀破狼(命宫), ...
```

大限与流年及以下各层都带该层视角的格局行，宫名按该层重排后的宫名书写；
小限不设格局视角，只带重排宫名与四化。命主尚未起运时，大限段的标题与各行标签
全部写「童限」而非「大限」——童限与大限是不同的解盘语义。

## 格式约定 [#格式约定]

| 记号                         | 含义                                                       |
| -------------------------- | -------------------------------------------------------- |
| `天同(利)`                    | 括号内是[亮度](/zh/docs/guide/concepts/stars#亮度)               |
| `太阳(旺)[权]`                 | 方括号内是[四化](/zh/docs/guide/concepts/mutagen)               |
| `--- 官禄 [身宫] ---`          | 方括号标记该宫同时是身宫                                             |
| `--- 夫妻 [来因] ---`          | 方括号标记该宫是[来因宫](/zh/docs/guide/concepts/palaces#来因宫)       |
| `- 府相朝垣(命宫): 天府(庙), 天相(庙)` | 格局行：格局名、命中宫（紧跟名称）、构成星耀                                   |
| `昌曲夹命(命宫) [破格]`            | `[破格]` 标记该格局构成但被冲破                                       |
| `大限命宫: 本命夫妻 (庚辰)`          | 这一层的命宫落在本命的哪个宫，括号内是该层干支                                  |
| `小限命宫: 本命官禄 (虚岁 25)`       | 小限落宫，括号内是虚岁                                              |
| `夫妻 (财帛):`                 | 运限段中，**前面是这一层重排后的宫名，括号内是本命宫名**                           |
| `十二神: 绝, 飞廉, 吊客, 岁驿`       | 本命宫内固定为长生12、博士12、岁前12、将前12 四组各一位的顺序；流年逐宫的「十二神」行只有岁前、将前两组 |
| `小限宫名: …`、`流月宫名: …`        | 该层重排后的十二宫名，按**本命宫位索引**（寅宫起）排列                            |
| `月鸾(田宅)`                   | 流月及以下层级的流耀行，括号内是该流耀落在这一层的哪个宫                             |

<Callout type="warn" title="括号里是本命宫名，别读反">
  `夫妻 (财帛):` 说的是「这一格在本大限里叫夫妻宫，它在本命盘上是财帛宫」。
  运限解读要以前面那个名字为准，括号里的名字是为了让你能对回本命盘。
  见[运限](/zh/docs/guide/concepts/horoscope#同一个格子宫名会变)。
</Callout>

日期字段原样回显入参，不补零：传 `"2000-8-16"` 输出就是 `阳历: 2000-8-16`。

## 篇幅 [#篇幅]

中文盘的本命文本约 1,810 字符，运限段约 2,490 字符，两段合起来约 4,300 字符。
英文盘更长（星名是单词而非两字），本命约 3,570、运限约 5,990 字符。
任何主流模型的上下文窗口都装得下，通常不必裁剪。

## 接入大模型 [#接入大模型]

生成的文本是纯描述，不含指令。实际使用时在前面加上你的分析要求：

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

{chart.horoscope("2025-1-1", 0).to_text()}

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

更完整的接法（工具调用、别让模型自己排盘）见[让 AI 解读命盘](/zh/docs/guide/guides/llm)。

<Callout title="用中文盘还是英文盘">
  优先用中文盘。英文盘的星名走 iztro 的意译词表（紫微是 `emperor`、七杀是 `marshal`），
  亮度退化成 `[+3]` 这类记号，四化写成 `A`/`B`/`C`/`D` ——
  这套写法与英文命理界的通行译法不同，模型未必认得。

  主流模型的中文命理术语能力都不差，直接喂中文文本效果更好。
  确实需要英文时，建议附上一份[星名对照表](/zh/docs/guide/concepts/stars#星名对照表)。
</Callout>

## 需要更细的控制 [#需要更细的控制]

to\_text 覆盖的是通用场景。如果要自定义文本结构（比如只描述特定几个宫、
或者输出 JSON 而非文本），直接遍历星盘数据自己拼即可 ——
所有字段都是公开的，见[数据结构字典](/zh/docs/guide/data-model)。
