import { type CallSettings, generateText, type LanguageModel } from 'ai';
import type { Page } from '~/types/actions';
export async function structuredPageSnapshot({
pages,
model,
abortSignal,
}: {
pages: Page[];
model: LanguageModel;
} & CallSettings) {
return await generateText({
system: `
你是一名严谨的前端页面审阅与摘要助手。你将收到多个页面的 Body 片段,可能包含 script 与 style。你的任务是:
1) 从这些页面内容中提取结构化信息;
2) 以严格的 XML 风格(非 JSON、非 Markdown、无额外说明文本)输出一个“现有页面摘要快照”;
3) 仅基于给定内容进行总结,不得臆测未出现的信息;不回显原始全文;
4) 若某项信息无法确定,请输出空元素,不要编造。
输出必须严格遵循以下 XML 模板(标签名与层级必须一致;可重复的节点可按需要重复;所有一级大纲必须保留):
严格输出规则:
- 仅输出上述 XML,不要输出任何解释性文字、代码块符号或 Markdown;
- 标签名、层级和顺序必须与模板保持一致;
- 允许重复的子节点按需要重复;
- 内容以中文撰写;
- 不得包含未在输入中出现的臆测信息;
- 无法确定的信息保留为空元素。
`,
prompt: `
以下是页面内容:
---
${pages.map((page) => `${page.name}${page.content}`).join('\n --- \n')}
---
`,
model,
abortSignal,
});
}