fix: 修复链路追踪输出记录及关闭追踪时的额外开销

This commit is contained in:
Obltv
2026-07-23 14:45:43 +08:00
parent 06ff95cdc3
commit 36e3cf8c52
4 changed files with 25 additions and 9 deletions

View File

@@ -43,26 +43,26 @@ public class DefaultTraceStreamSpan implements TraceStreamSpan {
}
@Override
public void finishSuccess() {
finish(TraceConstants.STATUS_SUCCESS, null);
public void finishSuccess(String outputPayload) {
finish(TraceConstants.STATUS_SUCCESS, null, outputPayload);
}
@Override
public void finishError(Throwable throwable) {
finish(TraceConstants.STATUS_ERROR, TracePayloadUtils.error(throwable, traceProperties));
finish(TraceConstants.STATUS_ERROR, TracePayloadUtils.error(throwable, traceProperties), null);
}
@Override
public void finishCancelledIfRunning() {
finish(TraceConstants.STATUS_CANCELLED, null);
finish(TraceConstants.STATUS_CANCELLED, null, null);
}
private void finish(String status, String errorMessage) {
private void finish(String status, String errorMessage, String outputPayload) {
if (!finished.compareAndSet(false, true)) {
return;
}
try {
traceRecordService.finishNode(traceId, nodeId, status, errorMessage, null,
traceRecordService.finishNode(traceId, nodeId, status, errorMessage, outputPayload,
new Date(), System.currentTimeMillis() - startMillis);
} catch (Exception e) {
log.warn("结束 trace stream span 失败traceId={}, nodeId={}", traceId, nodeId, e);

View File

@@ -7,7 +7,14 @@ public interface TraceStreamSpan {
void detach();
void finishSuccess();
/**
* 结束成功的流式节点,并可写入输出摘要。
*/
default void finishSuccess() {
finishSuccess(null);
}
void finishSuccess(String outputPayload);
void finishError(Throwable throwable);

View File

@@ -337,7 +337,8 @@ public class ChatServiceFacade implements IChatService {
result, RoleType.ASSISTANT.getName(), chatRequest.getModel());
}
if (llmSpan != null) {
llmSpan.finishSuccess();
llmSpan.finishSuccess(RagTracePayloadBuilder.streamOutputSummary(
result == null ? 0 : result.length()));
}
finishTraceRun(traceRun, TraceConstants.STATUS_SUCCESS, null);
} catch (Exception e) {

View File

@@ -76,6 +76,8 @@ public class KnowledgeRetrievalServiceImpl implements KnowledgeRetrievalService
}
log.info("开始知识库检索, kid={}, query={}", queryVectorBo.getKid(), queryVectorBo.getQuery());
String retrievalInputPayload = traceActive()
? RagTracePayloadBuilder.retrievalInputSummary(queryVectorBo) : null;
List<KnowledgeRetrievalVo> finalResults = TraceNodeTemplate.withNode(traceRecordService, traceProperties,
"retrieval", RagTraceNodeTypes.NODE_RETRIEVAL,
KnowledgeRetrievalServiceImpl.class.getName(), "retrieve",
@@ -206,8 +208,10 @@ public class KnowledgeRetrievalServiceImpl implements KnowledgeRetrievalService
*/
private List<KnowledgeRetrievalVo> performRerank(QueryVectorBo queryVectorBo, List<KnowledgeRetrievalVo> coarseResults) {
int topN = queryVectorBo.getRerankTopN() != null ? queryVectorBo.getRerankTopN() : queryVectorBo.getMaxResults();
String rerankInputPayload = traceActive()
? RagTracePayloadBuilder.rerankInputSummary(queryVectorBo, coarseResults.size(), topN) : null;
TraceNodeHandle traceNode = startTraceNode("rerank", RagTraceNodeTypes.NODE_RERANK, "performRerank",
RagTracePayloadBuilder.rerankInputSummary(queryVectorBo, coarseResults.size(), topN));
rerankInputPayload);
try {
RerankModelService rerankModel = rerankModelFactory.createModel(queryVectorBo.getRerankModelName());
@@ -324,6 +328,10 @@ public class KnowledgeRetrievalServiceImpl implements KnowledgeRetrievalService
}
}
private boolean traceActive() {
return traceProperties.isEnabled() && StringUtils.isNotBlank(TraceContext.getTraceId());
}
private void finishTraceNode(TraceNodeHandle traceNode, String status, Throwable error, String outputPayload) {
if (traceNode == null || !traceNode.finished.compareAndSet(false, true)) {
return;