|
|
@@ -0,0 +1,66 @@
|
|
|
+package cn.com.yusys.ai.plus.harness.config;
|
|
|
+
|
|
|
+import com.fasterxml.jackson.databind.JsonNode;
|
|
|
+import io.agentscope.core.agent.Agent;
|
|
|
+import io.agentscope.core.agent.RuntimeContext;
|
|
|
+import io.agentscope.core.agent.StreamOptions;
|
|
|
+import io.agentscope.core.agui.adapter.AguiAgentAdapter;
|
|
|
+import io.agentscope.core.message.Msg;
|
|
|
+import io.agentscope.core.tool.Toolkit;
|
|
|
+import io.agentscope.core.agent.Event;
|
|
|
+import reactor.core.publisher.Flux;
|
|
|
+import reactor.core.publisher.Mono;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+public class UserAwareAgent implements Agent {
|
|
|
+
|
|
|
+ private final Agent delegate;
|
|
|
+
|
|
|
+ public UserAwareAgent(Agent delegate) {
|
|
|
+ this.delegate = delegate;
|
|
|
+ }
|
|
|
+
|
|
|
+ /** adapter.run() 最终调的就是这个 3 参 stream —— 在这里注入 userId。 */
|
|
|
+ @Override
|
|
|
+ @SuppressWarnings("deprecation")
|
|
|
+ public Flux<Event> stream(List<Msg> msgs, StreamOptions options, RuntimeContext ctx) {
|
|
|
+ return delegate.stream(msgs, options, withUserId(ctx));
|
|
|
+ }
|
|
|
+
|
|
|
+ private RuntimeContext withUserId(RuntimeContext ctx) {
|
|
|
+ String userId = null;
|
|
|
+ Object fp = ctx.get(AguiAgentAdapter.RUNTIME_CONTEXT_FORWARDED_PROPS_KEY);
|
|
|
+ if (fp instanceof Map<?, ?> map && map.get("userId") != null) {
|
|
|
+ userId = String.valueOf(map.get("userId"));
|
|
|
+ }
|
|
|
+ if (userId == null || userId.isBlank()) {
|
|
|
+ userId = "anonymous";
|
|
|
+ }
|
|
|
+ return RuntimeContext.builder().from(ctx).userId(userId).build();
|
|
|
+ }
|
|
|
+
|
|
|
+ // ---- 其余全部透传 ----
|
|
|
+ @Override public Toolkit getToolkit() { return delegate.getToolkit(); } // adapter 注入前端工具要用
|
|
|
+ @Override public String getAgentId() { return delegate.getAgentId(); }
|
|
|
+ @Override public String getName() { return delegate.getName(); }
|
|
|
+ @Override public void interrupt() { delegate.interrupt(); }
|
|
|
+ @Override public void interrupt(Msg msg) { delegate.interrupt(msg); }
|
|
|
+
|
|
|
+ @Override public Mono<Msg> call(List<Msg> msgs) { return delegate.call(msgs); }
|
|
|
+ @Override public Mono<Msg> call(List<Msg> msgs, Class<?> m) { return delegate.call(msgs, m); }
|
|
|
+ @Override public Mono<Msg> call(List<Msg> msgs, JsonNode s) { return delegate.call(msgs, s); }
|
|
|
+
|
|
|
+ @Override @SuppressWarnings("deprecation")
|
|
|
+ public Flux<Event> stream(List<Msg> msgs, StreamOptions o) { return delegate.stream(msgs, o); }
|
|
|
+ @Override @SuppressWarnings("deprecation")
|
|
|
+ public Flux<Event> stream(List<Msg> msgs, StreamOptions o, Class<?> m) { return delegate.stream(msgs, o, m); }
|
|
|
+ @Override @SuppressWarnings("deprecation")
|
|
|
+ public Flux<Event> stream(List<Msg> msgs, StreamOptions o, JsonNode s) { return delegate.stream(msgs, o, s); }
|
|
|
+
|
|
|
+ @Override public Mono<Void> observe(Msg msg) { return delegate.observe(msg); }
|
|
|
+ @Override public Mono<Void> observe(List<Msg> msgs) { return delegate.observe(msgs); }
|
|
|
+
|
|
|
+
|
|
|
+}
|