2026-06-02 11:55:42 +08:00

43 lines
2.3 KiB
Java

package com.company.agentfoundation.service;
import com.company.agentfoundation.api.DeepseekChatRequest;
import com.company.agentfoundation.api.DeepseekChatResponse;
import com.company.agentfoundation.api.DeepseekClient;
import com.company.agentfoundation.domain.ChatRequest;
import com.company.agentfoundation.domain.ChatResponse;
import com.company.agentfoundation.security.AgentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.time.Instant;
import java.util.UUID;
@Service
public class ChatService {
private static final Logger log = LoggerFactory.getLogger(ChatService.class);
private final DeepseekClient deepseekClient;
private final ModelRouter modelRouter;
public ChatService(DeepseekClient deepseekClient, ModelRouter modelRouter) { this.deepseekClient = deepseekClient; this.modelRouter = modelRouter; }
public ChatResponse chat(AgentContext context, ChatRequest request) {
String traceId = UUID.randomUUID().toString();
String model = modelRouter.routeModel(context.agentId(), request.model());
log.info("chat start traceId={} agentId={} model={} messageCount={}", traceId, context.agentId(), model, request.messages() == null ? 0 : request.messages().size());
DeepseekChatResponse resp = deepseekClient.chat(new DeepseekChatRequest(
model,
request.messages().stream().map(m -> new DeepseekChatRequest.Message(m.role(), m.content())).toList(),
request.temperature(),
false));
String content = "";
if (resp != null && resp.choices() != null && !resp.choices().isEmpty() && resp.choices().get(0).message() != null) content = resp.choices().get(0).message().content();
ChatResponse.Usage usage = null;
if (resp != null && resp.usage() != null) usage = new ChatResponse.Usage(resp.usage().prompt_tokens(), resp.usage().completion_tokens(), resp.usage().total_tokens());
log.info("chat success traceId={} totalTokens={} replyPreview={}", traceId, usage == null ? null : usage.totalTokens(), preview(content));
return new ChatResponse(traceId, context.agentId(), model, content, usage, Instant.now());
}
private String preview(String text) {
if (text == null || text.isBlank()) {
return "";
}
return text.length() <= 80 ? text : text.substring(0, 80) + "...";
}
}