feat(trace): support trace input/output information on Running/Sub AgentModule

This commit is contained in:
2026-04-13 22:27:11 +08:00
parent e65d3302c6
commit 737f9d122a
16 changed files with 61 additions and 18 deletions

View File

@@ -26,7 +26,7 @@ public class ActionCorrectionRecognizer extends AbstractAgentModule.Sub<Correcti
private CognitionCapability cognitionCapability;
@Override
public @NotNull Result<CorrectionRecognizerResult> execute(CorrectionRecognizerInput input) {
protected @NotNull Result<CorrectionRecognizerResult> doExecute(CorrectionRecognizerInput input) {
List<Message> messages = List.of(
resolveContextMessage(),
resolveTaskMessage(input)

View File

@@ -26,7 +26,7 @@ public class ActionCorrector extends AbstractAgentModule.Sub<CorrectorInput, Res
private CognitionCapability cognitionCapability;
@Override
public @NotNull Result<CorrectorResult> execute(CorrectorInput input) {
protected @NotNull Result<CorrectorResult> doExecute(CorrectorInput input) {
List<Message> messages = List.of(
resolveContextMessage(),
resolveTaskMessage(input)

View File

@@ -27,7 +27,7 @@ public class ParamsExtractor extends AbstractAgentModule.Sub<ExtractorInput, Res
private CognitionCapability cognitionCapability;
@Override
public @NotNull Result<ExtractorResult> execute(ExtractorInput input) {
protected @NotNull Result<ExtractorResult> doExecute(ExtractorInput input) {
List<Message> messages = List.of(
resolveContextMessage(),
resolveTaskMessage(input)

View File

@@ -68,7 +68,7 @@ public class ActionPlanner extends AbstractAgentModule.Running<PartnerRunningFlo
}
@Override
public void execute(@NotNull PartnerRunningFlowContext context) {
protected void doExecute(@NotNull PartnerRunningFlowContext context) {
String input = context.getInput();
Result<ExtractorResult> result = actionExtractor.execute(input)
.onFailure(exp -> {

View File

@@ -45,7 +45,7 @@ public class ActionEvaluator extends AbstractAgentModule.Sub<EvaluatorInput, Lis
* @return 评估结果集合
*/
@Override
public List<EvaluatorResult> execute(EvaluatorInput data) {
protected List<EvaluatorResult> doExecute(EvaluatorInput data) {
List<String> tendencies = data.getTendencies();
CountDownLatch latch = new CountDownLatch(tendencies.size());
List<EvaluatorResult> evaluatorResults = new ArrayList<>();

View File

@@ -20,7 +20,7 @@ public class ActionExtractor extends AbstractAgentModule.Sub<String, Result<Extr
private CognitionCapability cognitionCapability;
@Override
public @NotNull Result<ExtractorResult> execute(String input) {
protected @NotNull Result<ExtractorResult> doExecute(String input) {
List<Message> messages = List.of(
cognitionCapability.contextWorkspace().resolve(List.of(
ContextBlock.VisibleDomain.COGNITION,

View File

@@ -59,7 +59,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
}
@Override
public void execute(PartnerRunningFlowContext runningFlowContext) {
protected void doExecute(PartnerRunningFlowContext runningFlowContext) {
log.debug("Communicating with: {}", runningFlowContext.getSource());
executeChat(runningFlowContext);
}

View File

@@ -57,7 +57,7 @@ public class MemorySelector extends AbstractAgentModule.Running<PartnerRunningFl
private Lock inputsLock = new ReentrantLock();
@Override
public void execute(@NotNull PartnerRunningFlowContext runningFlowContext) {
protected void doExecute(@NotNull PartnerRunningFlowContext runningFlowContext) {
inputsLock.lock();
try {
collectedInputs.put(ZonedDateTime.now().toLocalDateTime(), runningFlowContext.getInput());

View File

@@ -45,7 +45,7 @@ public class SliceSelectEvaluator extends AbstractAgentModule.Sub<EvaluatorInput
}
@Override
public List<ActivatedMemorySlice> execute(EvaluatorInput evaluatorInput) {
protected List<ActivatedMemorySlice> doExecute(EvaluatorInput evaluatorInput) {
List<ActivatedMemorySlice> preparedSlices = evaluatorInput.getMemorySlices();
List<ActivatedMemorySlice> result = new ArrayList<>();
CountDownLatch latch = new CountDownLatch(preparedSlices.size());

View File

@@ -32,7 +32,7 @@ public class MemorySelectExtractor extends AbstractAgentModule.Sub<ExtractorInpu
private MemoryRuntime memoryRuntime;
@Override
public ExtractorResult execute(ExtractorInput input) {
protected ExtractorResult doExecute(ExtractorInput input) {
ExtractorResult extractorResult;
List<Message> messages = List.of(
resolveContextMessage(),

View File

@@ -85,7 +85,7 @@ public class MemoryUpdater extends AbstractAgentModule.Running<PartnerRunningFlo
}
@Override
public void execute(@NotNull PartnerRunningFlowContext context) {
protected void doExecute(@NotNull PartnerRunningFlowContext context) {
boolean trigger = cognitionCapability.getChatMessages().size() >= MEMORY_UPDATE_TRIGGER_ROLL_LIMIT;
if (!trigger) {
return;

View File

@@ -24,7 +24,7 @@ public class MultiSummarizer extends AbstractAgentModule.Sub<SummarizeInput, Res
private MemoryRuntime memoryRuntime;
@Override
public @NotNull Result<SummarizeResult> execute(SummarizeInput input) {
protected @NotNull Result<SummarizeResult> doExecute(SummarizeInput input) {
return formattedChat(
List.of(new Message(Message.Character.USER, JSONUtil.toJsonPrettyStr(input))),
SummarizeResult.class

View File

@@ -29,7 +29,7 @@ public class SingleSummarizer extends AbstractAgentModule.Sub<List<Message>, Voi
}
@Override
public Void execute(List<Message> chatMessages) {
protected Void doExecute(List<Message> chatMessages) {
log.debug("[MemorySummarizer] 长文本摘要开始...");
CountDownLatch latch = new CountDownLatch(chatMessages.size());
for (int i = 0; i < chatMessages.size(); i++) {

View File

@@ -13,7 +13,7 @@ import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
public class TotalSummarizer extends AbstractAgentModule.Sub<HashMap<String, String>, String> implements ActivateModel {
public String execute(HashMap<String, String> singleMemorySummary) {
protected String doExecute(HashMap<String, String> singleMemorySummary) {
return formattedChat(
List.of(new Message(Message.Character.USER, JSONUtil.toJsonPrettyStr(singleMemorySummary))),
SummaryContent.class

View File

@@ -23,7 +23,7 @@ public class PerceiveMonitor extends AbstractAgentModule.Running<PartnerRunningF
private CognitionCapability cognitionCapability;
@Override
public void execute(@NotNull PartnerRunningFlowContext context) {
protected void doExecute(@NotNull PartnerRunningFlowContext context) {
String lastInteractTime = perceiveCapability.refreshInteract();
ContextBlock block = new ContextBlock(
new CommunicationBlockContent(

View File

@@ -4,6 +4,8 @@ import org.slf4j.Logger
import org.slf4j.LoggerFactory
import work.slhaf.partner.framework.agent.factory.component.annotation.AgentComponent
import work.slhaf.partner.framework.agent.interaction.flow.RunningFlowContext
import work.slhaf.partner.framework.agent.log.LogAdviceProvider
import java.lang.reflect.ParameterizedType
/**
* 模块基类
@@ -18,16 +20,57 @@ sealed class AbstractAgentModule {
abstract class Running<T : RunningFlowContext> : AbstractAgentModule() {
abstract fun execute(context: T)
private val advice = run {
@Suppress("UNCHECKED_CAST")
LogAdviceProvider.createAdvice(
moduleName,
resolveGenericType(0) as Class<T>,
Void::class.java
) { context ->
doExecute(context)
null
}
}
fun execute(context: T) {
advice.invoke(context)
}
protected abstract fun doExecute(context: T)
abstract fun order(): Int
}
abstract class Sub<I, O> : AbstractAgentModule() {
abstract fun execute(input: I): O
private val advice = run {
@Suppress("UNCHECKED_CAST")
LogAdviceProvider.createAdvice(
moduleName,
resolveGenericType(0) as Class<I>,
resolveGenericType(1) as Class<O>
) { input ->
doExecute(input)
}
}
fun execute(input: I): O? {
return advice.invoke(input).getOrThrow()
}
protected abstract fun doExecute(input: I): O?
}
abstract class Standalone : AbstractAgentModule()
protected fun resolveGenericType(index: Int): Class<*> {
val genericType = (javaClass.genericSuperclass as? ParameterizedType)
?.actualTypeArguments
?.getOrNull(index)
?: return Any::class.java
return when (genericType) {
is Class<*> -> genericType
is ParameterizedType -> genericType.rawType as? Class<*> ?: Any::class.java
else -> Any::class.java
}
}
}