Solon v3.7.3

solon-flow 集成参考(硬编码方式)

</> markdown

硬编码方式即:没有 yaml 配置,也没有容器参与;使用纯 Java 编码。

(基于上个示例)调整

  • 所有节点组件,去掉 @Component 注解。作为普通类
  • 取消 flow/demo1.yml 编排文件
  • 修改 DemoAi,通过代码构建“流图”(v3.7.3 后支持)

DemoAgent 修改后示例:

public class DemoAgent {
    private static final Logger log = LoggerFactory.getLogger(DemoAi2.class);

    public static void main(String[] args) throws Throwable {
        final int MAX_REVISIONS = 3;

        FlowEngine flowEngine = FlowEngine.newInstance();

        ChatModel chatModel = ChatModel.of("http://127.0.0.1:11434/api/chat")
                .provider("ollama")
                .model("qwen2.5:1.5b")
                .build();

        FlowContext context = FlowContext.of()
                .put("MAX_REVISIONS", MAX_REVISIONS)
                .put("draft_content", "")
                .put("review_status", "NONE")
                .put("feedback", "")
                .put("revision_count", new AtomicInteger(0))
                .put("messages", Utils.asList(ChatMessage.ofUser("智能家居的未来趋势和潜在挑战。")));


        log.info("--- 启动内容审核 Agent ---");

        Graph graph = Graph.create("demo1", decl -> {
            decl.addStart("start").linkAdd("agent");

            decl.addActivity("agent").task(new AiNodeAgent(chatModel)).linkAdd("review");
            decl.addExclusive("review").task(new AiNodeReview())
                    .linkAdd("final_approval", lc -> lc.when(fc -> "APPROVED".equals(fc.get("review_status"))))
                    .linkAdd("final_failure", lc -> lc.when(fc -> "REJECTED".equals(fc.get("review_status")) && fc.<AtomicInteger>getAs("revision_count").get() >= MAX_REVISIONS))
                    .linkAdd("agent", lc -> lc.when(fc -> "REJECTED".equals(fc.get("review_status")) && fc.<AtomicInteger>getAs("revision_count").get() < MAX_REVISIONS))
                    .linkAdd("review");

            decl.addActivity("final_approval").task(new AiNodeFinalApproval()).linkAdd("end");
            decl.addActivity("final_failure").task(new AiNodeFinalFailure()).linkAdd("end");

            decl.addEnd("end");
        });


        //执行
        flowEngine.eval(graph, context);


        //执行后打印
        System.out.println(context.get("draft_content").toString());
        
        List<ChatMessage> messageList = context.getAs("messages");
        for (ChatMessage message : messageList) {
            System.out.println(message);
        }
    }
}