import { Context } from "koishi"; import type { Part, UserMessagePart } from "xsai"; import { MessageContext } from "../middleware/base"; import { MultimodalConfig } from "../services/scenario/Scenario"; import { ScenarioManager } from "../services/scenario/ScenarioManager"; export type PromptBlockGenerator = (ctx: MessageContext, PromptBuilder: PromptBuilder) => Promise | null>; export interface PromptBuilderConfig { SystemTemplate: string; UserTemplate: string; ToolTemplate: string; } export declare class PromptBuilder { readonly ctx: Context; private readonly scenarioManager; private readonly config; private templates; private blockGenerators; private memory; private toolManager; private logger; private multimodalConfig; private _currentPromptImageCount; constructor(ctx: Context, scenarioManager: ScenarioManager, config: PromptBuilderConfig, multimodalConfig: MultimodalConfig); /** * 注册一个自定义模板(允许运行时覆盖或添加模板)。 * @param name 模板文件的名称,例如 'my_custom_template.txt' * @param content 模板内容字符串 */ registerTemplate(name: string, content: string): void; /** * 注册一个用于生成特定提示词块内容的函数。 * @param name 块的名称,对应模板中的占位符,例如 'memory', 'tools' * @param generator 生成器函数,接收 MessageContext 和 PromptBuilder 实例作为参数,返回字符串、Part 数组或 null。 */ registerBlockGenerator(name: string, generator: PromptBlockGenerator): void; /** * 注册默认的提示词块生成器。 */ private registerDefaultBlockGenerators; /** * 构建总体的系统提示词(LLM的system role)。 * 包含基础设定、核心记忆、工具说明等。 * @param ctx 消息上下文。 * @returns 完整的系统提示词字符串。 */ buildSystemPrompt(ctx: MessageContext): Promise; /** * 构建总体的用户提示词(LLM的user role)。 * 包含当前会话上下文、最新消息、场景更新等。 * @param ctx 消息上下文。 * @returns 完整的用户提示词 Part 数组。 */ buildUserPrompt(ctx: MessageContext): Promise>; /** * 辅助函数:将 Part 添加到数组中,并尝试合并连续的 TextPart * @param parts 目标 Part 数组 * @param newPart 要添加的 Part */ private appendPart; /** * 辅助函数:将 Part 数组扁平化为字符串 (用于系统提示词不支持多模态的情况) * @param parts Parts 数组 * @returns 扁平化后的字符串 */ private flattenPartsToString; } export declare const SystemBaseTemplate: string; export declare const ToolBaseTemplate: string; export declare const UserBaseTemplate: string;