From 1c14227bcbeeed22fa570196a1fbf16823caf7a0 Mon Sep 17 00:00:00 2001 From: liyun Date: Tue, 22 Apr 2025 19:21:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(core):=20=E4=BC=98=E5=8C=96=20HttpNode=20?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E4=BD=93=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=9B=E4=BC=98=E5=8C=96KnowledgeNodeParser=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E9=80=BB=E8=BE=91=20-=20=E8=A7=A3=E5=86=B3=20bodyType?= =?UTF-8?q?=E3=80=81bodyJson=20=E6=9C=AA=E4=B8=8E=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=EF=BC=8C=E5=AF=BC=E8=87=B4=E7=A9=BA=E5=80=BC?= =?UTF-8?q?=E8=BF=9B=E8=80=8C=E5=BD=B1=E5=93=8Dpost-json=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B=20-=20PO?= =?UTF-8?q?ST=E6=96=B9=E5=BC=8F=E4=B8=8D=E5=90=91url=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E5=8F=82=E6=95=B0=EF=BC=9B=20-=20getRequestBody=20=E5=B0=86Nod?= =?UTF-8?q?e=E5=8F=82=E6=95=B0=E7=9A=84=E5=80=BC=E8=A6=86=E7=9B=96?= =?UTF-8?q?=E5=88=B0=E5=89=8D=E7=AB=AF=E9=85=8D=E7=BD=AE=E7=9A=84json?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E4=B8=AD=EF=BC=9B=20-=20KnowledgeNodeParser?= =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=20setKeyword=EF=BC=9B=20-=20BaseNodeParse?= =?UTF-8?q?r=20=E5=A2=9E=E5=8A=A0=20setValue=EF=BC=8C=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E9=85=8D=E7=BD=AE=E7=9A=84=E5=80=BC=E5=9C=A8?= =?UTF-8?q?Node=E6=89=A7=E8=A1=8C=E4=BA=8B=E6=97=B6=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/dev/tinyflow/core/node/HttpNode.java | 115 ++++++++++-------- .../tinyflow/core/parser/BaseNodeParser.java | 1 + .../core/parser/impl/HttpNodeParser.java | 4 +- .../core/parser/impl/KnowledgeNodeParser.java | 1 + 4 files changed, 65 insertions(+), 56 deletions(-) diff --git a/tinyflow-java-core/src/main/java/dev/tinyflow/core/node/HttpNode.java b/tinyflow-java-core/src/main/java/dev/tinyflow/core/node/HttpNode.java index 2d272ac..1157a38 100644 --- a/tinyflow-java-core/src/main/java/dev/tinyflow/core/node/HttpNode.java +++ b/tinyflow-java-core/src/main/java/dev/tinyflow/core/node/HttpNode.java @@ -22,7 +22,14 @@ import com.agentsflex.core.chain.node.BaseNode; import com.agentsflex.core.llm.client.OkHttpClientUtil; import com.agentsflex.core.util.StringUtil; import com.alibaba.fastjson.JSON; -import okhttp3.*; +import com.alibaba.fastjson.JSONObject; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okhttp3.ResponseBody; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -39,12 +46,42 @@ public class HttpNode extends BaseNode { private List headers; private List urlParameters; - private String bodyDataType; + private String bodyType; private List fromData; private List fromUrlencoded; - private String jsonBody; + private String bodyJson; private String rawBody; + public static String mapToQueryString(Map map) { + if (map == null || map.isEmpty()) { + return ""; + } + + StringBuilder stringBuilder = new StringBuilder(); + + for (String key : map.keySet()) { + if (StringUtil.noText(key)) { + continue; + } + if (stringBuilder.length() > 0) { + stringBuilder.append("&"); + } + stringBuilder.append(key.trim()); + stringBuilder.append("="); + Object value = map.get(key); + stringBuilder.append(value == null ? "" : urlEncode(value.toString().trim())); + } + return stringBuilder.toString(); + } + + public static String urlEncode(String string) { + try { + return URLEncoder.encode(string, "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + public String getUrl() { return url; } @@ -77,12 +114,12 @@ public class HttpNode extends BaseNode { this.urlParameters = urlParameters; } - public String getBodyDataType() { - return bodyDataType; + public String getBodyType() { + return bodyType; } - public void setBodyDataType(String bodyDataType) { - this.bodyDataType = bodyDataType; + public void setBodyType(String bodyType) { + this.bodyType = bodyType; } public List getFromData() { @@ -101,12 +138,12 @@ public class HttpNode extends BaseNode { this.fromUrlencoded = fromUrlencoded; } - public String getJsonBody() { - return jsonBody; + public String getBodyJson() { + return bodyJson; } - public void setJsonBody(String jsonBody) { - this.jsonBody = jsonBody; + public void setBodyJson(String bodyJson) { + this.bodyJson = bodyJson; } public String getRawBody() { @@ -117,17 +154,15 @@ public class HttpNode extends BaseNode { this.rawBody = rawBody; } - @Override protected Map execute(Chain chain) { Map urlDataMap = chain.getParameterValues(this, urlParameters); String parametersString = mapToQueryString(urlDataMap); - String newUrl = parametersString.isEmpty() ? url : url + + String newUrl = "POST".equalsIgnoreCase(method) || parametersString.isEmpty() ? url : url + (url.contains("?") ? "&" + parametersString : "?" + parametersString); - Request.Builder reqBuilder = new Request.Builder() - .url(newUrl); + Request.Builder reqBuilder = new Request.Builder().url(newUrl); Map headersMap = chain.getParameterValues(this, headers); headersMap.forEach((s, o) -> reqBuilder.addHeader(s, String.valueOf(o))); @@ -135,7 +170,7 @@ public class HttpNode extends BaseNode { if (StringUtil.noText(method) || "GET".equalsIgnoreCase(method)) { reqBuilder.method("GET", null); } else { - reqBuilder.method(method.toUpperCase(), getRequestBody(chain)); + reqBuilder.method(method.toUpperCase(), getRequestBody(chain, urlDataMap)); } @@ -180,18 +215,20 @@ public class HttpNode extends BaseNode { } } - private RequestBody getRequestBody(Chain chain) { - if ("json".equals(bodyDataType)) { - return RequestBody.create(jsonBody, MediaType.parse("application/json")); + private RequestBody getRequestBody(Chain chain, Map urlDataMap) { + if ("json".equals(bodyType)) { + JSONObject object = JSON.parseObject(bodyJson); + object.putAll(urlDataMap); + return RequestBody.create(JSON.toJSONString(object), MediaType.parse("application/json")); } - if ("x-www-form-urlencoded".equals(bodyDataType)) { + if ("x-www-form-urlencoded".equals(bodyType)) { Map formUrlencodedMap = chain.getParameterValues(this, fromUrlencoded); String bodyString = mapToQueryString(formUrlencodedMap); return RequestBody.create(bodyString, MediaType.parse("application/x-www-form-urlencoded")); } - if ("form-data".equals(bodyDataType)) { + if ("form-data".equals(bodyType)) { Map formDataMap = chain.getParameterValues(this, fromData); MultipartBody.Builder builder = new MultipartBody.Builder() @@ -216,43 +253,13 @@ public class HttpNode extends BaseNode { return builder.build(); } - if ("raw".equals(bodyDataType)) { + if ("raw".equals(bodyType)) { return RequestBody.create(rawBody, null); } //none return RequestBody.create("", null); } - public static String mapToQueryString(Map map) { - if (map == null || map.isEmpty()) { - return ""; - } - - StringBuilder stringBuilder = new StringBuilder(); - - for (String key : map.keySet()) { - if (StringUtil.noText(key)) { - continue; - } - if (stringBuilder.length() > 0) { - stringBuilder.append("&"); - } - stringBuilder.append(key.trim()); - stringBuilder.append("="); - Object value = map.get(key); - stringBuilder.append(value == null ? "" : urlEncode(value.toString().trim())); - } - return stringBuilder.toString(); - } - - public static String urlEncode(String string) { - try { - return URLEncoder.encode(string, "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - } - @Override public String toString() { return "HttpNode{" + @@ -260,10 +267,10 @@ public class HttpNode extends BaseNode { ", method='" + method + '\'' + ", headers=" + headers + ", parameters=" + urlParameters + - ", bodyDataType='" + bodyDataType + '\'' + + ", bodyType='" + bodyType + '\'' + ", fromData=" + fromData + ", fromUrlencoded=" + fromUrlencoded + - ", jsonBody='" + jsonBody + '\'' + + ", bodyJson='" + bodyJson + '\'' + ", rawBody='" + rawBody + '\'' + ", description='" + description + '\'' + ", parameter=" + urlParameters + diff --git a/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/BaseNodeParser.java b/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/BaseNodeParser.java index 711410c..f575492 100644 --- a/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/BaseNodeParser.java +++ b/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/BaseNodeParser.java @@ -62,6 +62,7 @@ public abstract class BaseNodeParser implements NodeParser { parameter.setRefType(RefType.ofValue(parameterJsonObject.getString("refType"))); parameter.setRequired(parameterJsonObject.getBooleanValue("required")); parameter.setDefaultValue(parameterJsonObject.getString("defaultValue")); + parameter.setValue(parameterJsonObject.getString("value")); JSONArray childrenJSONArray = parameterJsonObject.getJSONArray("children"); diff --git a/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/HttpNodeParser.java b/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/HttpNodeParser.java index 024a2e1..dcb416a 100644 --- a/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/HttpNodeParser.java +++ b/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/HttpNodeParser.java @@ -32,9 +32,9 @@ public class HttpNodeParser extends BaseNodeParser { JSONObject data = getData(nodeJSONObject); httpNode.setUrl(data.getString("url")); httpNode.setMethod(data.getString("method")); - httpNode.setBodyDataType(data.getString("bodyDataType")); + httpNode.setBodyJson(data.getString("bodyJson")); httpNode.setRawBody(data.getString("rawBody")); - httpNode.setJsonBody(data.getString("jsonBody")); + httpNode.setBodyType(data.getString("bodyType")); List headers = getParameters(data, "headers"); httpNode.setHeaders(headers); diff --git a/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/KnowledgeNodeParser.java b/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/KnowledgeNodeParser.java index e7beaab..f464146 100644 --- a/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/KnowledgeNodeParser.java +++ b/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/KnowledgeNodeParser.java @@ -30,6 +30,7 @@ public class KnowledgeNodeParser extends BaseNodeParser { KnowledgeNode knowledgeNode = new KnowledgeNode(); knowledgeNode.setKnowledgeId(data.get("knowledgeId")); knowledgeNode.setLimit(data.getString("limit")); + knowledgeNode.setKeyword(data.getString("keyword")); KnowledgeProvider knowledgeProvider = tinyflow.getKnowledgeProvider(); if (knowledgeProvider != null) { -- Gitee