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, }); }