MCPcopy Create free account
hub / github.com/astercloud/aster / Compress

Method Compress

pkg/agent/prompt_optimizer.go:86–149  ·  view source on GitHub ↗

Compress 压缩 Prompt

(ctx context.Context, prompt string, opts *CompressOptions)

Source from the content-addressed store, hash-verified

84
85// Compress 压缩 Prompt
86func (c *EnhancedPromptCompressor) Compress(ctx context.Context, prompt string, opts *CompressOptions) (*CompressResult, error) {
87 if opts == nil {
88 opts = &CompressOptions{
89 Mode: CompressionModeHybrid,
90 Level: CompressionLevelModerate,
91 }
92 }
93
94 // 计算原始 Token 数
95 var originalTokens int
96 var err error
97 if c.tokenCounter != nil {
98 originalTokens, err = c.tokenCounter.Count(ctx, prompt)
99 if err != nil {
100 originalTokens = len(prompt) / 4 // 降级估算
101 }
102 } else {
103 originalTokens = len(prompt) / 4 // 无计数器时降级估算
104 }
105
106 var compressed string
107
108 switch opts.Mode {
109 case CompressionModeSimple:
110 compressed = c.compressSimple(prompt, opts)
111 case CompressionModeLLM:
112 compressed, err = c.compressLLM(ctx, prompt, opts)
113 if err != nil {
114 // LLM 压缩失败,降级到简单压缩
115 compressed = c.compressSimple(prompt, opts)
116 }
117 case CompressionModeHybrid:
118 compressed, err = c.compressHybrid(ctx, prompt, opts)
119 if err != nil {
120 compressed = c.compressSimple(prompt, opts)
121 }
122 default:
123 compressed = c.compressSimple(prompt, opts)
124 }
125
126 // 计算压缩后 Token 数
127 var compressedTokens int
128 if c.tokenCounter != nil {
129 compressedTokens, _ = c.tokenCounter.Count(ctx, compressed)
130 } else {
131 compressedTokens = len(compressed) / 4
132 }
133
134 result := &CompressResult{
135 Compressed: compressed,
136 OriginalLength: len(prompt),
137 CompressedLength: len(compressed),
138 OriginalTokens: originalTokens,
139 CompressedTokens: compressedTokens,
140 TokensSaved: originalTokens - compressedTokens,
141 Mode: string(opts.Mode),
142 }
143

Calls 4

compressSimpleMethod · 0.95
compressLLMMethod · 0.95
compressHybridMethod · 0.95
CountMethod · 0.65