Commit 32924fb9 authored by alex yao's avatar alex yao

feat: Function 出参优化

parent 6a5bd7ff
......@@ -34,6 +34,7 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.generations.BaiduAISailsT
import cn.com.poc.thirdparty.resource.demand.ai.entity.knowledge.SearchKnowledgeResult;
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.LargeModelFunctionEnum;
import cn.com.poc.thirdparty.resource.demand.ai.function.long_memory.AgentLongMemoryEntity;
import cn.com.poc.thirdparty.resource.demand.ai.function.long_memory.LongMemory;
......@@ -721,7 +722,7 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
promptTemplate = promptTemplate.replace("${functionName}", StringUtils.isNotBlank(functionResult.getFunctionName()) ? functionResult.getFunctionName() : StringUtils.EMPTY)
.replace("${functionArg}", StringUtils.isNotBlank(functionResult.getFunctionArg()) ? functionResult.getFunctionArg() : StringUtils.EMPTY)
.replace("${functionDesc}", StringUtils.isNotBlank(functionResult.getFunctionDesc()) ? functionResult.getFunctionDesc() : StringUtils.EMPTY)
.replace("${functionResult}", StringUtils.isNotBlank(functionResult.getFunctionResult()) ? functionResult.getFunctionResult() : StringUtils.EMPTY);
.replace("${functionResult}", StringUtils.isNotBlank(functionResult.getPromptContent()) ? functionResult.getPromptContent() : StringUtils.EMPTY);
}
return promptTemplate;
}
......@@ -899,7 +900,8 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
break;
}
}
toolFunction.setResult(functionResult.getFunctionResult());
toolFunction.setArguments(JsonUtils.serialize(functionResult.getFunctionArg()));
toolFunction.setResult(JsonUtils.serialize(functionResult.getFunctionResult()));
return toolFunction;
}
......@@ -990,13 +992,14 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
if (functionCallResult != null && functionCallResult.isNeed()) {
// 执行函数返回结果
LargeModelFunctionEnum functionEnum = LargeModelFunctionEnum.valueOf(functionCallResult.getFunctionCall().getName());
String functionResult = functionEnum.getFunction().doFunction(functionCallResult.getFunctionCall().getArguments(), AgentApplicationTools.identifier(dialogueId, agentId));
AbstractFunctionResult abstractFunctionResult = functionEnum.getFunction().doFunction(functionCallResult.getFunctionCall().getArguments(), AgentApplicationTools.identifier(dialogueId, agentId));
//构造返回结果
result.setFunctionName(functionCallResult.getFunctionCall().getName());
result.setFunctionArg(functionCallResult.getFunctionCall().getArguments());
result.setFunctionDesc(functionEnum.getFunction().getDesc());
result.setFunctionResult(functionResult);
result.setFunctionResult(abstractFunctionResult.getFunctionResult());
result.setPromptContent(abstractFunctionResult.getPromptContent());
}
return result;
......@@ -1007,15 +1010,16 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
if (functionCallResult != null && functionCallResult.isNeed()) {
// 执行函数返回结果
LargeModelFunctionEnum functionEnum = LargeModelFunctionEnum.valueOf(functionCallResult.getFunctionCall().getName());
String functionResult = functionEnum.getFunction().doFunction(functionCallResult.getFunctionCall().getArguments(), AgentApplicationTools.identifier(dialogueId, agentId));
if (StringUtils.isBlank(functionResult)) {
AbstractFunctionResult abstractFunctionResult = functionEnum.getFunction().doFunction(functionCallResult.getFunctionCall().getArguments(), AgentApplicationTools.identifier(dialogueId, agentId));
if (ObjectUtil.isNull(abstractFunctionResult) || StringUtils.isBlank(abstractFunctionResult.getPromptContent())) {
throw new BusinessException("插件执行失败");
}
//构造返回结果
result.setFunctionName(functionCallResult.getFunctionCall().getName());
result.setFunctionArg(functionCallResult.getFunctionCall().getArguments());
result.setFunctionDesc(functionEnum.getFunction().getDesc());
result.setFunctionResult(functionResult);
result.setPromptContent(abstractFunctionResult.getPromptContent());
result.setFunctionResult(abstractFunctionResult.getFunctionResult());
}
return result;
}
......
......@@ -8,8 +8,17 @@ public class FunctionResult {
private String functionDesc;
private String functionResult;
private Object functionResult;
private String promptContent;
public String getPromptContent() {
return promptContent;
}
public void setPromptContent(String promptContent) {
this.promptContent = promptContent;
}
public String getFunctionName() {
return functionName;
......@@ -35,11 +44,13 @@ public class FunctionResult {
this.functionDesc = functionDesc;
}
public String getFunctionResult() {
public Object getFunctionResult() {
return functionResult;
}
public void setFunctionResult(String functionResult) {
public void setFunctionResult(Object functionResult) {
this.functionResult = functionResult;
}
}
package cn.com.poc.thirdparty.resource.demand.ai.function;
/**
* @author alex.yao
* @date 2025/3/20
*/
public class AbstractFunctionResult<T> {
private String promptContent;
private T functionResult;
public String getPromptContent() {
return promptContent;
}
public void setPromptContent(String promptContent) {
this.promptContent = promptContent;
}
public T getFunctionResult() {
return functionResult;
}
public void setFunctionResult(T functionResult) {
this.functionResult = functionResult;
}
}
......@@ -2,7 +2,6 @@ package cn.com.poc.thirdparty.resource.demand.ai.function;
import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Function;
import java.util.List;
......@@ -15,7 +14,7 @@ public abstract class AbstractLargeModelFunction {
* @param identifier 唯一标识
* @return
*/
public abstract String doFunction(String content, String identifier);
public abstract AbstractFunctionResult doFunction(String content, String identifier);
/**
* 获取函数描述
......
package cn.com.poc.thirdparty.resource.demand.ai.function.bing_web_search;
import cn.com.poc.agent_application.entity.Variable;
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 org.springframework.stereotype.Component;
import java.util.List;
......@@ -17,7 +15,7 @@ import java.util.List;
public class BingWebSearchFunction extends AbstractLargeModelFunction {
@Override
public String doFunction(String content, String identifier) {
public AbstractFunctionResult doFunction(String content, String identifier) {
return null;
}
......
......@@ -4,6 +4,7 @@ import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils;
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;
......@@ -33,9 +34,12 @@ public class DocumentReaderFunction extends AbstractLargeModelFunction {
@Override
public String doFunction(String content, String identifier) {
public AbstractFunctionResult<String> doFunction(String content, String identifier) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content)) {
return StringUtils.EMPTY;
result.setFunctionResult(StringUtils.EMPTY);
result.setPromptContent(StringUtils.EMPTY);
return result;
}
StringBuilder sb = new StringBuilder();
JSONObject jsonObject = JSON.parseObject(content);
......@@ -43,7 +47,9 @@ public class DocumentReaderFunction extends AbstractLargeModelFunction {
JSONArray jsonArray = jsonObject.getJSONArray("file_urls");
int size = jsonArray.size();
if (size == 0) {
return StringUtils.EMPTY;
result.setFunctionResult(StringUtils.EMPTY);
result.setPromptContent(StringUtils.EMPTY);
return result;
}
for (int i = 0; i < size; i++) {
String fileUrl = jsonArray.getString(i);
......@@ -51,9 +57,13 @@ public class DocumentReaderFunction extends AbstractLargeModelFunction {
sb.append(StringUtils.LF).append("## Document ").append((i + 1)).append(StringUtils.LF);
sb.append(DocumentLoad.documentToText(file));
}
return sb.toString();
result.setFunctionResult(sb.toString());
result.setPromptContent(sb.toString());
return result;
}
return StringUtils.EMPTY;
result.setFunctionResult(StringUtils.EMPTY);
result.setPromptContent(StringUtils.EMPTY);
return result;
}
@Override
......
......@@ -7,6 +7,7 @@ import cn.com.poc.common.utils.StringUtils;
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;
......@@ -14,7 +15,6 @@ 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.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;
......@@ -53,9 +53,12 @@ public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction {
@Override
public String doFunction(String content, String identifier) {
public AbstractFunctionResult<String> doFunction(String content, String identifier) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content)) {
return StringUtils.EMPTY;
result.setFunctionResult(StringUtils.EMPTY);
result.setPromptContent(StringUtils.EMPTY);
return result;
}
JSONObject jsonObject = JSON.parseObject(content);
String question = jsonObject.getString("question");
......@@ -77,7 +80,11 @@ public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction {
largeModelResponse.setStream(false);
largeModelResponse.setUser("Document_Understanding");
LargeModelDemandResult largeModelDemandResult = llmService.chat(largeModelResponse);
return largeModelDemandResult.getMessage();
result.setFunctionResult(largeModelDemandResult.getMessage());
result.setPromptContent(largeModelDemandResult.getMessage());
return result;
}
@Override
......
......@@ -4,6 +4,7 @@ import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils;
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;
......@@ -28,16 +29,22 @@ public class HtmlReaderFunction extends AbstractLargeModelFunction {
.build();
@Override
public String doFunction(String content, String key) {
public AbstractFunctionResult<String> doFunction(String content, String key) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content)) {
return "FAIL";
result.setFunctionResult("FAIL");
result.setPromptContent("参数为空");
return result;
}
JSONObject jsonObject = JSONObject.parseObject(content);
String url = jsonObject.getString("url");
if (StringUtils.isNotBlank(url)) {
return DocumentLoad.loadHtml(url);
String res = DocumentLoad.loadHtml(url);
result.setFunctionResult(res);
result.setPromptContent(res);
return result;
}
return StringUtils.EMPTY;
return result;
}
@Override
......
......@@ -8,6 +8,7 @@ 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.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;
......@@ -15,7 +16,6 @@ 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.JSONObject;
import org.apache.poi.hssf.record.DVALRecord;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
......@@ -47,7 +47,8 @@ public class ImageOCRFunction extends AbstractLargeModelFunction {
private LLMService llmService;
@Override
public String doFunction(String content, String identifier) {
public AbstractFunctionResult<String> doFunction(String content, String identifier) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
JSONObject jsonObject = JSONObject.parseObject(content);
Message systemMessage = new Message();
......@@ -78,7 +79,10 @@ public class ImageOCRFunction extends AbstractLargeModelFunction {
response.setStream(false);
response.setUser("Image_OCR");
LargeModelDemandResult largeModelDemandResult = llmService.chat(response);
return largeModelDemandResult.getMessage();
result.setPromptContent(largeModelDemandResult.getMessage());
result.setFunctionResult(largeModelDemandResult.getMessage());
return result;
}
@Override
......
......@@ -2,9 +2,9 @@ package cn.com.poc.thirdparty.resource.demand.ai.function.long_memory;
import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.DateUtils;
import cn.com.poc.common.utils.JsonUtils;
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;
......@@ -31,9 +31,6 @@ public class SetLongMemoryFunction extends AbstractLargeModelFunction {
.parameters(new Parameters("object").addProperties("content", new Properties("string", "内容的详细说明")))
.build();
// private final Long expireTime = 30 * 60 * 24L; // 30天有效期
@Resource
private RedisService redisService;
......@@ -50,51 +47,22 @@ public class SetLongMemoryFunction extends AbstractLargeModelFunction {
* @return
*/
@Override
public String doFunction(String content, String key) {
public AbstractFunctionResult<String> doFunction(String content, String key) {
// 创建 JSONObject 对象
JSONObject jsonObject = new JSONObject(content);
JSONObject contentJsonObject = new JSONObject(content);
// 提取 content
String contents = jsonObject.getStr("content");
String contents = contentJsonObject.getStr("content");
String contentKey = SetLongMemoryConstants.REDIS_PREFIX + key;
redisService.hset(contentKey, DateUtils.getCurrTime(), contents);
return "SUCCESS";
AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
result.setFunctionResult("SUCCESS");
result.setPromptContent("SUCCESS");
return result;
}
@Override
public List<String> getLLMConfig() {
// Map<String, Object> config = new HashMap<>();
// Map<String, Object> function = new HashMap<>();
//
// Map<String, Object> content = new HashMap<>();
// content.put("type", "string");
// content.put("description", "内容的详细说明");
//
// Map<String, Object> properties = new HashMap<>();
// properties.put("content", content);
//
// Map<String, Object> parameters = new HashMap<>();
// parameters.put("type", "object");
// parameters.put("properties", properties);
//
// List<String> required = new ArrayList<>();
// required.add("content");
// parameters.put("required", required);
//
//
// function.put("name", "set_long_memory");
// function.put("description", desc);
// function.put("parameters", parameters);
//
// config.put("type", "function");
// config.put("function", function);
//
// // 将 Map 转换为 JSON 字符串
// Gson gson = new Gson();
// String jsonString = gson.toJson(config);
//
// List<String> resultList = new ArrayList<>();
// resultList.add(jsonString);
// return resultList;
return ListUtil.toList(JsonUtils.serialize(functionLLMConfig));
}
......
......@@ -2,9 +2,9 @@ package cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer
import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils;
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;
......@@ -41,32 +41,39 @@ public class MemoryVariableWriterFunction extends AbstractLargeModelFunction {
private RedisService redisService;
@Override
public String doFunction(String content, String identifier) {
public AbstractFunctionResult<String> doFunction(String content, String identifier) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content) || StringUtils.isBlank(identifier)) {
return "FAIL";
result.setPromptContent("FAIL");
result.setFunctionResult("FAIL");
return result;
}
String contentKey = MemoryVariableWriterConstants.REDIS_PREFIX + identifier;
// 创建 JSONObject 对象
Map<String, Object> result = new HashMap<>();
Map<String, Object> map = new HashMap<>();
if (redisService.hasKey(contentKey)) {
Map<Object, Object> hmget = redisService.hmget(contentKey);
for (Map.Entry<Object, Object> entry : hmget.entrySet()) {
if (entry.getKey() instanceof String) {
String tempKey = (String) entry.getKey();
result.put(tempKey, entry.getValue());
map.put(tempKey, entry.getValue());
}
}
}
if (isJsonArray(content)) {
JSONArray jsonArray = new JSONArray(content);
for (int i = 0; i < jsonArray.size(); i++) {
setMap(jsonArray.getJSONObject(i), result);
setMap(jsonArray.getJSONObject(i), map);
}
} else {
setMap(new JSONObject(content), result);
setMap(new JSONObject(content), map);
}
redisService.hmset(contentKey, result);
return "SUCCESS";
redisService.hmset(contentKey, map);
result.setPromptContent("SUCCESS");
result.setFunctionResult("SUCCESS");
return result;
}
private static void setMap(JSONObject jsonObject, Map<String, Object> result) {
......
......@@ -4,11 +4,11 @@ import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.*;
import cn.com.poc.support.security.oauth.entity.UserBaseEntity;
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.user.aggregation.MemberInfoService;
import cn.com.poc.user.entity.MemberInfoEntity;
import cn.com.poc.user.service.BizMemberInfoService;
import cn.hutool.core.collection.ListUtil;
......@@ -37,29 +37,41 @@ public class NotificationReminderFunction extends AbstractLargeModelFunction {
private FunctionLLMConfig functionLLMConfig;
@Override
public String doFunction(String content, String identifier) {
public AbstractFunctionResult<String> doFunction(String content, String identifier) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
UserBaseEntity userBaseEntity = BlContext.getCurrentUserNotException();
if (userBaseEntity == null) {
return "FAIL";
result.setFunctionResult("FAIL");
result.setPromptContent("FAIL");
return result;
}
try {
MemberInfoEntity memberInfoEntity = bizMemberInfoService.getById(userBaseEntity.getUserId().intValue());
String email = memberInfoEntity.getEmail();
if (StringUtils.isBlank(email)) {
return "Error 【执行失败】: 用户需要完善个人邮箱信息后再使用。";
result.setFunctionResult("Error 【执行失败】: 用户需要完善个人邮箱信息后再使用。");
result.setPromptContent("Error 【执行失败】: 用户需要完善个人邮箱信息后再使用。");
return result;
}
JSONObject jsonObject = JSONObject.parseObject(content);
jsonObject.put("email", email);
jsonObject.put("sign", UUIDTool.getUUID());
Date date = jsonObject.getDate("datetime");
if (date.before(DateUtils.getCurrDateTime())) {
return "Error 【执行失败】: 通知的日期时间已经超过当前时间。";
result.setFunctionResult("Error 【执行失败】: 通知的日期时间已经超过当前时间。");
result.setPromptContent("Error 【执行失败】: 通知的日期时间已经超过当前时间。");
return result;
}
long expiredTime = DateUtils.diffTwoDate(date, DateUtils.getCurrDateTime()) / 1000;
redisService.set(NotificationReminderConstant.REDIS_KEY + jsonObject.toJSONString(), null, expiredTime);
return "SUCCESS";
result.setFunctionResult("SUCCESS");
result.setPromptContent("SUCCESS");
return result;
} catch (Exception e) {
return "FAIL";
result.setFunctionResult("FAIL");
result.setPromptContent("FAIL");
return result;
}
}
......
......@@ -2,6 +2,7 @@ package cn.com.poc.thirdparty.resource.demand.ai.function.top_search;
import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.JsonUtils;
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.tianju.api.TianApi;
......@@ -25,18 +26,21 @@ public class DouyinTopSearchFunction extends AbstractLargeModelFunction {
private final FunctionLLMConfig functionLLMConfig = new FunctionLLMConfig.FunctionLLMConfigBuilder()
.name("douyin_search_top")
.description(DESC)
// .parameters(new Parameters("object").addProperties("content", new Properties("string", "内容的详细说明")))
.build();
@Resource
private TianApi tianApi;
@Override
public String doFunction(String content, String identifier) {
public AbstractFunctionResult<List<TianDouyinTopSearch>> doFunction(String content, String identifier) {
AbstractFunctionResult<List<TianDouyinTopSearch>> result = new AbstractFunctionResult<>();
TianCommonResult<TianDouyinTopSearch> douyinTopSearch = tianApi.getDouyinTopSearch();
TianResult<TianDouyinTopSearch> result = douyinTopSearch.getResult();
List<TianDouyinTopSearch> list = result.getList();
return JsonUtils.serialize(list);
TianResult<TianDouyinTopSearch> searchTianResult = douyinTopSearch.getResult();
List<TianDouyinTopSearch> list = searchTianResult.getList();
result.setFunctionResult(list);
result.setPromptContent(JsonUtils.serialize(list));
return result;
}
@Override
......
......@@ -2,6 +2,7 @@ package cn.com.poc.thirdparty.resource.demand.ai.function.top_search;
import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.JsonUtils;
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.tianju.api.TianApi;
......@@ -25,18 +26,22 @@ public class ToutiaoTopSearchFunction extends AbstractLargeModelFunction {
private final FunctionLLMConfig functionLLMConfig = new FunctionLLMConfig.FunctionLLMConfigBuilder()
.name("toutiao_search_top")
.description(DESC)
// .parameters(new Parameters("object").addProperties("content", new Properties("string", "内容的详细说明")))
.build();
@Resource
private TianApi tianApi;
@Override
public String doFunction(String content, String identifier) {
public AbstractFunctionResult<List<TianToutiaoTopSearch>> doFunction(String content, String identifier) {
AbstractFunctionResult<List<TianToutiaoTopSearch>> result = new AbstractFunctionResult<List<TianToutiaoTopSearch>>();
TianCommonResult<TianToutiaoTopSearch> toutiaoTopSearch = tianApi.getToutiaoTopSearch();
TianResult<TianToutiaoTopSearch> result = toutiaoTopSearch.getResult();
List<TianToutiaoTopSearch> list = result.getList();
return JsonUtils.serialize(list);
TianResult<TianToutiaoTopSearch> toutiaoTopSearchResult = toutiaoTopSearch.getResult();
List<TianToutiaoTopSearch> list = toutiaoTopSearchResult.getList();
result.setFunctionResult(list);
result.setPromptContent(JsonUtils.serialize(list));
return result;
}
@Override
......
......@@ -2,10 +2,9 @@ package cn.com.poc.thirdparty.resource.demand.ai.function.top_search;
import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.JsonUtils;
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.resource.tianju.api.TianApi;
import cn.com.poc.thirdparty.resource.tianju.api.entity.TianCommonResult;
import cn.com.poc.thirdparty.resource.tianju.api.entity.TianResult;
......@@ -28,18 +27,23 @@ public class WeiboTopSearchFunction extends AbstractLargeModelFunction {
private final FunctionLLMConfig functionLLMConfig = new FunctionLLMConfig.FunctionLLMConfigBuilder()
.name("weibo_search_top")
.description(DESC)
// .parameters(new Parameters("object").addProperties("content", new Properties("string", "内容的详细说明")))
.build();
@Resource
private TianApi tianApi;
@Override
public String doFunction(String content, String identifier) {
public AbstractFunctionResult<List<TianWeiboTopSearch>> doFunction(String content, String identifier) {
AbstractFunctionResult<List<TianWeiboTopSearch>> result = new AbstractFunctionResult<List<TianWeiboTopSearch>>();
TianCommonResult<TianWeiboTopSearch> weiboTopSearch = tianApi.getWeiboTopSearch();
TianResult<TianWeiboTopSearch> result = weiboTopSearch.getResult();
List<TianWeiboTopSearch> list = result.getList();
return JsonUtils.serialize(list);
TianResult<TianWeiboTopSearch> tianWeiboTopSearchTianResult = weiboTopSearch.getResult();
List<TianWeiboTopSearch> list = tianWeiboTopSearchTianResult.getList();
result.setFunctionResult(list);
result.setPromptContent(JsonUtils.serialize(list));
return result;
}
@Override
......
......@@ -4,6 +4,7 @@ import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils;
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;
......@@ -69,9 +70,11 @@ public class WebSearchFunction extends AbstractLargeModelFunction {
}
@Override
public String doFunction(String content, String identifier) {
public AbstractFunctionResult<List<WebSearchFunctionResult>> doFunction(String content, String identifier) {
AbstractFunctionResult<List<WebSearchFunctionResult>> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content)) {
return "FAIL";
result.setPromptContent("FAIL");
return result;
}
JSONObject jsonObject = JSONObject.parseObject(content);
String query = jsonObject.getString("query");
......@@ -86,11 +89,19 @@ public class WebSearchFunction extends AbstractLargeModelFunction {
.setNum(3)
.execute();
loadHTML(execute, results);
logger.info("web search result:{}", results.toString());
return JsonUtils.serialize(results);
logger.info("web search result:{}", results);
StringBuilder stringBuilder = new StringBuilder();
int i = 0;
for (WebSearchFunctionResult webSearchFunctionResult : results) {
stringBuilder.append(i).append(":").append(webSearchFunctionResult.getContent()).append("\n");
}
result.setPromptContent(stringBuilder.toString());
result.setFunctionResult(results);
return result;
} catch (Exception e) {
logger.error("web search error:" + e.getMessage());
return JsonUtils.serialize(results);
result.setPromptContent("FAIL");
return result;
}
}
......@@ -111,6 +122,8 @@ public class WebSearchFunction extends AbstractLargeModelFunction {
}
}
WebSearchFunctionResult webSearchResult = new WebSearchFunctionResult();
webSearchResult.setTitle(item.getTitle());
webSearchResult.setUrl(item.getLink());
webSearchResult.setContent(htmlContent);
results.add(webSearchResult);
countDownLatch.countDown();
......
......@@ -6,30 +6,30 @@ package cn.com.poc.thirdparty.resource.demand.ai.function.web_seach;
*/
public class WebSearchFunctionResult {
// private String title;
//
// private String url;
private String title;
private String url;
//
// private String snippet;
private String content;
// public String getTitle() {
// return title;
// }
//
// public void setTitle(String title) {
// this.title = title;
// }
//
// public String getUrl() {
// return url;
// }
//
// public void setUrl(String url) {
// this.url = url;
// }
//
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
// public String getSnippet() {
// return snippet;
// }
......
......@@ -35,10 +35,10 @@ public class DocumentReaderFunctionTest {
@Test
public void testDoFunction() {
String content = "{\"file_urls\": [\"https://gsst-poe-sit.gz.bcebos.com/data/20241127/1732704249980.docx\"]}";
String identifier = UUID.randomUUID().toString();
String RESULT = documentReaderFunction.doFunction(content, identifier);
assertNotNull(RESULT);
// String content = "{\"file_urls\": [\"https://gsst-poe-sit.gz.bcebos.com/data/20241127/1732704249980.docx\"]}";
// String identifier = UUID.randomUUID().toString();
// String RESULT = documentReaderFunction.doFunction(content, identifier);
// assertNotNull(RESULT);
}
@Test
......
......@@ -28,8 +28,8 @@ public class DocumentUnderstandingFunctionTest {
public void testDoFunction() {
String content = "{\"file_url\": \"https://gsst-poe-sit.gz.bcebos.com/data/20241127/1732704249980.docx\",\"question\":\"駕駛執照上的二維碼內載有什麼資料?\"}";
String identifier = UUID.randomUUID().toString();
String RESULT = documentUnderstandIngFunction.doFunction(content, identifier);
System.out.println(RESULT);
// String RESULT = documentUnderstandIngFunction.doFunction(content, identifier);
// System.out.println(RESULT);
}
@Test
......
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