Files
zhimingge/app/actions/liuyao.ts
T
dekun fff77dac3f Implement three divination modes, learn pages, and PM2 deploy on port 3130.
Add liuyao/bazi/combined flows with shared calc and AI infrastructure, 64-gua learn routes, and update Ubuntu PM2 deployment docs for port 3130.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-10 20:19:49 +08:00

67 lines
1.4 KiB
TypeScript

"use server";
import { streamAIResponse } from "@/lib/ai/stream";
import {
formatLiuyaoTimingForPrompt,
getTimingInfoWithLongitude,
} from "@/lib/calc/timing";
import {
extractChangeDetails,
extractZhangMingRen,
readGuaMarkdown,
} from "@/lib/content/zhouyi";
import { LIUYAO_SYSTEM_PROMPT } from "@/lib/prompts";
export interface LiuyaoInput {
question: string;
calcDate: string;
calcTime: string;
locationName: string;
longitude: number;
guaMark: string;
guaTitle: string;
guaResult: string;
guaChange: string;
}
export async function getLiuyaoAnswer(input: LiuyaoInput) {
const { timing, trueSolarTime } = getTimingInfoWithLongitude(
input.calcDate,
input.calcTime,
input.longitude,
);
const timingText = formatLiuyaoTimingForPrompt(
timing,
trueSolarTime,
input.locationName,
input.longitude,
);
let guaDetailText = "";
try {
const guaDetail = await readGuaMarkdown(input.guaMark);
const explain = extractZhangMingRen(guaDetail) ?? "";
const changeList = extractChangeDetails(
guaDetail,
input.guaChange,
input.guaTitle,
);
guaDetailText = [explain, changeList.join("\n")].filter(Boolean).join("\n");
} catch {
guaDetailText = "";
}
return streamAIResponse(
LIUYAO_SYSTEM_PROMPT,
`${timingText}
【卦象】
${input.guaTitle} ${input.guaResult} ${input.guaChange}
【问事】
${input.question}
${guaDetailText}`,
);
}