* 估算上下文数据的总 Token 数量
(contextData: ContextData)
| 305 | * 估算上下文数据的总 Token 数量 |
| 306 | */ |
| 307 | private estimateTokens(contextData: ContextData): number { |
| 308 | let totalTokens = 0; |
| 309 | |
| 310 | // 对话消息 |
| 311 | for (const message of contextData.layers.conversation.messages) { |
| 312 | totalTokens += this.estimateMessageTokens(message); |
| 313 | } |
| 314 | |
| 315 | // 系统上下文 |
| 316 | const systemContent = JSON.stringify(contextData.layers.system); |
| 317 | totalTokens += Math.ceil(systemContent.length / 4); |
| 318 | |
| 319 | // 工具上下文 |
| 320 | if (contextData.layers.tool.recentCalls.length > 0) { |
| 321 | const toolContent = JSON.stringify(contextData.layers.tool); |
| 322 | totalTokens += Math.ceil(toolContent.length / 8); // 工具调用数据通常更简洁 |
| 323 | } |
| 324 | |
| 325 | return totalTokens; |
| 326 | } |
| 327 | |
| 328 | /** |
| 329 | * 创建预设过滤器 |
no test coverage detected