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

Method compressSimple

pkg/agent/prompt_optimizer.go:152–201  ·  view source on GitHub ↗

compressSimple 基于规则的简单压缩

(prompt string, opts *CompressOptions)

Source from the content-addressed store, hash-verified

150
151// compressSimple 基于规则的简单压缩
152func (c *EnhancedPromptCompressor) compressSimple(prompt string, opts *CompressOptions) string {
153 // 分析段落
154 sections := c.analyzeSections(prompt)
155
156 // 评分和排序
157 scoredSections := c.scoreSections(sections, opts.PreserveSections)
158
159 // 根据目标长度选择段落
160 targetLen := opts.TargetLength
161 if targetLen == 0 {
162 // 根据压缩级别计算目标长度
163 switch opts.Level {
164 case CompressionLevelLight:
165 targetLen = int(float64(len(prompt)) * 0.65)
166 case CompressionLevelModerate:
167 targetLen = int(float64(len(prompt)) * 0.45)
168 case CompressionLevelAggressive:
169 targetLen = int(float64(len(prompt)) * 0.25)
170 default:
171 targetLen = int(float64(len(prompt)) * 0.50)
172 }
173 }
174
175 // 选择段落
176 var result []string
177 currentLen := 0
178
179 // 首先添加必须保留的段落
180 for _, ss := range scoredSections {
181 if ss.MustKeep {
182 result = append(result, ss.Content)
183 currentLen += len(ss.Content)
184 }
185 }
186
187 // 然后按评分添加其他段落
188 for _, ss := range scoredSections {
189 if !ss.MustKeep && currentLen+len(ss.Content) <= targetLen {
190 result = append(result, ss.Content)
191 currentLen += len(ss.Content)
192 }
193 }
194
195 // 应用基本优化
196 compressed := strings.Join(result, "\n\n")
197 compressed = c.removeDuplicateEmptyLines(compressed)
198 compressed = c.compactFormat(compressed)
199
200 return compressed
201}
202
203// compressLLM LLM 驱动的压缩
204func (c *EnhancedPromptCompressor) compressLLM(ctx context.Context, prompt string, opts *CompressOptions) (string, error) {

Callers 2

CompressMethod · 0.95
compressHybridMethod · 0.95

Calls 5

analyzeSectionsMethod · 0.95
scoreSectionsMethod · 0.95
compactFormatMethod · 0.95
JoinMethod · 0.45

Tested by

no test coverage detected