(
context: ContextData,
compressed?: CompressedContext,
options: {
includeSystemInfo?: boolean;
includeToolHistory?: boolean;
includeWorkspaceInfo?: boolean;
maxRecentMessages?: number;
} = {}
)
| 12 | * 将上下文数据格式化为适合 Prompt 的字符串 |
| 13 | */ |
| 14 | export function formatContextForPrompt( |
| 15 | context: ContextData, |
| 16 | compressed?: CompressedContext, |
| 17 | options: { |
| 18 | includeSystemInfo?: boolean; |
| 19 | includeToolHistory?: boolean; |
| 20 | includeWorkspaceInfo?: boolean; |
| 21 | maxRecentMessages?: number; |
| 22 | } = {} |
| 23 | ): string { |
| 24 | const { |
| 25 | includeSystemInfo = true, |
| 26 | includeToolHistory = true, |
| 27 | includeWorkspaceInfo = true, |
| 28 | maxRecentMessages = 20, |
| 29 | } = options; |
| 30 | |
| 31 | const sections: string[] = []; |
| 32 | |
| 33 | // 系统信息 |
| 34 | if (includeSystemInfo) { |
| 35 | const systemInfo = `## 系统信息 |
| 36 | 角色: ${context.layers.system.role} |
| 37 | 能力: ${context.layers.system.capabilities.join('、')} |
| 38 | 可用工具: ${context.layers.system.tools.join('、')}`; |
| 39 | sections.push(systemInfo); |
| 40 | } |
| 41 | |
| 42 | // 会话信息 |
| 43 | const sessionInfo = `## 会话信息 |
| 44 | 会话ID: ${context.layers.session.sessionId} |
| 45 | 开始时间: ${new Date(context.layers.session.startTime).toLocaleString()}`; |
| 46 | sections.push(sessionInfo); |
| 47 | |
| 48 | // 工作空间信息 |
| 49 | if (includeWorkspaceInfo && context.layers.workspace.projectPath) { |
| 50 | const workspaceInfo = `## 工作空间 |
| 51 | 项目路径: ${context.layers.workspace.projectPath} |
| 52 | 当前文件: ${context.layers.workspace.currentFiles.length}个 |
| 53 | 最近文件: ${context.layers.workspace.recentFiles.slice(0, 5).join('、')}`; |
| 54 | sections.push(workspaceInfo); |
| 55 | } |
| 56 | |
| 57 | // 对话历史 |
| 58 | if (compressed) { |
| 59 | // 使用压缩后的上下文 |
| 60 | const conversationInfo = `## 对话历史摘要 |
| 61 | ${compressed.summary} |
| 62 | |
| 63 | ### 关键要点 |
| 64 | ${compressed.keyPoints.map(point => `- ${point}`).join('\n')} |
| 65 | |
| 66 | ### 最近消息 |
| 67 | ${formatMessages(compressed.recentMessages, maxRecentMessages)}`; |
| 68 | sections.push(conversationInfo); |
| 69 | |
| 70 | // 工具使用摘要 |
| 71 | if (includeToolHistory && compressed.toolSummary) { |
no test coverage detected