agentscope-ai / agentscope-ai/agentscope-java
使用自定义工作流CompiledGraph, agui无法返回事件流,REASONING_MESSAGE_CONTENT和TEXT_MESSAGE_CONTENT等重要的事件流类型没有
- Vorherrschende Sprache
- Java
- Sterne
- 5.6k
- Forks
- 1.3k
- Ø Merge
- 4 T. 12 Std.
- Gemergte PRs (30 T.)
- 77
Beschreibung
`
/**
* 适配 CompiledGraph 为 AgentScope Agent
*/
public class CompiledGraphAdapter implements Agent {
private final CompiledGraph compiledGraph;
private final String agentId;
private final String name;
public CompiledGraphAdapter(CompiledGraph compiledGraph) {
this(compiledGraph, "compiled-graph-agent", "opt_workflow_agent");
}
public CompiledGraphAdapter(CompiledGraph compiledGraph, String agentId, String name) {
this.compiledGraph = compiledGraph;
this.agentId = agentId;
this.name = name;
}
// ========== Agent 接口 ==========
@Override
public String getAgentId() {
return agentId;
}
@Override
public String getName() {
return name;
}
@Override
public void interrupt() {
// 可空实现
}
@Override
public void interrupt(Msg msg) {
// 可空实现
}
// ========== ObservableAgent ==========
@Override
public Mono observe(Msg msg) {
return Mono.empty();
}
@Override
public Mono observe(List msgs) {
return Mono.empty();
}
// ========== CallableAgent ==========
@Override
public Mono call(List msgs) {
return Mono.fromCallable(() -> {
// 1. 提取用户输入
String userContent = msgs.stream()
.filter(msg -> "USER".equalsIgnoreCase(msg.getRole().name()))
.map(Msg::getTextContent)
.reduce((a, b) -> b)
.orElse("");
// 2. 构建 Graph 输入 (OverAllState)
// 使用 Spring AI 的 UserMessage
Message userMessage = new UserMessage(userContent);
Map inputData = Map.of(
"messages", List.of(userMessage)
);
OverAllState graphInput = new OverAllState(inputData);
// 3. 执行 CompiledGraph
RunnableConfig config = RunnableConfig.builder().build();
OverAllState graphOutput = compiledGraph.invoke(graphInput, config)
.orElseThrow(() -> new RuntimeException("Graph 执行未返回结果"));
// 4. 提取结果
Map data = graphOutput.data();
Object finalReport = data.get("final_report");
AssistantMessage assistantMsg = (AssistantMessage) finalReport;
String textContent = assistantMsg.getText();
// 5. 构建 Msg
Msg resultMsg = Msg.builder()
.id(UUID.randomUUID().toString())
.role(MsgRole.ASSISTANT)
.textContent(textContent)
.build();
System.out.println("返回的 Msg: " + textContent);
return resultMsg;
});
}
@Override
public Mono call(List msgs, Class structuredModel) {
return call(msgs);
}
@Override
public Mono call(List msgs, com.fasterxml.jackson.databind.JsonNode schema) {
return call(msgs);
}
// ========== StreamableAgent ==========
@Override
public Flux stream(List msgs, StreamOptions options) {
// 调用 call 获取完整 Msg,然后包装为单个 AGENT_RESULT 事件
return call(msgs)
.map(msg -> new Event(EventType.SUMMARY, msg, true))
.flux();
}
@Override
public Flux stream(List msgs, StreamOptions options, Class structuredModel) {
return stream(msgs, options);
}
@Override
public Flux stream(List msgs, StreamOptions options, JsonNode schema) {
return stream(msgs, options);
}
}`
将自定义工作流通过agui暴露服务
Beitragsleitfaden
Bewertung
Dieses Issue wurde noch nicht bewertet.