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

Method SummarizeSession

pkg/memory/session_compressor.go:91–130  ·  view source on GitHub ↗

SummarizeSession 实现 SessionCompressor 接口

(ctx context.Context, messages []agentext.Message)

Source from the content-addressed store, hash-verified

89
90// SummarizeSession 实现 SessionCompressor 接口
91func (s *LLMSummarizer) SummarizeSession(ctx context.Context, messages []agentext.Message) (string, error) {
92 if len(messages) == 0 {
93 return "", nil
94 }
95
96 startTime := time.Now()
97
98 // 计算原始 Token 数
99 originalTokens, err := s.config.TokenCounter.EstimateMessages(ctx, messages)
100 if err != nil {
101 return "", fmt.Errorf("failed to count original tokens: %w", err)
102 }
103
104 // 构建总结提示词
105 prompt := s.buildSummaryPrompt(messages)
106
107 // 调用 LLM 生成总结
108 summary, err := s.callLLM(ctx, prompt)
109 if err != nil {
110 return "", fmt.Errorf("failed to call LLM: %w", err)
111 }
112
113 // 计算压缩后 Token 数
114 compressedTokens, err := s.config.TokenCounter.Count(ctx, summary)
115 if err != nil {
116 return "", fmt.Errorf("failed to count compressed tokens: %w", err)
117 }
118
119 // 更新统计信息
120 s.stats = CompressionStats{
121 OriginalMessages: len(messages),
122 CompressedMessages: 1,
123 OriginalTokens: originalTokens,
124 CompressedTokens: compressedTokens,
125 CompressionRatio: float64(compressedTokens) / float64(originalTokens),
126 Duration: time.Since(startTime),
127 }
128
129 return summary, nil
130}
131
132// CompressMessages 实现 SessionCompressor 接口
133func (s *LLMSummarizer) CompressMessages(ctx context.Context, messages []agentext.Message) ([]agentext.Message, error) {

Calls 4

buildSummaryPromptMethod · 0.95
callLLMMethod · 0.95
EstimateMessagesMethod · 0.65
CountMethod · 0.65