实现Coze API调用记录功能
- 在AiChatServiceImpl中添加完整的API调用记录功能 - 每次调用Coze API时自动记录请求和响应信息 - 支持聊天和总结两种类型的API调用记录 - 记录详细信息包括: * 请求信息:URL、请求体、请求头、用户消息 * 响应信息:HTTP状态码、响应体、响应头 * Coze信息:Bot ID、Workflow ID、Chat ID、Conversation ID * 用户信息:用户ID、客户端IP、User Agent、会话ID * 性能指标:开始时间、结束时间、耗时、轮询次数 * 状态跟踪:调用状态、最终状态、错误信息 * 追踪信息:唯一追踪ID - 添加集成测试验证记录功能 - 支持错误处理和异常情况记录
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
package com.emotion.service;
|
||||
|
||||
import com.emotion.entity.CozeApiCall;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Coze API调用记录集成测试
|
||||
*
|
||||
* @author emotion-museum
|
||||
* @date 2025-07-25
|
||||
*/
|
||||
@Slf4j
|
||||
@SpringBootTest
|
||||
@ActiveProfiles("test")
|
||||
public class CozeApiCallIntegrationTest {
|
||||
|
||||
@Autowired
|
||||
private AIChatService aiChatService;
|
||||
|
||||
@Autowired
|
||||
private CozeApiCallService cozeApiCallService;
|
||||
|
||||
@Test
|
||||
public void testCozeApiCallRecording() {
|
||||
log.info("开始测试Coze API调用记录功能");
|
||||
|
||||
// 获取测试前的记录数量
|
||||
long beforeCount = cozeApiCallService.count();
|
||||
log.info("测试前API调用记录数量: {}", beforeCount);
|
||||
|
||||
// 执行AI聊天,这应该会创建API调用记录
|
||||
String testConversationId = "test_conversation_" + System.currentTimeMillis();
|
||||
String testUserId = "test_user_" + System.currentTimeMillis();
|
||||
String testMessage = "你好,这是一个测试消息";
|
||||
|
||||
try {
|
||||
String aiReply = aiChatService.sendMessage(testConversationId, testMessage, testUserId);
|
||||
log.info("AI回复: {}", aiReply);
|
||||
|
||||
// 等待一下确保记录已保存
|
||||
Thread.sleep(2000);
|
||||
|
||||
// 检查是否创建了新的API调用记录
|
||||
long afterCount = cozeApiCallService.count();
|
||||
log.info("测试后API调用记录数量: {}", afterCount);
|
||||
|
||||
// 验证记录数量增加
|
||||
if (afterCount > beforeCount) {
|
||||
log.info("✅ API调用记录功能正常工作,新增了 {} 条记录", afterCount - beforeCount);
|
||||
|
||||
// 查询最新的API调用记录
|
||||
List<CozeApiCall> recentCalls = cozeApiCallService.getByUserId(testUserId);
|
||||
if (!recentCalls.isEmpty()) {
|
||||
CozeApiCall latestCall = recentCalls.get(0);
|
||||
log.info("最新API调用记录详情:");
|
||||
log.info(" - ID: {}", latestCall.getId());
|
||||
log.info(" - 对话ID: {}", latestCall.getConversationId());
|
||||
log.info(" - 用户ID: {}", latestCall.getUserId());
|
||||
log.info(" - 请求类型: {}", latestCall.getRequestType());
|
||||
log.info(" - 用户消息: {}", latestCall.getUserMessage());
|
||||
log.info(" - AI回复: {}", latestCall.getAiReply());
|
||||
log.info(" - 状态: {}", latestCall.getStatus());
|
||||
log.info(" - 最终状态: {}", latestCall.getFinalStatus());
|
||||
log.info(" - 开始时间: {}", latestCall.getStartTime());
|
||||
log.info(" - 结束时间: {}", latestCall.getEndTime());
|
||||
log.info(" - 耗时: {} ms", latestCall.getDurationMs());
|
||||
log.info(" - 追踪ID: {}", latestCall.getTraceId());
|
||||
} else {
|
||||
log.warn("⚠️ 未找到对应用户的API调用记录");
|
||||
}
|
||||
} else {
|
||||
log.error("❌ API调用记录功能异常,记录数量未增加");
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("测试过程中发生异常", e);
|
||||
}
|
||||
|
||||
log.info("Coze API调用记录功能测试完成");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConversationSummaryRecording() {
|
||||
log.info("开始测试对话总结API调用记录功能");
|
||||
|
||||
// 获取测试前的记录数量
|
||||
long beforeCount = cozeApiCallService.count();
|
||||
log.info("测试前API调用记录数量: {}", beforeCount);
|
||||
|
||||
// 执行对话总结,这应该会创建API调用记录
|
||||
String testConversationId = "summary_test_conversation_" + System.currentTimeMillis();
|
||||
String testUserId = "summary_test_user_" + System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
String summary = aiChatService.generateConversationSummary(testConversationId, testUserId);
|
||||
log.info("对话总结: {}", summary);
|
||||
|
||||
// 等待一下确保记录已保存
|
||||
Thread.sleep(2000);
|
||||
|
||||
// 检查是否创建了新的API调用记录
|
||||
long afterCount = cozeApiCallService.count();
|
||||
log.info("测试后API调用记录数量: {}", afterCount);
|
||||
|
||||
// 验证记录数量增加
|
||||
if (afterCount > beforeCount) {
|
||||
log.info("✅ 对话总结API调用记录功能正常工作,新增了 {} 条记录", afterCount - beforeCount);
|
||||
|
||||
// 查询总结类型的API调用记录
|
||||
List<CozeApiCall> summaryCalls = cozeApiCallService.getByRequestType("summary");
|
||||
if (!summaryCalls.isEmpty()) {
|
||||
CozeApiCall latestSummaryCall = summaryCalls.get(0);
|
||||
log.info("最新总结API调用记录详情:");
|
||||
log.info(" - ID: {}", latestSummaryCall.getId());
|
||||
log.info(" - 请求类型: {}", latestSummaryCall.getRequestType());
|
||||
log.info(" - Bot ID: {}", latestSummaryCall.getBotId());
|
||||
log.info(" - Workflow ID: {}", latestSummaryCall.getWorkflowId());
|
||||
log.info(" - 状态: {}", latestSummaryCall.getStatus());
|
||||
} else {
|
||||
log.warn("⚠️ 未找到总结类型的API调用记录");
|
||||
}
|
||||
} else {
|
||||
log.error("❌ 对话总结API调用记录功能异常,记录数量未增加");
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("测试过程中发生异常", e);
|
||||
}
|
||||
|
||||
log.info("对话总结API调用记录功能测试完成");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testApiCallStatistics() {
|
||||
log.info("开始测试API调用统计功能");
|
||||
|
||||
try {
|
||||
// 统计总调用次数
|
||||
long totalCalls = cozeApiCallService.count();
|
||||
log.info("总API调用次数: {}", totalCalls);
|
||||
|
||||
// 统计成功调用次数
|
||||
long successCalls = cozeApiCallService.countByStatus("success");
|
||||
log.info("成功API调用次数: {}", successCalls);
|
||||
|
||||
// 统计失败调用次数
|
||||
long failedCalls = cozeApiCallService.countByStatus("failed");
|
||||
log.info("失败API调用次数: {}", failedCalls);
|
||||
|
||||
// 统计不同请求类型的调用次数
|
||||
List<CozeApiCall> chatCalls = cozeApiCallService.getByRequestType("chat");
|
||||
List<CozeApiCall> summaryCalls = cozeApiCallService.getByRequestType("summary");
|
||||
log.info("聊天类型API调用次数: {}", chatCalls.size());
|
||||
log.info("总结类型API调用次数: {}", summaryCalls.size());
|
||||
|
||||
log.info("✅ API调用统计功能正常工作");
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("统计测试过程中发生异常", e);
|
||||
}
|
||||
|
||||
log.info("API调用统计功能测试完成");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user