-
Notifications
You must be signed in to change notification settings - Fork 2.2k
feat: 添加AI请求耗时记录,优化性能评估 #587
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
# Conflicts: # decision/engine.go
代码审查报告 - PR #587📋 基本信息
1️⃣ 业务逻辑审查✅ 问题定义核心需求: 监控AI API调用耗时,用于性能分析 业务场景: 实际影响: ✅ 解决方案验证监控策略: 在AI调用前后记录时间戳 aiCallStart := time.Now()
aiResponse, err := mcpClient.CallWithMessages(systemPrompt, userPrompt)
aiCallDuration := time.Since(aiCallStart)
// 保存到决策记录
decision.AIRequestDurationMs = aiCallDuration.Milliseconds()数据流向: 业务价值: ✅ 显著提升可观测性
2️⃣ 技术实现审查✅ 修改1: decision/engine.go - 添加耗时字段// decision/engine.go:112
type FullDecision struct {
CoTTrace string `json:"cot_trace"`
Decisions []Decision `json:"decisions"`
Timestamp time.Time `json:"timestamp"`
// ✅ 新增: AI API 调用耗时(毫秒)
AIRequestDurationMs int64 `json:"ai_request_duration_ms,omitempty"`
}技术评价: ✅ 正确
✅ 修改2: 记录AI调用耗时修改前(无监控):// decision/engine.go:131
aiResponse, err := mcpClient.CallWithMessages(systemPrompt, userPrompt)
if err != nil {
return nil, fmt.Errorf("调用AI API失败: %w", err)
}修改后(有监控):// decision/engine.go:134
aiCallStart := time.Now() // ✅ 记录开始时间
aiResponse, err := mcpClient.CallWithMessages(systemPrompt, userPrompt)
aiCallDuration := time.Since(aiCallStart) // ✅ 计算耗时
if err != nil {
return nil, fmt.Errorf("调用AI API失败: %w", err)
}
// 解析AI响应
decision, err := parseFullDecisionResponse(...)
// ✅ 无论是否有错误,都保存耗时
if decision != nil {
decision.Timestamp = time.Now()
decision.SystemPrompt = systemPrompt
decision.UserPrompt = userPrompt
decision.AIRequestDurationMs = aiCallDuration.Milliseconds() // ✅ 保存耗时
}技术亮点:
✅ 修改3: logger/decision_logger.go - 日志字段// logger/decision_logger.go:27
type DecisionRecord struct {
ExecutionLog []string `json:"execution_log"`
Success bool `json:"success"`
ErrorMessage string `json:"error_message"`
// ✅ 新增: AI API 调用耗时
AIRequestDurationMs int64 `json:"ai_request_duration_ms,omitempty"`
}技术评价: ✅ 正确
✅ 修改4: trader/auto_trader.go - 复制耗时并打印日志// trader/auto_trader.go:451
decision, err := decision.GetFullDecisionWithCustomPrompt(ctx, at.mcpClient, ...)
if decision != nil && decision.AIRequestDurationMs > 0 {
// ✅ 复制耗时到record
record.AIRequestDurationMs = decision.AIRequestDurationMs
// ✅ 打印日志(便于实时监控)
log.Printf("⏱️ AI调用耗时: %.2f 秒", float64(record.AIRequestDurationMs)/1000)
// ✅ 添加到执行日志
record.ExecutionLog = append(record.ExecutionLog,
fmt.Sprintf("AI调用耗时: %d ms", record.AIRequestDurationMs))
}技术亮点:
3️⃣ 端到端验证✅ 核心场景测试场景1: 正常AI调用 场景2: AI调用失败 场景3: 慢请求识别 ✅ 边界条件边界1: 极快请求(<1ms) 边界2: 极慢请求(>60s) 边界3: decision为nil 4️⃣ 性能与监控审查✅ 性能影响额外开销:
存储开销:
评价: ✅ 性能影响微乎其微 ✅ 可观测性提升日志示例: JSON示例: {
"cycle": 42,
"timestamp": "2025-11-08T10:30:15Z",
"ai_request_duration_ms": 2350,
"execution_log": [
"开始获取市场数据",
"AI调用耗时: 2350 ms",
"执行决策: BTCUSDT LONG"
],
"success": true
}分析价值:
5️⃣ 代码质量✅ 优点
|
| 维度 | 评分 | 说明 |
|---|---|---|
| 业务价值 | ⭐⭐⭐⭐⭐ | 显著提升性能可观测性 |
| 技术实现 | ⭐⭐⭐⭐ | 实现正确,但decision为nil时耗时丢失 |
| 性能影响 | ⭐⭐⭐⭐⭐ | 开销可忽略(<100ns) |
| 可维护性 | ⭐⭐⭐⭐⭐ | 代码简洁,注释清晰 |
🎯 核心价值
- 性能诊断: 快速识别慢请求和性能瓶颈
- 模型对比: 对比不同AI模型响应时间(GPT-4 vs Claude vs DeepSeek)
- 运维告警: 可设置慢请求阈值告警
🔧 行动建议
必须修复: 无
强烈建议:
- 修复decision为nil时耗时丢失问题(方案1或方案2)
- 添加慢请求告警(如>10秒)
可选优化:
- 添加Prometheus指标(集成到监控系统)
- 添加单元测试验证耗时记录准确性
- 在Web UI显示AI调用耗时趋势图
- 添加耗时百分位统计(P50/P90/P99)
🌟 特别表扬
实用功能: 解决真实用户痛点("为啥决策总是和市场偏离")
实现简洁: 23行代码实现完整监控
向后兼容: 使用omitempty,不影响旧数据
建议后续工作:
- 收集1周数据后,分析耗时分布(识别慢请求模式)
- 对比不同AI模型的平均响应时间
- 根据数据优化模型选择策略(如高频场景选快速模型)
总评: 这是一个高价值的性能监控功能,代码简洁、实现正确、性能影响微乎其微。建议修复decision为nil时的耗时丢失问题,并添加慢请求告警,其他均符合生产级标准。
审查时间: 2025-11-08
审查者: Claude AI Code Reviewer
# Conflicts: # decision/engine.go
# Conflicts: # decision/engine.go
# Conflicts: # decision/engine.go
# Conflicts: # decision/engine.go
📝 Description | 描述
中文:
增加AI请求耗时记录,让你知道为啥你的决策总是和市场偏离
🎯 Type of Change | 变更类型
🧪 Testing | 测试
✅ Checklist | 检查清单
Code Quality | 代码质量
Documentation | 文档
Git
devbranch | 已 rebase 到最新dev分支By submitting this PR, I confirm | 提交此 PR,我确认:
🌟 Thank you for your contribution! | 感谢你的贡献!