From 9fb3764f6a32748e6fa134b7ffdd34e517ac839e Mon Sep 17 00:00:00 2001 From: 0007 <0007@qq.com> Date: Wed, 27 Aug 2025 19:58:38 +0800 Subject: [PATCH] Add File --- .../core/react/ReActStepParser.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 agents-flex-core/src/main/java/com/agentsflex/core/react/ReActStepParser.java diff --git a/agents-flex-core/src/main/java/com/agentsflex/core/react/ReActStepParser.java b/agents-flex-core/src/main/java/com/agentsflex/core/react/ReActStepParser.java new file mode 100644 index 0000000..a2c7b0b --- /dev/null +++ b/agents-flex-core/src/main/java/com/agentsflex/core/react/ReActStepParser.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023-2025, Agents-Flex (fuhai999@gmail.com). + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.agentsflex.core.react; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public interface ReActStepParser { + + ReActStepParser DEFAULT = new ReActStepParser() { + private final Pattern STEP_PATTERN = Pattern.compile( + "Thought: (.*?)\n" + + "Action: (.*?)\n" + + "Action Input: (\\{.*?})", + Pattern.DOTALL + ); + + @Override + public List parse(String content) { + List steps = new ArrayList<>(); + Matcher matcher = STEP_PATTERN.matcher(content); + + while (matcher.find()) { + String thought = matcher.group(1).trim(); + String action = matcher.group(2).trim(); + String actionInput = matcher.group(3).trim(); + + steps.add(new ReActStep(thought, action, actionInput)); + } + + return steps; + } + }; + + + List parse(String content); + + + default boolean isFinalAnswer(String content) { + return content.contains(getFinalAnswerFlag()); + } + + default boolean isReActAction(String content) { + return content.contains("Action:") && content.contains("Action Input:"); + } + + default String getFinalAnswerFlag() { + return "Final Answer:"; + } +}