前两天聊倪海夏中医,今天看这套《天纪》紫微排盘项目
一个基于倪海夏《天纪》体系的紫微斗数开源项目,包含排盘算法、格局知识库、古籍资料、前端工作台和 51.8 万命盘样本数据。


前两天推荐过倪海夏老师相关的中医资料。今天换到《天纪》这一侧,看一个基于倪海夏体系做的紫微斗数开源项目:ziwei-doushu。
先把边界说清楚:这类工具更适合学习、研究和产品原型,不适合作为现实决策依据。紫微斗数本身有强解释性,AI 解读又会放大确定口吻,使用时最好把它当成传统知识的结构化学习入口。
这个项目的价值不只在“能排盘”。它把排盘算法、倪海夏《天纪》知识、古籍文本、格局识别和前端交互放在一个 Next.js 项目里。对想研究传统术数数字化、 AI 命理产品、知识库和前端体验的人,都有参考价值。

项目能做什么
仓库地址:https://github.com/Renhuai123/ziwei-doushu
线上体验地址:https://wdyziweidoushu666.com
开源部分主要有五块:
- 排盘算法:
lib/ziwei/algorithm.ts,基于iztro和lunar-javascript,负责从公历生日、生时、性别生成紫微命盘。 - 四化与格局:
lib/ziwei/sihua.ts、lib/ziwei/patterns.ts,包含禄权科忌和经典格局判断。 - 倪海夏体系资料:
lib/nihai/,整理了天纪、地纪、人纪相关内容和倪师资料。 - 古籍资料:
lib/classics/,包含《骨髓赋》《紫微斗数全集》《紫微斗数全书》等文本数据。 - 前端界面:
app/和components/,包括排盘页、合盘页、古籍阅读、命理百科、命盘面板等。
README 里还提到 51.8 万条命盘样本数据,放在 Releases 。数据覆盖年、月、日、时辰、性别组合,每条包含命盘 JSON 和多个主题解读文本。这个数据量对做 RAG 、微调、 A/B 测试都很有用。
本地运行教程
先克隆仓库:
git clone https://github.com/Renhuai123/ziwei-doushu.git
cd ziwei-doushu
安装依赖:
npm install
复制环境变量:
cp .env.example .env.local
.env.example 里默认是 DeepSeek,也支持其他 OpenAI 兼容模型。最少需要配置:
AI_PROVIDER=deepseek
DEEPSEEK_API_KEY=your-deepseek-api-key
NEXT_PUBLIC_SITE_URL=http://localhost:3000
启动开发服务器:
npm run dev
然后打开:
http://localhost:3000
需要注意一点:README 明确说,开源版不包含后端 API 路由,比如 /api/interpret、/api/heming、/api/generate。所以如果直接跑起来发现 AI 解读或生成接口不通,不一定是你本地配置错了。排盘算法和前端界面可以先独立研究,AI 解读接口需要自己补。
先看哪几个文件
如果只是想理解它怎么排盘,先看这三个文件:
lib/ziwei/algorithm.ts
lib/ziwei/types.ts
lib/ziwei/constants.ts
generateChart() 是核心入口。它接收出生年、月、日、时辰、性别,调用 astro.bySolar(),再把十二宫、主星、辅星、煞星、庙旺利陷、大限等信息整理成项目自己的 ZiweiChart 数据结构。
表单部分在:
components/BirthForm.tsx
这里可以看到一个很实用的细节:项目根据出生地经度计算真太阳时时辰。代码里用 (longitude - 120) * 4 计算分钟偏移,再把北京时间转成对应时辰。对命理类产品来说,这类输入细节会直接影响用户信任。
命盘页在:
app/chart/page.tsx
它负责收集表单、调用生成接口、展示命盘、处理星曜点击、宫位点击、历史命盘等交互。以后要自己改产品,基本从这里下手。
格局知识库怎么读
重点看:
lib/ziwei/patterns.ts
这个文件有 1100 多行,写法没有停在文案堆叠,而是把每个格局拆成“必须条件、加分项、破格警示”。比如紫府同宫、君臣庆会、府相朝垣这类格局,都对应具体的检测函数。
这种结构很适合拿去做 AI 解读前的规则层。先由代码判断命盘里有哪些明确格局,再把结构化结果交给大模型解释。比直接把生日丢给模型让它自由发挥稳得多。
如果要补 AI 解读接口
开源版没有后端 API,但补起来并不复杂。最小思路是:
- 前端提交出生信息到
/api/generate。 - API 内部调用
generateChart()得到命盘 JSON 。 - 调用
detectPatterns()一类的格局识别函数,得到规则层结果。 - 把命盘结构、格局、用户问题、必要免责声明一起发给 LLM 。
- 返回结构化文本,避免让模型自己重新排盘。
伪代码大概是这样:
import { generateChart } from '@/lib/ziwei/algorithm';
export async function POST(req: Request) {
const birthInfo = await req.json();
const chart = generateChart(birthInfo);
return Response.json(chart);
}
如果要做解释接口,可以再加一层:
const chart = generateChart(birthInfo);
const prompt = buildPrompt({ chart, question });
const answer = await callLLM(prompt);
return Response.json({ chart, answer });
这里最重要的是:排盘交给确定性代码,解释交给模型。不要让模型负责“算盘”,否则同一个输入很容易出现不同答案。
51.8 万样本数据怎么用
Releases 里有三卷压缩包:
ziwei-samples-v3-part1.zip.001
ziwei-samples-v3-part2.zip.002
ziwei-samples-v3-part3.zip.003
SHA256SUMS.txt
Linux 或 macOS 合并解压:
cat ziwei-samples-v3-part*.zip.* > combined.zip
unzip combined.zip
这套数据更适合做三类事:
- 做 RAG,把命盘样本和解读主题拆成可检索片段。
- 做小模型微调,把输入命盘和输出解读配成训练样本。
- 做规则修改后的回归测试,比如改了
patterns.ts,再对比样本输出有没有明显偏移。
数据许可比较宽松,可以商用,但要保留来源标注。产品页、模型卡、数据集 README 里写清楚来源即可。
推荐的学习路径
如果你前两天看的是倪海夏中医内容,可以按这个顺序接到《天纪》:
- 先读
lib/nihai/index.ts,了解天纪、地纪、人纪三套框架。 - 再看
app/page.tsx,观察产品怎么把“紫微、天纪、地纪、人纪”组织成学习入口。 - 然后看
algorithm.ts,把排盘主流程跑通。 - 接着读
patterns.ts,理解格局识别怎么从文案变成规则。 - 最后再考虑接 LLM,把命盘 JSON 和规则结果转成自然语言解释。
这个项目适合收藏。它既有传统术数内容,又有现代 Web 产品结构,还把一部分样本数据开放出来。拿来学习,比只看一个在线算命页面有用得多。
学习提醒:命理内容适合研究传统文化和产品设计,不建议用于医疗、投资、婚恋、职业等现实决策。