mirror of
https://gitcode.com/ageerle/ruoyi-ai.git
synced 2026-09-13 00:14:59 +00:00
fix: 修复链路追踪输出记录及关闭追踪时的额外开销
This commit is contained in:
@@ -43,26 +43,26 @@ public class DefaultTraceStreamSpan implements TraceStreamSpan {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finishSuccess() {
|
public void finishSuccess(String outputPayload) {
|
||||||
finish(TraceConstants.STATUS_SUCCESS, null);
|
finish(TraceConstants.STATUS_SUCCESS, null, outputPayload);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finishError(Throwable throwable) {
|
public void finishError(Throwable throwable) {
|
||||||
finish(TraceConstants.STATUS_ERROR, TracePayloadUtils.error(throwable, traceProperties));
|
finish(TraceConstants.STATUS_ERROR, TracePayloadUtils.error(throwable, traceProperties), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finishCancelledIfRunning() {
|
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)) {
|
if (!finished.compareAndSet(false, true)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
traceRecordService.finishNode(traceId, nodeId, status, errorMessage, null,
|
traceRecordService.finishNode(traceId, nodeId, status, errorMessage, outputPayload,
|
||||||
new Date(), System.currentTimeMillis() - startMillis);
|
new Date(), System.currentTimeMillis() - startMillis);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.warn("结束 trace stream span 失败,traceId={}, nodeId={}", traceId, nodeId, e);
|
log.warn("结束 trace stream span 失败,traceId={}, nodeId={}", traceId, nodeId, e);
|
||||||
|
|||||||
@@ -7,7 +7,14 @@ public interface TraceStreamSpan {
|
|||||||
|
|
||||||
void detach();
|
void detach();
|
||||||
|
|
||||||
void finishSuccess();
|
/**
|
||||||
|
* 结束成功的流式节点,并可写入输出摘要。
|
||||||
|
*/
|
||||||
|
default void finishSuccess() {
|
||||||
|
finishSuccess(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
void finishSuccess(String outputPayload);
|
||||||
|
|
||||||
void finishError(Throwable throwable);
|
void finishError(Throwable throwable);
|
||||||
|
|
||||||
|
|||||||
@@ -337,7 +337,8 @@ public class ChatServiceFacade implements IChatService {
|
|||||||
result, RoleType.ASSISTANT.getName(), chatRequest.getModel());
|
result, RoleType.ASSISTANT.getName(), chatRequest.getModel());
|
||||||
}
|
}
|
||||||
if (llmSpan != null) {
|
if (llmSpan != null) {
|
||||||
llmSpan.finishSuccess();
|
llmSpan.finishSuccess(RagTracePayloadBuilder.streamOutputSummary(
|
||||||
|
result == null ? 0 : result.length()));
|
||||||
}
|
}
|
||||||
finishTraceRun(traceRun, TraceConstants.STATUS_SUCCESS, null);
|
finishTraceRun(traceRun, TraceConstants.STATUS_SUCCESS, null);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@@ -76,6 +76,8 @@ public class KnowledgeRetrievalServiceImpl implements KnowledgeRetrievalService
|
|||||||
}
|
}
|
||||||
log.info("开始知识库检索, kid={}, query={}", queryVectorBo.getKid(), queryVectorBo.getQuery());
|
log.info("开始知识库检索, kid={}, query={}", queryVectorBo.getKid(), queryVectorBo.getQuery());
|
||||||
|
|
||||||
|
String retrievalInputPayload = traceActive()
|
||||||
|
? RagTracePayloadBuilder.retrievalInputSummary(queryVectorBo) : null;
|
||||||
List<KnowledgeRetrievalVo> finalResults = TraceNodeTemplate.withNode(traceRecordService, traceProperties,
|
List<KnowledgeRetrievalVo> finalResults = TraceNodeTemplate.withNode(traceRecordService, traceProperties,
|
||||||
"retrieval", RagTraceNodeTypes.NODE_RETRIEVAL,
|
"retrieval", RagTraceNodeTypes.NODE_RETRIEVAL,
|
||||||
KnowledgeRetrievalServiceImpl.class.getName(), "retrieve",
|
KnowledgeRetrievalServiceImpl.class.getName(), "retrieve",
|
||||||
@@ -206,8 +208,10 @@ public class KnowledgeRetrievalServiceImpl implements KnowledgeRetrievalService
|
|||||||
*/
|
*/
|
||||||
private List<KnowledgeRetrievalVo> performRerank(QueryVectorBo queryVectorBo, List<KnowledgeRetrievalVo> coarseResults) {
|
private List<KnowledgeRetrievalVo> performRerank(QueryVectorBo queryVectorBo, List<KnowledgeRetrievalVo> coarseResults) {
|
||||||
int topN = queryVectorBo.getRerankTopN() != null ? queryVectorBo.getRerankTopN() : queryVectorBo.getMaxResults();
|
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",
|
TraceNodeHandle traceNode = startTraceNode("rerank", RagTraceNodeTypes.NODE_RERANK, "performRerank",
|
||||||
RagTracePayloadBuilder.rerankInputSummary(queryVectorBo, coarseResults.size(), topN));
|
rerankInputPayload);
|
||||||
try {
|
try {
|
||||||
RerankModelService rerankModel = rerankModelFactory.createModel(queryVectorBo.getRerankModelName());
|
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) {
|
private void finishTraceNode(TraceNodeHandle traceNode, String status, Throwable error, String outputPayload) {
|
||||||
if (traceNode == null || !traceNode.finished.compareAndSet(false, true)) {
|
if (traceNode == null || !traceNode.finished.compareAndSet(false, true)) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user