agentscope-ai / agentscope-ai/agentscope-java

使用自定义工作流CompiledGraph, agui无法返回事件流,REASONING_MESSAGE_CONTENT和TEXT_MESSAGE_CONTENT等重要的事件流类型没有

Đang mở
#2,102 6 bình luận 0 reaction 0 người được giao Xem trên GitHub
area/ext/integration bug
Ngôn ngữ chính
Java
Star
5.6k
Fork
1.3k
Merge trung bình
4 ngày 12 giờ
Pull request đã merge (30 ngày)
77

Mô tả

Image

`
/**
* 适配 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暴露服务

Image

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.