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

Method GenerateSummary

pkg/memory/session_summary.go:128–179  ·  view source on GitHub ↗

GenerateSummary 生成会话摘要

(
	ctx context.Context,
	sessionID string,
	messages []types.Message,
)

Source from the content-addressed store, hash-verified

126
127// GenerateSummary 生成会话摘要
128func (m *SessionSummaryManager) GenerateSummary(
129 ctx context.Context,
130 sessionID string,
131 messages []types.Message,
132) (*SessionSummary, error) {
133 if !m.config.Enabled {
134 return nil, errors.New("session summary is disabled")
135 }
136
137 // 构建提示词
138 prompt := m.buildPrompt(messages)
139
140 // 调用 LLM 生成摘要
141 resp, err := m.provider.Complete(ctx, []types.Message{
142 {
143 Role: "user",
144 Content: prompt,
145 },
146 }, &provider.StreamOptions{
147 MaxTokens: 1000,
148 Temperature: 0.3, // 较低的温度以获得更一致的输出
149 })
150 if err != nil {
151 return nil, fmt.Errorf("failed to generate summary: %w", err)
152 }
153
154 // 解析响应
155 summary, err := m.parseSummaryResponse(resp.Message.Content)
156 if err != nil {
157 return nil, fmt.Errorf("failed to parse summary: %w", err)
158 }
159
160 // 设置基本信息
161 summary.SessionID = sessionID
162 summary.CreatedAt = time.Now()
163 summary.UpdatedAt = time.Now()
164 summary.MessageCount = len(messages)
165
166 // 计算 token 数量(粗略估计)
167 totalTokens := 0
168 for _, msg := range messages {
169 totalTokens += len(msg.Content) / 4 // 粗略估计:4个字符 ≈ 1个token
170 }
171 summary.TokenCount = totalTokens
172
173 // 存储摘要
174 m.mu.Lock()
175 m.summaries[sessionID] = summary
176 m.mu.Unlock()
177
178 return summary, nil
179}
180
181// UpdateSummary 更新会话摘要
182func (m *SessionSummaryManager) UpdateSummary(

Calls 3

buildPromptMethod · 0.95
parseSummaryResponseMethod · 0.95
CompleteMethod · 0.65