Commit b0a0bc98 authored by alex yao's avatar alex yao

feat:Agent应用 图表生成插件

parent b5d4791b
...@@ -55,7 +55,6 @@ import org.apache.commons.lang.ArrayUtils; ...@@ -55,7 +55,6 @@ import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -204,13 +203,6 @@ public class AgentApplicationServiceImpl implements AgentApplicationService { ...@@ -204,13 +203,6 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
@Override @Override
public AgentResultEntity callAgentApplication(String agentId, String dialogueId, String largeModel, String agentSystem, Integer[] kdIds, Integer[] databaseIds, Integer communicationTurn, Float topP, Float temperature, List<Message> messages, List<Tool> tools, FunctionCallResult functionCallResult, boolean stream, Double score, Integer topK, KnowledgeSearchTypeEnum knowledgeSearchType, KnowledgeSuperclassProblemConfig superclassProblemConfig, HttpServletResponse httpServletResponse) throws Exception { public AgentResultEntity callAgentApplication(String agentId, String dialogueId, String largeModel, String agentSystem, Integer[] kdIds, Integer[] databaseIds, Integer communicationTurn, Float topP, Float temperature, List<Message> messages, List<Tool> tools, FunctionCallResult functionCallResult, boolean stream, Double score, Integer topK, KnowledgeSearchTypeEnum knowledgeSearchType, KnowledgeSuperclassProblemConfig superclassProblemConfig, HttpServletResponse httpServletResponse) throws Exception {
// 使用 CompletableFuture 来异步执行任务并处理可能的异常
CompletableFuture<FunctionResult> functionResultFuture = CompletableFuture.
supplyAsync(() -> functionCall(dialogueId, functionCallResult, agentId), executor)
.exceptionally(ex -> {
logger.error("functionCall error", ex);
return new FunctionResult();
});
CompletableFuture<List<DBChainResult>> dbChainResultsFuture = CompletableFuture CompletableFuture<List<DBChainResult>> dbChainResultsFuture = CompletableFuture
.supplyAsync(() -> database(messages, databaseIds), executor) .supplyAsync(() -> database(messages, databaseIds), executor)
.exceptionally(ex -> { .exceptionally(ex -> {
...@@ -225,11 +217,11 @@ public class AgentApplicationServiceImpl implements AgentApplicationService { ...@@ -225,11 +217,11 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
}); });
// 等待所有任务完成并获取结果 // 等待所有任务完成并获取结果
CompletableFuture.allOf(functionResultFuture, dbChainResultsFuture, knowledgeResultFuture).join(); CompletableFuture.allOf(dbChainResultsFuture, knowledgeResultFuture).join();
FunctionResult functionResult = functionResultFuture.join(); List<DBChainResult> dbChainResults = dbChainResultsFuture.get();
List<DBChainResult> dbChainResults = dbChainResultsFuture.join(); List<KnowledgeContentResult> knowledgeResult = knowledgeResultFuture.get();
List<KnowledgeContentResult> knowledgeResult = knowledgeResultFuture.join();
FunctionResult functionResult = functionCall(dialogueId, functionCallResult, agentId, dbChainResults, knowledgeResult);
if (superclassProblem(superclassProblemConfig, kdIds, knowledgeResult)) { if (superclassProblem(superclassProblemConfig, kdIds, knowledgeResult)) {
return sendProblemMess(stream, superclassProblemConfig, httpServletResponse); return sendProblemMess(stream, superclassProblemConfig, httpServletResponse);
...@@ -1077,12 +1069,12 @@ public class AgentApplicationServiceImpl implements AgentApplicationService { ...@@ -1077,12 +1069,12 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
* @param functionCallResult 函数调用结果 * @param functionCallResult 函数调用结果
* @param agentId 应用id * @param agentId 应用id
*/ */
private FunctionResult functionCall(String dialogueId, FunctionCallResult functionCallResult, String agentId) { private FunctionResult functionCall(String dialogueId, FunctionCallResult functionCallResult, String agentId, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
FunctionResult result = new FunctionResult(); FunctionResult result = new FunctionResult();
if (functionCallResult != null && functionCallResult.isNeed()) { if (functionCallResult != null && functionCallResult.isNeed()) {
// 执行函数返回结果 // 执行函数返回结果
LargeModelFunctionEnum functionEnum = LargeModelFunctionEnum.valueOf(functionCallResult.getFunctionCall().getName()); LargeModelFunctionEnum functionEnum = LargeModelFunctionEnum.valueOf(functionCallResult.getFunctionCall().getName());
AbstractFunctionResult abstractFunctionResult = functionEnum.getFunction().doFunction(functionCallResult.getFunctionCall().getArguments(), AgentApplicationTools.identifier(dialogueId, agentId)); AbstractFunctionResult abstractFunctionResult = functionEnum.getFunction().doFunction(functionCallResult.getFunctionCall().getArguments(), AgentApplicationTools.identifier(dialogueId, agentId), dbChainResults, knowledgeContentResults);
if (ObjectUtil.isNull(abstractFunctionResult) || StringUtils.isBlank(abstractFunctionResult.getPromptContent())) { if (ObjectUtil.isNull(abstractFunctionResult) || StringUtils.isBlank(abstractFunctionResult.getPromptContent())) {
throw new BusinessException("插件执行失败"); throw new BusinessException("插件执行失败");
} }
......
...@@ -279,6 +279,8 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest { ...@@ -279,6 +279,8 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest {
agentUseModifyEventInfo.setAgentId(agentId); agentUseModifyEventInfo.setAgentId(agentId);
agentUseModifyEventInfo.setIsPublish(CommonConstant.IsDeleted.N); agentUseModifyEventInfo.setIsPublish(CommonConstant.IsDeleted.N);
reduceSn = memberEquityService.reducePoint(userBaseEntity.getUserId(), pointDeductionNum, ModifyEventEnum.use, agentUseModifyEventInfo); reduceSn = memberEquityService.reducePoint(userBaseEntity.getUserId(), pointDeductionNum, ModifyEventEnum.use, agentUseModifyEventInfo);
//todo
//调用应用服务 //调用应用服务
agentApplicationService.callAgentApplication(agentId, dialogueId, model, agentApplicationService.callAgentApplication(agentId, dialogueId, model,
agentSystem, kdIds.toArray(new Integer[0]), databaseIds, communicationTurn, topP, agentSystem, kdIds.toArray(new Integer[0]), databaseIds, communicationTurn, topP,
......
...@@ -7,14 +7,12 @@ import cn.com.poc.common.utils.DocumentLoad; ...@@ -7,14 +7,12 @@ import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.SpringUtils; import cn.com.poc.common.utils.SpringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message; import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.MultiContent;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool; import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.LargeModelFunctionEnum; import cn.com.poc.thirdparty.resource.demand.ai.function.LargeModelFunctionEnum;
import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.MemoryVariableWriter; import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.MemoryVariableWriter;
import cn.com.poc.thirdparty.service.LLMService; import cn.com.poc.thirdparty.service.LLMService;
import cn.com.yict.framemax.core.i18n.I18nMessageException; import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
...@@ -60,7 +58,7 @@ public class AgentApplicationTools { ...@@ -60,7 +58,7 @@ public class AgentApplicationTools {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("key", key); jsonObject.put("key", key);
jsonObject.put("value", variableDefault); jsonObject.put("value", variableDefault);
LargeModelFunctionEnum.valueOf(functionName).getFunction().doFunction(jsonObject.toJSONString(), identifier(identifier, agentId)); LargeModelFunctionEnum.valueOf(functionName).getFunction().doFunction(jsonObject.toJSONString(), identifier(identifier, agentId), null, null);
} }
} }
} }
...@@ -174,7 +172,7 @@ public class AgentApplicationTools { ...@@ -174,7 +172,7 @@ public class AgentApplicationTools {
} }
query = "用户输入:" + query + "\n"; query = "用户输入:" + query + "\n";
if (CollectionUtils.isNotEmpty(fileUrls)) { if (CollectionUtils.isNotEmpty(fileUrls)) {
query = query + "用户上传文件地址:" + JsonUtils.serialize(fileUrls) + "\n" + "文件格式:" + fileUrls.get(0).substring(fileUrls.get(0).lastIndexOf(".")) + "\n"; query = query + "用户上传文件地址:" + JsonUtils.serialize(fileUrls) + "\n" + "文件格式:" + fileUrls.get(0).substring(fileUrls.get(0).lastIndexOf(".")) + "\n";
} else { } else {
query = query + "用户上传文件地址:无\n" + "文件格式:无\n"; query = query + "用户上传文件地址:无\n" + "文件格式:无\n";
} }
......
package cn.com.poc.thirdparty.resource.demand.ai.function; package cn.com.poc.thirdparty.resource.demand.ai.function;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import java.util.List; import java.util.List;
...@@ -10,11 +12,13 @@ public abstract class AbstractLargeModelFunction { ...@@ -10,11 +12,13 @@ public abstract class AbstractLargeModelFunction {
/** /**
* 执行函数 * 执行函数
* *
* @param content 入参 * @param content 入参
* @param identifier 唯一标识 * @param identifier 唯一标识
* @param dbChainResults
* @param knowledgeContentResults
* @return * @return
*/ */
public abstract AbstractFunctionResult doFunction(String content, String identifier); public abstract AbstractFunctionResult doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults);
/** /**
* 获取函数描述 * 获取函数描述
......
...@@ -2,6 +2,7 @@ package cn.com.poc.thirdparty.resource.demand.ai.function; ...@@ -2,6 +2,7 @@ package cn.com.poc.thirdparty.resource.demand.ai.function;
import cn.com.poc.common.utils.SpringUtils; import cn.com.poc.common.utils.SpringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.function.calculator.CalculatorFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.calculator.CalculatorFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.chart_generate.ChartGenerateFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.document_reader.DocumentReaderFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.document_reader.DocumentReaderFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.document_understanding.DocumentUnderstandIngFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.document_understanding.DocumentUnderstandIngFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.extraction.ContractExtractionFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.extraction.ContractExtractionFunction;
...@@ -49,6 +50,8 @@ public enum LargeModelFunctionEnum { ...@@ -49,6 +50,8 @@ public enum LargeModelFunctionEnum {
contract_extraction(ContractExtractionFunction.class), contract_extraction(ContractExtractionFunction.class),
chart_generate(ChartGenerateFunction.class),
; ;
private Class<? extends AbstractLargeModelFunction> function; private Class<? extends AbstractLargeModelFunction> function;
......
package cn.com.poc.thirdparty.resource.demand.ai.function.bing_web_search; package cn.com.poc.thirdparty.resource.demand.ai.function.bing_web_search;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -15,7 +17,7 @@ import java.util.List; ...@@ -15,7 +17,7 @@ import java.util.List;
public class BingWebSearchFunction extends AbstractLargeModelFunction { public class BingWebSearchFunction extends AbstractLargeModelFunction {
@Override @Override
public AbstractFunctionResult doFunction(String content, String identifier) { public AbstractFunctionResult doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
return null; return null;
} }
......
package cn.com.poc.thirdparty.resource.demand.ai.function.calculator; package cn.com.poc.thirdparty.resource.demand.ai.function.calculator;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
...@@ -30,7 +32,7 @@ public class CalculatorFunction extends AbstractLargeModelFunction { ...@@ -30,7 +32,7 @@ public class CalculatorFunction extends AbstractLargeModelFunction {
.build(); .build();
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
JSONObject jsonObject = JSONObject.parseObject(content); JSONObject jsonObject = JSONObject.parseObject(content);
String arithmeticExpression = jsonObject.getString("arithmetic_expression"); String arithmeticExpression = jsonObject.getString("arithmetic_expression");
......
package cn.com.poc.thirdparty.resource.demand.ai.function.chart_generate;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Parameters;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Properties;
import cn.com.poc.thirdparty.service.LLMService;
import cn.hutool.core.collection.ListUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
* @author alex.yao
* @date 2025/5/29
*/
@Component
public class ChartGenerateFunction extends AbstractLargeModelFunction {
@Resource
private LLMService llmService;
private final Logger logger = LoggerFactory.getLogger(ChartGenerateFunction.class);
private final String MODEL = "deepseek-v3";
private final String DESC = "根据用户问题和现有数据生成mermaid图表,如生成饼状图,折线图,散点图,柱状图,流程图等";
private final FunctionLLMConfig functionLLMConfig = new FunctionLLMConfig.FunctionLLMConfigBuilder()
.name("chart_generate")
.description(DESC)
.parameters(new Parameters("object")
.addProperties("question", new Properties("string", "用户问题优化后的问题"))
.addProperties("data", new Properties("string", "如果用户问题中存在数据则解析或截取对应的数据"))
.addProperties("theme", new Properties("string", "根据用户问题和上下文生成的图表主题"))
.addProperties("chart_type", new Properties("string", "图表类型", ListUtil.toList("饼状图", "折线图", "散点图", "柱状图", "流程图"))))
.build();
private final String SYSTEM_PROMPT = "您是一名专业的数据可视化工程师,请根据以下要求生成图表配置:\n" +
"**主题**:\n" +
"${theme}\n" +
"**输入数据**:\n" +
"上下文提取数据:\n" +
"${data}\n" +
"\n" +
"数据库数据:\n" +
"${database_result}\n" +
"\n" +
"知识库数据:\n" +
"${knowledge_result}\n" +
"\n" +
"**图形类型**:\n" +
"${chart_type}\n" +
"\n" +
"**配置要求**:\n" +
"1. 图表标题应准确反映数据主题\n" +
"2. 使用与数据类型匹配的图表子类型(如堆积柱状图、面积折线图等)\n" +
"3. 坐标轴需要包含单位说明\n" +
"4. 使用最简单的方式生成,不要样式\n" +
"\n" +
"**输出要求**:\n" +
"- 仅返回可直接用于Markdown的Mermaid配置\n" +
"- 包含完整的Mermaid配置项\n" +
"- 严格准许 Mermaid 的语法\n" +
"- 注意中文标题需要带双引号\n" +
"请以Markdown格式返回配置, 思考好了之后再输出,不要输出其他内容,如解释或注释。\n" +
"\n" +
"**示例**\n" +
"目标生成折线图:\n" +
"xychart-beta\n" +
" line [+1.3, .6, 2.4, -.34]";
@Override
public AbstractFunctionResult<String> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
result.setFunctionResult(StringUtils.EMPTY);
result.setPromptContent(StringUtils.EMPTY);
if (StringUtils.isBlank(content)) {
return result;
}
JSONObject jsonObject = JSON.parseObject(content);
if (!jsonObject.containsKey("question") || !jsonObject.containsKey("chart_type")) {
logger.warn("缺少必要参数,无法生成图表,content:{}", content);
return result;
}
String question = jsonObject.getString("question");
Message systemMessage = new Message();
systemMessage.setRole("system");
systemMessage.setContent(buildPrompt(jsonObject, dbChainResults, knowledgeContentResults));
Message userMessage = new Message();
userMessage.setContent(question);
userMessage.setRole("user");
Message[] messages = new Message[]{systemMessage, userMessage};
LargeModelResponse largeModelResponse = new LargeModelResponse();
largeModelResponse.setModel(MODEL);
largeModelResponse.setMessages(messages);
largeModelResponse.setStream(false);
largeModelResponse.setUser("Chart_Function");
LargeModelDemandResult largeModelDemandResult = llmService.chat(largeModelResponse);
if (largeModelDemandResult == null) {
result.setFunctionResult(StringUtils.EMPTY);
result.setPromptContent(StringUtils.EMPTY);
return result;
}
result.setFunctionResult(largeModelDemandResult.getMessage());
result.setPromptContent(largeModelDemandResult.getMessage());
return result;
}
@Override
public String getDesc() {
return DESC;
}
@Override
public List<String> getLLMConfig() {
return ListUtil.toList(JsonUtils.serialize(functionLLMConfig));
}
@Override
public List<String> getLLMConfig(List<Variable> variableStructure) {
return this.getLLMConfig();
}
private String buildPrompt(JSONObject jsonObject, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
String chartType = StringUtils.EMPTY;
String theme = StringUtils.EMPTY;
String data = StringUtils.EMPTY;
String sqlResult = StringUtils.EMPTY;
String knowledgeResult = StringUtils.EMPTY;
if (jsonObject.containsKey("chart_type")) {
chartType = jsonObject.getString("chart_type");
}
if (jsonObject.containsKey("theme")) {
theme = jsonObject.getString("theme");
}
if (jsonObject.containsKey("data")) {
data = jsonObject.getString("data");
}
if (CollectionUtils.isNotEmpty(dbChainResults)) {
sqlResult = dbChainResults.get(0).getSqlResult();
}
if (CollectionUtils.isNotEmpty(knowledgeContentResults)) {
StringBuilder stringBuilder = new StringBuilder();
int index = 1;
for (KnowledgeContentResult knowledgeContentResult : knowledgeContentResults) {
String content = knowledgeContentResult.getContent();
stringBuilder.append("Chunk ").append(index++).append(":").append(content).append("\n\n");
}
knowledgeResult = stringBuilder.toString();
}
return SYSTEM_PROMPT.replace("${chart_type}", chartType)
.replace("${theme}", theme)
.replace("{data}", data)
.replace("${database_result}", sqlResult)
.replace("${knowledge_result}", knowledgeResult);
}
}
package cn.com.poc.thirdparty.resource.demand.ai.function.document_reader; package cn.com.poc.thirdparty.resource.demand.ai.function.document_reader;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.DocumentLoad; import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils; import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
...@@ -34,7 +36,7 @@ public class DocumentReaderFunction extends AbstractLargeModelFunction { ...@@ -34,7 +36,7 @@ public class DocumentReaderFunction extends AbstractLargeModelFunction {
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content)) { if (StringUtils.isBlank(content)) {
result.setFunctionResult(StringUtils.EMPTY); result.setFunctionResult(StringUtils.EMPTY);
......
package cn.com.poc.thirdparty.resource.demand.ai.function.document_understanding; package cn.com.poc.thirdparty.resource.demand.ai.function.document_understanding;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.DocumentLoad; import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils; import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message; import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
...@@ -46,7 +48,7 @@ public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction { ...@@ -46,7 +48,7 @@ public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction {
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
result.setFunctionResult(StringUtils.EMPTY); result.setFunctionResult(StringUtils.EMPTY);
result.setPromptContent(StringUtils.EMPTY); result.setPromptContent(StringUtils.EMPTY);
......
package cn.com.poc.thirdparty.resource.demand.ai.function.extraction; package cn.com.poc.thirdparty.resource.demand.ai.function.extraction;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
...@@ -44,7 +46,7 @@ public class ContractExtractionFunction extends AbstractLargeModelFunction { ...@@ -44,7 +46,7 @@ public class ContractExtractionFunction extends AbstractLargeModelFunction {
.build(); .build();
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
String fileUrl; String fileUrl;
List<KeyInfo> keyInfos = new ArrayList<>(); List<KeyInfo> keyInfos = new ArrayList<>();
......
package cn.com.poc.thirdparty.resource.demand.ai.function.html_reader; package cn.com.poc.thirdparty.resource.demand.ai.function.html_reader;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.DocumentLoad; import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils; import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
...@@ -29,7 +31,7 @@ public class HtmlReaderFunction extends AbstractLargeModelFunction { ...@@ -29,7 +31,7 @@ public class HtmlReaderFunction extends AbstractLargeModelFunction {
.build(); .build();
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String key) { public AbstractFunctionResult<String> doFunction(String content, String key, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content)) { if (StringUtils.isBlank(content)) {
result.setFunctionResult("FAIL"); result.setFunctionResult("FAIL");
......
package cn.com.poc.thirdparty.resource.demand.ai.function.image_ocr; package cn.com.poc.thirdparty.resource.demand.ai.function.image_ocr;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.common.constant.MessageRoleConstant; import cn.com.poc.thirdparty.common.constant.MessageRoleConstant;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.ImageUrl; import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.ImageUrl;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message; import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.MultiContent; import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.MultiContent;
...@@ -47,7 +49,7 @@ public class ImageOCRFunction extends AbstractLargeModelFunction { ...@@ -47,7 +49,7 @@ public class ImageOCRFunction extends AbstractLargeModelFunction {
private LLMService llmService; private LLMService llmService;
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
JSONObject jsonObject = JSONObject.parseObject(content); JSONObject jsonObject = JSONObject.parseObject(content);
if (!jsonObject.containsKey("query") || !jsonObject.containsKey("image_url")) { if (!jsonObject.containsKey("query") || !jsonObject.containsKey("image_url")) {
......
package cn.com.poc.thirdparty.resource.demand.ai.function.long_document_reader; package cn.com.poc.thirdparty.resource.demand.ai.function.long_document_reader;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.DocumentLoad; import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils; import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message; import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
...@@ -49,7 +51,7 @@ public class LongDocumentReaderFunction extends AbstractLargeModelFunction { ...@@ -49,7 +51,7 @@ public class LongDocumentReaderFunction extends AbstractLargeModelFunction {
).build(); ).build();
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
result.setFunctionResult(StringUtils.EMPTY); result.setFunctionResult(StringUtils.EMPTY);
result.setPromptContent(StringUtils.EMPTY); result.setPromptContent(StringUtils.EMPTY);
......
package cn.com.poc.thirdparty.resource.demand.ai.function.long_memory; package cn.com.poc.thirdparty.resource.demand.ai.function.long_memory;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.DateUtils; import cn.com.poc.common.utils.DateUtils;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
...@@ -42,12 +44,14 @@ public class SetLongMemoryFunction extends AbstractLargeModelFunction { ...@@ -42,12 +44,14 @@ public class SetLongMemoryFunction extends AbstractLargeModelFunction {
/** /**
* 执行函数 * 执行函数
* *
* @param content 内容 * @param content 内容
* @param key 唯一标识 * @param key 唯一标识
* @param dbChainResults
* @param knowledgeContentResults
* @return * @return
*/ */
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String key) { public AbstractFunctionResult<String> doFunction(String content, String key, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
// 创建 JSONObject 对象 // 创建 JSONObject 对象
JSONObject contentJsonObject = new JSONObject(content); JSONObject contentJsonObject = new JSONObject(content);
// 提取 content // 提取 content
......
package cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer; package cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils; import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
...@@ -41,7 +43,7 @@ public class MemoryVariableWriterFunction extends AbstractLargeModelFunction { ...@@ -41,7 +43,7 @@ public class MemoryVariableWriterFunction extends AbstractLargeModelFunction {
private RedisService redisService; private RedisService redisService;
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content) || StringUtils.isBlank(identifier)) { if (StringUtils.isBlank(content) || StringUtils.isBlank(identifier)) {
result.setPromptContent("FAIL"); result.setPromptContent("FAIL");
......
package cn.com.poc.thirdparty.resource.demand.ai.function.notification_reminder; package cn.com.poc.thirdparty.resource.demand.ai.function.notification_reminder;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.*; import cn.com.poc.common.utils.*;
import cn.com.poc.support.security.oauth.entity.UserBaseEntity; import cn.com.poc.support.security.oauth.entity.UserBaseEntity;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
...@@ -37,7 +39,7 @@ public class NotificationReminderFunction extends AbstractLargeModelFunction { ...@@ -37,7 +39,7 @@ public class NotificationReminderFunction extends AbstractLargeModelFunction {
private FunctionLLMConfig functionLLMConfig; private FunctionLLMConfig functionLLMConfig;
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
UserBaseEntity userBaseEntity = BlContext.getCurrentUserNotException(); UserBaseEntity userBaseEntity = BlContext.getCurrentUserNotException();
if (userBaseEntity == null) { if (userBaseEntity == null) {
......
package cn.com.poc.thirdparty.resource.demand.ai.function.oa_form; package cn.com.poc.thirdparty.resource.demand.ai.function.oa_form;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils; import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message; import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
...@@ -78,12 +80,14 @@ public class TraveReimbursementlFormFunction extends AbstractLargeModelFunction ...@@ -78,12 +80,14 @@ public class TraveReimbursementlFormFunction extends AbstractLargeModelFunction
/** /**
* 执行函数 * 执行函数
* *
* @param content 入参 * @param content 入参
* @param identifier 唯一标识 * @param identifier 唯一标识
* @param dbChainResults
* @param knowledgeContentResults
* @return * @return
*/ */
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content)) { if (StringUtils.isBlank(content)) {
result.setFunctionResult(StringUtils.EMPTY); result.setFunctionResult(StringUtils.EMPTY);
......
package cn.com.poc.thirdparty.resource.demand.ai.function.oa_form; package cn.com.poc.thirdparty.resource.demand.ai.function.oa_form;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.DateUtils; import cn.com.poc.common.utils.DateUtils;
import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils; import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message; import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
...@@ -15,12 +16,9 @@ import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Parameters; ...@@ -15,12 +16,9 @@ import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Parameters;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Properties; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Properties;
import cn.com.poc.thirdparty.service.LLMService; import cn.com.poc.thirdparty.service.LLMService;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.File;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -82,12 +80,14 @@ public class TravelFormFunction extends AbstractLargeModelFunction { ...@@ -82,12 +80,14 @@ public class TravelFormFunction extends AbstractLargeModelFunction {
/** /**
* 执行函数 * 执行函数
* *
* @param content 入参 * @param content 入参
* @param identifier 唯一标识 * @param identifier 唯一标识
* @param dbChainResults
* @param knowledgeContentResults
* @return * @return
*/ */
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
// content = "我今天要去北京出差,主要是去客户那边交流一下"; // content = "我今天要去北京出差,主要是去客户那边交流一下";
AbstractFunctionResult<String> result = new AbstractFunctionResult<>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content)) { if (StringUtils.isBlank(content)) {
......
package cn.com.poc.thirdparty.resource.demand.ai.function.text_in_pdf2md; package cn.com.poc.thirdparty.resource.demand.ai.function.text_in_pdf2md;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
...@@ -40,7 +42,7 @@ public class PdfToMDFunction extends AbstractLargeModelFunction { ...@@ -40,7 +42,7 @@ public class PdfToMDFunction extends AbstractLargeModelFunction {
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<String>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<String>();
JSONObject jsonObject = JSONObject.parseObject(content); JSONObject jsonObject = JSONObject.parseObject(content);
if (!jsonObject.containsKey("file_url")) { if (!jsonObject.containsKey("file_url")) {
......
package cn.com.poc.thirdparty.resource.demand.ai.function.top_search; package cn.com.poc.thirdparty.resource.demand.ai.function.top_search;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
...@@ -32,7 +34,7 @@ public class DouyinTopSearchFunction extends AbstractLargeModelFunction { ...@@ -32,7 +34,7 @@ public class DouyinTopSearchFunction extends AbstractLargeModelFunction {
private TianApi tianApi; private TianApi tianApi;
@Override @Override
public AbstractFunctionResult<List<TianDouyinTopSearch>> doFunction(String content, String identifier) { public AbstractFunctionResult<List<TianDouyinTopSearch>> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<List<TianDouyinTopSearch>> result = new AbstractFunctionResult<>(); AbstractFunctionResult<List<TianDouyinTopSearch>> result = new AbstractFunctionResult<>();
TianCommonResult<TianDouyinTopSearch> douyinTopSearch = tianApi.getDouyinTopSearch(); TianCommonResult<TianDouyinTopSearch> douyinTopSearch = tianApi.getDouyinTopSearch();
......
package cn.com.poc.thirdparty.resource.demand.ai.function.top_search; package cn.com.poc.thirdparty.resource.demand.ai.function.top_search;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
...@@ -32,7 +34,7 @@ public class ToutiaoTopSearchFunction extends AbstractLargeModelFunction { ...@@ -32,7 +34,7 @@ public class ToutiaoTopSearchFunction extends AbstractLargeModelFunction {
private TianApi tianApi; private TianApi tianApi;
@Override @Override
public AbstractFunctionResult<List<TianToutiaoTopSearch>> doFunction(String content, String identifier) { public AbstractFunctionResult<List<TianToutiaoTopSearch>> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<List<TianToutiaoTopSearch>> result = new AbstractFunctionResult<List<TianToutiaoTopSearch>>(); AbstractFunctionResult<List<TianToutiaoTopSearch>> result = new AbstractFunctionResult<List<TianToutiaoTopSearch>>();
TianCommonResult<TianToutiaoTopSearch> toutiaoTopSearch = tianApi.getToutiaoTopSearch(); TianCommonResult<TianToutiaoTopSearch> toutiaoTopSearch = tianApi.getToutiaoTopSearch();
......
package cn.com.poc.thirdparty.resource.demand.ai.function.top_search; package cn.com.poc.thirdparty.resource.demand.ai.function.top_search;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
...@@ -33,7 +35,7 @@ public class WeiboTopSearchFunction extends AbstractLargeModelFunction { ...@@ -33,7 +35,7 @@ public class WeiboTopSearchFunction extends AbstractLargeModelFunction {
private TianApi tianApi; private TianApi tianApi;
@Override @Override
public AbstractFunctionResult<List<TianWeiboTopSearch>> doFunction(String content, String identifier) { public AbstractFunctionResult<List<TianWeiboTopSearch>> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<List<TianWeiboTopSearch>> result = new AbstractFunctionResult<List<TianWeiboTopSearch>>(); AbstractFunctionResult<List<TianWeiboTopSearch>> result = new AbstractFunctionResult<List<TianWeiboTopSearch>>();
TianCommonResult<TianWeiboTopSearch> weiboTopSearch = tianApi.getWeiboTopSearch(); TianCommonResult<TianWeiboTopSearch> weiboTopSearch = tianApi.getWeiboTopSearch();
......
package cn.com.poc.thirdparty.resource.demand.ai.function.web_seach; package cn.com.poc.thirdparty.resource.demand.ai.function.web_seach;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.DocumentLoad; import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils; import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
...@@ -70,7 +72,7 @@ public class WebSearchFunction extends AbstractLargeModelFunction { ...@@ -70,7 +72,7 @@ public class WebSearchFunction extends AbstractLargeModelFunction {
} }
@Override @Override
public AbstractFunctionResult<List<WebSearchFunctionResult>> doFunction(String content, String identifier) { public AbstractFunctionResult<List<WebSearchFunctionResult>> doFunction(String content, String identifier, List<DBChainResult> dbChainResults, List<KnowledgeContentResult> knowledgeContentResults) {
AbstractFunctionResult<List<WebSearchFunctionResult>> result = new AbstractFunctionResult<>(); AbstractFunctionResult<List<WebSearchFunctionResult>> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content)) { if (StringUtils.isBlank(content)) {
result.setPromptContent("FAIL"); result.setPromptContent("FAIL");
......
package cn.com.poc.thirdparty.resource.demand.ai.function;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.agent_application.utils.AgentApplicationTools;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult;
import cn.com.poc.thirdparty.resource.demand.ai.function.chart_generate.ChartGenerateFunction;
import cn.com.poc.thirdparty.service.LLMService;
import cn.com.yict.framemax.core.spring.SingleContextInitializer;
import com.alibaba.fastjson.JSONObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @author alex.yao
* @date 2025/5/12
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(initializers = SingleContextInitializer.class)
@WebAppConfiguration
public class ChartGenerateFunctionTest {
@Resource
ChartGenerateFunction chartGenerateFunction;
@Resource
LLMService llmService;
@Test
public void test_doFunction() {
// String json = "{\"chart_type\": \"折线图\", \"data\": \"2022-03-15 500000.00 定金 银行转账 YXSK20220315001 1 购房定金 2022-04-01 1500000.00 首付 银行转账 YXSK20220401001 1 首付款30% 2022-10-01 2450000.00 尾款 银行转账 YXSK20221001001 1 银行按揭放款 2022-04-20 500000.00 定金 银行转账 YXSK20220420001 2 购房定金 2022-05-05 1500000.00 首付 银行转账 YXSK20220505001 2 首付款30% 2022-11-01 2550000.00 尾款 银行转账 YXSK20221101001 2 银行按揭放款\", \"question\": \"帮我将一下数据生成折线图\", \"theme\": \"购房款项支付情况\"}'}";
JSONObject jsonObject = new JSONObject();
jsonObject.put("question", "帮我将一下数据生成折线图");
jsonObject.put("chart_type", "折线图");
jsonObject.put("theme", "购房款项支付情况");
jsonObject.put("data", "2022-03-15 500000.00 定金 银行转账 YXSK20220315001 1 购房定金 2022-04-01 1500000.00 首付 银行转账 YXSK20220401001 1 首付款30% 2022-10-01 2450000.00 尾款 银行转账 YXSK20221001001 1 银行按揭放款 2022-04-20 500000.00 定金 银行转账 YXSK20220420001 2 购房定金 2022-05-05 1500000.00 首付 银行转账 YXSK20220505001 2 首付款30% 2022-11-01 2550000.00 尾款 银行转账 YXSK20221101001 2 银行按揭放款");
String content = jsonObject.toJSONString();
String identifier = "test_function";
List<DBChainResult> dbChainResults = new ArrayList<>();
List<KnowledgeContentResult> knowledgeContentResults = new ArrayList<>();
AbstractFunctionResult<String> result = chartGenerateFunction.doFunction(content, identifier, dbChainResults, knowledgeContentResults);
System.out.println(result.getFunctionResult());
}
@Test
public void test_functionCall() {
String[] strings = new String[]{"chart_generate"};
List<Tool> tools = AgentApplicationTools.buildFunctionConfig(new ArrayList<>(), "N", "test", "test"
, strings, "N");
FunctionCallResult functionCallResult = llmService.functionCall("帮我将一下数据生成折线图\n" +
" 2022-03-15 500000.00 定金 银行转账 YXSK20220315001 1 购房定金\n" +
" 2022-04-01 1500000.00 首付 银行转账 YXSK20220401001 1 首付款30%\n" +
" 2022-10-01 2450000.00 尾款 银行转账 YXSK20221001001 1 银行按揭放款\n" +
"2022-04-20 500000.00 定金 银行转账 YXSK20220420001 2 购房定金\n" +
"2022-05-05 1500000.00 首付 银行转账 YXSK20220505001 2 首付款30%\n" +
" 2022-11-01 2550000.00 尾款 银行转账 YXSK20221101001 2 银行按揭放款\n" +
"\n", tools.toArray(new Tool[0]));
System.out.println(functionCallResult);
}
@Test
public void test_getLLMConfig() {
System.out.println(chartGenerateFunction.getLLMConfig());
}
}
...@@ -14,8 +14,6 @@ import javax.annotation.Resource; ...@@ -14,8 +14,6 @@ import javax.annotation.Resource;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import static org.apache.poi.hslf.record.RecordTypes.List;
@RunWith(SpringJUnit4ClassRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(initializers = SingleContextInitializer.class) @ContextConfiguration(initializers = SingleContextInitializer.class)
@WebAppConfiguration @WebAppConfiguration
...@@ -28,7 +26,7 @@ public class DocumentUnderstandingFunctionTest { ...@@ -28,7 +26,7 @@ public class DocumentUnderstandingFunctionTest {
public void testDoFunction() { public void testDoFunction() {
String content = "{\"file_url\": \"https://gsst-poe-sit.gz.bcebos.com/data/20250410/1744277235901.pdf\",\"question\":\"Can a registered Grade C electrical worker work on the electrical work of a Grade A electrical worker?\"}"; String content = "{\"file_url\": \"https://gsst-poe-sit.gz.bcebos.com/data/20250410/1744277235901.pdf\",\"question\":\"Can a registered Grade C electrical worker work on the electrical work of a Grade A electrical worker?\"}";
String identifier = UUID.randomUUID().toString(); String identifier = UUID.randomUUID().toString();
AbstractFunctionResult<String> result = documentUnderstandIngFunction.doFunction(content, identifier); AbstractFunctionResult<String> result = documentUnderstandIngFunction.doFunction(content, identifier, null, null);
System.out.println(result.getFunctionResult()); System.out.println(result.getFunctionResult());
} }
......
...@@ -22,6 +22,6 @@ public class GoogleSearchFunctionTest { ...@@ -22,6 +22,6 @@ public class GoogleSearchFunctionTest {
@Test @Test
public void testSearch() throws IOException, GeneralSecurityException { public void testSearch() throws IOException, GeneralSecurityException {
WebSearchFunction webSearchFunction = new WebSearchFunction(); WebSearchFunction webSearchFunction = new WebSearchFunction();
System.out.println(webSearchFunction.doFunction("{\"query\":\"今日广州天气\"}", "1")); System.out.println(webSearchFunction.doFunction("{\"query\":\"今日广州天气\"}", "1",null ,null ));
} }
} }
...@@ -29,7 +29,7 @@ public class ImageOCRFunctionTest { ...@@ -29,7 +29,7 @@ public class ImageOCRFunctionTest {
@Test @Test
public void testOCR() { public void testOCR() {
String content = "{\"query\":\"图片有什么?\",\"image_url\":\"https://ark-project.tos-cn-beijing.volces.com/images/view.jpeg\"}"; String content = "{\"query\":\"图片有什么?\",\"image_url\":\"https://ark-project.tos-cn-beijing.volces.com/images/view.jpeg\"}";
System.out.println(imageOCRFunction.doFunction(content, "test")); System.out.println(imageOCRFunction.doFunction(content, "test", null, null));
} }
HtmlReaderFunction htmlReaderFunction = new HtmlReaderFunction(); HtmlReaderFunction htmlReaderFunction = new HtmlReaderFunction();
...@@ -37,7 +37,7 @@ public class ImageOCRFunctionTest { ...@@ -37,7 +37,7 @@ public class ImageOCRFunctionTest {
@Test @Test
public void testHtmlReader() { public void testHtmlReader() {
String content = "{\"url\":\"https://top.baidu.com/board?tab=realtime\"}"; String content = "{\"url\":\"https://top.baidu.com/board?tab=realtime\"}";
System.out.println(htmlReaderFunction.doFunction(content, "test")); System.out.println(htmlReaderFunction.doFunction(content, "test", null, null));
} }
@Resource @Resource
......
...@@ -27,7 +27,7 @@ public class LongDocumentReaderFunctionTest { ...@@ -27,7 +27,7 @@ public class LongDocumentReaderFunctionTest {
public void test_function(){ public void test_function(){
String content = "{\"file_url\": \"https://gsst-poe-sit.gz.bcebos.com/data/20250410/1744277235901.pdf\",\"question\":\"Can a registered Grade C electrical worker work on the electrical work of a Grade A electrical worker?\"}"; String content = "{\"file_url\": \"https://gsst-poe-sit.gz.bcebos.com/data/20250410/1744277235901.pdf\",\"question\":\"Can a registered Grade C electrical worker work on the electrical work of a Grade A electrical worker?\"}";
String identifier = UUID.randomUUID().toString(); String identifier = UUID.randomUUID().toString();
AbstractFunctionResult<String> result = longDocumentReaderFunction.doFunction(content, identifier); AbstractFunctionResult<String> result = longDocumentReaderFunction.doFunction(content, identifier,null ,null);
System.out.println(result.getFunctionResult()); System.out.println(result.getFunctionResult());
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment