diff --git a/agents-flex-llm/agents-flex-llm-tencent/src/main/java/com/agentsflex/llm/tencent/TencentLlmUtil.java b/agents-flex-llm/agents-flex-llm-tencent/src/main/java/com/agentsflex/llm/tencent/TencentLlmUtil.java
new file mode 100644
index 0000000..74d67ad
--- /dev/null
+++ b/agents-flex-llm/agents-flex-llm-tencent/src/main/java/com/agentsflex/llm/tencent/TencentLlmUtil.java
@@ -0,0 +1,195 @@
+/*
+ * 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.llm.tencent;
+
+import com.agentsflex.core.llm.ChatOptions;
+import com.agentsflex.core.message.*;
+import com.agentsflex.core.parser.AiMessageParser;
+import com.agentsflex.core.parser.impl.DefaultAiMessageParser;
+import com.agentsflex.core.prompt.DefaultPromptFormat;
+import com.agentsflex.core.prompt.ImagePrompt;
+import com.agentsflex.core.prompt.Prompt;
+import com.agentsflex.core.prompt.PromptFormat;
+import com.agentsflex.core.util.Maps;
+import com.agentsflex.core.util.MessageUtil;
+import com.agentsflex.core.util.StringUtil;
+import com.alibaba.fastjson.JSONPath;
+import com.tencentcloudapi.common.DatatypeConverter;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+public class TencentLlmUtil {
+
+ private static final PromptFormat promptFormat = new DefaultPromptFormat() {
+ @Override
+ protected void buildMessageContent(Message message, Map map) {
+ map.clear();
+ if (message instanceof HumanMessage) {
+ map.put("Role", "user");
+ } else if (message instanceof AiMessage) {
+ map.put("Role", "assistant");
+ map.put("Content", "");
+ AiMessage aiMessage = (AiMessage) message;
+ List calls = aiMessage.getCalls();
+ if (calls != null && !calls.isEmpty()) {
+ buildToolCalls(map, calls);
+ return;
+ }
+ } else if (message instanceof SystemMessage) {
+ map.put("Role", "system");
+ } else if (message instanceof ToolMessage) {
+ map.put("Role", "tool");
+ map.put("Tool_call_id", ((ToolMessage) message).getToolCallId());
+ }
+ if (message instanceof HumanImageMessage) {
+ ImagePrompt prompt = ((HumanImageMessage) message).getPrompt();
+ List